Rule reference

PEPPOL-EN16931-R110 A line carries an invoice line period (BG-26) that must not begin before the invoicing period begins: the line says 2026-06-01 and the document's invoicing period (BG-14) says 2026-07-01

Line 1 carries an invoice line period (BG-26) that must not begin before the invoicing period begins: the line says 2026-06-01 and the document's invoicing period (BG-14) says 2026-07-01. Peppol requires every line period to fall within the document period. A line period starting before the document period claims for time outside the window the invoice declares, and the buyer's accrual for the earlier period has already been closed against a different invoice. Core EN 16931 constrains each period internally (BR-29, BR-30) but never relates the two, so this is a genuine tightening and one that catches a real class of double billing. This is a Peppol BIS Billing 3.0 profile rule: it applies because profile is "peppol-bis-3". It does not apply to the en16931, xrechnung-ubl or xrechnung-cii profiles, whose validators will accept the same document.

This rule is implemented and its error payload below is real, but the long-form write-up — normative text, worked example, divergence note — is not written yet. Everything the library knows about this rule is on this page. Ask and we will prioritise it.

Business term
BT-134 / BT-73
Severity
fatal

What the library returns

The exact object in result.errors when this rule fires. Generated by running @attestwire/en16931, not transcribed:

TeachingError
{
  "rule": "PEPPOL-EN16931-R110",
  "field": [
    "BT-134",
    "BT-73"
  ],
  "severity": "fatal",
  "message": "Line 1 carries an invoice line period (BG-26) that must not begin before the invoicing period begins: the line says 2026-06-01 and the document's invoicing period (BG-14) says 2026-07-01. Peppol requires every line period to fall within the document period. A line period starting before the document period claims for time outside the window the invoice declares, and the buyer's accrual for the earlier period has already been closed against a different invoice. Core EN 16931 constrains each period internally (BR-29, BR-30) but never relates the two, so this is a genuine tightening and one that catches a real class of double billing. This is a Peppol BIS Billing 3.0 profile rule: it applies because profile is \"peppol-bis-3\". It does not apply to the en16931, xrechnung-ubl or xrechnung-cii profiles, whose validators will accept the same document.",
  "fix": "Either move lines[0].period.startDate inside the document period, or widen invoicingPeriod.startDate to cover it. If the line genuinely belongs to another period, it belongs on another invoice.",
  "example": "\"invoicingPeriod\": { \"startDate\": \"2026-07-01\", \"endDate\": \"2026-07-31\" }, \"lines\": [{ \"period\": { \"startDate\": \"2026-07-05\", \"endDate\": \"2026-07-20\" } }]",
  "xpath": "/ubl:Invoice/cac:InvoiceLine[1]/cac:InvoicePeriod/cbc:StartDate",
  "docsUrl": "https://attestwire.com/rules/PEPPOL-EN16931-R110"
}

xpath locates the element in the generated UBL document, which is where a KoSIT or Peppol validator will report the same problem.

A passing value

the shape this field expects
"invoicingPeriod": { "startDate": "2026-07-01", "endDate": "2026-07-31" }, "lines": [{ "period": { "startDate": "2026-07-05", "endDate": "2026-07-20" } }]

The fix

Either move lines[0].period.startDate inside the document period, or widen invoicingPeriod.startDate to cover it. If the line genuinely belongs to another period, it belongs on another invoice.

Arrived from a stack trace? The docsUrl on every error links straight here. Something wrong on this page — tell us.