אימות חוקי עסקים של חשבונית אלקטרונית
HPDFEInvoiceValidator משלב אימות מארז של Factur-X או ZUGFeRD עם מכלולי חוקי עסקים וחוקי מדינה שנבחרו במפורש ועם גרסאות מוגדרות
ביצוע חוקים מלא שנבדק
הספריה כוללת משאבי .sch ו-_codedb.xml תואמים עבור MINIMUM, BASIC WL, BASIC, EN 16931 ו-EXTENDED
מנוע ה-XE2 ואילך מבצע את כל משטח ה-XPath 2 שנבדק דרך פרסור MSXML מאובטח, מקבילות XPath 1 דטרמיניסטיות והערכה ישירה עבור quantifiers, סכומי FLWOR, המרות cast, השוואות רצפים, רשימות קודים חיצוניות, תבניות תאריכים וערכי אינדיקטור בוליאניים
פרופיל EN 16931 מכיל 618 בדיקות וכל בדיקה מעובדת בכל הרצת אימות
אימות משולב
var
Report: THPDFEInvoiceValidationReport;
begin
if not HPDFValidateEInvoice(PDF,
'Lib\resources\Schematron', Report) then
LogValidationFailure(Report);
end;
HPDFValidateEInvoice קורא תחילה ל-THotPDF.ValidateFacturXInvoice, מחלץ ומזהה את XML החשבונית, טוען את משאבי ה-Schematron המיוחדים לפרופיל ומבצע את חוקי העסקים
חשבונית היברידית שזוהתה נסגרת בכשל כאשר חילוץ XML, זיהוי פרופיל, טעינת חוקים, טעינת בסיס קודים או הערכת ביטויים אינם יכולים להסתיים
הפונקציה מחזירה true רק כאשר המארז תקין, חוקי העסקים הוערכו ולא נותרה ממצא שגיאה או אזהרה
רישום פרופילים והיקף אימות
THPDFEInvoiceRuleRegistry רושם שכבת חוקי-עסקים אחת וכשנדרש שכבת חוקי-מדינה אחת לכל פרופיל, עם שם משאב מפורש, גרסת חוקים ומימוש IHPDFESchematronEngine אופציונלי
רישום ברירת המחדל מכיל את חמשת פרופילי Factur-X המצורפים ואת חוקי ה-EXTENDED הבסיסיים עבור הפרופילים הצרפתיים EXTENDED-CTC-FR ו-EXTENDED-B2B-FR
הפרופילים הצרפתיים דורשים רישום נוסף של חוקי-מדינה לפני ש-ValidationComplete הופך true, ו-XRECHNUNG דורש גם את EN 16931 CII וגם את חוקי המדינה הגרמניים
פרופילים לא מוכרים אינם מקבלים חוקי ברירת מחדל ולעולם אינם נופלים בחזרה ל-EXTENDED, ו-HPDFSchematronFileForProfile מחזיר מחרוזת ריקה עבור פרופילים לא מוכרים או ספציפיים-למדינה
HPDFValidateEInvoiceWithRegistry משתמש ברישום של הקורא יחד עם בדיקת המארז של ה-PDF, בעוד HPDFValidateEInvoiceXML מאמת bytes של XML מפורשים ופרופיל בלי להעריך מארז PDF
הדוח חושף את ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete ו-ValidationNote, ומערך ה-RuleSets שלו רושם עבור כל משאב שנבחר את הגרסה, ההיקף, הסיכום ומצב ההשלמה
הערכת חוקים שהושלמה עדיין יכולה להכיל הפרות של חוקי עסקים, ולכן בדקו את התוצאה הבוליאנית או את BusinessRuleViolations בנוסף ל-ValidationComplete
ה-APIs האלה מדווחים על כיסוי של חוקי עסקים וחוקי מדינה, בעוד אימות XML Schema, מדיניות תעבורה והחלטות קבלה משפטיות נשארים מחוץ להיקף הזה
חוקי CII רשמיים של XRechnung
HPDFEInvoiceSaxon מספק גשר אופציונלי ל-Saxon HE שמריץ את גיליונות הסגנון המקומפלים ללא שינוי של EN 16931 CII 1.3.16 ושל XRechnung 3.0.2 Schematron 2.6.0 המצורפים ב-Lib/resources/Schematron/XRechnung
המשאבים מגיעים מ-תצורת ה-validator הרשמית של KoSIT מיום 31 באוגוסט 2026, וה-README של המשאבים רושם את המקור, הרישיונות וה-hashים שלהם
המארח מספק במפורש את קובץ ההפעלה של Java ואת class path של Saxon, והספרייה מפעילה את הטרנספורמציה בלי shell ובלי חלון קונסולה גלוי, אוכפת timeout, מנתחת ממצאי SVRL ומוחקת את הקבצים הזמניים שלה
timeout של אפס בוחר 60 שניות, ערכים מעל 3,600,000 מילישניות נדחים, פלט האבחון מוגבל ל-8 MiB, וגיליונות הסגנון המקומפלים ודוחות ה-SVRL מוגבלים ל-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 עם Saxon HE ועם התלויות הנדרשות שלו, והשתמשו ברישום ובמופע מנוע נפרדים לכל thread אימות
הגשר האופציונלי דורש Delphi XE2 ואילך על Windows וסביבת ריצה Java/Saxon שהמארח מספק; הספרייה לא מורידה ולא מתקינה אף אחת מהן
סביבות ריצה חסרות, תחביר חשבונית שגוי, DTDs אסורים, timeout, טרנספורמציה שנכשלה ופלט SVRL פגום מפיקים אבחונים מפורשים של אימות שלא הושלם
חוקי חשבונית CTC רשמיים של צרפת
HPDFRegisterFrenchCTCRules בוחר את שכבת הפרופיל הרשמית ואת שכבת המדינה המחמירה BR-FR-Flux2 מתוך מהדורה 1.4.0.04 של FNFE-MPE, שפורסמה ב-4 בספטמבר 2026 עבור AFNOR XP Z12-012 גרסה 1.4
המהדורה הרשמית של FNFE-MPE מפורסמת תחת Apache 2.0 ומקושרת מ-דף המשאבים של FNFE-MPE, גיליון הסגנון EN 16931 CII הכלול שומר על EUPL 1.2, וגיליונות הסגנון המקומפלים המקוריים, מקורות ה-Schematron, בסיסי הקודים, הרישיונות, נתיבי המקור וה-hashים נשמרים תחת Lib/resources/Schematron/France
עבור fisFacturX ה-helper תומך ב-BASIC WL, ב-EN 16931 וב-EXTENDED באמצעות שכבות החוקים של Factur-X 1.09.2 שפורסמו, והגדרת המארז EXTENDED-CTC-FR משתמשת באותה שכבת Factur-X EXTENDED בתוספת הבדיקות הצרפתיות למדינה
עבור fisCII עצמאי הוא תומך ב-EN 16931 ובשכבת ה-CII הייעודית EXTENDED-CTC-FR, שהמגבלות ומזהה ה-guideline שלה שונים משכבת ה-Factur-X EXTENDED ההיברידית
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);
הרישום שומר על גרסאות נפרדות לפרופיל ולחוקי-המדינה והופך את שכבת המדינה הצרפתית לנדרשת עבור הפרופיל שנבחר, לרבות EN 16931 ו-BASIC WL כשנרשמו במפורש עבור צרפת
גיליון הסגנון הלאומי המחמיר שפורסם משמש ישירות, בלי להחליף אותו בווריאנט הנפרד של אזהרות-בלבד ובלי להוריד דרגת ממצאים
לחבילה הרשמית הנעולה אין פרופיל חוקים EXTENDED-B2B-FR, ולכן ה-helper דוחה את השם הישן הזה במקום להתייחס אליו כאל כינוי מאושר אוטומטית
אימות מוצלח מבסס השלמה של שכבות חוקי העסקים המפורסמים האלה לחשבוניות, בעוד XML Schema, הודעות מחזור-חיים של CDAR, חילוץ נתוני e-reporting, הרשאות פלטפורמה, תעבורה ואישור משפטי נשארים היקפים נפרדים
מנוע API
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 ואת EngineNote
Skipped נשאר אפס במנוע ה-XE2 ואילך ושמור לנתוני ה-stub של Delphi 7 או לנתוני תוצאה ישנים
ביטויים פגומים או בלתי נתמכים מייצרים ממצאי חומרת שגיאה מפורשים, מגדילים את EvaluationErrors, ולעולם אינם נעלמים כבדיקות מוצלחות
פונקציות עזר XML של Factur-X
יחידת HPDFFacturX מצורפת עם עזרי רמת-byte שקוראים XML של חשבונית Factur-X / ZUGFeRD בלי לבנות DOM, כך שהם רצים בכל גרסת Delphi שהספרייה תומכת בה ובטוחים על bytes שחולצו מ-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 החשבונית ומחזיר True כשלפחות ה-XML הראשי של החשבונית אותר; סוג רשומת הסיכום עצמו מוצהר ב-HPDFDoc לצד THPDFFacturXInvoiceInfo
אבחונים וגדרות יציבים
- מזהי חוקים מנותחים מאסימון ההודעה של Schematron כשהם קיימים
- מזהים חסרים מקבלים סודרים דטרמיניסטיים של assertion או report
- כל ממצא שומר על ההקשר המקורי שלו ועל ביטויי הבדיקה
- נתיבי בסיסי קודים חיצוניים מוגבלים לשמות קבצים אחים
- עיבוד DTD ופתרון ישויות XML חיצוניות מושבתים
- קלט XML החשבונית מוגבל ל-64 MiB
זמינות שרשרת כלים
Delphi XE2 ואילך משתמשים במנוע התואמות MSXML המובנה
Delphi 7 שומר את הממשקים המשותפים ואת סוגי התוצאה אך מחזיר אבחון מנוע לא זמין
ממשקי 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 מוותר בכוונה על הרצת Saxon רשמית