Commission Model
This is the aggregator-only cascade config, not a vendor-callable API
The routes and model on this page (/commission/aggregator/vendor, /commission/aggregator/merchant-default, /commission/effective, /commission/:id, in paymentSystem/src/modules/setups/commissions/commission.routes.js) are gated checkRole("aggregator") — a merchant or vendor credential can't call any of them. This page describes the concept (how the effective rate is resolved) for background; if you're a vendor looking to manage your own merchants' rates, that's a different, vendor-callable slab model — see Partner API → Commission.
Config Cascade
For every transaction the platform resolves the applicable commission config in three steps:
- Merchant-specific — a config created with
merchantIdmatching the transacting merchant - Vendor default — a config created with
isDefault: truefor the vendor - DISTRIBUTOR fallback — the platform's base rate for the
txnType
The first match wins.
txnType Values
| txnType | Applies to |
|---|---|
REGISTRATION | DMT remitter registration fee |
VALIDATION | DMT account verification (NSDL penny-drop) |
TRANSFER | IMPS/NEFT fund transfer |
NONE | No charge for this operation |
DMT Fee Flows
Registration (txnType: REGISTRATION)
- Only the PLATFORM FIXED portion is debited from the wallet.
- Bank/GST charges are absorbed into the platform's GL share.
Validation (txnType: VALIDATION)
- ALL FIXED charges are debited (bank fee + platform fee).
- GST is inclusive in the platform fee.
GL Entries
DR Merchant Wallet 200.00 (transfer amount)
DR Merchant Wallet 5.00 (platform fee)
CR Platform GL 15.00 (bank fee + platform fee + GST)
CR Beneficiary Account 190.00
Reversal mirrors these entries with DEBIT↔CREDIT swapped using synthetic transaction IDs (DMT-REG-{refId} / DMT-VAL-{refId}).
Config Example
{
"aggregatorId": "fc84ec36-f74f-4eee-9c46-3b1111fd88c1",
"vendorId": "f0195939-0e56-4988-9fd4-5f797322b4a7",
"paymentMethod": "DMT",
"provider": "NSDL",
"txnType": "VALIDATION",
"chargeType": "FIXED",
"chargeValue": 5,
"isDefault": true
}