A revolving facility has a €10,000 limit and €4,000 posted draw: 40% utilisation. The customer initiates €3,000 of new usage. Authorisation updates immediately, servicing posts later, and risk still reports 40% even though near-term operational exposure is €7,000—or 70%.
Exposure is a versioned state—not a balance column
| View | Definition | Use |
|---|---|---|
| Posted drawn | Formally applied facility usage | Servicing and confirmed exposure |
| Pending usage | Authorised or initiated, not final | Provisional operational state |
| Posted utilisation | PostedDrawn / EffectiveLimit | Confirmed utilisation view |
| Operational utilisation | (PostedDrawn + RelevantPending) / EffectiveLimit | Near-term decision view |
| Available credit | Limit − Drawn − RelevantPending − Blocked | Authorisation/limit headroom under declared semantics |
Use posted_utilisation, operational_utilisation and available_credit, not one ambiguous utilisation. Pending exposure is not final draw; preserve provisional and confirmed state where decisions need both.
type ExposureState = {
facilityId: string;
limitMinor: bigint;
postedDrawnMinor: bigint;
pendingMinor: bigint;
blockedMinor: bigint;
availableMinor: bigint;
postedUtilisation: number;
operationalUtilisation: number;
effectiveAsOf: Date;
generatedAt: Date;
stateVersion: string;
};The numerator, denominator and pending state need component time
type ExposureComponent<T> = {
value: T;
effectiveAsOf: Date;
availableAsOf: Date;
};06:00DRAWN TIME
14:00PENDING TIME
14:01→COHERENCE + FRESHNESS GUARD
A limit reduction from €10,000 to €8,000 with €7,000 drawn changes utilisation from 70% to 87.5%. A stale denominator understates risk; a stale numerator can overstate available credit. Validate each component against the decision-specific freshness budget.
A future-effective limit change can be known today without changing today's denominator. Represent current limit and scheduled change separately.
Pending usage is a lifecycle, not a free-standing amount
Use causal events such as AUTHORIZATION_RESERVED, AUTHORIZATION_POSTED and AUTHORIZATION_RELEASED. Timeouts or source finality release abandoned reservations; otherwise available credit stays understated.
A €1,000 reservation posting €700 releases €300. Where multiple captures are allowed, one reservation maps to several causal postings without losing the original conservation identity.
Availability checks and reservations must be one concurrency boundary
Two simultaneous €2,000 requests can both read €3,000 available and both approve if the system follows “read, approve, update later.” Reserve atomically against facility aggregate state.
UPDATE facility_state
SET reserved_minor = reserved_minor + :amount,
version = version + 1
WHERE facility_id = :id
AND version = :expected_version;If zero rows update, reload and retry against the new state. Optimistic compare-and-swap supports concurrency; pessimistic aggregate locking can simplify correctness at lower throughput. Choose from workload and failure semantics, not fashion.
Posting moves exposure; it must not add it twice
−Aposting transitionPOSTED DRAWN
+AOPERATIONAL EXPOSURE
≈ UNCHANGED
Stable transaction identity links authorisation and final posting. If pending is not removed, PostedDrawn + Pending counts the same transaction twice. A pending cancellation decreases pending without ever increasing drawn; it is not a drawdown reversal.
Repayment affects exposure only at the defined finality state
| State | Exposure treatment |
|---|---|
| PAYMENT_INITIATED | Usually not final; do not assume exposure reduction |
| PAYMENT_SETTLED | May support provisional relief where policy permits |
| PAYMENT_APPLIED | Confirmed facility draw reduction under servicing semantics |
| REPAYMENT_REVERSED | Draw rises again; utilisation and available credit recompute |
| DRAW_REVERSED | Posted draw decreases with causal reversal lineage |
A payment can settle externally before servicing applies it. Whether available credit increases provisionally or waits is a governed product decision. Preserve both the event and the state transition rather than mutating history.
Preserve exposure components before risk aggregation
Whether pending enters drawn or undrawn is methodology-specific. Supply posted_drawn, pending_usage, contractual_undrawn, usable_undrawn and limit separately. One opaque EAD cannot explain limit, draw or utilisation changes.
Party exposure aggregates canonical facilities under role/attribution policy. Portfolio economic exposure sums unique facilities, so joint-borrower relationships never multiply the money.
Trigger risk only after exposure coherence is proven
Monitor level, velocity, exposure growth and headroom. A 45% → 88% spike can feed EWS only when its numerator and denominator are coherent. Versioned hysteresis can stabilise NORMAL, ELEVATED, HIGH and CRITICAL states without prescribing universal thresholds.
Exposure features need sufficient intraday history
Historical decisions replay known state; late posting or corrections produce restated analysis. Store exposureStateVersion or an immutable input manifest.
End-of-day sampling erases intraday peaks and understates MaxUtilisation_24h. Define whether each feature uses end-of-day, intraday maximum or time-weighted average. Current utilisation, 30-day max, 7-day exposure growth and headroom all trace to canonical exposure state.
A golden exposure stream proves conservation and concurrency
| Step | Event | Expected state effect |
|---|---|---|
| 1 | Set limit €10,000 | Limit 10,000; available 10,000 |
| 2 | Draw €4,000 | Posted 4,000; available 6,000 |
| 3 | Reserve €2,000 | Pending 2,000; operational exposure 6,000 |
| 4 | Post €1,500 | Pending 500; posted 5,500; operational unchanged |
| 5 | Release €500 | Pending 0; available rises |
| 6 | Apply repayment €1,000 | Posted falls to 4,500 |
| 7 | Reverse repayment €1,000 | Posted returns to 5,500 |
| 8 | Reduce limit to €8,000 | Available, utilisation and over-limit flag recompute |
| Test | Proof |
|---|---|
| Pending to posted | Operational exposure does not double |
| Duplicate reservation | Repeated authorisation reserves once |
| Partial capture | Reservation conservation holds exactly |
| Concurrent reservations | Version control prevents unauthorised oversubscription |
| Late repayment | Known history stays fixed; restated state changes |
| Incremental/full replay | Same events yield identical exposure state |
Reconcile operational, servicing and accounting state at aligned cut-offs
Compare canonical posted drawn with servicing balance and relevant ledger state. Classify timing, pending, missing event, duplicate or correction differences. Pending-to-posted transition and partial-capture conservation make discrepancies explainable rather than opaque.
Periodic authoritative reconciliation controls the streaming projection; it should not create a second ungoverned exposure truth.
Monitor coherence, pending lifecycle and decision readiness
Track limit, draw, authorisation and repayment source health. A “real-time” view is only as reliable as its weakest critical feed. Sudden utilisation shifts after a limit-system migration may be denominator drift, not borrower deterioration.
Before high-impact decisions, gate on freshness, completeness, source health and reconciliation status. Fail-silent pending feeds can overstate available credit.
The Entimema architecture synchronises lifecycle state before serving risk
- Define facility exposure semantics
- Define limit authority
- Define drawn and pending state
- Link transaction lifecycle
- Enforce concurrency
- Derive available and utilisation
- Validate freshness
- Trigger risk decision
- Reconcile
- Replay and monitor
An Exposure State Integrity Agent can diagnose discrepancies without changing limits
A controlled agent can monitor limit/drawn/pending synchronisation, detect stale components, duplicate or long-lived reservations, compare operational and posted exposure, identify over-limit anomalies, compare incremental with replayed state and trace affected historical decisions.
Credit Risk
Govern utilisation, exposure, EAD inputs and over-limit monitoring.
Decision Automation
Financial Data
Canonicalise transaction lifecycle and reconcile authoritative balances.
Continue with Streaming Behavioural Features for Early Warning, From Batch ETL to Event-Driven Credit Risk Architecture, Building a Credit Risk Feature Store, Customer, Facility, Account and Exposure, Reconstructing Account State, Credit Limit Assignment and IFRS 9 EAD & Credit Conversion Factors. Event-driven triggers, backpressure recovery and real-time collections state remain future research directions—not fabricated routes.