All Workflows

Credit Limit Review & Customer Risk Score

Utilisation scoring + ageing-bucket checks + dormancy detection — credit limit review automation in under 60 seconds per portfolio run.

Live demo Drop your credit master extract and watch Cadel score every customer, flag exceptions, and produce a committee-ready pack — in seconds.

The Problem

Mid-market finance teams run credit limit review automation on 50–500 active trade-receivable accounts every quarter — and every one of those accounts contains a combination of failure modes that a spreadsheet cannot catch consistently.

Two to three days per quarterly cycle

A controller at a mid-market manufacturer with 100 active trade receivables spends two to three working days pulling the credit master, computing utilisation percentages, buckling each account by ageing, and chasing down disputed invoice flags — all before the credit committee can meet.

Inconsistent risk-band assignments

When two analysts handle different account segments, the rubric applied to the 31–60 ageing bucket by one analyst differs silently from the rubric the other uses. The credit committee receives a mixed portfolio where the risk bands cannot be compared across rows — and auditors cannot trace the methodology.

Dormant accounts masked by zero outstanding

A customer with Rs 0 current outstanding and no payment in 210 days passes every surface-level check in a manual spreadsheet — utilisation is 0%, ageing bucket reads clean, DSO is zero. The dormancy risk goes undetected until the next order cycle, when the account is treated as a creditworthy customer.

No auditable workpaper trail

The Companies Act, 2013 (Schedule III) requires trade receivables to be disclosed by ageing in financial statements. Statutory auditors under ICAI SA 330 routinely request the underlying credit-assessment workpapers. A credit master processed in Excel carries no deterministic audit trail linking each risk-band to the specific field values that drove the assignment.

2–3 days

The per-cycle controller cost of a manual credit refresh on 100 accounts — spread across ERP extract, formula maintenance, inter-analyst alignment, and committee-pack formatting. At that cadence, a missed 90+ ageing bucket or a dormant account can sit undetected in the spreadsheet for an entire quarter, compounding the ECL provisioning error under Ind AS 109.

Why It Matters: Regulatory Context

Customer credit risk management in the Indian mid-market sits at the intersection of commercial credit policy, statutory receivables disclosure, and the expected credit loss framework. Four overlapping regulatory anchors make a documented, consistently applied rubric a compliance requirement, not just a best practice.

Ind AS 109 · Para 5.5.3 & 5.5.9

ECL staging requires documented ageing

The expected credit loss model under Ind AS 109 stages trade receivables into 12-month ECL (Stage 1), lifetime ECL with significant credit deterioration (Stage 2), and credit-impaired (Stage 3). The ageing-bucket and DSO data extracted by this workflow feed directly into that staging assessment — and the inputs must be consistently computed and documentable for the auditor.

Companies Act 2013 · Schedule III (Div I & II)

Statutory ageing disclosure in financials

Schedule III of the Companies Act, 2013 (amended 2021) requires trade receivables to be disclosed by ageing category (Outstanding for less than 6 months, 6–12 months, 1–2 years, 2–3 years, more than 3 years) in the audited financial statements. A credit refresh that cannot produce a consistent, documented ageing breakdown exposes the company to a qualified audit observation.

Ind AS 107 · Para 35A–35N

Credit risk disclosure obligations

Ind AS 107 (Financial Instruments: Disclosures) requires entities to disclose their credit risk management approach, maximum credit exposure, and any significant concentrations of credit risk. The risk-band assignments and recommended limit changes produced by this workflow are the primary inputs to that disclosure — they must be consistently applied across every reporting period.

CGST Rules 2017 · Rule 9

GSTIN validity gates credit extension

Under Rule 9 of the CGST Rules, 2017, a supplier’s registration must be confirmed before credit is extended or renewed. The workflow validates each customer GSTIN against the 15-character alphanumeric structure, quarantining rows with missing or malformed identifiers — preventing credit from being held open against an unverified counterparty.

For US entities, the allowance for credit losses under ASC 326-20 (CECL) similarly requires a documented, forward-looking credit risk assessment. The utilisation, ageing, and track-record outputs produced by this workflow translate directly into the CECL pool segmentation and loss-rate estimate the CFO signs off on each period.

What This Workflow Automates

Seven deterministic passes from credit master upload to committee-ready risk portfolio — in under 60 seconds per run. Every pass produces a structured output with a discrete validation-results array the controller and auditor can trace row by row.

01

Ingest and parse the credit master extract

