Rule at a Glance
| ID | Severity | Context (XPath) |
|---|---|---|
| BR-30 | Fatal (error) | ubl:Invoice/cac:InvoiceLine/cac:InvoicePeriod |
Schematron ID: ibr-030 | Fields: IBT-134 (Invoice line period start date), IBT-135 (Invoice line period end date), cbc:StartDate / cbc:EndDate |
||
Classification
Transaction Data — BR-30 is the line-level counterpart to BR-29, which applies the same temporal constraint at document level. Where BR-29 governs the overall invoicing period for the invoice (IBT-073, IBT-074), BR-30 governs the invoicing period declared on each individual invoice line (IBT-134, IBT-135). An invoice with multiple lines can have each line carry its own period; each such line period must independently satisfy this rule.
What the Rule Is Checking
The test mirrors BR-29 exactly, applied one level down: if both cbc:EndDate and cbc:StartDate are present within an InvoiceLine/InvoicePeriod element, the end date must be equal to or later than the start date. Where a line contains no period data, or only a start date, or only an end date, BR-30 does not trigger. The rule is conditional on the presence of both fields simultaneously.
Dates at line level follow the same ISO 8601 format requirement as at document level (YYYY-MM-DD). The comparison is calendar-date-only — a same-day period where StartDate equals EndDate is valid and represents a single day of supply.
Why This Rule Exists
Line-level period data matters where a single invoice covers supplies made across different periods — a common scenario for businesses billing a combination of monthly services and project milestones on the same invoice. Each line can carry its own start and end date to identify precisely when that component of the supply was made. The VAT tax point for each line may then be assessed against that line's period, not the document-level period. A logically incoherent period (end before start) cannot be used for tax point determination and renders the line's period data unreliable.
The rule also closes a mapping gap that arises in ERP systems where the document-level period is correctly mapped but line-level period fields are populated separately — often by a different module or a different extraction sequence. BR-29 passing at document level gives no guarantee that BR-30 will pass at line level.
UAE Data Example
PASSES ✓: Line 1: StartDate = 2027-01-01, EndDate = 2027-01-31. A one-month consulting retainer line. End date is later than start date; rule passes.
PASSES ✓: Line 2: no InvoicePeriod element. A product line with no period data attached. BR-30 does not apply to this line.
PASSES ✓: Line 3: StartDate = 2027-02-15, EndDate = 2027-02-15. A single-day professional service. End equals start; rule passes.
FAILS ✗: Line 1: StartDate = 2027-03-31, EndDate = 2027-03-01. End date precedes start date by 30 days. Fatal error — the invoice will not clear Corner 2 validation, regardless of whether the document-level period (BR-29) is correct.
What Your ERP / IT Team Must Ensure
- Test the line-level period extraction separately from the document-level period extraction. The two come from different parts of the UBL structure and may be populated by different ERP modules or transformation steps.
- For invoices that mix product lines (no period) with service lines (with period), confirm that only lines with genuine period data populate IBT-134 and IBT-135. Lines where the period fields are left empty should omit the InvoicePeriod element entirely rather than passing null or default dates.
- Where a billing system generates the line period retrospectively — for example, populating the previous calendar month as the service period on an invoice raised at the start of the current month — validate that the year component is handled correctly at year boundary (December to January transitions).
- Run validation against the full schematron, not just the document-level rules. BR-29 and BR-30 are independent checks; a test suite that validates only document-level structure will not catch line-level period errors.
- The companion rule BR-29 (ibr-029) applies the same constraint at document level. Where both document-level and line-level periods are used, both rules must pass independently.
Related Rules
BR-29 (ibr-029) — The same temporal constraint at document level, governing IBT-073 (start) and IBT-074 (end) in the document-level InvoicePeriod group. IBR-098 constrains the InvoicePeriod group at line level to occur at most once per invoice line.
