VRBL-INV-PT-2p1-14

Basic Info

Rule The Legal Monetary Total Tax Exclusive Amount = Invoice Line Extension Amount - Legal Monetary Total Allowance Total Amount + Legal Monetary Total Charge Total Amount, with an acceptance range of 1.00 EURO (it does not mean that this tolerance is accepted by the customer).
Context /ubl:Invoice
Pattern vrbl-invoice-pt-2p1
Severity fatal

Implementation

(boolean(cac:InvoiceLine) 
			and (boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) and boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10) div 100 ) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10) div 100 ) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00)) 
			or ( not(boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount)) and boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10 ) div 100) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10 ) div 100) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00) ) 
			or ( boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) and not(boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount)) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) * 10 * 10 ) div 100) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:InvoiceLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) * 10 * 10 ) div 100) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00)) 
			or ( not(boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount)) and not(boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount)) 
			and sum(cac:InvoiceLine/cbc:LineExtensionAmount) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and sum(cac:InvoiceLine/cbc:LineExtensionAmount) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00))) 
			or (boolean(cac:CreditNoteLine) 
			and (boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) and boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10) div 100 ) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10) div 100 ) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00)) 
			or ( not(boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount)) and boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10 ) div 100) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) - cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount) * 10 * 10 ) div 100) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00) ) 
			or ( boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) and not(boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount)) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) * 10 * 10 ) div 100) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and (round((sum(cac:CreditNoteLine/cbc:LineExtensionAmount) + cac:LegalMonetaryTotal/cbc:ChargeTotalAmount) * 10 * 10 ) div 100) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00)) 
			or ( not(boolean(cac:LegalMonetaryTotal/cbc:ChargeTotalAmount)) and not(boolean(cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount)) 
			and sum(cac:CreditNoteLine/cbc:LineExtensionAmount) <= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount + 1.00) 
			and sum(cac:CreditNoteLine/cbc:LineExtensionAmount) >= (cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount - 1.00)))