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

public async Task<PNDResponse> ActivatePNDAsync(
string accountEncodedKey,
string lockReason)
{
var request = new
{
commandName = "ActivatePNDOnAccountCommand",
data = new { accountEncodedKey, lockReason }
};

var json = JsonSerializer.Serialize(request);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync($"{_baseUrl}/api/bpm/cmd", content);

return JsonSerializer.Deserialize<PNDResponse>(await response.Content.ReadAsStringAsync());
}

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