אימות חוקי עסקים של חשבונית אלקטרונית

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

אבחונים וגדרות יציבים

זמינות שרשרת כלים

Delphi XE2 ואילך משתמשים במנוע התואמות MSXML המובנה

Delphi 7 שומר את הממשקים המשותפים ואת סוגי התוצאה אך מחזיר אבחון מנוע לא זמין

ממשקי API קשורים

קבלה בלי GUI

הריצו את Tests/Delphi/Run-EInvoiceRuleTests.ps1 עם ערכי JavaExecutable ו-SaxonClassPath מפורשים, או עם משתני הסביבה התואמים HOTPDF_JAVA_EXE ‏ו-HOTPDF_SAXON_CLASSPATH

ה-runner של ברירת המחדל דורש את תצורת מנוע החוקים הרשמיים ומריץ גם Win32 וגם Win64 כשהפעלת מציג ה-PDF מדוכאת; -NativeOnly מוותר בכוונה על הרצת Saxon רשמית