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

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

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