The test groups by ram:RateApplicablePercent and compares ram:BasisAmount with sums rounded to two decimal places. The permitted difference is 0.01 multiplied by the number of included lines and allowances or charges. The condition passes if either calculation variant is satisfied.
Where the rule applies
The rule applies to each document-level VAT breakdown in ram:ApplicableTradeTax with category code Z and tax type VAT. It compares the taxable amount with the related invoice lines, allowances, charges, and logistics service fees.
Context (rule/@context)
//ram:ApplicableHeaderTradeSettlement/ram:ApplicableTradeTax[ram:CategoryCode='Z'][upper-case(ram:TypeCode) = 'VAT']
Test expression (assert/@test)
(
for $rate in xs:decimal(ram:RateApplicablePercent),
$exempReasonText in normalize-space(ram:ExemptionReason),
$exempReasonCode in normalize-space(ram:ExemptionReasonCode),
$basisAmount in xs:decimal(ram:BasisAmount),
$calculatedAmountBT131 in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem[
not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode)
or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL'
]/ram:SpecifiedLineTradeSettlement[
ram:ApplicableTradeTax/ram:CategoryCode = 'Z'
and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate
and normalize-space(ram:ApplicableTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:ApplicableTradeTax/ram:ExemptionReason) = $exempReasonText
]/ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 100) div 100),
$calculatedAmountBT131ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:IncludedSupplyChainTradeLineItem[
not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode)
or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL'
]/ram:SpecifiedLineTradeSettlement[
ram:ApplicableTradeTax/ram:CategoryCode = 'Z'
and ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate
]/ram:SpecifiedTradeSettlementLineMonetarySummation/xs:decimal(ram:LineTotalAmount)) * 100) div 100),
$allowancesAmountBT92 in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:ChargeIndicator/udt:Indicator=false()
and ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReason) = $exempReasonText
]/xs:decimal(ram:ActualAmount)) * 100) div 100),
$allowancesAmountBT92ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:ChargeIndicator/udt:Indicator=false()
and ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
]/xs:decimal(ram:ActualAmount)) * 100) div 100),
$chargesAmountBT99 in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:ChargeIndicator/udt:Indicator=true()
and ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReason) = $exempReasonText
]/xs:decimal(ram:ActualAmount)) * 100) div 100),
$chargesAmountBT99ini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:ChargeIndicator/udt:Indicator=true()
and ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
]/xs:decimal(ram:ActualAmount)) * 100) div 100),
$nbLineItems in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/
ram:IncludedSupplyChainTradeLineItem[
(
not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode)
or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL'
)
and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode = 'Z'
and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate
and normalize-space(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/
ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/
ram:ExemptionReason) = $exempReasonText
])),
$nbLineItemsini in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/
ram:IncludedSupplyChainTradeLineItem[
(
not(ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode)
or ram:AssociatedDocumentLineDocument/ram:LineStatusReasonCode = 'DETAIL'
)
and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/ram:CategoryCode = 'Z'
and ram:SpecifiedLineTradeSettlement/ram:ApplicableTradeTax/xs:decimal(ram:RateApplicablePercent) =$rate
])),
$nbAllowancesOrCharges in xs:decimal(count(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:CategoryTradeTax/ram:ExemptionReason) = $exempReasonText
])),
$nbAllowancesOrChargesini in xs:decimal(count(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedTradeAllowanceCharge[
ram:CategoryTradeTax/ram:CategoryCode='Z'
and ram:CategoryTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
])),
$logisticChargeAmount in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedLogisticsServiceCharge[
ram:AppliedTradeTax/ram:CategoryCode='Z'
and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
and normalize-space(ram:AppliedTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:AppliedTradeTax/ram:ExemptionReason) = $exempReasonText
]/xs:decimal(ram:AppliedAmount)) * 100) div 100),
$logisticChargeAmountini in xs:decimal(round(sum(/rsm:CrossIndustryInvoice/
rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/
ram:SpecifiedLogisticsServiceCharge[
ram:AppliedTradeTax/ram:CategoryCode='Z'
and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
]/xs:decimal(ram:AppliedAmount)) * 100) div 100),
$nblogisticCharge in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/
ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge[
ram:AppliedTradeTax/ram:CategoryCode='Z'
and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
and normalize-space(ram:AppliedTradeTax/ram:ExemptionReasonCode) = $exempReasonCode
and normalize-space(ram:AppliedTradeTax/ram:ExemptionReason) = $exempReasonText
])),
$nblogisticChargeini in xs:decimal(count(/rsm:CrossIndustryInvoice/rsm:SupplyChainTradeTransaction/
ram:ApplicableHeaderTradeSettlement/ram:SpecifiedLogisticsServiceCharge[
ram:AppliedTradeTax/ram:CategoryCode='Z'
and ram:AppliedTradeTax/xs:decimal(ram:RateApplicablePercent)=$rate
]))
return (abs($basisAmount - $calculatedAmountBT131 + $allowancesAmountBT92 - $chargesAmountBT99 - $logisticChargeAmount) le 0.01 * ($nbLineItems + $nbAllowancesOrCharges + $nblogisticCharge))
or (abs($basisAmount - $calculatedAmountBT131ini + $allowancesAmountBT92ini - $chargesAmountBT99ini - $logisticChargeAmountini) le 0.01 * ($nbLineItemsini + $nbAllowancesOrChargesini + $nblogisticChargeini))
)