PEPPOL-EN16931-R110: Positionszeitraum beginnt vor dem Rechnungszeitraum
Der Leistungszeitraum einer Rechnungsposition (BT-134) startet früher als der Abrechnungszeitraum der Rechnung (BT-73). Häufig ragt eine einzelne Position in den Vormonat hinein.
Start date of line period MUST be within invoice period.
Rechnungen können einen Leistungszeitraum auf zwei Ebenen tragen: einmal für das ganze Dokument und einmal je Position. Diese Regel sorgt dafür, dass beide zusammenpassen.
Was die Regel prüft
Wenn die Rechnung einen Abrechnungszeitraum auf Dokumentebene hat (BG-14 mit Startdatum BT-73 und Enddatum BT-74; BT steht für Business Term, das nummerierte Feld der Norm) und eine Position zusätzlich einen eigenen Zeitraum (BG-26), dann darf das Startdatum der Position (BT-134) nicht vor dem Start des Dokumentzeitraums liegen. Der Kopfzeitraum ist die Klammer, die Positionszeiträume müssen hineinpassen. Das Gegenstück für das Enddatum prüft PEPPOL-EN16931-R111.
Die Regel greift nur, wenn beide Ebenen befüllt sind. Eine Rechnung ganz ohne Kopfzeitraum oder ganz ohne Positionszeiträume ist nicht betroffen.
Warum sie in der Praxis fehlschlägt
Klassiker ist die Monatsrechnung: Der Kopf sagt „Abrechnungszeitraum 01.07. bis 31.07.", aber eine Position enthält Leistungen, die schon Ende Juni begonnen haben, etwa einen Einsatz vom 28.06. Die Position ist fachlich korrekt, nur die Klammer im Kopf ist zu eng.
Zweiter Auslöser: Die Software setzt den Kopfzeitraum automatisch, zum Beispiel auf den Kalendermonat des Rechnungsdatums, während die Positionszeiträume aus den echten Einsatzdaten kommen. Sobald ein Einsatz vor dem Monatsersten liegt, kollidieren die beiden Automatiken.
So behebst du den Fehler
Erweitere den Abrechnungszeitraum auf Dokumentebene so, dass er alle Positionszeiträume umschließt. Im Beispiel oben: Startdatum im Kopf auf den 28.06. setzen. Der Kopfzeitraum muss nicht der Kalendermonat sein, er muss nur die tatsächlich abgerechneten Leistungen abdecken.
Alternativ kannst du den Kopfzeitraum ganz weglassen, wenn ohnehin jede Position ihren eigenen Zeitraum trägt. Dann gibt es keine Klammer, gegen die die Positionen geprüft werden. Prüfe aber, ob dein Abnehmer den Zeitraum auf Dokumentebene erwartet.
XML-Beispiel: vorher und nachher
Die Position beginnt am 28.06., der Kopfzeitraum erst am 01.07. (CII schreibt Datumswerte als JJJJMMTT mit format="102"):
<!-- verletzt PEPPOL-EN16931-R110: Positionsstart 28.06. liegt vor Kopfstart 01.07. -->
<ram:SpecifiedLineTradeSettlement>
<ram:BillingSpecifiedPeriod>
<ram:StartDateTime><udt:DateTimeString format="102">20260628</udt:DateTimeString></ram:StartDateTime>
<ram:EndDateTime><udt:DateTimeString format="102">20260703</udt:DateTimeString></ram:EndDateTime>
</ram:BillingSpecifiedPeriod>
</ram:SpecifiedLineTradeSettlement>
<!-- … -->
<ram:ApplicableHeaderTradeSettlement>
<ram:BillingSpecifiedPeriod>
<ram:StartDateTime><udt:DateTimeString format="102">20260701</udt:DateTimeString></ram:StartDateTime>
<ram:EndDateTime><udt:DateTimeString format="102">20260731</udt:DateTimeString></ram:EndDateTime>
</ram:BillingSpecifiedPeriod>
</ram:ApplicableHeaderTradeSettlement>
Korrigiert: Der Kopfzeitraum umschließt jetzt alle Positionen:
<ram:ApplicableHeaderTradeSettlement>
<ram:BillingSpecifiedPeriod>
<ram:StartDateTime><udt:DateTimeString format="102">20260628</udt:DateTimeString></ram:StartDateTime>
<ram:EndDateTime><udt:DateTimeString format="102">20260731</udt:DateTimeString></ram:EndDateTime>
</ram:BillingSpecifiedPeriod>
</ram:ApplicableHeaderTradeSettlement>
Rechnung selbst prüfen
Lade deine Datei hoch und sieh in Sekunden, welche Regeln sie besteht und welche nicht. Kostenlos, ohne Anmeldung, nichts wird gespeichert.