Validasi Aturan Bisnis E-Faktur
HPDFEInvoiceValidator menggabungkan validasi kontainer Factur-X atau ZUGFeRD dengan set business-rule dan country-rule berversi yang dipilih secara eksplisit
Eksekusi aturan lengkap yang ditinjau
Pustaka menyertakan resource `.sch` dan `_codedb.xml` yang cocok untuk MINIMUM, BASIC WL, BASIC, EN 16931, dan EXTENDED
Mesin XE2 dan yang lebih baru mengeksekusi seluruh permukaan XPath 2 yang ditinjau melalui penguraian MSXML yang aman, padanan XPath 1 yang deterministik, dan evaluasi langsung untuk kuantor, jumlah FLWOR, cast, perbandingan urutan, daftar kode eksternal, pola tanggal, dan nilai indikator boolean
Profil EN 16931 berisi 618 pemeriksaan dan setiap pemeriksaan diproses selama setiap proses validasi
Validasi gabungan
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice pertama-tama memanggil THotPDF.ValidateFacturXInvoice, mengekstrak dan mengidentifikasi XML faktur, memuat resource Schematron khusus profil, dan mengeksekusi aturan bisnis
Faktur hibrida yang terdeteksi gagal tertutup saat ekstraksi XML, deteksi profil, pemuatan aturan, pemuatan basis data kode, atau evaluasi ekspresi tidak dapat selesai
Fungsi mengembalikan true hanya saat kontainer valid, aturan bisnis dievaluasi, dan tidak ada temuan galat atau peringatan yang tersisa
Registry profil dan cakupan validasi
THPDFEInvoiceRuleRegistry mendaftarkan satu lapisan business-rule dan, bila diwajibkan, satu lapisan country-rule per profil, dengan nama resource eksplisit, versi rule, dan implementasi IHPDFESchematronEngine opsional
Registry default memuat lima profil Factur-X bawaan dan rule EXTENDED dasar untuk profil Prancis EXTENDED-CTC-FR dan EXTENDED-B2B-FR
Profil Prancis menuntut pendaftaran country-rule tambahan sebelum ValidationComplete menjadi true, dan XRECHNUNG menuntut EN 16931 CII sekaligus country rule Jerman
Profil yang tidak dikenal tidak punya rule default dan tidak pernah fallback ke EXTENDED, dan HPDFSchematronFileForProfile mengembalikan string kosong untuk profil yang tidak dikenal atau spesifik-negara
HPDFValidateEInvoiceWithRegistry memakai registry milik pemanggil bersama pemeriksaan kontainer PDF, sedangkan HPDFValidateEInvoiceXML memvalidasi byte XML eksplisit dan sebuah profil tanpa mengevaluasi kontainer PDF
Report mengekspos ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete, dan ValidationNote, dan array RuleSets-nya mencatat setiap resource, versi, scope, ringkasan, dan status penyelesaian yang dipilih
Evaluasi rule yang selesai tetap bisa memuat pelanggaran business-rule, jadi periksa hasil Boolean atau BusinessRuleViolations di samping ValidationComplete
API-API ini melaporkan coverage business dan country rule, sementara validasi XML Schema, kebijakan transport, dan keputusan penerimaan legal tetap di luar cakupan ini
Rule CII XRechnung resmi
HPDFEInvoiceSaxon menyediakan bridge Saxon HE opsional yang mengeksekusi stylesheet Schematron 2.6.0 EN 16931 CII 1.3.16 dan XRechnung 3.0.2 yang dikompilasi tanpa dimodifikasi, dikirim bersama Lib/resources/Schematron/XRechnung
Resource-nya berasal dari konfigurasi validator KoSIT resmi tertanggal 31 Agustus 2026, dan README resource mencatat provenans, lisensi, serta hash-nya
Host menyuplai executable Java dan class path Saxon secara eksplisit, dan library menjalankan transformasi tanpa shell maupun jendela konsol yang terlihat, menegakkan timeout, meng-parse temuan SVRL, dan menghapus file sementaranya
Timeout nol memilih 60 detik, nilai di atas 3.600.000 milidetik ditolak, output diagnostik di-plafonkan pada 8 MiB, dan stylesheet yang dikompilasi serta report SVRL di-plafonkan pada 64 MiB sebelum di-parse atau dimuat
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;
Konfigurasikan class path Saxon dengan Saxon HE dan dependensi yang diwajibkan, dan pakai instance registry serta engine terpisah untuk setiap thread validasi
Bridge opsional menuntut Delphi XE2 atau lebih baru di Windows dan runtime Java/Saxon yang disuplai host, dan kedua runtime itu tidak pernah diunduh atau diinstal oleh library
Runtime yang hilang, sintaks faktur yang salah, DTD yang dilarang, timeout, transformasi yang gagal, dan output SVRL yang cacat menghasilkan diagnostik validasi-tidak-lengkap yang eksplisit
Rule faktur CTC Prancis resmi
HPDFRegisterFrenchCTCRules memilih lapisan profil resmi dan lapisan country BR-FR-Flux2 yang strict dari release FNFE-MPE 1.4.0.04, dipublikasikan 4 September 2026 untuk AFNOR XP Z12-012 versi 1.4
Release FNFE-MPE resmi dipublikasikan di bawah Apache 2.0 dan ditautkan oleh halaman resource FNFE-MPE, sementara stylesheet EN 16931 CII yang disertakan tetap memakai EUPL 1.2, dan stylesheet hasil kompilasi asli, source Schematron, code database, lisensi, path sumber, serta hash-nya dipertahankan di Lib/resources/Schematron/France
Untuk fisFacturX, helper mendukung BASIC WL, EN 16931, dan EXTENDED memakai lapisan rule Factur-X 1.09.2 yang dipublikasikan, dan penamaan kontainer EXTENDED-CTC-FR memakai lapisan EXTENDED Factur-X yang sama ditambah pemeriksaan country Prancis
Untuk fisCII standalone, helper mendukung EN 16931 dan lapisan CII EXTENDED-CTC-FR khusus, yang pembatasan dan identifier guideline-nya berbeda dari lapisan EXTENDED Factur-X hibrida
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);
Pendaftaran mempertahankan versi profil dan country-rule yang terpisah dan menjadikan lapisan country Prancis diwajibkan untuk profil yang dipilih, termasuk EN 16931 dan BASIC WL saat didaftarkan secara eksplisit untuk Prancis
Stylesheet nasional resmi yang strict dipakai langsung, tanpa menggantinya dengan varian warning-only yang terpisah atau menurunkan tingkat temuan
Paket resmi yang di-pin tidak punya profil rule EXTENDED-B2B-FR, jadi helper menolak nama legacy itu alih-alih memperlakukannya sebagai alias yang tersertifikasi otomatis
Validasi yang berhasil menetapkan penyelesaian lapisan business-rule faktur yang dipublikasikan ini, sementara XML Schema, pesan siklus hidup CDAR, ekstraksi data e-reporting, otorisasi platform, transport, dan sertifikasi legal tetap menjadi cakupan yang terpisah
API mesin
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary melaporkan Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable, dan EngineNote
Skipped tetap nol di mesin XE2 dan yang lebih baru dan dicadangkan untuk stub Delphi 7 atau data hasil lama
Ekspresi yang salah format atau tidak didukung menghasilkan temuan dengan tingkat keparahan galat eksplisit, menambah EvaluationErrors, dan tidak pernah hilang sebagai pemeriksaan yang berhasil
Fungsi helper XML Factur-X
Unit HPDFFacturX menyediakan helper level-byte yang membaca XML faktur Factur-X / ZUGFeRD tanpa membangun DOM, sehingga bisa jalan di setiap versi Delphi yang didukung library dan aman untuk byte hasil ekstraksi ExtractFacturXXML
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes) mengembalikan identifier guideline dari elemen GuidelineSpecifiedDocumentContextParameter / ram:ID dokumen CII, atau string kosong bila tidak ada
HPDFIsFacturXConformanceLevel(Value, FileName, Version) memvalidasi nama conformance level, menerima MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR, dan XRECHNUNG; level legacy COMFORT tambahan menuntut nama file ZUGFeRD 1.0 ZUGFeRD-invoice.xml dengan versi 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) menyilangkan guideline yang ditemukan di XML dengan conformance level, versi, dan nama file tersemat yang dideklarasikan
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) mengisi record THPDFFacturXInvoiceSummary dari XML faktur dan mengembalikan True ketika minimal XML faktur utamanya bisa ditemukan; tipe record summary itu sendiri dideklarasikan di HPDFDoc di sebelah THPDFFacturXInvoiceInfo
Diagnostik dan batas yang stabil
- Pengidentifikasi aturan diurai dari token pesan Schematron saat ada
- Pengidentifikasi yang hilang menerima ordinal profil dan asersi-atau-laporan yang deterministik
- Setiap temuan mempertahankan konteks asli dan ekspresi pengujiannya
- Jalur basis data kode eksternal dibatasi ke nama file saudara
- Pemrosesan DTD dan resolusi entitas XML eksternal dinonaktifkan
- Masukan XML faktur dibatasi hingga 64 MiB
Ketersediaan rantai alat
Delphi XE2 dan yang lebih baru menggunakan mesin kompatibilitas MSXML bawaan
Delphi 7 mempertahankan antarmuka dan tipe hasil bersama tetapi mengembalikan diagnostik mesin-tidak-tersedia
API terkait
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Penerimaan non-GUI
Jalankan Tests/Delphi/Run-EInvoiceRuleTests.ps1 dengan nilai JavaExecutable dan SaxonClassPath yang eksplisit, atau variabel lingkungan HOTPDF_JAVA_EXE dan HOTPDF_SAXON_CLASSPATH yang sesuai
Runner default menuntut konfigurasi engine rule resmi dan menjalankan Win32 maupun Win64 dengan peluncuran PDF viewer yang ditekan; -NativeOnly sengaja menghilangkan eksekusi Saxon resmi