Cadel reads the uploaded credit_master.xlsx file, identifies the Customer Credit Master sheet, and maps each column — customer name, GSTIN, sanctioned limit, current outstanding, highest ageing bucket, DSO, last payment date, track-record score (0–100), and disputed invoice flag — to the internal schema without requiring a fixed column order or template.

02

Validate GSTIN structure

Each customer GSTIN is checked against the 15-character alphanumeric format prescribed under Rule 9 of the CGST Rules, 2017. Rows with a missing or malformed GSTIN are quarantined in the exception queue and marked “GSTIN unverified” in the export; they are blocked from the final credit-committee pack until corrected.

03

Compute credit utilisation percentage

For every customer row, the workflow calculates utilisation % = (current_outstanding / sanctioned_limit) × 100. Any result above 90% triggers a warning flag; any result above 100% fires the “Utilisation Within Limit” validation as FAIL, halting limit approval for that account pending collections action.

04

Evaluate ageing bucket and payment recency

The highest ageing bucket is checked: a value of “90+” fires “Aging Within Terms” as FAIL and routes the record to the escalation queue. The last payment date is compared to today: a gap exceeding 120 days fires “Recent Payment Activity” as WARNING, and a gap exceeding 180 days flags the account as dormant.

05

Score track record and disputed invoices

A track-record score below 50 fires “Track Record Threshold” as WARNING and upgrades the assigned risk band by one level (e.g., Low becomes Medium). A disputed invoice flag set to true is combined with the ageing and DSO inputs to weight the final composite score and trigger a “No Active Dispute” WARNING.

06

Assign risk band and recommended limit

Using all validated inputs — utilisation, ageing bucket, DSO, track-record score, payment recency, and dispute flag — Cadel assigns one of four bands: Low, Medium, High, or Critical. The workflow then generates a recommended revised limit: retain, increase, reduce, suspend, or cut to zero (as in the dormant-account case where 210+ days of inactivity triggers a zero-limit recommendation).

07

Export the credit-committee pack

All scored records, risk-band badges, exception flags, and recommended limits are compiled into a structured Excel credit-committee pack with a separate exception tab for FAIL and WARNING items. Each row includes the validation result and plain-language comment for every check, so the credit committee and the statutory auditor can trace every decision under ICAI SA 230 documentation standards.

Edge Cases We Simulate

A battery of synthetic test scenarios that exercise every failure mode we have seen in real-world credit master data. Each scenario produces a deterministic outcome an auditor or controller can verify in seconds.

Healthy Customer — Low Risk

What’s in the dataAcme Forge Industries Ltd shows 56% utilisation (Rs 2,800,000 outstanding against Rs 5,000,000 sanctioned), 0–30 ageing, DSO of 42 days, and a track-record score of 86 — no exception flags.
Expected outcomeAll four validations pass. Risk band assigned as Low; sanctioned limit retained or modestly increased; no escalation to the exception queue.

Over-Utilised Account

What’s wrongOutstanding of Rs 2,160,000 exceeds the sanctioned limit of Rs 2,000,000 (108% utilisation). Highest ageing bucket: 31–60 days. DSO: 68 days. Track-record score: 64.
Expected outcome“Utilisation Within Limit” fires as FAIL; risk band escalated to High; workflow recommends immediate collections action and a credit-hold review before new orders are released.

Severely Overdue Account

What’s wrongAcme Corp Distributors LLP carries a 90+ ageing bucket, DSO of 134 days, last payment 145 days ago, track-record score of 32, and a disputed invoice flag — four simultaneous exception triggers.
Expected outcome“Aging Within Terms” fires FAIL; “Track Record Threshold” fires WARNING; risk band set to Critical; limit suspension recommended pending dispute resolution.

Dormant Customer — Zero Outstanding

What’s wrongNo payment activity for 210+ days; current outstanding is zero and DSO is zero, masking the dormancy risk. Track-record score is 50 and no disputed invoices — surface metrics look acceptable.
Expected outcome“Recent Payment Activity” fires WARNING (last payment exceeds 120-day threshold); account flagged as dormant; workflow recommends reducing sanctioned limit to zero until relationship is formally reactivated.

Track-Record Score Below Threshold

What’s wrongA customer’s payment track-record score falls below 50 — indicating persistent late payments or partial settlements — even when current utilisation and ageing buckets appear within acceptable ranges.
Expected outcome“Track Record Threshold” fires WARNING; risk band upgraded by one level (e.g., Low becomes Medium); record flagged for manual review before the next order cycle.

