Activate PND (Post No Debit)
Activate Post No Debit restriction on a deposit account to block all debit transactions while allowing credits to continue.
Overviewโ
The ActivatePNDOnAccountCommand places a Post No Debit (PND) restriction on a deposit account. Unlike a full account lock, PND allows deposits/credits to continue while blocking all withdrawals, transfers out, and debits. This is commonly used for accounts that have exceeded limits, have regulatory flags, or require debit restrictions without completely freezing the account.
Key Capabilitiesโ
- Selective Restriction: Blocks debits only, allows credits
- Regulatory Compliance: Standard banking restriction mechanism
- Automatic Triggers: Can be auto-activated when limits exceeded
- Audit Trail: Records PND reason and activation user
- Reversible: Can be removed via ReleasePNDFromDepositAccountCommand
- Balance Growth: Account can still receive deposits
API Endpointโ
POST /api/bpm/cmd
Headersโ
Content-Type: application/json
Authorization: Bearer {access_token}
X-Tenant-ID: {tenant_id}
Request Structureโ
Command Payloadโ
{
"commandName": "ActivatePNDOnAccountCommand",
"data": {
"accountEncodedKey": "string",
"lockReason": "string"
}
}
Request Fieldsโ
| Field | Type | Required | Description |
|---|---|---|---|
accountEncodedKey | string | Yes | Account number or encoded key |
lockReason | string | Yes | Reason for PND activation |
Response Structureโ
Success Responseโ
{
"isSuccessful": true,
"message": "The deposit account has been placed on PND successfully. You cannot carry out any debit transaction on the account.",
"statusCode": "00"
}
Error Responseโ
{
"isSuccessful": false,
"message": "The deposit account is already on PND (POST NO DEBIT).",
"statusCode": "INVALID_REQUEST"
}
Sample Requestsโ
1. PND for Daily Limit Exceededโ
{
"commandName": "ActivatePNDOnAccountCommand",
"data": {
"accountEncodedKey": "ACC001234567",
"lockReason": "Daily withdrawal limit exceeded - PND activated automatically"
}
}
2. PND for Suspicious Activityโ
{
"commandName": "ActivatePNDOnAccountCommand",
"data": {
"accountEncodedKey": "SAV987654321",
"lockReason": "Multiple failed transaction attempts detected - Security measure"
}
}
3. PND for Regulatory Holdโ
{
"commandName": "ActivatePNDOnAccountCommand",
"data": {
"accountEncodedKey": "8A3F2D1E9B5C4F7A6E8D2C1B3A9F5E7D",
"lockReason": "AML review in progress - Debits restricted pending clearance"
}
}
Business Logicโ
Processing Workflowโ
Validation Stepsโ
- Extract Fields: Get accountEncodedKey and lockReason
- Account Query: Load account with related entities
- Existence Check: Verify account exists
- Duplicate Check: Verify IsOnPND is not already true
- PND Activation: Set IsOnPND flag to true
- Database Update: Persist change
- Notification: Send activity notification
- Success Response: Return confirmation with warning message
Impact of PNDโ
Allowed Operationsโ
- รขลโฆ Deposits from all channels
- รขลโฆ Transfers into the account
- รขลโฆ Interest credits
- รขลโฆ Salary credits
- รขลโฆ Balance inquiries
Blocked Operationsโ
- รขยล Withdrawals (cash, ATM, teller)
- รขยล Transfers out of the account
- รขยล Bill payments from account
- รขยล Standing orders (debits)
- รขยล Card transactions (debit)
- รขยล Check payments
Error Responsesโ
| Error Code | Message | Resolution |
|---|---|---|
Client_Not_Found | "The deposit account does not exist." | Verify account identifier |
INVALID_REQUEST | "Account already on PND" | Check IsOnPND status first |
Code Examplesโ
C# Implementationโ
Code Removed
Implementation details removed for security.
Contact support for implementation guidance.
JavaScript Implementationโ
async activatePND(accountEncodedKey, lockReason) {
const request = {
commandName: 'ActivatePNDOnAccountCommand',
data: { accountEncodedKey, lockReason }
};
const response = await fetch(`${this.baseUrl}/api/bpm/cmd`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.accessToken}`,
'X-Tenant-ID': this.tenantId
},
body: JSON.stringify(request)
});
return await response.json();
}
Python Implementationโ
def activate_pnd(self, account_encoded_key: str, lock_reason: str) -> PNDResponse:
request_data = {
'commandName': 'ActivatePNDOnAccountCommand',
'data': {
'accountEncodedKey': account_encoded_key,
'lockReason': lock_reason
}
}
response = requests.post(
f'{self.base_url}/api/bpm/cmd',
headers=self.headers,
json=request_data
)
result = response.json()
return PNDResponse(
is_successful=result.get('isSuccessful', False),
message=result.get('message', ''),
status_code=result.get('statusCode', '')
)
Business Rulesโ
Validation Rulesโ
- Account Required: accountEncodedKey must be provided
- Lock Reason Required: lockReason is mandatory
- Account Must Exist: Account must be in system
- No Duplicate PND: Cannot activate PND on account already on PND
- Valid Identifier: Account number or encoded key accepted
Operational Rulesโ
- Flag Set: IsOnPND boolean flag set to true
- Credits Allowed: Deposits and transfers in continue normally
- Debits Blocked: All withdrawals and transfers out are blocked
- Automatic Trigger: System can auto-activate PND when limits exceeded
- Manual Activation: Can be manually activated by authorized users
- Activity Logged: Activation logged with ActivatePND action
- Notification Sent: Activity notification published
- No Expiry: PND remains until explicitly released
- Balance Accessible: Balance inquiries still work
- Interest Accrual: Interest continues to accrue normally
Related Operationsโ
- ReleasePNDFromDepositAccountCommand: Remove PND restriction
- LockDepositAccountCommand: Full account lock (blocks all transactions)
- InitiateWithdrawalCommand: Auto-activates PND when limits exceeded
Supportโ
For technical assistance: api-support@banklingo.com