Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| Series ref. BR-110 | Schematron ID: ibr-001-ae | Fatal (error) | cac:DiscrepancyResponse/cbc:ResponseCode |
Assert text: [ibr-001-ae]-Credit note reason code [BTAE-03] value should be from the Reasons for credit note code list.
Test: ( ( not(contains(normalize-space(.),' ')) and contains( ' DL8.61.1.A DL8.61.1.B DL8.61.1.C DL8.61.1.D DL8.61.1.E VD ',concat(' ',normalize-space(.),' ') ) ) )
Classification
Master Data / Code List.
What the Rule Is Checking
Every UAE credit note carries a reason code in BTAE-03, drawn from a closed list of six values (five DL8.61.1 sub-codes plus VD). The rule confirms the value on the invoice is one of exactly these six single-token codes and nothing else — no free text, no local abbreviation, no lowercase variant.
Why This Rule Exists
A credit note reduces a previously reported tax position, and the authority needs to know why, in a form it can aggregate across every credit note in the economy rather than parse from narrative text. VD in particular flags a note issued for reasons unrelated to the original supply's tax treatment, which changes whether a preceding invoice reference is even expected (see ibr-055-ae) — so this code does more than classify, it routes the validation that follows it.
UAE Data Example
PASSES ✓
<cac:DiscrepancyResponse>
<cbc:ResponseCode>DL8.61.1.A</cbc:ResponseCode>
</cac:DiscrepancyResponse>
FAILS ✗
<cac:DiscrepancyResponse>
<cbc:ResponseCode>Goods returned</cbc:ResponseCode>
</cac:DiscrepancyResponse>
A free-text reason such as "Goods returned" reads correctly to a person and fails validation outright, because the field is coded, not narrative — the descriptive reason belongs elsewhere on the document, not in BTAE-03.
What Your ERP / IT Team Must Ensure
- Map the credit note reason held in the ERP's return or adjustment record to one of the six DL8.61.1 sub-codes or VD — most ERPs store a free-text or internal reason code that needs an explicit lookup table, not a direct pass-through.
- Treat VD as a distinct branch in the mapping logic, since it changes whether cac:BillingReference is required on the same document (ibr-055-ae).
- Reject the transaction before transmission if no mapping exists for a given internal reason code, rather than defaulting to a placeholder value that happens to validate.
- Train AP/AR staff who key manual credit notes on the six permitted codes, since manual entry is where free text is most likely to appear.
