Notice account management¶
| ID | MOD-130 |
| System | SD01 |
| Repo | bank-core |
| Build status | Deployed |
| Deployed | Yes |
| Last commit | 2b41724 |
Purpose¶
Manages the notice period lifecycle for notice account products (PRD-021). Records notice lodgements, calculates withdrawal dates, enforces the notice gate (prevents withdrawal before the date arrives), calculates and discloses early withdrawal penalties, and auto-executes withdrawals on the notice expiry date if a standing instruction exists.
Compliance rationale¶
Notice accounts are a liquidity management tool: the bank uses the notice period to plan funding. CLQ-002 (Liquidity Risk Management Policy) requires the platform to correctly classify notice deposits as non-callable within the notice window when computing the LCR/NSFR (MOD-032). Misclassifying notice deposits as at-call would overstate short-term liquidity and could result in a regulatory breach of minimum liquidity requirements.
The early withdrawal penalty exists to deter customers from treating the notice account as at-call. Its disclosure requirement under CON-005 must be upfront and unambiguous — the module enforces this via a hard disclosure gate before any early withdrawal can proceed.
Commercial rationale¶
Notice accounts fill the gap between at-call savings (highest liquidity, lowest rate) and term deposits (lowest liquidity, highest rate). They are a common building society product and a key tool for institutions managing their funding mix toward a more stable base without locking customers into long fixed terms. Offering a compelling notice rate allows the bank to attract longer-duration savings while maintaining a predictable withdrawal schedule.
Data model¶
-- core.notice_lodgements
CREATE TABLE core.notice_lodgements (
lodgement_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
account_id UUID NOT NULL REFERENCES core.accounts(account_id),
notice_period_days INT NOT NULL,
lodged_at TIMESTAMPTZ NOT NULL,
withdrawal_date DATE NOT NULL, -- lodged_at + notice_period_days
amount NUMERIC(18,2), -- null = full balance
status TEXT NOT NULL DEFAULT 'pending'
CHECK (status IN ('pending','withdrawn','cancelled','lapsed')),
cancelled_at TIMESTAMPTZ,
penalty_amount NUMERIC(18,2),
withdrawn_at TIMESTAMPTZ,
posting_id UUID,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
Key operations¶
1. Lodge notice
Customer submits a withdrawal notice via the app or API. The module validates that the account status is active and that no other active notice exists for the same amount. It calculates withdrawal_date = CURRENT_DATE + notice_period_days and creates the lodgement record. MOD-007 transitions the account to notice_pending. MOD-063 dispatches a confirmation notification: "Your notice has been received. Funds will be available on [date]."
2. Enforce notice gate
Any withdrawal attempt against an account in notice_pending status is blocked with a clear error response. The response includes the upcoming withdrawal date and the pending lodgement details. No override path exists for the customer — early access requires the early withdrawal flow (see below).
3. Auto-release on expiry
A scheduled job runs daily. For all lodgements where withdrawal_date = today and status = pending: the withdrawal posting is executed via MOD-001, the lodgement status is updated to withdrawn, and MOD-007 transitions the account back to active (or closed if the full balance was withdrawn). MOD-063 dispatches a "Your funds are now available" notification to the customer.
4. Early withdrawal
Customer requests early access by cancelling their notice. The module calculates the penalty:
The penalty amount is displayed to the customer via the MOD-050 disclosure gate before any action is taken. The customer must explicitly acknowledge the penalty amount to proceed. On confirmation: the withdrawal and the penalty debit are posted as separate ledger entries via MOD-001. The lodgement record is updated to cancelled with the penalty amount recorded.
5. Liquidity reporting
MOD-130 provides MOD-032 (LCR/NSFR engine) with a daily snapshot of notice account balances bucketed by withdrawal date: within 30 days, 31–60 days, and 61–90 days. These buckets feed directly into the stable funding ratio calculation, ensuring notice deposits are not counted as at-call liquidity.
Requirements satisfied¶
FR-549 through FR-552.
Module dependencies¶
Depends on¶
| Module | Title | Required? | Contract | Reason |
|---|---|---|---|---|
| MOD-001 | Double-entry posting engine | Required | — | Withdrawal postings and early withdrawal penalty debits are executed via the double-entry posting engine. |
| MOD-005 | Daily accrual calculator | Required | — | Daily interest accrual uses the notice account balance as the accrual base. |
| MOD-007 | Account state machine | Required | — | Account state transitions (active, notice_pending, withdrawal_ready) are managed within the account state machine. |
| MOD-063 | Notification orchestration | Required | — | Notice confirmation, withdrawal reminders, and withdrawal-available notifications are dispatched via the notification orchestration module. |
| MOD-104 | AWS shared infrastructure bootstrap | Required | — | AWS shared infrastructure provisioned by MOD-104 (EventBridge buses, S3, KMS, Kinesis, Cognito) is required before this module can be deployed. |
| MOD-103 | Neon database platform bootstrap | Required | — | Neon database and schema provisioned by MOD-103 must exist before this module can read or write Postgres. |
Required by¶
(No modules in this wiki currently declare a dependency on this module.)
Policies satisfied¶
| Policy | Title | Mode | How |
|---|---|---|---|
| CON-005 | Fee & Pricing Transparency Policy | GATE |
Early withdrawal penalty is calculated and disclosed to the customer before any early withdrawal is processed — the penalty amount cannot be bypassed. |
| CLQ-002 | Liquidity Risk Management Policy | CALC |
Notice account balances and their withdrawal dates are reported to the liquidity engine as non-callable until the notice period expires, contributing to the stable funding ratio calculation. |
| CON-001 | Customer Fairness & Conduct Policy | AUTO |
Withdrawal is released automatically on the notice expiry date without requiring manual intervention — no customer is held beyond their contracted notice period. |
| CON-004 | Product Disclosure & Sales Practice Policy | AUTO |
Customer receives confirmation at notice lodgement, a reminder 7 days before the withdrawal date, and a notification on the day the withdrawal becomes available. |
Capabilities satisfied¶
(No capabilities mapped)
Part of SD01 — Core Banking Platform
Compiled 2026-05-22 from source/entities/modules/MOD-130.yaml