# V2 Maat Finance Ledger

V2 uses `@maat/finance` as the source of truth for economy decisions that need
pricing, refund, and regulatory-cap checks. `V2Persistence` remains the local
in-engine cache for offline play and save serialization.

## Contract

- `@maat/finance` exports `v2-persistence-ledger.ts` for regional pricing,
  spend/refund decisions, regulatory caps, and reconciliation planning.
- `@v2/maat-finance-ledger` composes that contract for V2 services.
- Unreal mirrors the contract with `FV2MaatFinanceLedgerPolicy`,
  `FV2CurrencyLedger::ApplyMaatFinanceTransaction`, and
  `FV2CurrencyLedger::NeedsOnlineReconciliation`.
- `@maat/finance` is registered as a V2Services adapter for the Maat domain.

## Offline Cache

If online authority is unavailable, V2 may apply a locally validated spend or
refund to the in-engine ledger cache. Those entries carry:

- `MaatFinanceDecisionId`;
- `bRegulatoryCapChecked`;
- `bRequiresOnlineReconciliation`.

The next online sync must submit the cached decision ids to Maat for final
reconciliation before cross-progression or cloud save can treat the ledger as
authoritative.

## Rollback Boundary

Finance decisions are off rollback. Rollback frames never call Maat; they only
consume already-accepted local persistence state.
