بند الفاتورة (Invoice Line) هو الوحدة الأساسية التي تحمل تفاصيل كل صنف داخل الفاتورة الإلكترونية في السعودية. كل سلعة أو خدمة تبيعها تتحول إلى عنصر cac:InvoiceLine مستقل في ملف XML، يحمل الكمية وسعر الوحدة ومبلغ السطر وضريبة القيمة المضافة الخاصة به. هذه الصفحة توثّق هذا العنصر وحده بتفصيل تقني، وتشرح كيف تتكرر السطور وتتجمّع قيمها لتكوّن إجمالي الفاتورة وفق معيار UBL 2.1 الذي اعتمدته هيئة الزكاة والضريبة والجمارك (ZATCA).
إذا كنت تبحث عن البنية الكاملة لملف الفاتورة من المظروف الخارجي حتى عناصر الإجماليات، فارجع إلى صفحة بنية الفاتورة الإلكترونية (Invoice Structure). أما تفاصيل ترويسة الفاتورة من بيانات البائع والمشتري والتواريخ فموضوعها صفحة «ترويسة الفاتورة (Invoice Header)» المستقلة. هنا نركّز حصراً على ما يجري داخل كل سطر من سطور الفاتورة.
cac:InvoiceLine يتكرر مرة واحدة لكل صنف. يحمل المعرّف والكمية ومبلغ السطر قبل الضريبة، ويحتوي بداخله على بيانات الصنف (cac:Item) وسعره (cac:Price) وضريبته على مستوى السطر. مجموع cbc:LineExtensionAmount لكل السطور يجب أن يساوي إجمالي الفاتورة قبل الضريبة في عناصر cac:LegalMonetaryTotal.
ما هو بند الفاتورة (cac:InvoiceLine) ولماذا هو مهم
في معيار UBL 2.1 تتكوّن الفاتورة من ترويسة عامة ثم قائمة من السطور. كل سطر يمثّل صنفاً واحداً قابلاً للبيع: منتج، خدمة، رسم توصيل، أو أي بند تريد تسعيره بشكل منفصل. عنصر cac:InvoiceLine هو الحاوية التي تجمع كل ما يخص هذا الصنف الواحد في مكان واحد.
أهمية ضبط هذا العنصر تقنياً تأتي من أن الهيئة تتحقق من تطابق حساباته. إذا اختلّ مبلغ سطر واحد عن حاصل ضرب الكمية في سعر الوحدة، يرفض النظام الفاتورة كلها عند المقاصة أو الإبلاغ. لذلك دقة كل حقل داخل السطر شرط للقبول، وليست تفصيلاً تجميلياً.
تظهر سطور الفاتورة بعد بيانات الترويسة وقبل عناصر الإجماليات النهائية. ترتيب العناصر داخل ملف XML مهم في UBL، فالمحلّل النحوي (parser) في منصة فاتورة يتوقع كل عنصر في موضعه المحدد ضمن المخطط (Schema).
موضع السطور داخل الملف
الفاتورة تحوي عنصر cac:InvoiceLine واحداً على الأقل. لا توجد فاتورة بلا سطور. ترتيب الظهور يكون بعد عناصر الضريبة الإجمالية للترويسة وقبل أو بعد cac:LegalMonetaryTotal حسب نسخة المخطط، لكن المرجع الحاسم دائماً هو ملف XSD المعتمد من الهيئة الذي يحدد التسلسل الإلزامي.
ترويسة الفاتورة
بنود InvoiceLine متكررة
LegalMonetaryTotal = مجموع البنود
الحقول الأساسية داخل عنصر السطر
كل عنصر cac:InvoiceLine يحتوي على مجموعة حقول مباشرة على مستوى السطر، إضافة إلى عناصر فرعية مركّبة. نبدأ بالحقول المباشرة التي تحمل المعرّف والكمية والمبلغ.
هذا المثال المبسّط يوضح خمسة حقول جوهرية. سعر الوحدة 100 ريال، الكمية 5 وحدات، فيكون مبلغ السطر 500 ريال. لنفصّل كل حقل على حدة.
المعرّف (cbc:ID)
رقم تسلسلي فريد للسطر داخل الفاتورة الواحدة. يبدأ عادة من 1 ويتزايد مع كل سطر جديد. لا يجوز تكرار المعرّف داخل الفاتورة نفسها. هذا الرقم يربط السطر بأي إشارة إليه في عناصر أخرى مثل الخصومات على مستوى السطر.
الكمية (cbc:InvoicedQuantity)
عدد الوحدات المباعة من الصنف. السمة unitCode إلزامية وتحدد وحدة القياس وفق قائمة الرموز المعتمدة (UN/ECE Recommendation 20). مثلاً PCE للقطعة، KGM للكيلوجرام، HUR للساعة، LTR للتر. اختيار الرمز الصحيح يمنع رفض الفاتورة.
قائمة رموز الوحدات واسعة وتغطي معظم ما تبيعه المنشآت. إليك أكثرها استخداماً في السوق السعودي:
PCEأوEA: قطعة أو وحدة واحدة، للأصناف المعدودة.KGM: كيلوجرام، للأصناف الموزونة.LTR: لتر، للسوائل.MTR: متر، للأقمشة والكوابل وما يقاس طولاً.HUR: ساعة، لخدمات تحسب بالوقت كالاستشارات.DAY: يوم، للإيجارات والاشتراكات اليومية.MON: شهر، للاشتراكات الشهرية.
الخدمات تطرح سؤالاً متكرراً عن وحدة القياس. الخدمة التي لا تباع بالوحدة العددية، مثل عقد سنوي بسعر مقطوع، تستخدم عادة الرمز PCE بكمية 1، أو رمز الوقت المناسب إن كانت الخدمة محسوبة زمنياً. المهم أن يكون الرمز من القائمة المعتمدة، وأن يتسق مع طبيعة الصنف وسعر الوحدة المعلن.
مبلغ السطر (cbc:LineExtensionAmount)
هذا الحقل هو محور التحقق الحسابي. يمثّل قيمة السطر قبل ضريبة القيمة المضافة، بعد خصم أي تخفيضات على مستوى السطر. القاعدة الأساسية:
LineExtensionAmount = (InvoicedQuantity × PriceAmount) − AllowanceTotal
السمة currencyID يجب أن تطابق عملة الفاتورة المعلنة في الترويسة. في السوق السعودي تكون القيمة SAR في معظم الحالات. أي اختلاف بين عملة السطر وعملة الفاتورة يسبب خطأ تحقق.
| المعيار | مثال | إلزامي؟ |
|---|---|---|
| cbc:ID (رقم البند) | 1 | إلزامي |
| InvoicedQuantity (الكمية) | 3 PCE | إلزامي |
| LineExtensionAmount (قيمة البند) | 300.00 | إلزامي |
عنصر الصنف (cac:Item) داخل السطر
عنصر cac:Item يصف الصنف المباع نفسه: اسمه وتصنيفه الضريبي وأي معرّفات إضافية. هو عنصر مركّب يقع داخل cac:InvoiceLine ويحمل الجزء «الوصفي» من السطر، بينما تحمل الحقول الأخرى الجزء «الكمّي».
اسم الصنف (cbc:Name)
وصف نصي واضح للصنف يظهر للمشتري. يجب أن يكون مفهوماً ومطابقاً لما تبيعه فعلاً. اللغة العربية مقبولة هنا، وهذا أحد المواضع القليلة التي يظهر فيها نص عربي حر داخل ملف XML تقني.
التصنيف الضريبي للصنف (cac:ClassifiedTaxCategory)
يحدد فئة الضريبة المطبّقة على هذا الصنف. الحقل cbc:ID يحمل رمز الفئة: S للنسبة القياسية الخاضعة، Z للنسبة الصفرية، E للمعفى، O للخارج عن نطاق الضريبة. الحقل cbc:Percent يحمل النسبة، وهي 15.00 للنسبة القياسية في السعودية. أما cac:TaxScheme فيحمل دائماً المعرّف VAT لضريبة القيمة المضافة.
ربط فئة الصنف هنا بفئة الضريبة على مستوى السطر شرط للاتساق. إذا أعلنت أن الصنف خاضع للنسبة القياسية في cac:Item ثم حسبت ضريبته بنسبة صفرية في cac:TaxTotal، ترفض الهيئة الفاتورة لعدم التطابق.
عنصر السعر (cac:Price) وسعر الوحدة
عنصر cac:Price يحمل سعر الوحدة الواحدة من الصنف قبل الضريبة. هذا السعر هو الذي يضرب في الكمية للوصول إلى مبلغ السطر. التمييز بين سعر الوحدة ومبلغ السطر جوهري: الأول لوحدة واحدة، والثاني للكمية كاملة.
سعر الوحدة (cbc:PriceAmount)
قيمة الوحدة الواحدة بالعملة المعلنة. يجب أن يكون متسقاً مع مبلغ السطر عبر معادلة الكمية. السمة currencyID تطابق عملة الفاتورة.
الكمية الأساسية (cbc:BaseQuantity)
تحدد عدد الوحدات التي ينطبق عليها سعر الوحدة، وقيمتها 1 في الحالات العادية. تستخدم عندما يكون السعر معلناً لمجموعة، مثل سعر العبوة التي تضم اثنتي عشرة قطعة.
الضريبة على مستوى السطر (cac:TaxTotal)
إضافة إلى الضريبة الإجمالية في ترويسة الفاتورة، يمكن أن يحمل كل سطر عنصر cac:TaxTotal خاصاً به يوضح مبلغ الضريبة المحسوب على هذا السطر تحديداً. هذا يفيد عند احتواء الفاتورة على أصناف بفئات ضريبية مختلفة.
مبلغ الضريبة (cbc:TaxAmount)
قيمة ضريبة القيمة المضافة المحسوبة على هذا السطر. تحسب بضرب مبلغ السطر في نسبة الضريبة. في المثال: 500 ريال مضروبة في 15% تساوي 75 ريالاً. أي انحراف عن هذه القيمة، ولو بهلّلة واحدة بسبب التقريب، قد يسبب خطأ تحقق إذا لم يلتزم بقواعد التقريب المعتمدة.
المبلغ بعد التقريب (cbc:RoundingAmount)
إجمالي السطر شاملاً الضريبة بعد تطبيق التقريب. في المثال: 500 ريال زائد 75 ريالاً يساوي 575 ريالاً. هذا الحقل يساعد منصة فاتورة على التحقق من اتساق المبالغ المقرّبة عبر الفاتورة كلها.
قواعد التقريب على مستوى السطر
التقريب من أكثر المواضع التي تتسبب في رفض الفواتير. الهيئة تطبّق التقريب إلى رقمين عشريين (هلّلتين) على مبالغ السطر. القاعدة العملية أن تحسب الضريبة على مبلغ السطر ثم تقرّب الناتج إلى رقمين عشريين قبل جمع ضرائب السطور.
مثال يوضح أهمية الترتيب: سطر بمبلغ 33.33 ريالاً وضريبة 15%. الضريبة الدقيقة 4.9995 ريالاً، تقرّب إلى 5.00 ريالاً. لو جمعت ضرائب عشرة سطور متماثلة قبل التقريب لاختلف الناتج عن جمعها بعد التقريب. لذلك تثبّت أنظمة الفوترة المتوافقة سياسة تقريب واحدة عبر الفاتورة كلها، فلا ينحرف مجموع ضرائب السطور عن الضريبة الإجمالية المعلنة.
الانحراف ولو بهلّلة واحدة بين مجموع ضرائب السطور والضريبة الإجمالية في cac:TaxTotal يكفي لرفض الفاتورة. هذا سبب جوهري يجعل بناء السطور يدوياً محفوفاً بالمخاطر، إذ يحتاج المحاسب لتطبيق قاعدة تقريب متسقة في كل سطر دون استثناء.
اترك تفاصيل XML لقيود
يبني قيود ملف XML لكل سطر فاتورة تلقائياً وفق معيار UBL 2.1، فيحسب مبلغ السطر والضريبة والتقريب دون أي تدخل يدوي ويرسل الفاتورة إلى منصة فاتورة مباشرة.
الخصومات والرسوم على مستوى السطر (cac:AllowanceCharge)
عنصر cac:AllowanceCharge يسمح بإضافة خصم أو رسم على سطر واحد بعينه، بدلاً من تطبيقه على الفاتورة كلها. الحقل cbc:ChargeIndicator يحدد النوع: قيمته false تعني خصماً (Allowance)، وقيمته true تعني رسماً إضافياً (Charge).
عند وجود خصم على السطر، يُطرح مبلغه قبل احتساب cbc:LineExtensionAmount. مثال عملي: سعر الوحدة 100 ريال والكمية 5، فيكون الإجمالي الخام 500 ريال. بخصم كمية 50 ريالاً يصبح مبلغ السطر 450 ريالاً، وعليها تحسب الضريبة. هذا الترتيب إلزامي: الخصم أولاً ثم الضريبة على الصافي.
سبب الخصم أو الرسم (cbc:AllowanceChargeReason)
وصف نصي يوضح سبب الخصم أو الرسم، مثل «خصم كمية» أو «رسم توصيل». تطلب الهيئة هذا الحقل لتفسير أي تعديل على القيمة، حفاظاً على شفافية الفاتورة وقابليتها للتدقيق.
سعر الوحدة × الكمية
طرح الخصم (AllowanceCharge)
LineExtensionAmount
× نسبة الضريبة = ضريبة البند
كيف تتكرر السطور وتتجمّع في الإجماليات
الفاتورة الواحدة قد تحوي سطراً واحداً أو عشرات السطور، وكل سطر عنصر cac:InvoiceLine مستقل بمعرّفه الفريد. القوة الحقيقية للمعيار تظهر في كيفية تجمّع هذه السطور لتكوين إجماليات الفاتورة.
القاعدة الذهبية: مجموع cbc:LineExtensionAmount لكل السطور يجب أن يساوي قيمة cbc:LineExtensionAmount في عنصر الإجماليات cac:LegalMonetaryTotal. هذا التطابق هو أول ما تتحقق منه منصة فاتورة.
في هذا المثال سطران: الأول 500 ريال والثاني 300 ريال. مجموعهما 800 ريال يظهر في cbc:LineExtensionAmount ضمن الإجماليات. ضريبة 15% على 800 ريال تساوي 120 ريالاً، فيصبح الإجمالي شاملاً الضريبة 920 ريالاً في cbc:TaxInclusiveAmount.
الترابط بين السطور والإجماليات يشمل أيضاً الضريبة. مجموع cbc:TaxAmount لكل السطور يجب أن يطابق قيمة الضريبة الإجمالية في cac:TaxTotal على مستوى الفاتورة. وتفصيل الضريبة حسب الفئة يظهر في عناصر cac:TaxSubtotal، حيث تتجمع السطور ذات الفئة الواحدة معاً.
تفصيل الضريبة حسب الفئة
عندما تحوي الفاتورة أصنافاً بفئات ضريبية مختلفة، يجمع المعيار السطور المتشابهة في فئاتها داخل cac:TaxSubtotal منفصل لكل فئة. فالأصناف الخاضعة للنسبة القياسية تتجمع في فئة S، والأصناف الصفرية في فئة Z، وهكذا. هذا التجميع يتيح للهيئة التحقق من صحة كل فئة على حدة.
مثال متكامل: فاتورة بثلاثة سطور مختلفة
لنجمع كل ما سبق في مثال واقعي. تبيع منشأة ثلاثة أصناف في فاتورة واحدة: جهازين حاسب، خمس ساعات استشارة، ومنتجاً صفري الضريبة. نرى كيف يُبنى كل سطر مستقلاً ثم كيف تتجمع القيم.
السطر الأول: جهازان بسعر وحدة 2,000 ريال. مبلغ السطر 4,000 ريال، فئة الضريبة قياسية، فالضريبة 600 ريال. السطر الثاني: خمس ساعات استشارة بسعر 200 ريال للساعة. مبلغ السطر 1,000 ريال، الضريبة القياسية عليه 150 ريالاً. السطر الثالث: منتج صفري الضريبة بسعر 500 ريال وكمية واحدة. مبلغ السطر 500 ريال، والضريبة صفر لأن فئته Z.
مجموع مبالغ السطور: 4,000 زائد 1,000 زائد 500 يساوي 5,500 ريال. هذا هو cbc:LineExtensionAmount في الإجماليات. مجموع الضريبة: 600 زائد 150 زائد صفر يساوي 750 ريالاً. فيصبح الإجمالي شاملاً الضريبة 6,250 ريالاً. لاحظ كيف يحمل كل سطر فئته الضريبية المستقلة، وكيف تتجمع القيم بدقة في عناصر الإجماليات. أي خلل في سطر واحد يكسر هذا التوازن ويرفض الفاتورة كلها.
أخطاء شائعة في بناء سطور الفاتورة
أكثر أسباب رفض الفواتير عند المقاصة أو الإبلاغ تأتي من أخطاء على مستوى السطر. إليك أبرزها:
- عدم تطابق المبلغ: قيمة
cbc:LineExtensionAmountلا تساوي حاصل ضرب الكمية في سعر الوحدة بعد الخصم. - اختلاف العملة: سمة
currencyIDفي السطر تخالف عملة الفاتورة المعلنة في الترويسة. - تناقض الفئة الضريبية: فئة الصنف في
cac:Itemتخالف الفئة المستخدمة في حساب ضريبة السطر. - رمز وحدة قياس خاطئ: قيمة
unitCodeليست من قائمة الرموز المعتمدة. - خطأ التقريب: مبلغ الضريبة لا يلتزم بقواعد التقريب المعتمدة، فينحرف عن القيمة المتوقعة بهلّلات.
- عدم تطابق المجاميع: مجموع مبالغ السطور لا يساوي الإجمالي في
cac:LegalMonetaryTotal.
الخيط المشترك بين هذه الأخطاء أنها حسابية أو هيكلية، يكتشفها المحلّل النحوي للهيئة فوراً. التحقق المسبق من ملف XML قبل الإرسال يوفّر وقتاً طويلاً. راجع صفحة مخطط الفاتورة (Invoice Schema) والتحقق منه لفهم كيفية التحقق الآلي.
الفرق بين الخصم على السطر والخصم على الفاتورة
يخلط كثيرون بين الخصم على مستوى السطر والخصم على مستوى الفاتورة كلها. التمييز مهم لأنه يغيّر موضع العنصر في الملف وطريقة حسابه.
الخصم على السطر يوضع داخل cac:InvoiceLine ويؤثر على مبلغ ذلك السطر وحده، فتحسب ضريبته على القيمة بعد الخصم. أما الخصم على الفاتورة كلها فيوضع على مستوى الترويسة في عنصر cac:AllowanceCharge منفصل، ويوزّع أثره على الإجماليات حسب الفئة الضريبية.
القاعدة العملية: إذا كان الخصم مرتبطاً بصنف بعينه (خصم كمية على منتج محدد)، ضعه على السطر. وإذا كان خصماً عاماً على الفاتورة (خصم عميل وفيّ على القيمة الكاملة)، ضعه على مستوى الترويسة. الخلط بين الموضعين يسبب عدم تطابق في المجاميع ويرفض الفاتورة.
الرسوم تتبع المنطق نفسه. رسم توصيل خاص بصنف يوضع على سطره بقيمة cbc:ChargeIndicator تساوي true. ورسم شحن عام على الفاتورة كلها يوضع على مستوى الترويسة. في كل الحالات يحتاج العنصر إلى سبب نصي في cbc:AllowanceChargeReason.
أفضل الممارسات لبناء سطور سليمة
الالتزام بعدد من القواعد العملية يرفع نسبة قبول فواتيرك من أول محاولة:
- ابدأ المعرّفات من 1 وتزايد بانتظام: لا تترك فجوات ولا تكرر رقماً، فالمعرّف الفريد شرط لكل سطر.
- وحّد العملة عبر الفاتورة: تأكد أن كل
currencyIDفي السطور يطابق عملة الترويسة. - طبّق التقريب بسياسة واحدة: قرّب كل مبلغ ضريبة سطر إلى رقمين عشريين، ولا تخلط بين الجمع قبل التقريب وبعده.
- اربط الفئة الضريبية بالصنف لا بالحساب اليدوي: دع فئة
cac:Itemهي المصدر، واحسب الضريبة منها مباشرة. - تحقق من تطابق المجاميع قبل الإرسال: تأكد أن مجموع مبالغ السطور يساوي
cbc:LineExtensionAmountفي الإجماليات، ومجموع ضرائبها يساوي الضريبة الإجمالية. - استخدم رموز وحدات معتمدة فقط: راجع قائمة UN/ECE Recommendation 20 ولا تخترع رموزاً.
هذه القواعد تبدو بسيطة لكن تطبيقها يدوياً على فاتورة فيها عشرة سطور أو أكثر مرهق وعرضة للخطأ. لذلك تعتمد المنشآت على برنامج محاسبة يطبّقها تلقائياً ويتحقق منها قبل الإرسال.
علاقة بنود الفاتورة بمعيار UBL 2.1 وتنسيق XML
كل العناصر التي شرحناها تنتمي إلى فضاءي الأسماء (namespaces) في معيار UBL: البادئة cac: للمكوّنات المجمّعة (Aggregate Components) مثل cac:InvoiceLine وcac:Item، والبادئة cbc: للمكوّنات الأساسية (Basic Components) مثل cbc:ID وcbc:LineExtensionAmount. هذا التمييز جزء من بنية المعيار وليس اختيارياً.
لفهم المعيار كاملاً، اطّلع على صفحة معيار UBL 2.1 في الفاتورة الإلكترونية. ولفهم التنسيق التقني العام لملف XML وكيف تتكامل العناصر، راجع صفحة فاتورة XML: التنسيق التقني للفاتورة الإلكترونية.
المخطط (XSD) المعتمد من الهيئة يحدد بدقة أي حقل إلزامي وأيه اختياري، وما القيود على كل قيمة. الالتزام بالمخطط شرط لقبول الفاتورة في المرحلة الثانية من الفوترة الإلكترونية، حيث يُوقَّع كل ملف رقمياً ثم يرسل إلى منصة فاتورة للمقاصة (للفواتير بين المنشآت) أو الإبلاغ (للفواتير المبسّطة B2C).
كيف يساعدك قيود في بناء سطور الفاتورة
بناء ملف XML يدوياً لكل فاتورة عمل تقني معقّد ومعرّض للخطأ، خاصة مع حسابات الضريبة والتقريب على مستوى كل سطر. هنا يأتي دور برنامج محاسبة متوافق مع متطلبات الهيئة.
يولّد قيود عنصر cac:InvoiceLine لكل صنف في فاتورتك تلقائياً. تدخل الصنف والكمية والسعر من واجهة بسيطة، ويتولى النظام بناء الحقول التقنية: يحسب مبلغ السطر، يطبّق الخصومات قبل الضريبة، يحسب ضريبة كل سطر بالتقريب الصحيح، ويتأكد أن مجموع السطور يطابق إجماليات الفاتورة.
بعد بناء الملف، يوقّعه قيود رقمياً ويرسله إلى منصة فاتورة وفق متطلبات المرحلة الثانية، مع إدارة معرّف الختم التشفيري (CSID) المسجّل لدى الهيئة. النتيجة فاتورة مقبولة من أول محاولة، دون أن تكتب سطر XML واحداً بنفسك. وقيود متوافق مع المرحلة الثانية من الفوترة الإلكترونية ومعتمد رسمياً من هيئة الزكاة والضريبة والجمارك.
جرّب قيود مجاناً لمدة 14 يوماً. بدون بطاقة ائتمان.
أسئلة شائعة عن بنود الفاتورة في XML
كم عدد السطور المسموح بها في الفاتورة الواحدة؟
لا يوجد حد أقصى صريح لعدد عناصر cac:InvoiceLine في الفاتورة، لكن يجب وجود سطر واحد على الأقل. الحد العملي يأتي من حجم الملف وقدرة منصة فاتورة على معالجته. الفواتير العادية تحوي من سطر إلى عشرات السطور.
هل يجب أن تحمل كل السطور العملة نفسها؟
نعم. كل قيم currencyID داخل السطور يجب أن تطابق عملة الفاتورة المعلنة في الترويسة. لا يمكن خلط عملتين داخل فاتورة واحدة. في السوق السعودي تكون العملة الريال السعودي (SAR) في معظم الحالات.
ما الفرق بين سعر الوحدة ومبلغ السطر؟
سعر الوحدة (cbc:PriceAmount) قيمة وحدة واحدة من الصنف. مبلغ السطر (cbc:LineExtensionAmount) قيمة الكمية كاملة بعد الخصم وقبل الضريبة. العلاقة: مبلغ السطر يساوي سعر الوحدة مضروباً في الكمية ناقص الخصومات على السطر.
كيف أطبّق خصماً على سطر واحد فقط؟
تستخدم عنصر cac:AllowanceCharge داخل ذلك السطر مع cbc:ChargeIndicator بقيمة false. يُطرح مبلغ الخصم قبل حساب مبلغ السطر، فتُحسب الضريبة على القيمة الصافية. أما الخصم على الفاتورة كلها فيوضع على مستوى الترويسة لا السطر.
ماذا لو كانت أصنافي بفئات ضريبية مختلفة؟
كل سطر يحمل فئته الضريبية الخاصة في cac:Item عبر cac:ClassifiedTaxCategory. السطور الخاضعة للنسبة القياسية تأخذ الفئة S بنسبة 15%، والصفرية الفئة Z، والمعفاة الفئة E. ثم تتجمع السطور المتشابهة في عناصر cac:TaxSubtotal منفصلة على مستوى الفاتورة.
هل أحتاج لكتابة هذه السطور يدوياً؟
لا. برنامج محاسبة متوافق مثل قيود يبني عناصر cac:InvoiceLine تلقائياً من بيانات الفاتورة التي تدخلها بشكل عادي. لا تحتاج لمعرفة بنية XML لإصدار فاتورة متوافقة، فالنظام يتولى الحسابات والتنسيق والتوقيع والإرسال إلى منصة فاتورة.