Cash Management / Cash Position is where ERP discipline either begins or breaks.
Daily Cash Position Consolidation Across All Bank Accounts looks operational from far away. In a real finance team, it is a chain of assertions: the right actor started the work, the required records existed, the control policy was applied, the state change was preserved, and the outcome can be explained later without rebuilding the transaction from emails and spreadsheets.
The expected business outcome is specific: Treasury has a single accurate cash position within minutes of opening, eliminating manual bank portal logins and reducing position errors to zero.
The control flow a finance team actually needs.
Step 1
Aggregate Balances From ≥50 Bank...
Step 2
BAI2 Type Codes 015, 045, 072, 400, 475
Step 3
Convert All Foreign-Currency Balances...
Step 4
Display Prior-Day Closing And Current...
Step 5
Alert When Available Balance Falls...
The ERP surface involved.
Module
Cash Management / Cash Position
Actors
Treasury Analyst, Cash Management System, Bank Feed Connector
Tier
Tier 1
Finance area
Cash Management, Treasury & Banking
Region lens
US and UK finance teams
Publication date
March 23, 2026
Aggregate balances from ≥50 bank accounts across ≥10 banks within 5 minutes of refresh trigger; support BAI2 type codes 015, 045, 072, 400, 475; convert all foreign-currency balances using daily ECB/Reuters spot rates stored as NUMERIC(20,10); display prior-day closing and current intraday balance separately; alert when available balance falls below configurable per-account floor; position report exportable as XLSX and PDF; all balance reads are read-only with no write-back to bank; audit log records every refresh with timestamp and source.
US and UK teams have different compliance hooks, but the same control problem.
US teams usually care about clean evidence for audit support, vendor records, payment controls, tax reporting, and management review. UK teams usually care about VAT-ready records, approval evidence, digital-record discipline, and traceable postings. The country-specific details differ, but the operating pattern is the same: the ERP needs controlled records, explicit ownership, defensible state changes, and evidence that survives beyond the person who completed the task.
The control matrix.
| Control area | Requirement | Acceptance proof |
|---|---|---|
| Control 1 | Aggregate balances from ≥50 bank accounts across ≥10 banks within 5 minutes of refresh trigger | Given ≥50 connected bank accounts with BAI2/Plaid feeds and a daily FX rate store |
| Control 2 | support BAI2 type codes 015, 045, 072, 400, 475 | when a refresh is triggered |
| Control 3 | convert all foreign-currency balances using daily ECB/Reuters spot rates stored as NUMERIC(20,10 | then consolidated cash position is computed within 5 minutes, all foreign-currency balances converted to functional currency using NUMERIC(20,10) spot rates, prior-day closing and intraday balances shown separately, and accounts below floor threshold fire alerts |
| Control 4 | display prior-day closing and current intraday balance separately | negative) when an account floor threshold is breached then an alert event is emitted with account_id and shortfall_minor within the refresh cycle. |
| Control 5 | alert when available balance falls below configurable per-account floor | Treasury has a single accurate cash position within minutes of opening, eliminating manual bank portal logins and reducing position errors to zero. |
| Control 6 | position report exportable as XLSX and PDF | Treasury has a single accurate cash position within minutes of opening, eliminating manual bank portal logins and reducing position errors to zero. |
Audit evidence is a chain, not a folder.
| Evidence layer | What should be preserved |
|---|---|
| Business event | Each morning the system pulls prior-day closing balances and intraday transactions from all connected bank accounts via Plaid, direct bank APIs, or BAI2/MT940 file imports. Balances are converted to the functional currency at the daily spot rate and aggregated by legal entity and currency. The treasury analyst reviews the consolidated cash position dashboard showing available cash, float, and projected same-day settlements. Alerts fire for any account breaching minimum balance thresholds. The position snapshot is timestamped and archived for audit. |
| Control rules | Aggregate balances from ≥50 bank accounts across ≥10 banks within 5 minutes of refresh trigger; support BAI2 type codes 015, 045, 072, 400, 475; convert all foreign-currency balances using daily ECB/Reuters spot rates stored as NUMERIC(20,10); display prior-day closing and current intraday balance separately; alert when available balance falls below configurable per-account floor; position report exportable as XLSX and PDF; all balance reads are read-only with no write-back to bank; audit log records every refresh with timestamp and source. |
| Acceptance proof | Given ≥50 connected bank accounts with BAI2/Plaid feeds and a daily FX rate store; when a refresh is triggered; then consolidated cash position is computed within 5 minutes, all foreign-currency balances converted to functional currency using NUMERIC(20,10) spot rates, prior-day closing and intraday balances shown separately, and accounts below floor threshold fire alerts; (negative) when an account floor threshold is breached then an alert event is emitted with account_id and shortfall_minor within the refresh cycle. |
| Data record | |
| System event | |
| Lifecycle state | |
The useful version of this workflow is not only fast. It is inspectable. A controller, auditor, or operator should be able to move from source event to system record to state transition to final business outcome without guessing.
Implementation contracts.
Reference data model
`cash_position_snapshot` { snapshot_id: string, entity_id: string, bank_account_id: string, prior_day_closing_minor: int64, intraday_minor: int64, currency_code: char(3), functional_minor: int64, functional_currency_code: char(3), fx_rate: string, refreshed_at: timestamp, external_id: string }; `bank_account` { bank_account_id: string, entity_id: string, institution_name: string, currency_code: char(3), floor_amount_minor: int64, coa_account_id: string }; (reference, product may differ).API and events
`POST /v1/treasury/cash-position/refresh` {} -> 202 { job_id: string }; `GET /v1/treasury/cash-position` { entity_id, as_of } -> 200 { accounts: [...], total_functional_minor: int64, currency_code: char(3) }; emits `treasury.cash_position_refreshed` and `treasury.balance_below_floor` events; idempotent via refresh job deduplication.State transitions
`PENDING -> COMPLETE`; terminal `FAILED`; guard: refresh blocked if FX rate store has no rate for a balance currency on the target date.Common implementation traps.
Treating the workflow as data entry
If the ERP only stores the final record, the team loses the decision trail that explains how the record became valid.
Hiding exception logic
Exceptions need owners, reason codes, and time stamps. A vague pending state is not a control.
Posting without recovery design
Retries, duplicate submissions, and partial failures must be explicit so the system does not create inconsistent records.
Skipping evidence design
A workflow that cannot produce evidence on demand will eventually push finance teams back into manual screenshots and spreadsheets.
Where Rivane fits.
Rivane is built for finance workflows where automation must stay tied to source documents, approvals, state transitions, ledger impact, reporting, and audit evidence. Use this guide as a checklist for evaluating whether an ERP workflow is merely digitized or actually controlled.
References and source basis.
These sources provide the standards, regulatory, or government context around the flow. They are included so the guide is useful to finance operators, auditors, and implementation teams, not only buyers reading software copy.