Customer Master & Credit Control
E.164 WhatsApp numbers, price tiers, and credit hold enforcement.
This guide covers registering B2B buyers, managing WhatsApp phone bindings, enforcing credit hold policies, and setting price tiers in the Customer Portal (/customers).
1. Customer Directory Overview (/customers)
The Customer Directory (http://localhost:XXXX/customers) lists all approved wholesale accounts authorized to place orders via WhatsApp:
| Trading Name | WhatsApp Number | Sage Acc | Price Tier | Credit Status |
|---|---|---|---|---|
| Clerk (KwaMashu Spaza) | +27 00 000 0000 | CUST-8832 | TIER_A | Active |
| Supplier A | +27 00 000 0000 | CUST-1049 | BULK_VIP | Active |
| Mama Grace Tuckshop | +27 00 000 0000 | CUST-4521 | DEFAULT | Active |
| Zanele Fast Foods | +27 00 000 0000 | CUST-3910 | DEFAULT | Credit Hold |
2. Phone Number Format (Strict E.164 Requirement)
Meta WhatsApp Cloud API identifies incoming messages using the sender's international E.164 phone number.
Rules for Phone Numbers:
- Must begin with
+followed by the country code (+27for South Africa). - Strip the leading zero (
000 000 0000becomes+27 00 000 0000). - No spaces, hyphens, or parentheses in the stored value.
[!IMPORTANT] If a customer sends a message from a number not registered in Kholo, the order is flagged as
UNREGISTERED_CUSTOMER. A clerk can link the number to an existing account with 1 click in the dashboard.
3. Credit Control: ACTIVE vs. HOLD
Wholesale cash-flow risk is managed through the customer's credit status:
Account in good standing with positive credit balance.
- High-confidence orders (≥95%) auto-approve.
- Standard 1-click ERP sync to Sage 200 Evolution.
- Immediate warehouse pick slip dispatch.
Account overdue or credit limit exceeded in Sage ERP.
- Incoming orders flagged with bold red banner.
- "Approve & Sync to Sage" button strictly disabled.
- Requires financial clearance or manager override PIN.
Automated Credit Hold Workflow:
- When a message arrives from an account marked
HOLD, Kholo still parses and matches the items so clerks see the order value. - The order is automatically tagged with:
ORDER BLOCKED: Customer account is on CREDIT HOLD in Sage Evolution.
- The clerk cannot push the order to the warehouse floor until finance clears the balance or a manager inputs their override PIN.
4. Multi-Tier Pricing
Wholesalers often charge different rates based on order volume or customer category:
| Price Tier | Typical Usage | Discount / Rule |
|---|---|---|
DEFAULT | Standard walk-in spaza shops or low-volume traders. | Standard catalog base price. |
TIER_A | Regular, high-loyalty retail clients. | ~5% discount below base price. |
BULK_VIP | High-volume supermarket groups or distributors. | Volume price break (cost + tight markup). |
When an order is parsed, Kholo calculates unit prices based on the customer's assigned tier.
5. Bulk Customer Ingestion CSV Format
To import your customer accounts from Sage or an Excel spreadsheet:
phoneNumber,name,erpCustomerId,priceTier,creditStatus
+27 00 000 0000,"Clerk (KwaMashu Spaza)",CUST-8832,TIER_A,ACTIVE
+27 00 000 0000,"Supplier A",CUST-1049,BULK_VIP,ACTIVE
+27 00 000 0000,"Mama Grace Tuckshop",CUST-4521,DEFAULT,ACTIVE
+27 00 000 0000,"Zanele Fast Foods",CUST-3910,DEFAULT,HOLD