Invalid or Missing GSTIN

What’s wrongA row in the credit master contains a GSTIN that does not conform to the 15-character alphanumeric structure prescribed under Rule 9 of the CGST Rules, 2017, or the GSTIN field is blank entirely.
Expected outcomeGSTIN structural validation fires; the row is quarantined in the exception queue; the export marks the record as “GSTIN unverified” and blocks it from the final credit-committee pack until corrected.

Sample Files & Results

Four synthetic customer scenarios from the seeded demo file — each one engineered to exercise a different exception class. The first passes cleanly; the remaining three each trigger one or more specific validation failures that map directly to the edge cases above.

Credit Master · Low risk
All Checks Pass

Acme Forge Industries Ltd

GSTIN 27ACMEA1234B1Z5 · Maharashtra · Q1 2026 refresh
Utilisation56%₹28L of ₹50L
DSO42 d0–30 aging
Track Score86above threshold

All four deterministic checks pass — “Utilisation Within Limit”, “Recent Payment Activity”, “Track Record Threshold”, and “Entries List Non-Empty”. Risk band: Low. Sanctioned limit recommended to be retained.

Credit Master · Over-utilised
FAIL: Utilisation

Acme Trade Solutions Pvt Ltd

GSTIN 29ACMEB5678C1Z3 · Karnataka · 108% utilisation
Utilisation108%₹21.6L of ₹20L
DSO68 d31–60 aging
Track Score64above threshold

“Utilisation Within Limit” fires as FAIL. Risk band: High. Workflow recommends credit hold and immediate collections action before new orders are released against this account.

Credit Master · Critical risk
Critical

Acme Corp Distributors LLP

GSTIN 07ACMEC9012D1Z1 · Delhi · 4 simultaneous exception triggers
Aging90+DSO 134 days
Track Score32below 50
Last Payment145 ddisputed flag

“Aging Within Terms” fires FAIL; “Track Record Threshold” fires WARNING; “No Active Dispute” fires WARNING. Risk band: Critical. Limit suspension recommended pending dispute resolution.

Credit Master · Dormant
Dormant — Zero Limit

Acme Corp Agri Exports Ltd

GSTIN 24ACMED3456E1Z9 · Gujarat · 210+ days payment silence
Outstanding₹0surface looks clean
Last Payment210 dabove 120-day gate
DSO0masks dormancy

“Recent Payment Activity” fires WARNING. This is the most operationally significant exception class — zero outstanding and zero DSO pass every surface-level check in a manual spreadsheet. Recommendation: cut sanctioned limit to zero until the relationship is formally reactivated.

Why Automation Wins Here

A mid-market AR controller running a quarterly credit refresh on 100 accounts spends two to three working days on assembly, formula maintenance, and committee-pack formatting. Cadel reduces that to under 60 seconds of automated processing plus the time required to review the exception queue — typically 30 to 90 minutes depending on the number of flagged accounts.

2–3 days → <60 s
Per-cycle controller time for the full credit refresh on 100 accounts
100%
Customer rows scored with an identical, documented rubric — zero inter-analyst variance
4
Distinct exception classes detected deterministically: over-utilisation, 90+ ageing, dormancy, sub-threshold track record
0
Dormant accounts missed — zero-outstanding masking is explicitly tested on every run

Auditable, every refresh cycle

The Excel credit-committee pack produced at the end of each run includes, for every customer row: extracted fields, computed utilisation percentage, assigned risk band, recommended revised limit, and the full validation-result set with pass/fail/warning status and plain-language comments. This satisfies the documentation standard expected by statutory auditors under ICAI SA 230 when they review the ECL provisioning inputs under Ind AS 109.

Dormancy detection fills the manual blind spot

The “Recent Payment Activity” validation is the only deterministic gate that catches accounts with zero outstanding and 210+ days of payment silence. In the Acme Corp Agri Exports scenario, the 210-day gap triggered the WARNING and generated an explicit recommendation to cut the sanctioned limit to zero — preventing the account from being treated as creditworthy in the next order cycle.

Consistent rubric eliminates analyst variance

The same rubric is applied identically across every row on every run, eliminating the inter-analyst variability that causes inconsistent risk-band assignments when different team members handle different account segments. Same inputs produce the same risk band, the same validation result, and the same recommended limit — every time, across every quarterly cycle.

Frequently Asked Questions

The questions AR controllers and finance leads ask most often before deploying credit limit review automation.

