Skip to main content

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โ€‹

FieldTypeRequiredDescription
accountEncodedKeystringYesAccount number or encoded key
lockReasonstringYesReason 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โ€‹

  1. Extract Fields: Get accountEncodedKey and lockReason
  2. Account Query: Load account with related entities
  3. Existence Check: Verify account exists
  4. Duplicate Check: Verify IsOnPND is not already true
  5. PND Activation: Set IsOnPND flag to true
  6. Database Update: Persist change
  7. Notification: Send activity notification
  8. 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 CodeMessageResolution
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โ€‹

  1. Account Required: accountEncodedKey must be provided
  2. Lock Reason Required: lockReason is mandatory
  3. Account Must Exist: Account must be in system
  4. No Duplicate PND: Cannot activate PND on account already on PND
  5. Valid Identifier: Account number or encoded key accepted

Operational Rulesโ€‹

  1. Flag Set: IsOnPND boolean flag set to true
  2. Credits Allowed: Deposits and transfers in continue normally
  3. Debits Blocked: All withdrawals and transfers out are blocked
  4. Automatic Trigger: System can auto-activate PND when limits exceeded
  5. Manual Activation: Can be manually activated by authorized users
  6. Activity Logged: Activation logged with ActivatePND action
  7. Notification Sent: Activity notification published
  8. No Expiry: PND remains until explicitly released
  9. Balance Accessible: Balance inquiries still work
  10. Interest Accrual: Interest continues to accrue normally

  • 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