Account
English

PEPPOL-EN16931-R111: Line period ends after the invoice period

Peppol BIS Billing 3.0 rule · Error · UBL / CII

StandardPeppol BIS Billing 3.0 (OpenPeppol)SeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toInvoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well.

Official rule text

[PEPPOL-EN16931-R111] End date of line period MUST be within invoice period.

Why this error occurs

When both the document and a line give a billing period, the line period must lie inside the document period; this rule checks the end date. It compares cac:InvoiceLine/cac:InvoicePeriod/cbc:EndDate with the header cac:InvoicePeriod/cbc:EndDate (UBL) or the line ram:BillingSpecifiedPeriod/ram:EndDateTime with the header ram:BillingSpecifiedPeriod/ram:EndDateTime (CII). It commonly fails for subscriptions where a line runs to the end of a quarter while the header period ends at month end, or when the header end date is the invoice date.

How to fix it

Extend the header period end date (BT-74) to the latest line end date, or shorten the line period, so that every line end date is on or before the header end date. If the header period is not needed, remove cac:InvoicePeriod from the header and keep the periods on the lines. In CII the end date goes into ram:EndDateTime/udt:DateTimeString format="102" as YYYYMMDD. Check both start (PEPPOL-EN16931-R110) and end together after the change.

Example (valid)

<cac:InvoicePeriod>
  <cbc:StartDate>2026-07-01</cbc:StartDate>
  <cbc:EndDate>2026-09-30</cbc:EndDate>
</cac:InvoicePeriod>
...
<cac:InvoiceLine>...<cac:InvoicePeriod><cbc:StartDate>2026-07-01</cbc:StartDate><cbc:EndDate>2026-09-30</cbc:EndDate></cac:InvoicePeriod>...</cac:InvoiceLine>

What the validator checks

Checked element (context):

UBL

ubl-invoice:Invoice[cac:InvoicePeriod/cbc:EndDate]/cac:InvoiceLine/cac:InvoicePeriod/cbc:EndDate | ubl-creditnote:CreditNote[cac:InvoicePeriod/cbc:EndDate]/cac:CreditNoteLine/cac:InvoicePeriod/cbc:EndDate

Test (XPath):

xs:date(text()) <= xs:date(../../../cac:InvoicePeriod/cbc:EndDate)

CII

rsm:SupplyChainTradeTransaction[ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime]/ram:IncludedSupplyChainTradeLineItem/ram:SpecifiedLineTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime

Test (XPath):

udt:DateTimeString <= ../../../../ram:ApplicableHeaderTradeSettlement/ram:BillingSpecifiedPeriod/ram:EndDateTime/udt:DateTimeString

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does PEPPOL-EN16931-R111 mean?

PEPPOL-EN16931-R111 is a peppol bis billing 3.0 rule: End date of line period MUST be within invoice period.

Will my invoice be rejected because of PEPPOL-EN16931-R111?

Yes. PEPPOL-EN16931-R111 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals) reject the invoice until it is fixed.

Which formats does PEPPOL-EN16931-R111 apply to?

Invoices and credit notes sent over the Peppol network (UBL) and, because XRechnung embeds the Peppol rule set, every XRechnung as well. Syntax: UBL and CII.

Source: Peppol BIS Billing 3.0.20 (November 2025). Catalogue generated from the official schematron on 2026-10-14.