Rechnungsbetrag ohne Umsatzsteuer mit Positionen und Anpassungen abstimmen

Fehler BR-FXEXT-CO-13 Factur-X

Absolutwert von (Rechnungsgesamtbetrag ohne Umsatzsteuer (BT-109) - ∑ Nettobeträge der Rechnungsposition (BT-131) + Σ Beträge des Abschlags auf Dokumentenebene (BT-92) - Σ Beträge des Zuschlags auf Dokumentenebene (BT-99)) <= 0,01 * (Anzahl der Nettobeträge der Rechnungsposition (BT-131) + Anzahl der Beträge des Abschlags auf Dokumentenebene (BT-92) + Anzahl der Beträge des Zuschlags auf Dokumentenebene (BT-99)).

Pflichtregel: Solange sie verletzt ist, ist die Rechnung ungültig und wird von Validatoren abgewiesen.
Was nicht stimmt

ram:TaxBasisTotalAmount muss den Nettobeträgen der berücksichtigten Rechnungspositionen abzüglich der Abschläge und zuzüglich der Zuschläge auf Dokumentenebene entsprechen. Die erlaubte absolute Abweichung beträgt 0,01 je berücksichtigter Rechnungsposition, Abschlag oder Zuschlag.

Was die Regel bedeutet

BT-109 ist der Rechnungsbetrag ohne Umsatzsteuer. Er verbindet die Nettosummen der Rechnungspositionen (BT-131) mit den Abschlägen (BT-92) und Zuschlägen (BT-99) auf Dokumentenebene.

Betroffene Felder BT-109 BT-131 BT-92 BT-99
Bitte stimmen Sie den Rechnungsbetrag ohne Umsatzsteuer ab

Der Rechnungsbetrag ohne Umsatzsteuer stimmt nicht ausreichend mit den Nettobeträgen der berücksichtigten Rechnungspositionen und den Abschlägen und Zuschlägen auf Dokumentenebene überein. Prüfen Sie die Summe anhand dieser Beträge.

Was ist zu tun?
  1. Vergleichen Sie ram:TaxBasisTotalAmount mit den berücksichtigten ram:LineTotalAmount-Werten der Rechnungspositionen.
  2. Berücksichtigen Sie die Abschläge und Zuschläge auf Dokumentenebene anhand von ram:ActualAmount sowie die Logistikgebühren anhand von ram:AppliedAmount.
  3. Prüfen Sie die betreffenden Werte über TaxBasisAmount, LineTotalAmount und ActualAmount.
  4. Erzeugen Sie die Rechnung neu und prüfen Sie sie erneut.
In FactoorSharp prüfen
  • AbstractTradeAllowanceCharge.ActualAmount (Document level allowance: BT-92; Document level charge: BT-99)
  • FacturXInvoice.TaxBasisAmount (BT-109)
  • TradeLineItem.LineTotalAmount (BT-131)
Technische Details

Der Test berechnet die Summe der berücksichtigten ram:LineTotalAmount-Werte aus Rechnungspositionen mit fehlendem ram:LineStatusReasonCode oder dem Wert DETAIL, addiert die Abschläge aus ram:ActualAmount und zieht die Zuschläge aus ram:ActualAmount sowie die Logistikgebühren aus ram:AppliedAmount ab. Die zulässige absolute Differenz zu ram:TaxBasisTotalAmount beträgt 0,01 multipliziert mit der Anzahl der berücksichtigten Positionen, Abschläge und Zuschläge.

Wo die Regel greift

Gilt für ram:TaxBasisTotalAmount in der monetären Zusammenfassung und vergleicht diesen Betrag mit den Nettobeträgen der Rechnungspositionen sowie den Abschlägen und Zuschlägen auf Dokumentenebene.

Originalmeldung aus dem Schematron
Absolute Value of (Invoice total amount without VAT (BT-109) - ∑ Invoice line net amounts (BT-131) + Σ Document level allowance amounts (BT-92) - Σ Document level charge amounts (BT-99)) <= 0,01 * (Number of line net amounts (BT-131) + Number of Document level allowance amounts (BT-92) + Number of Document level charge amounts (BT-99)).
Kontext (rule/@context)
//ram:SpecifiedTradeSettlementHeaderMonetarySummation
Prüfausdruck (assert/@test)
for $BT109 in xs:decimal(ram:TaxBasisTotalAmount), $BT131Sum in xs:decimal(round(sum(../../ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ]/ram:SpecifiedLineTradeSettlement/ram:SpecifiedTradeSettlementLineMonetarySummation/ ram:LineTotalAmount) * xs:decimal(100)) div xs:decimal(100)), $BT92Sum in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='false']/ram:ActualAmount)* 10 * 10 ) div 100), $BT99Sum in xs:decimal(xs:decimal(round(sum(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']/ram:ActualAmount)* 100 ) div 100)+ xs:decimal(round(sum(/ rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ ram:SpecifiedLogisticsServiceCharge/ram:AppliedAmount)* 10 * 10 ) div 100)), $nbLineItems in xs:decimal(count(../../ram:IncludedSupplyChainTradeLineItem[ not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode) or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL' ])), $nbAllowanceItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='false'])), $nbChargeItems in xs:decimal(count(../ram:SpecifiedTradeAllowanceCharge[ram:ChargeIndicator/ udt:Indicator='true']) + count(../ram:SpecifiedLogisticsServiceCharge)), $tolerance in xs:decimal(0.01), $maxTolerance in $tolerance * ($nbLineItems + $nbAllowanceItems + $nbChargeItems), $diff in xs:decimal($BT109 - $BT131Sum + $BT92Sum - $BT99Sum), $abs in xs:decimal(abs($diff)) return $abs le $maxTolerance