Account PND — Post No Debit
Overview​
These commands place or remove a Post No Debit (PND) restriction on a deposit account in core banking.
While PND is active, the account cannot be debited; credits are still processed normally.
The core banking provider (BankOne, BankLingo, etc.) is resolved automatically from the account number prefix using the tenant's routing rules — no provider field is required in the request.
DepositManagement.LockAccount
ActivatePndOnAccountBpmCommand​
Places a PND restriction on an account.
Request​
{
"cmd": "ActivatePndOnAccountBpmCommand",
"data": {
"accountNumber": "0123456789",
"reason": "Suspicious transaction pattern — under investigation"
}
}
Request Fields​
| Field | Type | Required | Description |
|---|---|---|---|
accountNumber | string | Yes | The account number to restrict |
reason | string | Yes | Reason for placing PND — stored in core banking and audit log |
Response​
{
"isSuccessful": true,
"statusCode": "00",
"message": "Account '0123456789' has been placed on PND. No debit transactions will be allowed.",
"data": {
"accountNumber": "0123456789",
"isOnPND": true,
"reason": "Suspicious transaction pattern — under investigation",
"referenceId": "A3F9D2B1C4E7",
"route": "EmpireTrust"
}
}
ReleasePndFromAccountBpmCommand​
Removes an existing PND restriction and restores normal debit access.
Request​
{
"cmd": "ReleasePndFromAccountBpmCommand",
"data": {
"accountNumber": "0123456789",
"reason": "Investigation concluded — no fraud found"
}
}
Request Fields​
| Field | Type | Required | Description |
|---|---|---|---|
accountNumber | string | Yes | The account number to unblock |
reason | string | No | Reason for releasing PND (defaults to "PND released.") |
Response​
{
"isSuccessful": true,
"statusCode": "00",
"message": "PND restriction on account '0123456789' has been lifted.",
"data": {
"accountNumber": "0123456789",
"isOnPND": false,
"reason": "Investigation concluded — no fraud found",
"referenceId": "B7E2A1D3F509",
"route": "EmpireTrust"
}
}
How Provider Routing Works​
The handler calls ICoreBankingRepositoryWrapper.GetProvider(accountNumber) which matches the account prefix against the tenant's routing configuration and returns the appropriate ICoreBankingInterface implementation (BankOne, BankLingo, etc.). No provider code needs to be passed in the request.
Developer Notes (Raji)​
| Item | Detail |
|---|---|
| Command file | CB.Administration.Api/Commands/BPM/Security/AccountPndBpmCommand.cs |
| Handler | AccountPndBpmCommandHandlers |
| Provider resolution | ICoreBankingRepositoryWrapper.GetProvider(accountNumber, isFromNibssServer: false) |
| CBS call — activate | provider.AccountUnblockAsync(...) → calls CBS /freezeaccount |
| CBS call — release | provider.BlockAccountAsync(...) → calls CBS /Unfreezeaccount |
| Note on naming | ICoreBankingInterface method names are inverted in all CBS implementations. AccountUnblockAsync freezes; BlockAccountAsync unfreezes. This matches the NIBSS outward command pattern. |
| Permission | PermissionStandardCodes.DepositManagement.LockAccount |