At a glance
- A ten-row check catalogue gives what each failure catches, whether it warns or blocks, and who owns its threshold.
- Every hold routes to the analyst on duty first; the holiday calendar alone never warns or blocks, it just flags the date.
- A routine Warn is released by the analyst on duty. A Block, including a far-outside-band failure, is released only by a treasury lead.
- Base spread and move bands on a pair's own history, not one flat number for every pair, and replay any changed check against reviewed sheets first.
- The releaser is never whoever set or approved the threshold it broke; the head of treasury operations counts as a lead when no other lead is available.
Why a wrong rate sheet is expensive
A bad rate sheet fails in two ways. A wrong rate is published with an error already in it: a stale quote, a transposed pair, a spread that's drifted unnoticed. A late rate is delayed past its cutoff because someone caught a problem and held it back. The first costs money and trust; validation trades the first for the second: held is late, but never wrong.
A rate sheet is the list of exchange rates a treasury team distributes to clients for a given day, and treasury rate sheet validation is what it must pass first. It catches a feed going quiet, a slipped decimal, or two pairs drifting.
How strict a sheet's checks need to be depends on what kind of rate it publishes. Market participants handling client orders are expected to make clear whether the prices they are providing are firm or merely indicative[1]. A firm quote needs tighter bands than an indicative reference; decide which your sheet is before setting its tolerances.
- A wrong rate that reaches a client is hard to undo: you're now correcting a trade, not just a sheet.
- Holding a suspect rate before release usually costs far less than letting it reach a client.
- A sheet assembled close to its cutoff leaves little time for a manual check.
The validation check catalogue
Ten checks make up the catalogue below: what each catches, its rule, whether it warns or blocks, and who owns its threshold. A Warn releases after review; a Block always needs a treasury lead. Copy the table into your own documentation, or run it as an automated rate sheet workflow instead of by hand.
| Check | What it detects | Rule logic | Action | Who sets the threshold |
|---|---|---|---|---|
| Cutoff time | Sheet not ready by its cutoff | Sheet not complete by the run's cutoff | Block; route to analyst | Treasury lead sets the cutoff schedule |
| Source timestamp staleness | A quiet feed serving yesterday's numbers as today's | Timestamp older than the refresh interval, or every rate identical to the last accepted sheet | Block; route to analyst | Treasury lead sets the refresh interval |
| Missing currency pair | An expected pair isn't on today's sheet | Every expected pair must appear at least once | Block; route to analyst for that pair | Treasury lead sets the expected pair list |
| Spread outside band | A bid/ask spread wider or narrower than normal | Spread outside a band from the pair's own history | Warn if modest; block if far outside | Risk sets the band; a treasury lead approves it |
| Day-over-day move outside band | A rate moving more than that pair normally moves | Change from the last rate exceeds the pair's own band | Warn if modest; block if far outside | Treasury lead sets the band |
| Inverted pair or bid/ask | A pair quoted the wrong way round, or a bid above its ask | A rate near 1 ÷ the last accepted rate fails (skip pairs trading near 1); a bid above its ask also fails | Block; route to analyst | Treasury lead sets the quoting convention |
| Cross-rate inconsistency | A pair's rate disagreeing with the cross rate implied by other pairs | Rate implied by two other pairs differs from the published rate beyond tolerance | Warn if modest; block if far outside | Treasury lead sets the tolerance |
| Rounding or precision | Wrong decimal places for the pair's convention | Precision doesn't match the documented convention | Warn; block if it changes the rate beyond tolerance | Treasury lead sets the convention |
| Mid-rate deviation | A sheet's mid drifting from an independent reference mid | Sheet's mid differs from a reference rate beyond tolerance | Warn if modest; block if far outside | Treasury lead sets the tolerance |
| Holiday calendar | A date a source bank may publish late, thin, or not at all | Date is on the calendar for a source market | No action of its own; flags the date | Treasury lead maintains the calendar |
Setting tolerance bands without false alarms
An exchange rate tolerance check is only as good as its band: base it on the pair's own recent history, not a single number copied across every pair. Too wide waves through a real problem; too narrow trains everyone to ignore the check.
Time of day matters too. The ECB's own euro reference rates are based on the daily concertation procedure that normally takes place around 14:10 CET[2], and are usually updated at around 16:00 CET every working day, except on TARGET closing days[2]. A band assuming continuous movement misses that reference-style rates have a known update rhythm.
A single published reference rate like the ECB's is one figure per currency, not a bid and an ask, so treat it as a mid: it can anchor a mid-rate check but can't define a spread band on its own. Keep the two distinct: a spread band comes from the sheet's own past spreads; mid-rate deviation compares its mid against an outside reference like this one.
- Normal daily moves differ widely from pair to pair, so start from that pair's own last 20 to 60 accepted sheets, not one flat number for every pair.
- Set bands per pair: a band right for a heavily traded major can be far too tight, or too loose, for a thinly traded pair.
- Have a treasury lead approve any band change. The releaser is never whoever set or approved the failing threshold: a different treasury lead releases the Block, and the head of treasury operations counts as one when no other lead is available.
Should a failed check block or warn?
A validation check warns or blocks; the holiday calendar alone just flags a date, without warning or blocking anything of its own. Every hold, Warn or Block, routes to the analyst on duty first; routing is delivery, not a third action. A routine Warn is released by the analyst on duty. A Block — including a graduated check that fails far outside its band — is released only by a treasury lead, never the analyst.
Four checks are structural, not graduated: cutoff, staleness, a missing pair, and an inverted pair or quote pass or fail outright, with no modest-warn stage. Any of the four blocks the sheet, but only a treasury lead can release it.
Override sign-off needs one more rule, below, because a treasury lead sets or approves every threshold in the table.
- Risk sets the Spread band and a treasury lead approves it; a treasury lead sets the other four tolerances directly. The releaser is never whoever set or approved the failing threshold: a different treasury lead releases the Block, and the head of treasury operations counts as one when no other lead is available.
- Log every override with a reason, for that rate and day only; repeated overrides on a pair trigger a band review.
- Run the holiday calendar check first
It flags any date on the calendar for context, but on its own neither warns nor blocks.
- Route every Warn to the analyst on duty
The analyst investigates why the check failed and decides whether to release the rate or escalate it.
- Escalate every Block to a treasury lead
The analyst investigates first but can't release a Block, including a graduated check that failed far outside its band.
- A treasury lead releases it and logs why
The lead records why the Block was released, following the sign-off rule above.
Holiday and cutoff edge cases
A holiday calendar has two jobs: flagging a lighter trading day, and telling cutoff and staleness checks a source bank might publish later, or not at all, that date.
The Federal Reserve's H.10 release is a useful model for how a published rate ages: its data are noon buying rates in New York for cable transfers payable in the listed currencies[3], and past releases are not revised and may not reflect subsequent revisions to the data[3]. Build your own staleness check around one clear capture time and interval.
- Clock changes for daylight time shift a pair's usual quoting time by an hour, for one to three weeks each spring and autumn, since the US and Europe change clocks on different dates. Widen the staleness window for that stretch only.
- A holiday your calendar doesn't have leaves that day's sheet identical to the day before. That trips the staleness check, not an inverted-quote check — it's a calendar-maintenance signal, not a band problem.
Testing checks on historical sheets
Before any changed check goes live, replay it against sheets your team has already reviewed. A band that looks reasonable on paper can behave differently against a pair's real rhythm.
- Replay against sheets you've already reviewed
Run the changed check against historical sheets already reviewed, without changing what was decided at the time.
- Compare every flag against what happened
Confirm the check catches what your team caught, and review what else it flags — some may be genuine misses.
- Count false positives, not just catches
A check that fires constantly gets ignored; tune the band before it goes live.
- Re-run after every threshold change
A band a lead changes needs the same replay before it goes live again.
When this doesn't apply
- With no history yet, the band checks don't apply until you have 20 or more accepted sheets — but the structural checks (cutoff, missing pair, bid above ask) still do.
- Your sheet is indicative-only, priced against by no one — there's nothing at stake to validate.
- You publish one pair from one source: the cross-rate check has no second pair to triangulate against.
Frequently asked questions
What tolerance should flag a rate change?
Flag a move outside the range the pair's own last 20 to 60 accepted sheets show: modestly outside warns; far outside blocks. Normal daily moves differ widely between pairs, so set the band per pair, not one flat number for every pair, and have a treasury lead approve any change.
How do you detect a stale rate?
Compare each rate's source timestamp against the refresh interval that feed is expected to keep. A timestamp older than that interval makes that rate stale. Block it and route it to the analyst on duty rather than quietly re-using yesterday's numbers.
How do you catch inverted pairs?
Check for two inversions and block both. A pair quoted the wrong way round (EUR per USD instead of USD per EUR) lands near the reciprocal of its last accepted rate, so compare each rate with 1 ÷ that rate. On a two-way sheet, a bid above its ask is far more likely a transposition than a real price.
How do cross-rate checks work?
A cross rate is the rate between two currencies other than your base currency, implied by their two rates against it. Recompute it from the sheet's own quoted pairs and compare that implied rate with the sheet's own published cross rate; a difference beyond tolerance often points to one leg updating and the other not.
Should a failed check block or warn?
A modest miss inside the far-outside threshold warns: it routes to the analyst on duty, who can release it once they've reviewed it. A miss far outside the band, a missing pair, a missed cutoff, stale data, or an inverted pair or quote blocks outright — only a treasury lead can release it, never the analyst on duty.
Who signs off an override?
A routine Warn is released by the analyst on duty; a Block needs a treasury lead. The releaser is never whoever set or approved the failing threshold: a different treasury lead releases the Block, and the head of treasury operations counts as one when no other lead is available. Every override records a reason.
Related reading
- Treasury rate sheet automation covers the ingest-validate-distribute workflow these checks sit inside.
- FX treasury operations automation goes deeper on the daily distribution workflow around these checks.
- AI agent implementation covers how a check catalogue like this one gets built and rolled out.
More in Finance operations
Deal Jacket and Title/Registration Automation for Multi-Rooftop Dealer Groups
Deal jacket and title/registration automation for multi-rooftop dealer groups: a completeness checklist table, audit-gap handling and cross-store standards.
Auto DealershipsFranchise Brand-Standards Audit Documentation: Automating the Paper Trail Behind the Inspection
Franchise brand-standards audit documentation: how an agent turns photos, PDFs, forms and emailed fixes into one packet per location, ready when asked.
Multi-Unit Franchise OperatorsGroup and Folio Billing Audit: Catching the Leak Types a Normal Error Check Misses
A group and folio billing audit for hotel management companies: a leak-type table of rate code mismatches, missing closes, adjustments, orphaned charges.
Hotel Management Companies