Skip to content

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:

penalty = notice_period_days × (annual_rate / 365) × amount

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