Перевірка бізнес-правил електронного рахунку
HPDFEInvoiceValidator поєднує перевірку контейнера Factur-X або ZUGFeRD із явно обраними версіонованими наборами бізнес-правил і правил країни
Повне переглянуте виконання правил
Бібліотека постачає відповідні ресурси `.sch` і `_codedb.xml` для MINIMUM, BASIC WL, BASIC, EN 16931 і EXTENDED
Движок XE2 і новіших виконує повну переглянуту поверхню XPath 2 через безпечний аналіз MSXML, детерміновані еквіваленти XPath 1 і пряму оцінку кванторів, сум FLWOR, приведень, порівнянь послідовностей, зовнішніх списків кодів, шаблонів дат і булевих значень індикаторів
Профіль 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 перевіряє явні байти XML і профіль без оцінки PDF-контейнера
Звіт відкриває ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete і ValidationNote, а його масив RuleSets записує кожен обраний ресурс, версію, охоплення, підсумок і статус завершення
Завершена оцінка правил може все ще містити порушення бізнес-правил, тож перевіряйте булевий результат чи BusinessRuleViolations разом із ValidationComplete
Ці API повідомляють про покриття бізнес-правил і правил країни, тоді як валідація 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
Ресурси походять з офіційної конфігурації валідатора KoSIT від 31 серпня 2026, а README ресурсів фіксує їхнє походження, ліцензії та хеші
Застосунок-господар явно постачає виконуваний файл Java і class path Saxon, а бібліотека запускає трансформацію без оболонки та видимого консольного вікна, дотримується таймауту, розбирає знахідки SVRL і вилучає свої тимчасові файли
Нульовий таймаут означає 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 та його необхідними залежностями й використовуйте окремі екземпляри реєстру та движка на кожен потік валідації
Опційний місток вимагає Delphi XE2 чи новіший на Windows і наданого господарем середовища виконання Java/Saxon, і жодне з них бібліотека не завантажує та не встановлює
Відсутні середовища виконання, невідповідний синтаксис рахунку, заборонені DTD, таймаут, невдала трансформація та пошкоджений вивід SVRL дають явну діагностику неповної валідації
Офіційні французькі правила CTC для рахунків
HPDFRegisterFrenchCTCRules обирає офіційний шар профілю та строгий шар країни BR-FR-Flux2 з релізу FNFE-MPE 1.4.0.04, опублікованого 4 вересня 2026 для AFNOR XP Z12-012 версії 1.4
Офіційний реліз FNFE-MPE опубліковано під Apache 2.0 і пов'язано зі сторінкою ресурсів FNFE-MPE, включена таблиця стилів EN 16931 CII зберігає EUPL 1.2, а оригінальні скомпільовані таблиці стилів, джерела Schematron, бази кодів, ліцензії, вихідні шляхи та хеші збережено в Lib/resources/Schematron/France
Для fisFacturX хелпер підтримує 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, тож хелпер відхиляє цю застарілу назву замість того, щоб вважати її автоматично сертифікованим аліасом
Успішна валідація засвідчує завершення цих опублікованих шарів бізнес-правил рахунку, тоді як 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 і новіших і зарезервований для заглушки Delphi 7 або даних застарілих результатів
Пошкоджені або непідтримувані вирази створюють явні знахідки з серйозністю помилки, збільшують EvaluationErrors і ніколи не зникають як успішні перевірки
Допоміжні функції Factur-X XML
Модуль HPDFFacturX постачає хелпери рівня байтів, що читають XML рахунку Factur-X / ZUGFeRD без побудови DOM, тож вони працюють на кожній версії Delphi, яку підтримує бібліотека, і безпечні на витягнутих байтах з 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 1.0 ZUGFeRD-invoice.xml з версією 1.0
HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName) звіряє guideline, знайдений у XML, із заявленим рівнем відповідності, версією та вбудованою назвою файлу
HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary) заповнює запис THPDFFacturXInvoiceSummary з XML рахунку та повертає True, коли щонайменше основний XML рахунку вдалося знайти; сам тип запису підсумку оголошено в HPDFDoc поруч із THPDFFacturXInvoiceInfo
Стабільна діагностика та обмеження
- Ідентифікатори правил аналізуються з токена повідомлення Schematron, коли він присутній
- Відсутні ідентифікатори отримують детерміновані порядкові номери профілю та твердження-або-звіту
- Кожна знахідка зберігає свій оригінальний контекст і вирази перевірки
- Шляхи зовнішньої бази кодів обмежені іменами сусідніх файлів
- Обробка DTD і вирішення зовнішніх сутностей XML вимкнені
- Вхідний XML рахунку обмежений 64 МіБ
Доступність інструментального ланцюжка
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
Усталений ранер вимагає конфігурації движка офіційних правил і запускає і Win32, і Win64 з придушеним запуском PDF-переглядача; -NativeOnly навмисно пропускає виконання офіційного Saxon