E-Invoice Business-Rule Validation
HPDFEInvoiceValidator اعتبارسنجی container مربوط به Factur-X یا ZUGFeRD را با مجموعههای قواعد کسبوکار و قواعد کشوریِ نسخهداری که صریحاً انتخاب شدهاند ترکیب میکند
Complete reviewed rule execution
کتابخانه منابع متناظر `.sch` و `_codedb.xml` را برای MINIMUM، BASIC WL، BASIC، EN 16931 و EXTENDED همراه دارد
موتور XE2 و جدیدتر کل سطح بازبینیشدهٔ XPath 2 را از طریق parse امن MSXML، معادلهای قطعی XPath 1 و ارزیابی مستقیم برای quantifierها، مجموعهای FLWOR، castها، مقایسهٔ sequenceها، فهرستهای کد خارجی، الگوهای تاریخ و مقادیر نشانگر boolean اجرا میکند
profile مربوط به EN 16931 شامل 618 بررسی است و همهٔ آنها در هر اجرای اعتبارسنجی پردازش میشوند
Combined validation
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice ابتدا THotPDF.ValidateFacturXInvoice را فراخوانی میکند، XML فاکتور را استخراج و شناسایی میکند، منابع Schematron مخصوص profile را بارگذاری میکند و قواعد کسبوکار را اجرا میکند
فاکتور هیبریدیِ شناساییشده اگر استخراج XML، تشخیص profile، بارگذاری قواعد، بارگذاری code-database یا ارزیابی عبارت به پایان نرسد، بهصورت fail-closed شکست میخورد
تابع فقط وقتی true برمیگرداند که container معتبر باشد، قواعد کسبوکار ارزیابی شده باشند و هیچ یافتهٔ error یا warning باقی نمانده باشد
مخزن profile و دامنهٔ اعتبارسنجی
THPDFEInvoiceRuleRegistry برای هر profile یک لایهٔ قواعد کسبوکار و در صورت نیاز یک لایهٔ قواعد کشوری ثبت میکند؛ با نام منبع صریح، نسخهٔ قاعده و پیادهسازی اختیاری IHPDFESchematronEngine
مخزن پیشفرض، پنج profile همراه کتابخانهٔ Factur-X و قواعد پایهٔ EXTENDED را برای profileهای فرانسوی EXTENDED-CTC-FR و EXTENDED-B2B-FR در بر دارد
profileهای فرانسوی پیش از true شدن ValidationComplete به یک ثبت اضافهٔ قواعد کشوری نیاز دارند و XRECHNUNG هم قواعد EN 16931 CII و هم قواعد کشوری آلمانی را میخواهد
profileهای ناشناخته قاعدهٔ پیشفرضی ندارند و هرگز به EXTENDED برنمیگردند؛ HPDFSchematronFileForProfile هم برای profileهای ناشناخته یا مخصوص-کشور رشتهٔ خالی برمیگرداند
HPDFValidateEInvoiceWithRegistry از مخزن فراخوان بههمراه بررسی container PDF استفاده میکند، در حالی که HPDFValidateEInvoiceXML بایتهای XML صریح و یک profile را بدون ارزیابی container PDF اعتبارسنجی میکند
گزارش ProfileSupported، CountryRulesRequired، CountryRulesEvaluated، ValidationComplete و ValidationNote را افشا میکند و آرایهٔ RuleSets آن هر منبع انتخابشده، نسخه، دامنه، خلاصه و وضعیت تکمیل را ثبت میکند
ارزیابی کامل قواعد همچنان میتواند نقض قواعد کسبوکار داشته باشد؛ پس علاوه بر ValidationComplete، نتیجهٔ بولی یا BusinessRuleViolations را هم بررسی کنید
این APIها پوشش قواعد کسبوکار و قواعد کشوری را گزارش میکنند؛ اعتبارسنجی XML Schema، سیاستهای انتقال و تصمیمهای پذیرش قانونی بیرون از این دامنه میمانند
قواعد رسمی CII در XRechnung
HPDFEInvoiceSaxon یک پل اختیاری Saxon HE فراهم میکند که stylesheetهای کامپایلشدهٔ دستنخوردهٔ EN 16931 CII 1.3.16 و XRechnung 3.0.2 Schematron 2.6.0 را که در Lib/resources/Schematron/XRechnung همراه کتابخانهاند اجرا میکند
این منابع از پیکربندی رسمی KoSIT validator به تاریخ ۳۱ اوت ۲۰۲۶ میآیند و README منابع، خاستگاه، مجوزها و هشهایشان را ثبت کرده است
میزبان، اجرایی Java و class path ساکسون را صریحاً فراهم میکند و کتابخانه تبدیل را بدون shell یا پنجرهٔ کنسولِ قابل مشاهده اجرا میکند، timeout را اعمال میکند، یافتههای SVRL را parse میکند و فایلهای موقتش را پاک میکند
timeout صفر یعنی ۶۰ ثانیه، مقادیر بالای 3,600,000 میلیثانیه رد میشوند، خروجی تشخیصی سقف 8 MiB دارد و stylesheetهای کامپایلشده و گزارشهای SVRL پیش از parse یا بارگذاری سقف 64 MiB دارند
uses HPDFEInvoiceValidator, HPDFEInvoiceSaxon;
Registry := THPDFEInvoiceRuleRegistry.Create;
try
Engine := HPDFCreateSaxonSchematronEngine(
JavaExecutable, SaxonClassPath, 60000);
HPDFRegisterXRechnungRules(Registry, Engine);
Valid := HPDFValidateEInvoiceWithRegistry(PDF,
'Lib\resources\Schematron', Registry, Report);
finally
Registry.Free;
end;
class path ساکسون را با Saxon HE و وابستگیهای الزامیاش پیکربندی کنید و برای هر نخ اعتبارسنجی از مخزن و نمونهٔ موتور جداگانه استفاده کنید
پل اختیاری روی ویندوز به Delphi XE2 یا جدیدتر و یک زماناجرای Java/Saxon فراهمشده توسط میزبان نیاز دارد؛ هیچکدام از این زماناجراها را کتابخانه دانلود یا نصب نمیکند
زماناجرای غایب، syntax غلط فاکتور، DTDهای ممنوع، timeout، تبدیل شکستخورده و خروجی SVRL بدشکل، تشخیصهای صریح اعتبارسنجی-ناقص تولید میکنند
قواعد رسمی CTC فاکتور فرانسه
HPDFRegisterFrenchCTCRules لایهٔ رسمی profile و لایهٔ کشوری سختگیرانهٔ BR-FR-Flux2 را از انتشار 1.4.0.04 فنامپئی (FNFE-MPE) برمیگزیند که در ۴ سپتامبر ۲۰۲۶ برای AFNOR XP Z12-012 نسخهٔ 1.4 منتشر شده است
انتشار رسمی FNFE-MPE تحت Apache 2.0 منتشر شده و از صفحهٔ منابع FNFE-MPE لینک شده است؛ stylesheet ضمیمهٔ EN 16931 CII مجوز EUPL 1.2 را نگه میدارد و stylesheetهای کامپایلشدهٔ اصلی، سورسهای Schematron، پایگاههای کد، مجوزها، مسیرهای مبدأ و هشها تحت Lib/resources/Schematron/France دستنخورده حفظ میشوند
برای fisFacturX، این helper با استفاده از لایههای قاعدهٔ منتشرشدهٔ Factur-X 1.09.2 از BASIC WL، EN 16931 و EXTENDED پشتیبانی میکند و نامگذاری container برای EXTENDED-CTC-FR از همان لایهٔ EXTENDED فاکتور-X بهعلاوهٔ بررسیهای کشوری فرانسه استفاده میکند
برای fisCII مستقل، از EN 16931 و لایهٔ CII اختصاصی EXTENDED-CTC-FR پشتیبانی میکند که محدودیتها و شناسهٔ guideline آن با لایهٔ EXTENDED فاکتور-X هیبریدی تفاوت دارد
Engine := HPDFCreateSaxonSchematronEngine(
JavaExecutable, SaxonClassPath, 60000);
HPDFRegisterFrenchCTCRules(Registry, 'EN 16931',
Engine, fisFacturX);
Valid := HPDFValidateEInvoiceWithRegistry(PDF,
'Lib\resources\Schematron', Registry, Report);
HPDFRegisterFrenchCTCRules(Registry, 'EXTENDED-CTC-FR',
Engine, fisCII);
Valid := HPDFValidateEInvoiceXML(XMLBytes, 'EXTENDED-CTC-FR',
'Lib\resources\Schematron', Registry, Report);
ثبت، نسخههای جداگانهٔ profile و قواعد کشوری را حفظ میکند و لایهٔ کشوری فرانسه را برای profile انتخابی الزامی میکند؛ از جمله EN 16931 و BASIC WL وقتی صریحاً برای فرانسه ثبت شده باشند
stylesheet ملیِ سختگیرانهٔ منتشرشده مستقیماً به کار میرود؛ بدون جایگزینی با نسخهٔ جداگانهٔ فقط-هشدار یا پایینآوردن سطح یافتهها
بستهٔ رسمی سنجاقشده profile قاعدهٔ EXTENDED-B2B-FR ندارد؛ بنابراین helper آن نام قدیمی را رد میکند و آن را مثل یک نام مستعار خودکار-تأییدشده نمیگیرد
اعتبارسنجی موفق، تکمیل همین لایههای منتشرشدهٔ قواعد کسبوکار فاکتور را اثبات میکند؛ XML Schema، پیامهای چرخهٔ عمر CDAR، استخراج دادهٔ e-reporting، مجوزدهی پلتفرم، انتقال و گواهی قانونی دامنههای جداگانهای میمانند
Engine API
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary reports Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable, and EngineNote
Skipped در موتور XE2 و جدیدتر صفر میماند و برای stub مربوط به Delphi 7 یا دادههای نتیجهٔ legacy رزرو شده است
عبارتهای malformed یا پشتیبانینشده یافتههای صریح با severity برابر error تولید میکنند، EvaluationErrors را افزایش میدهند و هرگز بهعنوان بررسی موفق ناپدید نمیشوند
توابع کمکی XML فاکتور-X
یونیت HPDFFacturX helperهایی سطح-بایت همراه دارد که XML فاکتور Factur-X / ZUGFeRD را بدون ساختن DOM میخوانند؛ بنابراین روی هر نسخهٔ Delphi که کتابخانه پشتیبانی میکند اجرا میشوند و روی بایتهای استخراجشده از ExtractFacturXXML امناند
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) شناسهٔ guideline را از عنصر GuidelineSpecifiedDocumentContextParameter / ram:ID سند CII برمیگرداند و در صورت نبودش رشتهٔ خالی برمیگرداند
HPDFIsFacturXConformanceLevel(Value, FileName, Version) نام سطح انطباق را اعتبارسنجی میکند و MINIMUM، BASIC WL، BASIC، EN 16931، EN16931، EXTENDED، EXTENDED-CTC-FR، EXTENDED-B2B-FR و XRECHNUNG را میپذیرد؛ سطح قدیمی COMFORT علاوه بر آن، نام فایل ZUGFeRD-invoice.xml مخصوص ZUGFeRD 1.0 با نسخهٔ 1.0 را الزامی میکند
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) guideline پیداشده در XML را با سطح انطباق، نسخه و نام فایل جاسازیشدهٔ اعلانشده تطبیق میدهد
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) یک رکورد THPDFFacturXInvoiceSummary را از XML فاکتور پر میکند و دستکم وقتی XML فاکتور اصلی قابل مکانیابی باشد True برمیگرداند؛ نوع رکورد خلاصه خودش در HPDFDoc کنار THPDFFacturXInvoiceInfo اعلان شده است
Stable diagnostics and limits
- شناسهٔ قاعده در صورت وجود از توکن پیام Schematron parse میشود
- شناسههای مفقود ترتیبهای قطعی profile و assertion-یا-report میگیرند
- هر یافته context و عبارتهای test اصلی خود را حفظ میکند
- مسیرهای code-database خارجی به نام فایلهای همسطح محدود میشوند
- پردازش DTD و resolve کردن موجودیتهای خارجی XML غیرفعال است
- ورودی XML فاکتور به 64 MiB محدود است
Toolchain availability
Delphi XE2 و جدیدتر از موتور سازگاری داخلی MSXML استفاده میکنند
Delphi 7 interfaceها و انواع نتیجهٔ مشترک را حفظ میکند اما یک diagnostic مبنی بر در دسترس نبودن موتور برمیگرداند
APIهای مرتبط
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
پذیرش بدون-GUI
Tests/Delphi/Run-EInvoiceRuleTests.ps1 را با مقادیر صریح JavaExecutable و SaxonClassPath یا متغیرهای محیطی متناظر HOTPDF_JAVA_EXE و HOTPDF_SAXON_CLASSPATH اجرا کنید
runner پیشفرض به پیکربندی موتور قواعد رسمی نیاز دارد و هر دو Win32 و Win64 را با سرکوب اجرای نمایشگر PDF اجرا میکند؛ -NativeOnly عمداً اجرای رسمی ساکسون را کنار میگذارد