EventBridge domain event catalogue¶
Every domain event emitted by bank services onto Amazon EventBridge. Governed by ADR-029 (superseded by ADR-051 — see ADR-051 for current EventBridge bus naming convention) (domain event routing) and enforced by MOD-043 (EventBridge domain event governance).
Architecture constraints:
- One bus per system domain. Bus names follow
bank-<domain>(e.g.bank-core,bank-kyc). - Event name pattern:
bank.<domain>.<noun>_<past-tense-verb> - All events carry a
schema_versionfield. Consumers must validate this before processing. - Money amounts are always fixed-point decimal strings — never floats.
event_idandidempotency_keyare always required. Consumers must deduplicate onidempotency_key.- All timestamps are ISO 8601 UTC.
- Events document only fields that cross module boundaries. Internal state fields stay in the emitting service.
- EventBridge is for fan-out. Publish to EventBridge when two or more independent consumers need the event. A single consumer means a direct Lambda invoke or an SQS queue — EventBridge adds latency and an infrastructure rule with no benefit. If a second consumer arrives later, migrate to EventBridge at that point.
Related: ADR-029 (superseded by ADR-051 — see ADR-051 for current EventBridge bus naming convention) · Interface contracts · Data contracts
SD01 — Core Banking (bank-core bus)¶
bank.core.posting_completed¶
Emitted by MOD-001 on every successful double-entry posting committed to the ledger.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | Unique event ID |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | e.g. "1.0.0" |
| posting_id | uuid | ✓ | Stable posting reference |
| account_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal e.g. "123.45" — never float |
| currency | string | ✓ | ISO 4217 |
| direction | string | ✓ | DEBIT or CREDIT |
| posting_type | string | ✓ | PAYMENT / ACCRUAL / FX_CONVERSION / ADJUSTMENT / REVERSAL |
| ledger_balance_after | string | ✓ | Fixed-point decimal |
| available_balance_after | string | ✓ | Fixed-point decimal |
| idempotency_key | string | ✓ | Caller-supplied; deduplication key |
| counterparty_account_id | uuid | ✗ | Present for internal transfers |
Consumers: MOD-022 (payment audit trail), MOD-002 (immutable transaction log), MOD-042 (CDC → Snowflake Iceberg), MOD-043 (EventBridge governance)
bank.core.balance_updated¶
Emitted by MOD-003 whenever a customer or nostro account balance changes, after the posting is committed. Enables downstream cache invalidation without polling.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| account_id | uuid | ✓ | |
| currency | string | ✓ | ISO 4217 |
| ledger_balance | string | ✓ | Fixed-point decimal |
| available_balance | string | ✓ | Fixed-point decimal |
| posting_id | uuid | ✓ | Causal posting reference |
| idempotency_key | string | ✓ |
Consumers: MOD-070 (transaction history & search), MOD-077 (account dashboard), MOD-032 (LCR/NSFR calculator), MOD-042 (CDC → Snowflake)
bank.core.account_status_changed¶
Emitted by MOD-007 when an account transitions between states
(Pending → Active → Restricted → Dormant → Closed).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| account_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| previous_status | string | ✓ | Pending / Active / Restricted / Dormant / Closed |
| new_status | string | ✓ | |
| reason_code | string | ✓ | Stable machine key e.g. SANCTIONS_HOLD, KYC_EXPIRED, DORMANCY |
| triggered_by | string | ✓ | SYSTEM / AGENT / CUSTOMER |
| idempotency_key | string | ✓ |
Consumers: MOD-020 (pre-payment validation — gates payments on Restricted/Closed), MOD-013 (sanctions screener), MOD-039 (customer risk score), MOD-043 (governance), MOD-074 (back-office customer 360)
bank.core.interest_accrued¶
Emitted by MOD-005 after each daily accrual run completes for an account.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| account_id | uuid | ✓ | |
| accrual_date | string | ✓ | YYYY-MM-DD |
| accrual_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| rate_applied | string | ✓ | Percentage as decimal string e.g. "5.25" |
| posting_id | uuid | ✓ | Ledger posting reference |
| idempotency_key | string | ✓ | accrual-<account_id>-<accrual_date> |
Consumers: MOD-002 (immutable log), MOD-042 (CDC → Snowflake), MOD-035 (IRRBB/NII model)
bank.core.rate_changed¶
Emitted by MOD-006 when a product interest rate changes and disclosure obligations are triggered. Consumed by notification orchestration to dispatch regulatory notices.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| product_id | string | ✓ | e.g. PRD-001 |
| rate_type | string | ✓ | SAVINGS / LENDING / FX |
| previous_rate | string | ✓ | Decimal string |
| new_rate | string | ✓ | Decimal string |
| effective_date | string | ✓ | YYYY-MM-DD |
| jurisdiction | string | ✓ | NZ / AU / NZ + AU |
| disclosure_required | boolean | ✓ | True when regulatory notice must be sent |
| idempotency_key | string | ✓ |
Consumers: MOD-063 (notification orchestration — dispatches rate-change notices), MOD-035 (IRRBB model), MOD-050 (disclosure enforcement)
bank.core.dormancy_triggered¶
Emitted by MOD-008 when an account qualifies for dormancy classification or escheatment processing.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| account_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| dormancy_stage | string | ✓ | DORMANT / ESCHEATMENT_PENDING / ESCHEATMENT_COMPLETED |
| inactive_since | string | ✓ | YYYY-MM-DD |
| balance | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| jurisdiction | string | ✓ | NZ / AU |
| idempotency_key | string | ✓ |
Consumers: MOD-007 (account state machine — transitions to Dormant),
MOD-063 (notification orchestration), MOD-057 (statistical returns — unclaimed money reporting)
bank.core.share_transaction_completed¶
Emitted by MOD-118 after each share capital movement settles or is blocked (CLQ-001). Mutual-institution tenants only. Consumed by MOD-063 (member notification).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| tx_id | uuid | ✓ | |
| member_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| tx_type | string | ✓ | PURCHASE | REDEMPTION | TRANSFER_IN | TRANSFER_OUT | DIVIDEND_REINVESTMENT | CORRECTION |
| shares | string | ✓ | Fixed-point decimal |
| total_amount | string | ✓ | Fixed-point decimal |
| status | string | ✓ | SETTLED | BLOCKED |
| blocked_reason | string | ✗ | capital_gate when CLQ-001 fires |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
bank.core.dividend_declared¶
Emitted by MOD-118 on board dividend declaration. Mutual-institution tenants only. Consumed by MOD-063, MOD-022.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| declaration_id | uuid | ✓ | |
| record_date | string | ✓ | ISO 8601 date |
| payment_date | string | ✓ | ISO 8601 date |
| rate_per_share | string | ✓ | Fixed-point decimal |
| total_declared | string | ✓ | Fixed-point decimal |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
bank.core.dividend_paid¶
Emitted by MOD-118 per member per declaration on confirmed net credit. Mutual-institution tenants only. Consumed by MOD-063 (member notification), MOD-022.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| payment_id | uuid | ✓ | |
| declaration_id | uuid | ✓ | |
| member_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| net_dividend | string | ✓ | Fixed-point decimal |
| posting_id | uuid | ✓ | |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
bank.core.member_status_changed¶
Emitted by MOD-118 on any member register status transition. Mutual-institution tenants only. Consumed by MOD-063, MOD-022.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| member_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| status_from | string | ✓ | |
| status_to | string | ✓ | |
| reason | string | ✗ | |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
bank.core.member_statement_due¶
Emitted by MOD-118 at FY end per active member. Full annual statement data payload. MOD-113 renders when deployed (FR-536 deferred — Gap #2 Option C). Mutual-institution tenants only.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| member_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| fy_end_date | string | ✓ | ISO 8601 date |
| opening_shares | string | ✓ | |
| closing_shares | string | ✓ | |
| transactions | array | ✓ | Share transaction summary |
| dividends_declared | array | ✓ | Dividend payments summary |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
bank.core.tax_certificate_due¶
Emitted by MOD-118 at FY end per member who received a dividend. Full tax calculation payload. MOD-113 renders when deployed (FR-535 deferred — Gap #2 Option C). Mutual-institution tenants only.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| member_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| fy_end_date | string | ✓ | ISO 8601 date |
| total_gross_dividend | string | ✓ | Fixed-point decimal |
| total_tax_withheld | string | ✓ | Fixed-point decimal |
| total_net_dividend | string | ✓ | Fixed-point decimal |
| dividend_payments | array | ✓ | Per-declaration breakdown |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
SD02 — KYC Platform (bank-kyc bus)¶
bank.kyc.identity_verified¶
Emitted by MOD-009 when an identity verification attempt produces a PASS result with sufficient confidence to proceed.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| customer_id | uuid | ✓ | |
| verification_id | uuid | ✓ | Stable record reference |
| document_type | string | ✓ | PASSPORT / DRIVERS_LICENCE / NATIONAL_ID |
| confidence_score | string | ✓ | Decimal string "0.00"–"1.00" |
| jurisdiction | string | ✓ | NZ / AU |
| edd_required | boolean | ✓ | True if confidence below auto-accept threshold |
| verified_at | ISO8601 | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-010 (CDD tier assignment — primary consumer), MOD-013 (sanctions screener — triggers initial screen), MOD-012 (KYC audit trail), MOD-007 (account state machine — enables activation gate)
bank.kyc.identity_failed¶
Emitted by MOD-009 when a verification attempt produces a FAIL or irrecoverable REFER result that cannot proceed without manual intervention.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| customer_id | uuid | ✓ | |
| verification_id | uuid | ✓ | |
| failure_reason | string | ✓ | DOCUMENT_REJECTED / BIOMETRIC_MISMATCH / WATCHLIST_HIT / UNSUPPORTED_DOCUMENT / EXPIRED_DOCUMENT |
| attempt_number | integer | ✓ | Retry count |
| max_attempts_reached | boolean | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-018 (alert case management — creates manual review task), MOD-012 (KYC audit trail), MOD-063 (notification orchestration — customer notification)
bank.kyc.cdd_tier_assigned¶
Emitted by MOD-010 after CDD classification is complete for a customer.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| customer_id | uuid | ✓ | |
| cdd_tier | string | ✓ | LOW / MEDIUM / HIGH / ENHANCED |
| previous_tier | string | ✗ | Omitted on initial assignment |
| tier_rationale | string | ✓ | Human-readable reason |
| sanctions_check_status | string | ✓ | CLEAR / MATCH_FOUND / PENDING |
| account_activation_permitted | boolean | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-007 (account state machine — activation gate), MOD-039 (customer risk score — informs risk model), MOD-016 (typology engine — AML risk parameter), MOD-012 (KYC audit trail)
bank.kyc.sanctions_match_found¶
Emitted by MOD-013 when a customer or payment counterparty matches an entry on OFAC, UN, MFAT, or DFAT lists.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| screening_id | uuid | ✓ | |
| entity_type | string | ✓ | CUSTOMER / COUNTERPARTY |
| entity_id | uuid | ✓ | customer_id or counterparty reference |
| list_source | string | ✓ | OFAC / UN / MFAT / DFAT |
| match_score | string | ✓ | Decimal string "0.00"–"1.00" |
| match_type | string | ✓ | EXACT / FUZZY / ALIAS |
| triggering_context | string | ✓ | ONBOARDING / PAYMENT / LIST_UPDATE / PERIODIC_REVIEW |
| idempotency_key | string | ✓ |
Consumers: MOD-007 (account state machine — immediate restriction), MOD-020 (pre-payment validation — blocks all payments), MOD-018 (alert case management — creates sanctions case), MOD-022 (payment audit trail)
bank.kyc.sanctions_match_cleared¶
Emitted by MOD-015 when a sanctions match is adjudicated as a false positive and the hold is lifted.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| screening_id | uuid | ✓ | References original bank.kyc.sanctions_match_found |
| entity_id | uuid | ✓ | |
| cleared_by | string | ✓ | Agent ID or system principal |
| adjudication_notes | string | ✗ | Optional — redacted in non-compliance contexts |
| idempotency_key | string | ✓ |
Consumers: MOD-007 (account state machine — lifts restriction), MOD-020 (pre-payment validation — removes payment block), MOD-012 (KYC audit trail)
bank.kyc.kyc_review_due¶
Emitted by MOD-011 when a customer's periodic KYC review falls due. Triggers review workflows on a 3-year cadence for standard customers and 1-year for high-risk.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| customer_id | uuid | ✓ | |
| review_type | string | ✓ | STANDARD / HIGH_RISK / ENHANCED |
| due_date | string | ✓ | YYYY-MM-DD |
| days_until_expiry | integer | ✓ | Negative when overdue |
| current_cdd_tier | string | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-062 (workflow orchestration — creates review task), MOD-064 (operations work queue — queues for analyst), MOD-063 (notification orchestration — may trigger customer outreach)
bank.kyc.false_positive_recorded¶
Emitted by MOD-015 when an analyst formally records a sanctions false positive adjudication for audit and model-improvement purposes.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| screening_id | uuid | ✓ | |
| entity_id | uuid | ✓ | |
| list_source | string | ✓ | |
| adjudicated_by | string | ✓ | Agent ID |
| reason_code | string | ✓ | Stable false-positive category |
| idempotency_key | string | ✓ |
Consumers: MOD-012 (KYC audit trail), MOD-037 (AML reporting pipeline — RBNZ/AUSTRAC disclosures)
SD03 — AML Monitoring (bank-aml bus)¶
bank.aml.alert_raised¶
Emitted by MOD-016 (rule-based typology) or MOD-017 (ML behavioural scoring) when a transaction or behavioural pattern crosses an alert threshold.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| alert_id | uuid | ✓ | |
| alert_source | string | ✓ | RULE_ENGINE / ML_MODEL |
| customer_id | uuid | ✓ | |
| alert_type | string | ✓ | FATF typology code e.g. STRUCTURING, RAPID_MOVEMENT, UNUSUAL_CROSS_BORDER |
| risk_score | string | ✓ | Decimal string "0"–"100" |
| triggering_transaction_ids | array of uuid | ✗ | Present when alert is transaction-specific |
| rule_ids | array of string | ✗ | Present when alert_source is RULE_ENGINE |
| idempotency_key | string | ✓ |
Consumers: MOD-018 (alert case management — primary consumer, creates analyst queue entry), MOD-022 (payment audit trail), MOD-042 (CDC → Snowflake)
bank.aml.case_opened¶
Emitted by MOD-018 when an alert is promoted to a formal AML investigation case.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| case_id | uuid | ✓ | |
| alert_id | uuid | ✓ | Causal alert reference |
| customer_id | uuid | ✓ | |
| assigned_analyst | string | ✗ | Agent ID; null if unassigned |
| priority | string | ✓ | LOW / MEDIUM / HIGH / CRITICAL |
| idempotency_key | string | ✓ |
Consumers: MOD-064 (operations work queue), MOD-047 (agent action logger), MOD-042 (CDC → Snowflake)
bank.aml.case_escalated¶
Emitted by MOD-018 when a case is escalated to MLRO or senior analyst review.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| case_id | uuid | ✓ | |
| escalated_to | string | ✓ | MLRO / SENIOR_ANALYST / BOARD |
| escalation_reason | string | ✓ | Human-readable |
| idempotency_key | string | ✓ |
Consumers: MOD-063 (notification orchestration — MLRO notification), MOD-047 (agent action logger), MOD-042 (CDC → Snowflake)
bank.aml.case_closed¶
Emitted by MOD-018 when a case is closed with a final disposition.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| case_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| disposition | string | ✓ | SAR_FILED / NO_ACTION / ENHANCED_MONITORING / ACCOUNT_CLOSED |
| closed_by | string | ✓ | Agent ID |
| sar_reference | string | ✗ | Present when disposition is SAR_FILED |
| idempotency_key | string | ✓ |
Consumers: MOD-019 (regulatory report submission — when SAR filed), MOD-039 (customer risk score — re-scores on close), MOD-012 (KYC audit trail), MOD-042 (CDC → Snowflake)
bank.aml.regulatory_submission_completed¶
Emitted by MOD-019 after a SAR, IFTI, or CMIR is successfully submitted to AUSTRAC or RBNZ/FMA.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| submission_id | uuid | ✓ | |
| report_type | string | ✓ | SAR / IFTI / CMIR |
| jurisdiction | string | ✓ | NZ / AU |
| regulator | string | ✓ | AUSTRAC / RBNZ / FMA |
| case_id | uuid | ✗ | Present when linked to a case |
| submitted_at | ISO8601 | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-047 (agent action logger — immutable record), MOD-048 (system decision log), MOD-042 (CDC → Snowflake)
SD04 — Payments (bank-payments bus)¶
bank.payments.payment_initiated¶
Emitted by MOD-020 (pre-payment validation) when a payment instruction is received and passes initial structural validation, before full validation and posting.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | Stable payment reference |
| customer_id | uuid | ✓ | |
| source_account_id | uuid | ✓ | |
| destination_account_id | uuid | ✗ | Internal transfers only |
| destination_bsb_account | string | ✗ | External AU payments |
| destination_sort_account | string | ✗ | External NZ payments |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| payment_type | string | ✓ | INTERNAL / DOMESTIC / INTERNATIONAL / FX |
| channel | string | ✓ | APP / API / OPEN_BANKING / AGENT |
| idempotency_key | string | ✓ | Caller-supplied |
Consumers: MOD-022 (payment audit trail — opens audit record), MOD-023 (transaction fraud scorer — immediate scoring trigger), MOD-024 (device & session intelligence)
bank.payments.payment_validated¶
Emitted by MOD-020 when all pre-payment validation checks pass and the payment is cleared for posting.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | |
| validation_checks_passed | array of string | ✓ | e.g. ["BALANCE", "LIMITS", "SANCTIONS", "FRAUD", "ACCOUNT_STATUS"] |
| fraud_score | string | ✓ | Decimal string from MOD-023 |
| idempotency_key | string | ✓ |
Consumers: MOD-001 (posting engine — proceeds to ledger posting), MOD-022 (payment audit trail)
bank.payments.payment_completed¶
Emitted by MOD-001 (via MOD-022) once the ledger posting is confirmed and settlement is initiated.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | |
| posting_id | uuid | ✓ | Ledger posting reference |
| customer_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| payment_type | string | ✓ | |
| settled_at | ISO8601 | ✗ | Present when settled in same event cycle |
| idempotency_key | string | ✓ |
Consumers: MOD-063 (notification orchestration — payment confirmation), MOD-026 (IFTI/CMIR trigger — threshold check), MOD-039 (customer risk score — transaction signal), MOD-042 (CDC → Snowflake), MOD-070 (transaction history)
bank.payments.payment_failed¶
Emitted by MOD-020 or MOD-001 when a payment cannot be completed.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| failure_stage | string | ✓ | VALIDATION / FRAUD_BLOCK / SANCTIONS_BLOCK / POSTING |
| failure_code | string | ✓ | Stable machine key |
| failure_message | string | ✓ | Human-readable operator message |
| idempotency_key | string | ✓ |
Consumers: MOD-022 (payment audit trail), MOD-063 (notification orchestration — customer notification), MOD-042 (CDC → Snowflake)
bank.payments.payment_reversed¶
Emitted by MOD-001 (general reversals), MOD-119 (BPAY returns), MOD-120 (Osko returns), and MOD-122 (NZ interbank returns) after a reversal posting pair is committed to the ledger.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | Original payment reference |
| reversal_posting_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| reversal_reason | string | ✓ | CUSTOMER_REQUEST / FRAUD / SETTLEMENT_FAILURE / COMPLIANCE_HOLD / BPAY_RETURN / OSKO_RETURN / NZ_INTERBANK_RETURN |
| reversed_by | string | ✓ | Agent ID, SYSTEM, BPAY_SCHEME, NPP_SCHEME, or NZ_PAYMENTS_NZ_SCHEME |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ | ADR-031 trace propagation |
Consumers: MOD-022 (payment audit trail), MOD-063 (notification orchestration), MOD-042 (CDC → Snowflake)
bank.payments.fx_rate_locked¶
Emitted by MOD-025 when an FX rate lock is granted to a payment instruction. Lock duration is 30–60 seconds; expired locks must trigger a new lock request.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| lock_id | uuid | ✓ | |
| payment_id | uuid | ✓ | |
| source_currency | string | ✓ | ISO 4217 |
| target_currency | string | ✓ | ISO 4217 |
| rate | string | ✓ | Fixed-point decimal — locked rate |
| inverse_rate | string | ✓ | For display purposes |
| source_amount | string | ✓ | Fixed-point decimal |
| target_amount | string | ✓ | Fixed-point decimal |
| lock_expires_at | ISO8601 | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-022 (payment audit trail), MOD-082 (nostro & FX treasury — hedging trigger)
bank.payments.fx_conversion_completed¶
Emitted by MOD-025 when the FX conversion posting pair is committed and settlement is instructed.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| conversion_id | uuid | ✓ | |
| lock_id | uuid | ✓ | Reference to bank.payments.fx_rate_locked |
| payment_id | uuid | ✓ | |
| source_posting_id | uuid | ✓ | Debit ledger posting |
| target_posting_id | uuid | ✓ | Credit ledger posting |
| source_currency | string | ✓ | |
| target_currency | string | ✓ | |
| source_amount | string | ✓ | Fixed-point decimal |
| target_amount | string | ✓ | Fixed-point decimal |
| rate_applied | string | ✓ | Fixed-point decimal |
| idempotency_key | string | ✓ |
Consumers: MOD-022 (payment audit trail), MOD-082 (nostro & FX treasury), MOD-042 (CDC → Snowflake)
bank.payments.limit_breach_detected¶
Emitted by MOD-021 when a payment instruction would exceed a customer's per-transaction or daily velocity limit.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| limit_type | string | ✓ | DAILY_VALUE / PER_TRANSACTION / DAILY_COUNT |
| limit_value | string | ✓ | Fixed-point decimal |
| attempted_value | string | ✓ | Fixed-point decimal |
| idempotency_key | string | ✓ |
Consumers: MOD-020 (pre-payment validation — blocks payment), MOD-022 (payment audit trail), MOD-016 (typology engine — structuring signal)
bank.payments.ifti_threshold_crossed¶
Emitted by MOD-026 when a cross-border electronic transfer triggers an IFTI reporting obligation, or when a physical cash movement meets the CMIR threshold. IFTI-E has no monetary minimum — every cross-border electronic transfer is reportable; the applied threshold is configurable per jurisdiction via SSM/AppConfig (production default: every cross-border transfer).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| payment_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| direction | string | ✓ | INBOUND / OUTBOUND |
| counterparty_country | string | ✓ | ISO 3166-1 alpha-2 |
| report_type | string | ✓ | IFTI / CMIR |
| jurisdiction | string | ✓ | NZ / AU |
| idempotency_key | string | ✓ |
Consumers: MOD-019 (regulatory report submission — files IFTI/CMIR), MOD-022 (payment audit trail)
bank.payments.settlement_file_received¶
Emitted by MOD-081 when an inbound settlement file is received from a payment scheme (NPP, BECS, SWIFT).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| file_id | uuid | ✓ | |
| scheme | string | ✓ | NPP / BECS / SWIFT / RTGS |
| settlement_date | string | ✓ | YYYY-MM-DD |
| transaction_count | integer | ✓ | |
| total_value | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| idempotency_key | string | ✓ |
Consumers: MOD-081 (reconciliation engine — triggers matching run), MOD-082 (nostro & FX treasury — position update)
bank.payments.reconciliation_exception_raised¶
Emitted by MOD-081 when a settlement record cannot be matched to a ledger posting, or when a mismatch is detected during reconciliation.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| exception_id | uuid | ✓ | |
| settlement_file_id | uuid | ✓ | |
| exception_type | string | ✓ | UNMATCHED_CREDIT / UNMATCHED_DEBIT / AMOUNT_MISMATCH / DUPLICATE_DETECTED |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| scheme | string | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-064 (operations work queue — creates reconciliation task), MOD-047 (agent action logger), MOD-042 (CDC → Snowflake)
bank.payments.direct_debit_mandate_created¶
Emitted by MOD-114 on new mandate registration. Consumed by MOD-063 for "Mandate created" customer notification.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| idempotency_key | string | ✓ | |
| mandate_id | string | ✓ | |
| party_id | string | ✓ | |
| account_id | string | ✓ | |
| jurisdiction | string | ✓ | NZ or AU |
| biller_id | string | ✓ | |
| biller_name | string | ✓ | |
| max_amount | number | ✗ | |
| effective_date | string | ✓ |
bank.payments.direct_debit_mandate_cancelled¶
Emitted by MOD-114 on customer cancellation (FR-507). Consumed by MOD-063 for "Mandate cancelled" notification.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| idempotency_key | string | ✓ | |
| mandate_id | string | ✓ | |
| party_id | string | ✓ | |
| account_id | string | ✓ | |
| jurisdiction | string | ✓ | |
| biller_id | string | ✓ | |
| cancel_reason | string | ✗ | |
| cancelled_at | string | ✓ |
bank.payments.direct_debit_dishonoured¶
Emitted by MOD-114 on dishonoured debit presentation (FR-508). Consumed by MOD-063 (customer notification within 60 s) and MOD-022 (audit trail).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| idempotency_key | string | ✓ | |
| presentation_id | string | ✓ | |
| mandate_id | string | ✓ | |
| party_id | string | ✓ | |
| account_id | string | ✓ | |
| jurisdiction | string | ✓ | |
| biller_id | string | ✓ | |
| biller_name | string | ✓ | |
| amount | number | ✓ | |
| currency | string | ✓ | |
| return_code | string | ✓ | Scheme return code |
| return_reason | string | ✓ | Plain-language |
| dishonour_fee_assessed | boolean | ✓ |
bank.payments.bpay_biller_registered¶
Emitted by MOD-136 when a BPAY biller registration moves to ACTIVE. AU-only. Consumed by MOD-063 (back-office staff notification).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| biller_id | uuid | ✓ | |
| party_id | uuid | ✓ | Business customer |
| bpay_code | string | ✓ | Sponsor-assigned |
| biller_name | string | ✓ | |
| jurisdiction | string | ✓ | AU |
| trace_id | string | ✓ |
bank.payments.bpay_inbound_received¶
Emitted by MOD-136 after MOD-001 credit posting for an inbound BPAY payment. AU-only. Triggers biller notification within 60 s (FR-607 / CON-005). Consumed by MOD-063 + MOD-022.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| payment_id | uuid | ✓ | Synthetic payments.payments row |
| posting_id | uuid | ✓ | SD01 posting reference |
| biller_id | uuid | ✓ | |
| bpay_code | string | ✓ | |
| crn | string | ✓ | Validated CRN |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | AUD |
| settlement_date | string | ✓ | ISO 8601 date |
| settlement_batch_reference | string | ✓ | |
| trace_id | string | ✓ |
bank.payments.bpay_inbound_returned¶
Emitted by MOD-136 when CRN validation fails and the payment is quarantined as RETURNED. AU-only. Consumed by MOD-063 (ops-queue alert within 60 min per FR-606) + MOD-022.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| payment_id | uuid | ✓ | |
| biller_id | uuid | ✓ | |
| bpay_code | string | ✓ | |
| crn | string | ✓ | Invalid CRN as received |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | AUD |
| return_reason_code | string | ✓ | Scheme return reason code |
| settlement_batch_reference | string | ✓ | |
| trace_id | string | ✓ |
bank.payments.batch_validated¶
Emitted by MOD-135 when a batch file passes format validation (FR-601) and the MOD-020 aggregate balance gate (FR-602). Batch moves to PENDING_APPROVAL; customer must confirm before processing begins (CON-005).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | FK to payments.batch_files |
| party_id | uuid | ✓ | Business/SME customer party |
| account_id | uuid | ✓ | Source debit account |
| file_format | string | ✓ | ABA or CSV |
| validated_item_count | integer | ✓ | |
| validated_total_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO-4217 |
| jurisdiction | string | ✓ | NZ or AU |
| shortfall_amount | string | Present if insufficient funds — customer must confirm partial-funding intent | |
| trace_id | string | ✓ |
Consumers: MOD-063 (customer notification: batch ready for confirmation).
bank.payments.batch_confirmed¶
Emitted by MOD-135 when the customer explicitly confirms the batch (CON-005). Processing begins immediately after this event.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| item_count | integer | ✓ | |
| total_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
Consumers: (triggers batch submission orchestrator internally).
bank.payments.batch_item_quarantined¶
Emitted by MOD-135 per item that receives a fraud or sanctions alert from the per-item MOD-020 call (FR-603). Must be published within 60 s of batch submission; quarantined items do not block sibling items.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| item_id | uuid | ✓ | FK to payments.batch_items |
| payment_id | uuid | ✓ | MOD-135-minted payment_id for this item |
| party_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | |
| quarantine_reason | string | ✓ | MOD-020 failure_reason e.g. SANCTIONS_MATCH, FRAUD_BLOCK |
| sequence_number | integer | ✓ | Position in source file |
| trace_id | string | ✓ |
Consumers: MOD-063 (customer notification of quarantined item within 60 s per FR-603).
bank.payments.batch_item_returned¶
Emitted by MOD-135 when an item cannot be credited (account closed, invalid account) and a re-credit has been posted to the source account (FR-604).
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| item_id | uuid | ✓ | |
| payment_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| amount | string | ✓ | Fixed-point decimal — returned amount |
| currency | string | ✓ | |
| return_reason | string | ✓ | e.g. ACCOUNT_CLOSED, INVALID_ACCOUNT |
| return_posting_id | uuid | ✓ | Re-credit posting to source account |
| sequence_number | integer | ✓ | |
| trace_id | string | ✓ |
Consumers: MOD-063 (return notification to customer per FR-604).
bank.payments.batch_settled¶
Emitted by MOD-135 when all non-quarantined, non-failed items have reached a terminal state (SETTLED, RETURNED, or FAILED). Terminal success event for the batch.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| settled_item_count | integer | ✓ | Items that reached SETTLED |
| settled_total_amount | string | ✓ | Fixed-point decimal |
| quarantined_item_count | integer | ✓ | Items held as QUARANTINED |
| returned_item_count | integer | ✓ | Items returned (FR-604) |
| currency | string | ✓ | |
| jurisdiction | string | ✓ | |
| settled_at | string | ✓ | ISO8601 UTC |
| trace_id | string | ✓ |
Consumers: MOD-063 (batch settlement confirmation to customer), MOD-022 (payment audit trail).
bank.payments.batch_failed¶
Emitted by MOD-135 on a batch-level failure (source account closed mid-batch, system error during processing). Items not yet submitted at failure are not charged.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| failure_reason | string | ✓ | e.g. SOURCE_ACCOUNT_CLOSED, SUBMISSION_TIMEOUT |
| items_submitted | integer | ✓ | Items that reached MOD-020 before failure |
| items_not_submitted | integer | ✓ | Items not yet processed |
| currency | string | ✓ | |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
Consumers: MOD-063 (failure notification to customer), MOD-022 (payment audit trail).
bank.payments.agency_batch_received¶
Emitted by MOD-137 when an agency batch file has landed in S3, been parsed, and per-item processing has been queued.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | FK to payments.agency_batch_files |
| agency_network | string | ✓ | AUSTRALIA_POST | NZ_POST | OTHER |
| file_reference | string | ✓ | Network-assigned file identifier |
| batch_date | string | ✓ | ISO-8601 date — transaction date from file header |
| declared_item_count | integer | ✓ | |
| jurisdiction | string | ✓ | NZ or AU |
| trace_id | string | ✓ |
Consumers: MOD-022 (payment audit trail).
bank.payments.agency_batch_settled¶
Emitted by MOD-137 when all items in the batch have reached a terminal state and the reconciliation pass is complete.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| agency_network | string | ✓ | |
| posted_count | integer | ✓ | Items that reached POSTED |
| posted_total_amount | string | ✓ | Fixed-point decimal |
| quarantined_count | integer | ✓ | Items held as QUARANTINED |
| currency | string | ✓ | ISO-4217 |
| jurisdiction | string | ✓ | |
| settled_at | string | ✓ | ISO8601 UTC |
| trace_id | string | ✓ |
Consumers: MOD-063 (batch settlement summary to customer), MOD-022 (payment audit trail).
bank.payments.agency_item_quarantined¶
Emitted by MOD-137 per item that fails account matching, account-active validation, or available-balance check (FR-609). Must be published within 2 hours of batch receipt.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| transaction_id | uuid | ✓ | FK to payments.agency_transactions |
| agency_network | string | ✓ | |
| transaction_type | string | ✓ | DEPOSIT | WITHDRAWAL |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | |
| failure_reason | string | ✓ | ACCOUNT_NOT_FOUND | ACCOUNT_INACTIVE | INSUFFICIENT_BALANCE | PARSE_ERROR |
| terminal_id | string | ✓ | |
| agent_outlet_code | string | ✓ | |
| sequence_number | integer | ✓ | Position in source file |
| trace_id | string | ✓ |
Consumers: MOD-063 (ops queue notification per FR-609).
bank.payments.agency_aml_threshold_flagged¶
Emitted by MOD-137 for each agency cash transaction at or above the jurisdiction-specific AML reporting threshold (default AUD/NZD 10,000). Published in the same handler invocation as the MOD-001 posting — the flag never delays the transaction (FR-611). Carries terminal_id and agent_outlet_code as required location metadata.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| transaction_id | uuid | ✓ | FK to payments.agency_transactions |
| account_id | uuid | ✓ | Resolved account — soft ref SD01 |
| transaction_type | string | ✓ | DEPOSIT | WITHDRAWAL |
| amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO-4217 |
| jurisdiction | string | ✓ | NZ or AU |
| threshold_value | string | ✓ | Threshold that was triggered (e.g. "10000.00") |
| terminal_id | string | ✓ | FR-611 required location metadata |
| agent_outlet_code | string | ✓ | FR-611 required location metadata |
| trace_id | string | ✓ |
Consumers: SD03 MOD-016 (typology engine — cash transaction analysis), SD06 MOD-037 (CDC consumer — regulatory reporting pipeline).
bank.payments.agency_reconciliation_discrepancy¶
Emitted by MOD-137 when the reconciliation pass (FR-612) finds a mismatch between processed totals and the agency network's settlement file. Must be published within 2 hours of reconciliation completing.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| batch_id | uuid | ✓ | |
| agency_network | string | ✓ | |
| discrepancy_type | string | ✓ | COUNT_MISMATCH | AMOUNT_MISMATCH | BOTH |
| expected_count | integer | ✓ | From settlement file |
| actual_count | integer | ✓ | Items processed by MOD-137 |
| expected_amount | string | ✓ | Fixed-point decimal — settlement file total |
| actual_amount | string | ✓ | Fixed-point decimal — MOD-137 processed total |
| currency | string | ✓ | ISO-4217 |
| jurisdiction | string | ✓ | |
| trace_id | string | ✓ |
Consumers: MOD-063 (ops queue alert per FR-612; escalation to agency network within 1 business day if unresolved), MOD-022 (payment audit trail).
bank.payments.card_ordered¶
Emitted by MOD-124 when a physical card order is submitted to the bureau.
Bus: bank-payments · Source: bank.payments · Detail-type: card_ordered
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | payments.physical_cards(id) |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| card_scheme | string | ✓ | VISA | MASTERCARD |
| jurisdiction | string | ✓ | NZ | AU |
| bureau_order_ref | string | ✓ | Bureau tracking reference |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (notify customer — card ordered confirmation).
bank.payments.card_dispatched¶
Emitted by MOD-124 when the bureau webhook confirms the card has been printed and dispatched.
Bus: bank-payments · Source: bank.payments · Detail-type: card_dispatched
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| card_number_last4 | string | ✓ | For display in notification |
| estimated_delivery_date | string | ✗ | ISO 8601 date if provided by bureau |
| pci_disclosure_required | boolean | ✓ | Always true; MOD-073 subscribes |
| bureau_order_ref | string | ✓ | |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (dispatch notification), MOD-073 (PCI disclosure document delivery).
bank.payments.card_activated¶
Emitted by MOD-124 when the customer activates their physical card.
Bus: bank-payments · Source: bank.payments · Detail-type: card_activated
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| card_number_last4 | string | ✓ | |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (activation confirmation), MOD-078 (initialise control profile once deployed).
bank.payments.card_frozen¶
Emitted by MOD-124 when a card is frozen (lost, stolen, or customer request).
Bus: bank-payments · Source: bank.payments · Detail-type: card_frozen
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| freeze_reason | string | ✓ | LOST | STOLEN | CUSTOMER_REQUEST | SYSTEM |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (freeze confirmation notification), MOD-022 (audit trail).
bank.payments.card_cancelled¶
Emitted by MOD-124 when a card is permanently cancelled (terminal state).
Bus: bank-payments · Source: bank.payments · Detail-type: card_cancelled
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| cancel_reason | string | ✓ | LOST_STOLEN_REPLACEMENT | CUSTOMER_REQUEST | EXPIRY_REPLACED | SYSTEM |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (cancellation notification), MOD-078 (remove control profile).
bank.payments.card_replaced¶
Emitted by MOD-124 when a replacement card order is submitted following a lost/stolen report.
Bus: bank-payments · Source: bank.payments · Detail-type: card_replaced
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| original_card_id | uuid | ✓ | The cancelled card |
| replacement_card_id | uuid | ✓ | The newly ordered card |
| party_id | uuid | ✓ | |
| replace_reason | string | ✓ | LOST | STOLEN | DAMAGED |
| bureau_order_ref | string | ✓ | |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (replacement order confirmation).
bank.payments.card_pin_changed¶
Emitted by MOD-124 after the processor's HSM confirms a successful PIN change. No PIN data included — audit event only.
Bus: bank-payments · Source: bank.payments · Detail-type: card_pin_changed
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| card_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| change_channel | string | ✓ | APP | ATM | BRANCH |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (PIN change security notification), MOD-022 (audit trail).
bank.payments.card_renewed¶
Emitted by MOD-124 when the 60-day pre-expiry scan orders a renewal card.
Bus: bank-payments · Source: bank.payments · Detail-type: card_renewed
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| expiring_card_id | uuid | ✓ | Card approaching expiry |
| renewal_card_id | uuid | ✓ | Newly ordered renewal card |
| party_id | uuid | ✓ | |
| expiry_date | string | ✓ | ISO 8601 YYYY-MM of expiring card |
| bureau_order_ref | string | ✓ | |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (renewal notification on subsequent card_dispatched for renewal_card_id).
SD05 — Credit Decisioning (bank-credit bus)¶
bank.credit.application_received¶
Emitted by MOD-029 (pre-approval engine) or the credit application intake flow when a complete credit application is submitted.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| application_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| product_id | string | ✓ | e.g. PRD-002 |
| requested_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| application_source | string | ✓ | APP / AGENT / PRE_APPROVAL |
| idempotency_key | string | ✓ |
Consumers: MOD-027 (affordability calculator — starts assessment), MOD-028 (credit score & risk rating), MOD-062 (workflow orchestration)
bank.credit.credit_decision_made¶
Emitted by MOD-028 when a credit decision is produced — whether automated or following analyst review.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| application_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| decision | string | ✓ | APPROVE / DECLINE / REFER |
| approved_amount | string | ✗ | Fixed-point decimal; present on APPROVE |
| approved_rate | string | ✗ | Decimal string; present on APPROVE |
| risk_rating | string | ✓ | Basel risk rating e.g. BBB+ |
| decline_reason_codes | array of string | ✗ | Present on DECLINE |
| model_version | string | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-029 (pre-approval engine — if originated from pre-approval), MOD-063 (notification orchestration — decision notification), MOD-033 (RWA engine — updates RWA on approval), MOD-048 (system decision log)
bank.credit.loan_account_opened¶
Emitted by MOD-001 (via credit servicing) when a loan account is created in the ledger following credit approval and customer acceptance.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| loan_account_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| application_id | uuid | ✓ | |
| principal_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| term_months | integer | ✓ | |
| interest_rate | string | ✓ | Decimal string |
| product_id | string | ✓ | |
| jurisdiction | string | ✓ | NZ / AU |
| idempotency_key | string | ✓ |
Consumers: MOD-030 (stage allocation model — initial IFRS 9 staging), MOD-031 (ECL calculation), MOD-033 (RWA engine), MOD-059 (credit bureau submission)
bank.credit.repayment_received¶
Emitted by MOD-001 after a scheduled or unscheduled loan repayment posting is committed.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| loan_account_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| posting_id | uuid | ✓ | |
| repayment_amount | string | ✓ | Fixed-point decimal |
| principal_component | string | ✓ | Fixed-point decimal |
| interest_component | string | ✓ | Fixed-point decimal |
| outstanding_balance_after | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| repayment_type | string | ✓ | SCHEDULED / UNSCHEDULED / EARLY_REPAYMENT |
| idempotency_key | string | ✓ |
Consumers: MOD-030 (stage allocation model), MOD-031 (ECL calculation), MOD-059 (credit bureau submission), MOD-065 (credit servicing & collections — clears arrears flag if applicable)
bank.credit.arrears_triggered¶
Emitted by MOD-065 when a loan account enters arrears following a missed payment.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| loan_account_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| days_past_due | integer | ✓ | |
| overdue_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| idempotency_key | string | ✓ |
Consumers: MOD-030 (stage allocation model — triggers stage migration), MOD-031 (ECL calculation — recalculates provision), MOD-059 (credit bureau submission), MOD-063 (notification orchestration — hardship outreach), MOD-040 (churn & health score — financial stress signal)
bank.credit.ecl_updated¶
Emitted by MOD-031 after each ECL recalculation cycle. Consumed by the GL posting engine and the risk platform for capital reporting.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| ecl_run_id | uuid | ✓ | |
| loan_account_id | uuid | ✓ | |
| stage | integer | ✓ | 1, 2, or 3 (IFRS 9) |
| ecl_amount | string | ✓ | Fixed-point decimal |
| previous_ecl_amount | string | ✓ | Fixed-point decimal |
| currency | string | ✓ | ISO 4217 |
| pd | string | ✓ | Probability of default decimal string |
| lgd | string | ✓ | Loss given default decimal string |
| ead | string | ✓ | Exposure at default decimal string |
| idempotency_key | string | ✓ |
Consumers: MOD-001 (posting engine — GL provision entry), MOD-033 (RWA engine), MOD-036 (prudential return builder)
bank.credit.loan_variation_requested¶
Emitted by MOD-132 when a customer submits a variation request. Triggers materiality assessment and customer acknowledgement.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| variation_id | uuid | ✓ | FK credit.loan_variations.id |
| loan_account_id | uuid | ✓ | |
| party_id | string | ✓ | |
| variation_type | string | ✓ | |
| requires_assessment | boolean | ✓ | FR-589 materiality result |
| requires_break_cost | boolean | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-029 (materiality assessment), MOD-053 (request acknowledgement)
bank.credit.loan_variation_confirmed¶
Emitted by MOD-132 after all gates pass and the variation is confirmed. Triggers schedule regeneration and disclosure dispatch.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| variation_id | uuid | ✓ | |
| loan_account_id | uuid | ✓ | |
| party_id | string | ✓ | |
| variation_type | string | ✓ | |
| before_terms | object | ✓ | |
| after_terms | object | ✓ | |
| disclosure_acknowledgement_id | uuid | ✓ | CON-004 GATE evidence |
| idempotency_key | string | ✓ |
Consumers: MOD-112 (schedule regeneration via originate-schedule with generated_by='restructure'), MOD-050 (confirmation disclosure), MOD-053 (confirmation notification)
bank.credit.loan_variation_rejected¶
Emitted by MOD-132 when a variation is rejected by assessment, customer, or system.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | string | ✓ | |
| variation_id | uuid | ✓ | |
| loan_account_id | uuid | ✓ | |
| party_id | string | ✓ | |
| variation_type | string | ✓ | |
| rejection_reason | string | ✓ | |
| rejected_by | string | ✓ | ASSESSMENT_FAILED | CUSTOMER_DECLINED | SYSTEM |
| idempotency_key | string | ✓ |
Consumers: MOD-053 (rejection notification)
SD06 — Analytics & Risk (bank-risk-platform bus)¶
bank.risk.capital_ratio_breach¶
Emitted by MOD-033 (ALERT_CAPITAL_RATIO_BREACH Snowflake Alert, 5-minute poll) when any capital ratio falls below the regulatory minimum or internal management buffer in risk_capital.capital_config. MOD-033 is dbt + DCM only — no Lambda; the alert fires directly from Snowflake via BANK_SNS_INTEGRATION and publishes to the bank-risk-platform EventBridge bus.
Bus: bank-risk-platform · Source: bank.risk-platform · Detail-type: capital_ratio_breach
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| trace_id | uuid | ✓ | |
| run_id | uuid | ✓ | Matches capital_run_audit.run_id |
| ratio_type | string | ✓ | CET1 / TIER1 / TOTAL_CAPITAL |
| jurisdiction | string | ✓ | NZ / AU |
| ratio_value | string | ✓ | Fixed-point decimal |
| regulatory_minimum | string | ✓ | Fixed-point decimal — from capital_config |
| internal_buffer | string | ✓ | Fixed-point decimal — from capital_config |
| breach_severity | string | ✓ | regulatory_minimum / internal_buffer |
| position_date | string | ✓ | YYYY-MM-DD |
| calculated_at | ISO8601 | ✓ |
Consumers: MOD-076 (alarm-intake — routes to CFO + CRO per FR-207), MOD-058 (breach notification engine)
bank.risk.liquidity_ratio_updated¶
Emitted by MOD-032 after each LCR/NSFR calculation run.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| calculation_id | uuid | ✓ | |
| lcr | string | ✓ | Percentage as decimal string |
| nsfr | string | ✓ | Percentage as decimal string |
| lcr_breach_flag | boolean | ✓ | |
| nsfr_breach_flag | boolean | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-036 (prudential return builder), MOD-063 (notification orchestration — Board/ALCO alert on breach)
bank.risk.customer_risk_score_updated¶
Emitted by MOD-039 when a customer's risk score is recalculated and the score or tier changes.
Bus: bank-risk-platform · Source: bank.risk-platform · Detail-type: customer_risk_score_updated
Subscribers read bus ARN and detail-type from SSM:
/bank/{env}/risk-platform/risk-customer/event-source-name and /bank/{env}/risk-platform/risk-customer/event-detail-type.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | Envelope field |
| event_time | ISO8601 | ✓ | Envelope field — UTC |
| schema_version | string | ✓ | |
| party_id | uuid | ✓ | Cross-domain stable identifier (SD02 party.parties.id) |
| composite_risk_score | float | ✓ | 0–100 numeric score (risk scores are not money — float is correct here) |
| risk_tier | string | ✓ | LOW / MEDIUM / HIGH / CRITICAL |
| previous_risk_tier | string | ✗ | Omitted on first score |
| tier_changed | boolean | ✓ | |
| score_version | string | ✓ | Model version identifier e.g. "v1-abc123def456" |
| triggering_event | string | ✗ | Cause of recalculation e.g. "sanctions_hit" |
| scored_at | ISO8601 | ✓ | When the score was calculated — use as idempotency anchor with party_id |
| idempotency_key | string | ✓ | Subscriber deduplication key |
Idempotency: Subscribers MUST be idempotent on (party_id, scored_at) — the EB
publisher Lambda may republish rows if it crashes before advancing its cursor.
Consumers: MOD-010 (CDD tier assignment — may trigger tier upgrade), MOD-016 (typology engine — threshold adjustment), MOD-039 itself publishes; MOD-079 (decision publication service — write-back)
bank.risk.fraud_alert_raised¶
Emitted by MOD-023 (transaction fraud scorer) or MOD-055 (onboarding fraud scoring) when a fraud probability exceeds the configured alert threshold.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| alert_id | uuid | ✓ | |
| alert_source | string | ✓ | TRANSACTION_FRAUD / ONBOARDING_FRAUD |
| entity_type | string | ✓ | CUSTOMER / PAYMENT / APPLICATION |
| entity_id | uuid | ✓ | |
| fraud_score | string | ✓ | Decimal string "0.00"–"1.00" |
| action_taken | string | ✓ | BLOCK / STEP_UP_AUTH / ALERT_ONLY |
| idempotency_key | string | ✓ |
Consumers: MOD-020 (pre-payment validation — blocks if action_taken is BLOCK),
MOD-018 (alert case management), MOD-024 (device & session intelligence),
MOD-063 (notification orchestration)
bank.risk.stress_test_completed¶
Emitted by MOD-034 after a stress test scenario run completes.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| run_id | uuid | ✓ | |
| scenario_name | string | ✓ | Human-readable scenario identifier |
| scenario_type | string | ✓ | REGULATORY / INTERNAL / REVERSE |
| cet1_post_stress | string | ✓ | Decimal string |
| lcr_post_stress | string | ✓ | Decimal string |
| passed | boolean | ✓ | True when all thresholds met |
| idempotency_key | string | ✓ |
Consumers: MOD-036 (prudential return builder), MOD-048 (system decision log)
bank.risk-platform.model_register_entry_created¶
Emitted by MOD-173 when a new model is added to RISK_MGMT.MODEL_REGISTER.
Bus: bank-risk-platform · Source: bank.risk-platform · Detail-type: model_register_entry_created
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| model_id | string | ✓ | e.g. MOD-028 |
| model_name | string | ✓ | |
| model_type | string | ✓ | CREDIT | MARKET | LIQUIDITY | OPERATIONAL | AML | OTHER |
| tier | integer | ✓ | 1, 2, or 3 |
| regulator | string | ✓ | RBNZ | APRA | BOTH | INTERNAL |
| evidence_pack_complete | boolean | ✓ | |
| idempotency_key | string | ✓ | model_register_created:{model_id} |
Consumers: MOD-076 (alarm intake), MOD-056 (compliance visibility — optional).
bank.risk-platform.model_validation_due_soon¶
Emitted by MOD-173 DCM alert + EB publisher once per overdue-or-imminently-due model per day.
Bus: bank-risk-platform · Source: bank.risk-platform · Detail-type: model_validation_due_soon
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| model_id | string | ✓ | |
| model_name | string | ✓ | |
| tier | integer | ✓ | |
| next_validation_due | string | ✓ | ISO 8601 date |
| days_overdue | integer | ✓ | Negative = days remaining; positive = days past due |
| evidence_pack_complete | boolean | ✓ | |
| idempotency_key | string | ✓ | model_validation_due:{model_id}:{due_date} |
Consumers: MOD-076 (alarm intake — overdue alert), MOD-056 (compliance visibility — optional).
SD07 — Data Platform (bank-platform bus)¶
bank.platform.decision_published¶
Emitted by MOD-079 after a Snowflake decision result is written back to the Neon operational database. Signals to consumers that a new decision is available to read.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| decision_id | uuid | ✓ | Matches the decision_id in the decision publication contract |
| entity_type | string | ✓ | APPLICATION / CUSTOMER / PAYMENT |
| entity_id | string | ✓ | |
| decision_type | string | ✓ | e.g. ONBOARDING / CREDIT / RISK_SCORE |
| decision_status | string | ✓ | ACCEPT / REFER / REJECT / HOLD / CLEAR |
| target_table | string | ✓ | Neon schema.table where result was written |
| idempotency_key | string | ✓ |
Consumers: MOD-062 (workflow orchestration — resumes paused workflows), MOD-010 (CDD tier assignment), MOD-028 (credit score), MOD-048 (system decision log)
bank.platform.decision_applied¶
Emitted by the consuming service after it reads a published decision and applies the operational state change. Provides end-to-end traceability.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| decision_id | uuid | ✓ | |
| applied_by_module | string | ✓ | e.g. MOD-010 |
| state_change | string | ✓ | Human-readable description of what changed |
| idempotency_key | string | ✓ |
Consumers: MOD-048 (system decision log — audit trail), MOD-047 (agent action logger)
bank.platform.notification_sent¶
Emitted by MOD-063 after a customer or operator notification is dispatched.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| notification_id | uuid | ✓ | |
| recipient_id | uuid | ✓ | customer_id or agent_id |
| channel | string | ✓ | PUSH / SMS / EMAIL / IN_APP |
| template_id | string | ✓ | |
| causal_event_id | uuid | ✗ | Event that triggered this notification |
| idempotency_key | string | ✓ |
Consumers: MOD-048 (system decision log), MOD-047 (agent action logger — for agent-directed notifications)
bank.platform.workflow_step_completed¶
Emitted by MOD-062 when a workflow step completes, enabling choreography-based workflow advancement.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| workflow_id | uuid | ✓ | |
| workflow_type | string | ✓ | e.g. ONBOARDING / KYC_REVIEW / CREDIT_APPLICATION |
| step_name | string | ✓ | |
| step_result | string | ✓ | PASS / FAIL / REFER / SKIP |
| next_step | string | ✗ | Omitted when workflow is terminal |
| actor | string | ✓ | Identity of the actor that triggered the step (system module ID or operator identity) |
| idempotency_key | string | ✓ |
Consumers: MOD-062 (itself — advances to next step),
MOD-064 (operations work queue — creates task if REFER)
bank.platform.secret_rotated¶
Emitted by MOD-045 after a secret rotation event in AWS Secrets Manager completes successfully. Allows consumers to refresh cached credentials.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| secret_arn | string | ✓ | ARN — not the secret value |
| secret_name | string | ✓ | Logical name e.g. bank-core/db-password |
| rotation_reason | string | ✓ | SCHEDULED / MANUAL / BREACH_RESPONSE |
| idempotency_key | string | ✓ |
Consumers: All modules that cache the affected credential (resolved at deployment by secret-name subscriptions in consumer Lambda event filters).
bank.platform.usage_event¶
Emitted by every module on billable operations. Consumed by MOD-097 normaliser for landing to S3/Iceberg, and by MOD-099 for usage-based billing aggregation. Owner: MOD-097.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | e.g. "1.0.0" |
| idempotency_key | string | ✓ | |
| tenant_id | string | ✓ | 'self' for bank's own operations; licensee ID for SaaS customers |
| module_id | string | ✓ | Emitting module, e.g. MOD-009 |
| facility_id | string | ✓ | System domain, e.g. SD02 |
| event_type | enum | ✓ | API_CALL / ML_INFERENCE / SNOWFLAKE_QUERY / ENRICHMENT_CALL / NOTIFICATION_SEND / DOCUMENT_STORE / CDC_EVENT / DECISION_PUBLICATION / LOGIN / PAYMENT_INITIATED / KYC_CHECK |
| quantity | number | ✓ | Count of billable units |
| resource_units | number | ✗ | Cost-unit count; defaults to 0 |
| resource_unit_type | enum | ✓ | CALLS / INFERENCES / CREDITS / MB / RECORDS / WRITES / SENDS / LAMBDA_GB_SECONDS |
| environment | enum | ✓ | local / dev / uat / prod |
| resource_id | string | ✗ | Optional identifier for the specific resource instance |
| correlation_id | string | ✗ | Links to the originating domain event or request |
Consumers: MOD-097 (normaliser → S3/Iceberg), MOD-099 (billing aggregation).
Canonical JSON Schema at MOD-097-usage-event-collector/schemas/bank.platform.usage_event.json.
bank.platform.transaction_enriched¶
Emitted by MOD-087 after enriching a bank.core.posting_completed event with canonical merchant identity and geolocation. PAYMENT posting_type only — non-merchant types are silently skipped. Foundation event for the Expense Intelligence Platform.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | e.g. "1.0.0" |
| posting_id | uuid | ✓ | Source posting dedup key |
| party_id | uuid | ✓ | |
| account_id | uuid | ✓ | |
| raw_merchant_name | string | ✓ | v1: accounts.postings.narrative (cross-schema SELECT); v2: dedicated field or external API |
| canonical_merchant_name | string | ✓ | Resolved canonical name |
| mcc | string | ✗ | ISO 18245 4-digit MCC; null when unknown |
| logo_url | string | ✗ | Null in v1 |
| lat | number | ✗ | Null when location unavailable (FR-763 conditional) |
| lng | number | ✗ | Null when location unavailable |
| enrichment_source | string | ✓ | DICTIONARY | MCC_INFERENCE | MANUAL |
| trace_id | string | ✓ | ADR-031 trace propagation |
Consumers: MOD-088, MOD-089, MOD-091, MOD-077 (customer app).
SD08 — Customer App (bank-app bus)¶
bank.app.session_created¶
Emitted by MOD-068 when a customer successfully authenticates and a new session token is issued.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| session_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| device_fingerprint_id | uuid | ✓ | Reference to MOD-024 device record |
| auth_method | string | ✓ | BIOMETRIC / PIN / PASSWORD / MFA_SMS |
| ip_region | string | ✗ | Coarse geolocation; never precise coordinates |
| idempotency_key | string | ✓ |
Consumers: MOD-024 (device & session intelligence — anomaly detection), MOD-023 (transaction fraud scorer — session context), MOD-047 (agent action logger)
bank.app.consent_captured¶
Emitted by MOD-049 when a customer provides or renews consent under the CDR framework or marketing consent regime.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| consent_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| consent_type | string | ✓ | CDR_SHARING / MARKETING / PRODUCT_DISCLOSURE |
| scope | array of string | ✓ | e.g. ["account_balance", "transaction_history"] |
| expires_at | ISO8601 | ✗ | Omitted for indefinite consents |
| accredited_data_recipient | string | ✗ | Present for CDR sharing |
| idempotency_key | string | ✓ |
Consumers: MOD-061 (Open Banking API gateway — enforces consent scope), MOD-050 (disclosure enforcement), MOD-012 (KYC audit trail — consent record)
bank.app.consent_revoked¶
Emitted by MOD-049 when a customer withdraws consent.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| consent_id | uuid | ✓ | References bank.app.consent_captured |
| customer_id | uuid | ✓ | |
| consent_type | string | ✓ | |
| revoked_at | ISO8601 | ✓ | |
| revocation_method | string | ✓ | APP / CDR_DASHBOARD / AGENT |
| idempotency_key | string | ✓ |
Consumers: MOD-061 (Open Banking gateway — immediately blocks data access), MOD-012 (KYC audit trail)
bank.app.disclosure_acknowledged¶
Emitted by MOD-050 when a customer acknowledges a mandatory regulatory or product disclosure within the onboarding or product-change flow.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| disclosure_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| disclosure_type | string | ✓ | FSG / PDS / RATE_CHANGE / CREDIT_CONTRACT / TERMS_AND_CONDITIONS |
| version | string | ✓ | Document version string |
| channel | string | ✓ | APP / AGENT / EMAIL |
| acknowledged_at | ISO8601 | ✓ | |
| idempotency_key | string | ✓ |
Consumers: MOD-007 (account state machine — gates activation), MOD-062 (workflow orchestration), MOD-012 (KYC audit trail)
bank.app.case_opened¶
Emitted by MOD-053 when a customer complaint or service case is opened via the app self-service flow.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| case_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| case_type | string | ✓ | COMPLAINT / SERVICE_REQUEST / DISPUTE |
| channel | string | ✓ | APP / PHONE / EMAIL |
| idempotency_key | string | ✓ |
Consumers: MOD-064 (operations work queue), MOD-062 (workflow orchestration)
bank.app.complaint_escalated¶
Emitted by MOD-053 when a case is escalated beyond first-line resolution, triggering EDR scheme obligations.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| case_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| escalation_tier | string | ✓ | TEAM_LEAD / COMPLAINTS_TEAM / EXTERNAL_EDR |
| edr_scheme | string | ✗ | AFCA / FSCL — present when escalation_tier is EXTERNAL_EDR |
| idempotency_key | string | ✓ |
Consumers: MOD-064 (operations work queue), MOD-063 (notification orchestration — EDR referral letter), MOD-058 (regulatory incident & breach notification — if systemic)
bank.app.document_uploaded¶
Emitted by MOD-073 when a customer or agent uploads a document to the vault.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| document_id | uuid | ✓ | |
| customer_id | uuid | ✓ | |
| document_type | string | ✓ | ID_DOCUMENT / BANK_STATEMENT / PAYSLIP / CONTRACT / OTHER |
| uploaded_by | string | ✓ | CUSTOMER / AGENT |
| context | string | ✓ | KYC / CREDIT_APPLICATION / COMPLAINT / GENERAL |
| idempotency_key | string | ✓ |
Consumers: MOD-009 (eIDV — triggers verification if document_type is ID_DOCUMENT and context is KYC),
MOD-027 (affordability calculator — income documents),
MOD-012 (KYC audit trail)
bank.app.card_control_changed¶
Emitted by MOD-078 on every successful card control action — freeze, unfreeze, limit
change, or channel toggle. Intra-bus on bank-app. Consumed by MOD-063 to confirm the
change to the customer via push notification within the FR-373 5 s SLA.
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | |
| schema_version | string | ✓ | |
| party_id | uuid | ✓ | |
| card_id | uuid | ✓ | |
| control_type | string | ✓ | FREEZE / UNFREEZE / LIMIT_SET / CHANNEL_TOGGLE / VIRTUAL_CARD |
| prev_state | object | ✓ | Snapshot of control state before change |
| new_state | object | ✓ | Snapshot of control state after change |
| audit_id | uuid | ✓ | References app.card_control_audit(id) |
| idempotency_key | string | ✓ |
Consumers: MOD-063 (notification orchestration — customer push confirmation)
bank.app.automation_rule_fired¶
Emitted by MOD-051 when a rule action is taken (condition passed; funds swept or notification sent). Not emitted for no-op evaluations.
Bus: bank-app · Source: bank.app · Detail-type: automation_rule_fired
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| rule_id | uuid | ✓ | |
| execution_id | uuid | ✓ | app.automation_rule_executions(execution_id) |
| party_id | uuid | ✓ | |
| rule_type | string | ✓ | |
| action_outcome | string | ✓ | EXECUTED | NOTIFICATION_ONLY | SKIPPED_INSUFFICIENT_FUNDS | SKIPPED_RULE_PAUSED |
| amount | string | ✗ | Fixed-point decimal; present when funds moved |
| currency | char(3) | ✗ | |
| mod_020_payment_id | uuid | ✗ | Present when action_outcome = EXECUTED |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (FR-324 — notify customer within 60s of rule action).
bank.app.automation_rule_failed¶
Emitted by MOD-051 when a rule evaluation or action fails with an error.
Bus: bank-app · Source: bank.app · Detail-type: automation_rule_failed
| Field | Type | Required | Notes |
|---|---|---|---|
| event_id | uuid | ✓ | |
| event_time | ISO8601 | ✓ | UTC |
| schema_version | string | ✓ | "1.0.0" |
| rule_id | uuid | ✓ | |
| execution_id | uuid | ✓ | |
| party_id | uuid | ✓ | |
| rule_type | string | ✓ | |
| failure_reason | string | ✓ | |
| action_outcome | string | ✓ | FAILED | MOD_020_DECLINED |
| idempotency_key | string | ✓ | |
| trace_id | uuid | ✓ |
Consumers: MOD-063 (fail-soft notification), MOD-076 (ops alerting).