CII CrossIndustryInvoice — BR-CO-13, the discount never reaches the tax basis
Um desconto ao nível do documento que só existe a meio: a fatura concede 200,00 (BT-107), calcula o IVA sobre a base com desconto (1 800,00 × 19 % = 342,00 — correto), mas o BT-109 (TaxBasisTotalAmount) continua a declarar 2 000,00 sem desconto. A BR-CO-13 impõe BT-109 = BT-106 - BT-107 + BT-108, pelo que o comprador é faturado em 200,00 que o vendedor julgava ter oferecido.
CII D16B (CrossIndustryInvoice) — Inválido
Um desconto ao nível do documento que só existe a meio: a fatura concede 200,00 (BT-107), calcula o IVA sobre a base com desconto (1 800,00 × 19 % = 342,00 — correto), mas o BT-109 (TaxBasisTotalAmount) continua a declarar 2 000,00 sem desconto. A BR-CO-13 impõe BT-109 = BT-106 - BT-107 + BT-108, pelo que o comprador é faturado em 200,00 que o vendedor julgava ter oferecido.
O que este ficheiro mostra
Um desconto ao nível do documento que só existe a meio: a fatura concede 200,00 (BT-107), calcula o IVA sobre a base com desconto (1 800,00 × 19 % = 342,00 — correto), mas o BT-109 (TaxBasisTotalAmount) continua a declarar 2 000,00 sem desconto. A BR-CO-13 impõe BT-109 = BT-106 - BT-107 + BT-108, pelo que o comprador é faturado em 200,00 que o vendedor julgava ter oferecido.
| Transações | 2 |
|---|---|
| Total | € 2.342,00 |
Os defeitos que contém
- BR-CO-13BR-CO-13: TaxBasisTotalAmount (2000.00) must equal LineTotal - Allowances + Charges (1800.00).
Citado literalmente do validador, sem paráfrase.
Todas as partes, IBAN e montantes abaixo são fictícios. Os IBAN são estruturalmente válidos — passam no mod-97 — mas não correspondem a nenhuma conta real.
Conteúdo do ficheiro
<?xml version="1.0" encoding="UTF-8"?>
<!--
ValidateFin sample file — CII (UN/CEFACT Cross Industry Invoice), XRechnung 3.0.
DELIBERATELY BROKEN — BR-CO-13: the document level discount never reaches the tax basis.
The invoice grants a 200.00 volume discount (BG-20, BT-107 = 200.00) and computes VAT on
the discounted base (1 800.00 x 19 % = 342.00 — correct), but BT-109
(TaxBasisTotalAmount) still declares the undiscounted 2 000.00. BR-CO-13 states that
BT-109 = BT-106 - BT-107 + BT-108, so the invoice bills 200.00 it just gave away.
Expected validation result: INVALID.
All parties and account numbers are fictitious.
Reference page: https://validatefin.com/en/resources/samples/cii-broken-tax-basis
License: CC-BY-4.0
-->
<rsm:CrossIndustryInvoice
xmlns:rsm="urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100"
xmlns:ram="urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100"
xmlns:udt="urn:un:unece:uncefact:data:standard:UnqualifiedDataType:100">
<rsm:ExchangedDocumentContext>
<ram:BusinessProcessSpecifiedDocumentContextParameter>
<ram:ID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</ram:ID>
</ram:BusinessProcessSpecifiedDocumentContextParameter>
<ram:GuidelineSpecifiedDocumentContextParameter>
<ram:ID>urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0</ram:ID>
</ram:GuidelineSpecifiedDocumentContextParameter>
</rsm:ExchangedDocumentContext>
<rsm:ExchangedDocument>
<ram:ID>NWL-2026-0671</ram:ID>
<ram:TypeCode>380</ram:TypeCode>
<ram:IssueDateTime>
<udt:DateTimeString format="102">20260327</udt:DateTimeString>
</ram:IssueDateTime>
<ram:IncludedNote>
<ram:Content>Volume discount granted but not deducted from the taxable basis.</ram:Content>
</ram:IncludedNote>
</rsm:ExchangedDocument>
<rsm:SupplyChainTradeTransaction>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>1</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Warehouse trolley</ram:Name>
<ram:Description>Warehouse trolley, 300 kg capacity</ram:Description>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>150.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="C62">8</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>1200.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:IncludedSupplyChainTradeLineItem>
<ram:AssociatedDocumentLineDocument>
<ram:LineID>2</ram:LineID>
</ram:AssociatedDocumentLineDocument>
<ram:SpecifiedTradeProduct>
<ram:Name>Safety strap set</ram:Name>
<ram:Description>Safety strap set for pallet loads</ram:Description>
</ram:SpecifiedTradeProduct>
<ram:SpecifiedLineTradeAgreement>
<ram:NetPriceProductTradePrice>
<ram:ChargeAmount>40.00</ram:ChargeAmount>
</ram:NetPriceProductTradePrice>
</ram:SpecifiedLineTradeAgreement>
<ram:SpecifiedLineTradeDelivery>
<ram:BilledQuantity unitCode="C62">20</ram:BilledQuantity>
</ram:SpecifiedLineTradeDelivery>
<ram:SpecifiedLineTradeSettlement>
<ram:ApplicableTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeSettlementLineMonetarySummation>
<ram:LineTotalAmount>800.00</ram:LineTotalAmount>
</ram:SpecifiedTradeSettlementLineMonetarySummation>
</ram:SpecifiedLineTradeSettlement>
</ram:IncludedSupplyChainTradeLineItem>
<ram:ApplicableHeaderTradeAgreement>
<ram:BuyerReference>04011000-12345-34</ram:BuyerReference>
<ram:SellerTradeParty>
<ram:Name>Nordwind Logistik GmbH</ram:Name>
<ram:DefinedTradeContact>
<ram:PersonName>Rechnungsstelle</ram:PersonName>
<ram:TelephoneUniversalCommunication>
<ram:CompleteNumber>+49 40 555 0100</ram:CompleteNumber>
</ram:TelephoneUniversalCommunication>
<ram:EmailURIUniversalCommunication>
<ram:URIID>[email protected]</ram:URIID>
</ram:EmailURIUniversalCommunication>
</ram:DefinedTradeContact>
<ram:PostalTradeAddress>
<ram:PostcodeCode>20457</ram:PostcodeCode>
<ram:LineOne>Speicherstrasse 12</ram:LineOne>
<ram:CityName>Hamburg</ram:CityName>
<ram:CountryID>DE</ram:CountryID>
</ram:PostalTradeAddress>
<ram:URIUniversalCommunication>
<ram:URIID schemeID="EM">[email protected]</ram:URIID>
</ram:URIUniversalCommunication>
<ram:SpecifiedTaxRegistration>
<ram:ID schemeID="VA">DE123456789</ram:ID>
</ram:SpecifiedTaxRegistration>
</ram:SellerTradeParty>
<ram:BuyerTradeParty>
<ram:Name>Bundesamt fuer Logistik</ram:Name>
<ram:PostalTradeAddress>
<ram:PostcodeCode>10117</ram:PostcodeCode>
<ram:LineOne>Wilhelmstrasse 40</ram:LineOne>
<ram:CityName>Berlin</ram:CityName>
<ram:CountryID>DE</ram:CountryID>
</ram:PostalTradeAddress>
<ram:URIUniversalCommunication>
<ram:URIID schemeID="EM">[email protected]</ram:URIID>
</ram:URIUniversalCommunication>
</ram:BuyerTradeParty>
</ram:ApplicableHeaderTradeAgreement>
<ram:ApplicableHeaderTradeDelivery>
<ram:ActualDeliverySupplyChainEvent>
<ram:OccurrenceDateTime>
<udt:DateTimeString format="102">20260325</udt:DateTimeString>
</ram:OccurrenceDateTime>
</ram:ActualDeliverySupplyChainEvent>
</ram:ApplicableHeaderTradeDelivery>
<ram:ApplicableHeaderTradeSettlement>
<ram:InvoiceCurrencyCode>EUR</ram:InvoiceCurrencyCode>
<ram:SpecifiedTradeSettlementPaymentMeans>
<ram:TypeCode>58</ram:TypeCode>
<ram:PayeePartyCreditorFinancialAccount>
<ram:IBANID>DE02120300000000202051</ram:IBANID>
</ram:PayeePartyCreditorFinancialAccount>
</ram:SpecifiedTradeSettlementPaymentMeans>
<ram:ApplicableTradeTax>
<ram:CalculatedAmount>342.00</ram:CalculatedAmount>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:BasisAmount>1800.00</ram:BasisAmount>
<ram:CategoryCode>S</ram:CategoryCode>
<ram:RateApplicablePercent>19</ram:RateApplicablePercent>
</ram:ApplicableTradeTax>
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator>160 / 190 lines shown — the complete file is in the download above.
Como sabemos que estes resultados se mantêm
Cada ficheiro desta biblioteca passa pelo próprio validador do site em cada build. O resultado esperado indicado acima é verificado por um teste automatizado: se um ficheiro deixasse de corresponder ao que esta página afirma, o build falharia. Duas fixtures herdadas foram reparadas assim antes da publicação: três IBAN falhavam o mod-97 e vários nomes usavam caracteres fora do conjunto SEPA básico.