How the CBS asks each bureau for enquiry alerts, and how the bureau's answer is read into our alerts (customer,
loan type, amount, enquiry date …) — no code change needed.
In SIMULATOR mode the built-in test bureau answers in the shape of the seeded generic mapping. When moving to the
bureau's UAT / PRODUCTION, change the paths below to the bureau's own API specification and check them with Test
Response.
}
@if (loading) {
Loading…
}
@if (endpoint && !loading) {
@if (tab === 'response') {
Bureau response → CBS alert
"alerts", "errorCode" and "errorMessage" are read from the whole response; every other field from each
alert
#
Bureau response JSON path
CBS alert field
Transform
Default
@for (r of responseRows; track $index; let i = $index) {
For dates the transform names the format the bureau sends (e.g. Date ddMMyyyy). The customer is matched by
PAN, then Aadhaar (with date of birth or name), then our customer reference.
@for (f of resultFieldList; track f.key) {
{{ f.key }}— {{ f.label }}
}
}
@if (tab === 'request') {
CBS value → bureau request
Paths like criteria.fromDate build nested JSON; [0] builds arrays
#
CBS value
Bureau JSON path
Transform
Fixed / default value
Mandatory
@for (r of requestRows; track $index; let i = $index) {
{{ i + 1 }}
}
A mandatory value that is empty stops the fetch before the bureau is called.
}
@if (tab === 'endpoint') {
Endpoint
Placeholders like {{ '{{' }}bureau.memberCode{{ '}}' }} or
{{ '{{' }}fetch.reference{{ '}}' }} are filled in. Authentication headers are added
automatically.
@if (jsonErrors.headers) {
{{ jsonErrors.headers }}
}
Constant parts of the request; request mappings are written into it.
@if (jsonErrors.body) {
{{ jsonErrors.body }}
}
}
@if (tab === 'test') {
Test response
reads a bureau answer through the saved response mapping and matches customers — nothing is saved
@if (testResult) {
@if (testResult.errorCode) {
Bureau error {{ testResult.errorCode }}: {{ testResult.errorMessage }}
}
@if (!testResult.alertListFound) {
No alert list was found at the path mapped to "alerts". Check that row of the response mapping.
}
{{ testResult.count }} alert(s) read
@if (testResult.items?.length) {
Alert id
Customer (bureau)
PAN
Date
Loan type
Amount
Match
@for (it of testResult.items; track $index) {
{{ it.alertRef }}
{{ it.customerName }}
{{ it.pan || it.aadhaar || it.customerRef }}
{{ it.enquiryDate }}
{{ it.loanType }}
{{ it.amount | number: '1.0-0' }}
@if (it.ownBank) {
Own bank — skipped
} @else if (it.clientId) {
{{ matchLabels[it.matchType] }} {{ it.clientName }}
} @else {
Not matched
}
}
}
}
}
@if (tab === 'preview') {
Preview builds the request from the saved mapping — nothing is sent
Empty = the bureau's look-back window up to today.