BR-KSA-EN16931-11: صافي البند = الكمية × صافي السعر ± رسوم وخصومات البند

الشرح من فريق ماثل، مبني على نص قواعد الهيئة والشرط اللي ينفّذه SDK 3.4.8 · آخر تحديث

تحذير: الفاتورة تنقبل مع تحذيركل الفواتيرالحقول: BT-131, BT-129, BT-146, BT-149, BT-141, BT-136

لكل cac:InvoiceLine، يجب أن يساوي cbc:LineExtensionAmount ناتج cbc:InvoicedQuantity × cac:Price/cbc:PriceAmount (مقسوماً على cac:Price/cbc:BaseQuantity إن وُجد)، مضافاً إليه رسوم cac:AllowanceCharge على مستوى البند (ChargeIndicator = true) ومطروحاً منه خصومات البند (false). التحقق الفعلي يقتطع ناتج الكمية × السعر إلى ثلاث خانات عشرية ثم يقرّب النتيجة إلى خانتين ويقبل فرقاً بمقدار ±0.01، بينما يطرح التعبير المنشور خصومات مستوى السعر (cac:Price/cac:AllowanceCharge) ولا يحتسب رسوم البند.

كيف تحلها

احسب cbc:LineExtensionAmount = الكمية × (PriceAmount ÷ BaseQuantity) + مجموع رسوم البند − مجموع خصومات البند، مقرّباً إلى خانتين عشريتين. ضع صافي السعر في cbc:PriceAmount، فخصم مستوى السعر يكون منعكساً فيه مسبقاً.

نص الهيئة الرسمي

[BR-KSA-EN16931-11]-Invoice line net amount (BT-131) must equal (Invoiced quantity (BT-129) * (Item net price (BT-146) / item price base quantity (BT-149))-) + Sum of invoice line charge amount (BT-141) - Sum of invoice line allowance amount (BT-136).
المصدر: ZATCA SDK 3.4.8 · ZATCA KSA rules

متى تفشل (الشرط اللي ينفّذه SDK الهيئة)

count((.)) > 0 and not ( ( ( not(exists(cac:Price/cbc:BaseQuantity)) and xs:decimal(cbc:LineExtensionAmount) = round( (( (floor((xs:decimal(cbc:InvoicedQuantity) * xs:decimal(cac:Price/cbc:PriceAmount) ) * 10 * 10 *10 )div 10 + 0.00000000001) ) div 100 )+ sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))),2) +0.01) ) or ( ( not(exists(cac:Price/cbc:BaseQuantity)) and xs:decimal(cbc:LineExtensionAmount) = round( (( (floor((xs:decimal(cbc:InvoicedQuantity) * xs:decimal(cac:Price/cbc:PriceAmount) ) * 10 * 10 *10 )div 10 + 0.00000000001) ) div 100 )+ sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))),2) -0.01) ) or ( ( not(exists(cac:Price/cbc:BaseQuantity)) and xs:decimal(cbc:LineExtensionAmount) = round( (( (floor((xs:decimal(cbc:InvoicedQuantity) * xs:decimal(cac:Price/cbc:PriceAmount) ) * 10 * 10 *10 )div 10 + 0.00000000001) ) div 100 )+ sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))),2) ) ) or ( exists(cac:Price/cbc:BaseQuantity) and xs:decimal(cbc:LineExtensionAmount) = round(( (floor((xs:decimal(cbc:InvoicedQuantity) * (xs:decimal(cac:Price/cbc:PriceAmount) div xs:decimal(cac:Price/cbc:BaseQuantity)) ) * 10 * 10 * 10) div 10 + 0.00000000001 ) div 100 ) + sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))) ,2 ) ) or ( exists(cac:Price/cbc:BaseQuantity) and xs:decimal(cbc:LineExtensionAmount) = round(( (floor((xs:decimal(cbc:InvoicedQuantity) * (xs:decimal(cac:Price/cbc:PriceAmount) div xs:decimal(cac:Price/cbc:BaseQuantity)) ) * 10 * 10 * 10) div 10 + 0.00000000001 ) div 100 ) + sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))) ,2 ) +0.01) or ( exists(cac:Price/cbc:BaseQuantity) and xs:decimal(cbc:LineExtensionAmount) = round(( (floor((xs:decimal(cbc:InvoicedQuantity) * (xs:decimal(cac:Price/cbc:PriceAmount) div xs:decimal(cac:Price/cbc:BaseQuantity)) ) * 10 * 10 * 10) div 10 + 0.00000000001 ) div 100 ) + sum((cac:AllowanceCharge[cbc:ChargeIndicator=true()]/xs:decimal(cbc:Amount))) - sum((cac:AllowanceCharge[cbc:ChargeIndicator=false()]/xs:decimal(cbc:Amount))) ,2 ) -0.01) )

قواعد قريبة

افحص فاتورتك على قواعد الهيئة

الصق الـ XML وتشوف كل الأخطاء والتحذيرات، والفحص يصير في متصفحك وما ترسل الفاتورة لأي مكان.

افحص فاتورة أو جرّب ماثل