UBL — Universal Business Language — معيار من OASIS يستند إليه Peppol BIS، وEN 16931، وزاتكا المرحلة الثانية، وملف PINT الإماراتي، ومخطط IRP الهندي (مع توسعات)، وعدد من أنظمة أمريكا اللاتينية. وإن لم تُصالح استراتيجيتك في الفوترة الإلكترونية معيار UBL 2.1، ستعيد كتابة نفس XML مراراً وتكراراً.
شكل فاتورة UBL
فاتورة UBL مستند XML بثلاث مساحات أسماء رئيسية: cbc (المكونات الأساسية المشتركة — أنواع بدائية مثل ID وAmount)، وcac (المكونات التجميعية المشتركة — أنواع مركّبة مثل Party وTaxTotal)، إضافةً إلى مساحة اسم المستند نفسه. كل مستند UBL يتبع النمط ذاته:
<Invoice
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017</cbc:CustomizationID>
<cbc:ID>INV-2026-0001</cbc:ID>
<cbc:IssueDate>2026-01-15</cbc:IssueDate>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:AccountingSupplierParty>...</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>...</cac:AccountingCustomerParty>
<cac:TaxTotal>...</cac:TaxTotal>
<cac:LegalMonetaryTotal>...</cac:LegalMonetaryTotal>
<cac:InvoiceLine>...</cac:InvoiceLine>
</Invoice>خمسة مفاهيم خاطئة في الغالب
- TaxTotal مقابل LegalMonetaryTotal. الأول يفصّل الضريبة حسب النسبة، والثاني هو إجمالي المبلغ المستحق. لا تخلط بينهما.
- AllowanceCharge قد يكون خصماً أو إضافة — يحدّد ذلك ChargeIndicator (false = خصم، true = إضافة). المؤشر الخاطئ يعني إجمالياً خاطئاً.
- معرفات نقاط الوصول تتطلب خاصية scheme (مثل schemeID="0088"). بدونها يعطي المتحققون أخطاءً غامضةً عن معرفات مفقودة.
- الكميات تستخدم رمز وحدة من UN/CEFACT (EA = قطعة، KGM = كيلوجرام، HUR = ساعة). كلمة "piece" ليست قيمة صحيحة.
- رموز TaxCategory هي UNCL5305: S = نسبة قياسية، Z = نسبة صفرية، E = إعفاء، AE = العكس الضريبي. لا تخترع رموزاً جديدة.
تنتج EUStrategy في إنفويسي UBL 2.1 متوافقاً مع BIS Billing 3.0 — نفس XML يصلح لنقاط وصول بيبول، ولملف UAE PINT، ولأي نظام يستهلك EN 16931.