Status: Design notes — not yet implemented in database
DPD-based escalation with multi-channel routing:
| DPD | Risk | SMS Template | Email Template | Channel | Promo |
|---|---|---|---|---|---|
| 180 | E | SMS_COLLECTIONS_LEGAL | EMAIL_NCA_S129 | N | |
| 150 | E | SMS_COLLECTIONS_LEGAL | EMAIL_NCA_S129 | N | |
| 120 | E | SMS_COLLECTIONS_LEGAL | EMAIL_COLLECTIONS_LEGAL_WARNING | N | |
| 90 | D | SMS_COLLECTIONS_LEGAL | EMAIL_COLLECTIONS_LEGAL_WARNING | N | |
| 60 | D | SMS_COLLECTIONS_URGENT | EMAIL_COLLECTIONS_ARREARS | SMS | N |
| 30 | C | SMS_COLLECTIONS_OVERDUE | EMAIL_COLLECTIONS_ARREARS | SMS | N |
| 0 | A | SMS_COLLECTIONS_GENTLE | EMAIL_COLLECTIONS_GENTLE | Y |
The workflow:
compute_features)$sms_template_code$ to know which template to senddata_test_credit_template$feature_name$ placeholders using resolve_text$preferred_channel$| Workflow | Node | SMS Code |
|---|---|---|
| ALERT | SMS | (default) |
| FORM_LOGIN | SMS | sms_discord |
| FORM_TLC_STEP1 | SMS | sms_config |
| MONGO_TEST | SMS | sms_test_workfloweditor |
| SCHEDULER | SMS | sms_discord |
| UDEC_RSVP | SMS | sms_config |
| UM_OTP | SMS | sms_otp |
| WORKFLOW_TEST | SMS | sms1 |
| Workflow | Purpose |
|---|---|
| WORKFLOW_EDIT_SMS | Form-based SMS template editor |
| WORKFLOW_TEST | SMS test with sms1 node |
| TEST_MESSAGE | Scheduler → sub-workflow → service |
| SEND_CAMPAIGN_MESSAGES_NOW | GUI → CALC (send) → Report |
| CREATE_CAMPAIGN_MESSAGE | GUI → CALC (create) → CALC (populate) → Report |
| CAMPAIGN_POOL_SELECTION | Active — pool selection for campaigns |
Esendex, Esoft, MT2, MT2Utf, SmsPortal, Virtual, Connect
| TemplateCode | Channel | Category | Purpose |
|---|---|---|---|
| SMS_COLLECTIONS_GENTLE | SMS | collections | Pre-due/0 DPD friendly reminder |
| SMS_COLLECTIONS_OVERDUE | SMS | collections | 30+ DPD overdue notice |
| SMS_COLLECTIONS_URGENT | SMS | collections | 60+ DPD urgent notice |
| SMS_COLLECTIONS_LEGAL | SMS | collections | 90+ DPD legal handover warning |
| SMS_PROMOTION | SMS | promotion | Promo offer (good-standing only) |
| EMAIL_COLLECTIONS_GENTLE | collections | Pre-due email reminder | |
| EMAIL_COLLECTIONS_ARREARS | collections | 30+ DPD full account detail | |
| EMAIL_COLLECTIONS_LEGAL_WARNING | collections | Final notice before legal | |
| EMAIL_NCA_S129 | legal | Section 129 NCA notice | |
| EMAIL_WELCOME | onboarding | New account welcome | |
| EMAIL_STATEMENT | statement | Monthly statement | |
| EMAIL_PROMOTION | promotion | Promo email with account status | |
| EMAIL_RISK_REPORT | reporting | Full risk summary | |
| WA_COLLECTIONS_REMINDER | collections | Friendly WhatsApp reminder | |
| WA_COLLECTIONS_OVERDUE | collections | Overdue with payment link | |
| SCRIPT_COLLECTIONS_CALL | Script | collections | Agent call script with account context |
Templates use $feature_name$ merge fields resolved from
computed features (bureau score, DPD, arrears, risk band, etc.)
Business constants for template resolution:
company_name, company_phone, company_emailpayment_url_base, payment_bank_name, payment_bank_accountcollections_escalation_dpd_30/60/90/120 — queue namescollections_legal_threshold_amount (R5,000)collections_legal_threshold_days (120)collections_grace_days (7)call_centre_hours (Mon-Fri 08:00-17:00, Sat 08:00-13:00)Pre-rendered SMS output with resolved merge fields. Example:
Hi Kabelo, this is a friendly reminder that your HomeChoice
payment of R14501.08 is due on 2026-03-22. Pay online:
https://pay.homechoice.co.za/1000000008. Queries: 0861 999 635.
Generated by ObjFeatureRender module.
Production-scale SMS strategy decisions — the decision tree
output mapping each customer to their SMS/Email template
based on DPD and risk band.
| Table | Rows | Purpose |
|---|---|---|
| data_test_credit_person | 50 | Test customer data |
| feature_creditscore_test | 50 | Test credit features |
| feature_collections_features_test | 238,883 | Production features |
| data_handover | 238,883 | Collections handover data |