What scoring rubric does the workflow use to assign Low / Medium / High / Critical risk bands?

The rubric combines four deterministic signals: credit utilisation percentage, highest ageing bucket (0–30 / 31–60 / 61–90 / 90+), days since last payment, and the payment track-record score (0–100). Each signal maps to a severity tier — for example, utilisation above 90% or an ageing bucket of 90+ independently triggers at least a High rating, while a track-record score below 50 triggers a mandatory review regardless of utilisation. The rubric is fully visible in the exported credit-committee pack so your credit manager can justify every decision to auditors.

Does this workflow integrate with Tally Prime, NetSuite, or SAP B1 to pull outstanding balances automatically?

The current intake is an Excel upload of the customer credit master extract, which can be exported from Tally Prime (Sundry Debtors ledger summary), NetSuite (A/R Aging saved search), SAP B1 (FCV1 customer balance report), or any ERP that produces a tabular file with the required columns. Direct API connectors are on the product roadmap; the Excel pathway ensures mid-market teams with no IT team can run the workflow today without ERP customisation.

Which accounting or regulatory standards does this workflow help satisfy?

For Indian entities, the workflow supports the credit-risk disclosure requirements under Ind AS 107 (Financial Instruments: Disclosures) and the expected credit loss (ECL) staging assessment under Ind AS 109, where ageing-bucket and DSO data feed directly into the 12-month versus lifetime ECL decision. For companies subject to the Companies Act, 2013, periodic credit reviews are a standard internal-control expectation under Section 143 (auditor’s duties) and are commonly tested by statutory auditors under SA 330. US entities can use the output as supporting documentation for the allowance for credit losses under ASC 326-20 (CECL).

What is the audit trail for credit-limit decisions made using this workflow?

Every run is timestamped and stores the raw input file, the extracted field values per customer row, each validation result with its pass/fail/warning status and the computed reason, and the final risk-band assignment alongside the recommended limit. The exported credit-committee pack is a point-in-time PDF/Excel snapshot that can be attached directly to board or audit-committee minutes. No manual overrides are possible without creating a new dated run, preserving the full history for internal or statutory audit review under ICAI SA 230.

Can the workflow handle multi-entity or multi-currency customer portfolios?

Multi-entity support is available by submitting separate credit master files tagged with a legal-entity identifier in the period label field; the inbox view aggregates results across entities with consistent risk-band logic. For multi-currency portfolios, all monetary fields (sanctioned limit, current outstanding) should be converted to a functional currency before upload, consistent with Ind AS 21 (The Effects of Changes in Foreign Exchange Rates) or ASC 830 for US GAAP reporters; the workflow applies the scoring rubric on the converted amounts.

How does the workflow handle customers with zero outstanding but inactive payment history?

A zero current outstanding does not suppress the dormancy check. The “Recent Payment Activity” validation independently tests whether the last payment date falls within 120 days, and the workflow flags any customer with 120+ days of inactivity as a WARNING regardless of utilisation percentage. Customers with 180+ days of no payment activity are categorised as dormant and receive a recommendation to reduce the sanctioned limit to zero until the commercial relationship is formally reactivated — preventing inadvertent credit exposure when orders resume.

How does this compare to IFRS 9 expected credit loss frameworks?

The workflow’s ageing-bucket segmentation (0–30, 31–60, 61–90, 90+) maps directly onto the three-stage ECL model under both Ind AS 109 and IFRS 9. Stage 1 (12-month ECL) aligns with low-ageing, high-track-record customers; Stage 2 (lifetime ECL, significant credit deterioration) aligns with the 61–90 and sub-50 track-record cohort; Stage 3 (credit-impaired) aligns with 90+ ageing or disputed-invoice Critical ratings. The outputs are designed to feed directly into a simplified ECL matrix approach acceptable under IFRS 9 Para 5.5.15 for entities using the practical expedient for trade receivables.

Can the workflow detect dormant accounts masked by zero outstanding?

Yes — this is the most operationally significant exception class. A customer with Rs 0 outstanding and no payment in 210+ days passes every surface-level check in a manual spreadsheet: utilisation is 0%, ageing bucket reads clean, DSO is zero. The “Recent Payment Activity” validation compares last_payment_date to a rolling 120-day threshold and fires a WARNING regardless of utilisation, generating an explicit recommendation to cut the sanctioned credit limit to zero until the relationship is formally reactivated. This prevents the account from being treated as a creditworthy customer when orders resume.