E-Fatura İş Kuralı Doğrulaması
HPDFEInvoiceValidator, Factur-X veya ZUGFeRD container doğrulamasını açıkça seçilmiş, sürümlü iş kuralı ve ülke kuralı kümeleriyle birleştirir
Eksiksiz gözden geçirilmiş kural yürütümü
Kütüphane; MINIMUM, BASIC WL, BASIC, EN 16931 ve EXTENDED için eşleşen `.sch` ve `_codedb.xml` kaynaklarıyla gelir
XE2 ve sonrası motor; güvenli MSXML ayrıştırması, deterministik XPath 1 eşdeğerleri ve quantifier'lar, FLWOR toplamları, cast'ler, dizi karşılaştırmaları, harici kod listeleri, tarih desenleri ve boolean gösterge değerleri için doğrudan değerlendirme üzerinden eksiksiz gözden geçirilmiş XPath 2 yüzeyini yürütür
EN 16931 profili 618 denetim içerir ve her denetim, her doğrulama çalıştırmasında işlenir
Birleşik doğrulama
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice önce THotPDF.ValidateFacturXInvoice'ı çağırır, fatura XML'ini çıkarır ve tanımlar, profile özgü Schematron kaynaklarını yükler ve iş kurallarını yürütür
Tespit edilen bir hibrit fatura; XML çıkarımı, profil tespiti, kural yükleme, kod-veritabanı yükleme veya ifade değerlendirmesi tamamlanamadığında fail closed davranır
Fonksiyon, yalnızca container geçerliyken, iş kuralları değerlendirilmişken ve hiçbir hata veya uyarı bulgusu kalmamışken true döndürür
Profil kayıt defteri ve doğrulama kapsamı
THPDFEInvoiceRuleRegistry, profil başına açık bir kaynak adı, kural sürümü ve isteğe bağlı IHPDFESchematronEngine uygulamasıyla bir iş kuralı katmanını ve gerektiğinde bir ülke kuralı katmanını kaydeder
Varsayılan kayıt defteri, dağıtılan beş Factur-X profilini ve Fransız profilleri EXTENDED-CTC-FR ile EXTENDED-B2B-FR için temel EXTENDED kurallarını içerir
Fransız profilleri, ValidationComplete değerinin true dönebilmesi için ek bir ülke kuralı kaydı gerektirir; XRECHNUNG ise hem EN 16931 CII hem de Alman ülke kurallarını ister
Bilinmeyen profillerin varsayılan kuralı yoktur ve asla EXTENDED'a düşmez; HPDFSchematronFileForProfile bilinmeyen veya ülkeye özgü profiller için boş bir dizgi döndürür
HPDFValidateEInvoiceWithRegistry, PDF container denetimiyle çağıranın kayıt defterini kullanır; HPDFValidateEInvoiceXML ise PDF container değerlendirmeden açık XML baytlarını ve bir profili doğrular
Rapor ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete ve ValidationNote alanlarını açığa çıkarır; RuleSets dizisi her seçilen kaynağın sürümünü, kapsamını, özetini ve tamamlanma durumunu kaydeder
Tamamlanan bir kural değerlendirmesi hâlâ iş kuralı ihlalleri içerebilir; bu yüzden ValidationComplete yanında Boolean sonucu veya BusinessRuleViolations değerini de kontrol edin
Bu API'ler iş ve ülke kuralı kapsamını bildirir; XML Schema doğrulaması, taşıma politikaları ve hukuki kabul kararları bu kapsamın dışında kalır
Resmi XRechnung CII kuralları
HPDFEInvoiceSaxon, Lib/resources/Schematron/XRechnung altında dağıtılan derlenmiş EN 16931 CII 1.3.16 ve XRechnung 3.0.2 Schematron 2.6.0 stylesheet'lerini değiştirilmeden çalıştıran isteğe bağlı bir Saxon HE köprüsü sağlar
Kaynaklar, 31 Ağustos 2026 tarihli resmi KoSIT validator yapılandırmasından gelir; kaynakların README'si kökenlerini, lisanslarını ve hash'lerini kaydeder
Java çalıştırılabilirini ve Saxon class path'ini ana uygulama açıkça sağlar; kütüphane dönüşümü shell'siz ve görünür bir konsol penceresi olmadan başlatır, timeout uygular, SVRL bulgularını ayrıştırır ve geçici dosyalarını kaldırır
Sıfır timeout 60 saniye seçer, 3.600.000 milisaniyenin üzerindeki değerler reddedilir; teşhis çıktısı 8 MiB ile, derlenmiş stylesheet'ler ve SVRL raporları ayrıştırma veya yükleme öncesinde 64 MiB ile sınırlanır
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;
Saxon class path'ini Saxon HE ve gerekli bağımlılıklarıyla yapılandırın ve her doğrulama iş parçacığı için ayrı bir registry ve engine örneği kullanın
İsteğe bağlı köprü, Windows'ta Delphi XE2 veya sonrasını ve ana uygulamanın sağladığı bir Java/Saxon çalışma zamanı gerektirir; çalışma zamanlarının hiçbiri kütüphane tarafından indirilmez veya kurulmaz
Eksik çalışma zamanları, yanlış fatura sözdizimi, yasaklı DTD'ler, timeout, başarısız dönüşüm ve hatalı biçimli SVRL çıktısı açık eksik-doğrulama teşhisleri üretir
Resmi Fransız CTC fatura kuralları
HPDFRegisterFrenchCTCRules, AFNOR XP Z12-012 sürüm 1.4 için 4 Eylül 2026'da yayımlanan FNFE-MPE release 1.4.0.04 içinden resmi profil katmanını ve katı BR-FR-Flux2 ülke katmanını seçer
Resmi FNFE-MPE release'ı Apache 2.0 altında yayımlanır ve FNFE-MPE kaynak sayfasından bağlanır; dahil edilen EN 16931 CII stylesheet'i EUPL 1.2'yi korur ve özgün derlenmiş stylesheet'ler, Schematron kaynakları, kod veritabanları, lisanslar, kaynak yolları ve hash'ler Lib/resources/Schematron/France altında saklanır
fisFacturX için yardımcı, yayımlanmış Factur-X 1.09.2 kural katmanlarıyla BASIC WL, EN 16931 ve EXTENDED destekler; EXTENDED-CTC-FR container tanımı, aynı Factur-X EXTENDED katmanını Fransız ülke denetimleriyle birlikte kullanır
Bağımsız fisCII için EN 16931'i ve özel EXTENDED-CTC-FR CII katmanını destekler; bu katmanın kısıtları ve guideline tanımlayıcısı hibrit Factur-X EXTENDED katmanından farklıdır
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);
Kayıt, profil ve ülke kuralı sürümlerini ayrı tutar ve Fransız ülke katmanını seçilen profil için zorunlu kılar; France için açıkça kaydedildiklerinde EN 16931 ve BASIC WL de buna dahildir
Yayımlanmış katı ulusal stylesheet doğrudan kullanılır; ayrı yalnızca-uyarı varyantıyla değiştirilmez ve bulgular aşağı çekilmez
Sabitlenen resmi pakette EXTENDED-B2B-FR kural profili yoktur; yardımcı bu eski adı otomatik sertifikalı bir takma ad saymak yerine reddeder
Başarılı doğrulama, yayımlanan bu fatura iş kuralı katmanlarının tamamlandığını gösterir; XML Schema, CDAR yaşam döngüsü mesajları, e-reporting veri çıkarımı, platform yetkilendirmesi, taşıma ve hukuki sertifikasyon ayrı kapsamlar olarak kalır
Motor API'si
Engine := HPDFCreateSchematronEngine;
if not Engine.Load(SchematronPath, ErrorText) then
raise Exception.Create(ErrorText);
Findings := Engine.Validate(XMLBytes);
Summary := Engine.LastSummary;
THPDFSchematronSummary; Profile, TotalRules, Evaluated, Skipped, EvaluationErrors, Violations, EngineAvailable ve EngineNote alanlarını bildirir
Skipped, XE2 ve sonrası motorun içinde sıfır kalır; Delphi 7 stub'u veya eski sonuç verisi için ayrılmıştır
Hatalı biçimli veya desteklenmeyen ifadeler; açık hata-şiddetli bulgular üretir, EvaluationErrors sayacını artırır ve asla başarılı denetim gibi kaybolmaz
Factur-X XML yardımcı işlevleri
HPDFFacturX birimi, Factur-X / ZUGFeRD fatura XML'ini DOM kurmadan okuyan bayt düzeyi yardımcılar sağlar; böylece kütüphanenin desteklediği her Delphi sürümünde çalışır ve ExtractFacturXXML çıktısı baytlar üzerinde güvenlidir
HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes), bir CII belgesinin GuidelineSpecifiedDocumentContextParameter / ram:ID elementinden guideline tanımlayıcısını döndürür; yoksa boş dizgi döner
HPDFIsFacturXConformanceLevel(Value, FileName, Version), bir conformance düzeyi adını doğrular ve MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR ve XRECHNUNG kabul eder; eski COMFORT düzeyi ayrıca 1.0 sürümüyle ZUGFeRD-invoice.xml dosya adını gerektirir
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName), XML'de bulunan guideline'ı bildirilen conformance düzeyi, sürüm ve gömülü dosya adıyla çapraz kontrol eder
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary), fatura XML'inden bir THPDFFacturXInvoiceSummary kaydını doldurur ve en az birincil fatura XML'i bulunabildiyse True döndürür; özet kayıt türünün kendisi HPDFDoc içinde THPDFFacturXInvoiceInfo'nun yanında bildirilir
Kararlı teşhisler ve sınırlar
- Kural tanımlayıcıları, varsa Schematron mesaj token'ından ayrıştırılır
- Eksik tanımlayıcılar deterministik profil ve assertion-veya-report sıra numaraları alır
- Her bulgu, özgün bağlamını ve test ifadelerini korur
- Harici kod-veritabanı yolları kardeş dosya adlarıyla sınırlanır
- DTD işleme ve harici XML entity çözümü devre dışıdır
- Fatura XML girdisi 64 MiB ile sınırlıdır
Araç zinciri kullanılabilirliği
Delphi XE2 ve sonrası yerleşik MSXML uyumluluk motorunu kullanır
Delphi 7, paylaşılan arayüzleri ve sonuç türlerini korur ancak kullanılamayan-motor teşhisi döndürür
İlgili API'ler
HPDFValidateEInvoiceHPDFValidateEInvoiceWithRegistryHPDFValidateEInvoiceXMLTHPDFEInvoiceRuleRegistryHPDFRegisterXRechnungRulesHPDFRegisterFrenchCTCRulesTHPDFFrenchInvoiceSyntaxHPDFCreateSchematronEngineHPDFSchematronFileForProfileIHPDFESchematronEngineTHPDFBusinessRuleResultTHPDFSchematronSummary- THotPDF.ValidateFacturXInvoice
- THotPDF.ExtractFacturXXML
Non-GUI kabul testleri
Tests/Delphi/Run-EInvoiceRuleTests.ps1 betiğini açık JavaExecutable ve SaxonClassPath değerleriyle ya da karşılık gelen HOTPDF_JAVA_EXE ve HOTPDF_SAXON_CLASSPATH ortam değişkenleriyle çalıştırın
Varsayılan runner resmi kural motoru yapılandırmasını gerektirir ve PDF görüntüleyici başlatımı bastırılmış şekilde hem Win32 hem Win64 çalıştırır; -NativeOnly resmi Saxon çalıştırımını bilinçli olarak dışarıda bırakır