E-인보이스 비즈니스 규칙 검증

HPDFEInvoiceValidator는 Factur-X 또는 ZUGFeRD 컨테이너 검증을 명시적으로 선택된 버전 있는 비즈니스 규칙 및 country 규칙 집합과 결합합니다

완전한 검토 규칙 실행

라이브러리는 MINIMUM, BASIC WL, BASIC, EN 16931, EXTENDED에 대한 일치하는 `.sch` 및 `_codedb.xml` 리소스를 제공합니다

XE2 이상 엔진은 안전한 MSXML 파싱, 결정적 XPath 1 등가물, 수량자, FLWOR 합계, 캐스트, 시퀀스 비교, 외부 코드 목록, 날짜 패턴, 부울 표시자 값에 대한 직접 평가를 통해 완전한 검토 XPath 2 표면을 실행합니다

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 추출, 프로파일 검출, 규칙 로딩, 코드 데이터베이스 로딩 또는 표현식 평가가 완료되지 못하면 fail-closed 처리합니다

함수는 컨테이너가 유효하고, 비즈니스 규칙이 평가되었으며, 오류 또는 경고 소견이 남아 있지 않은 경우에만 true를 반환합니다

프로파일 레지스트리와 검증 범위

THPDFEInvoiceRuleRegistry는 프로파일마다 비즈니스 규칙 레이어 하나와 필요할 때 country 규칙 레이어 하나를 명시적인 리소스 이름, 규칙 버전, 선택적 IHPDFESchematronEngine 구현과 함께 등록합니다

기본 레지스트리에는 함께 제공되는 다섯 Factur-X 프로파일과 프랑스 프로파일 EXTENDED-CTC-FR, EXTENDED-B2B-FR용 base EXTENDED 규칙이 들어 있습니다

프랑스 프로파일은 ValidationComplete가 true가 되기 전에 country 규칙 등록을 추가로 요구하고, XRECHNUNG은 EN 16931 CII와 독일 country 규칙을 모두 요구합니다

알 수 없는 프로파일에는 기본 규칙이 없고 절대 EXTENDED로 폴백하지 않으며, HPDFSchematronFileForProfile은 알 수 없거나 country 전용 프로파일에 빈 문자열을 반환합니다

HPDFValidateEInvoiceWithRegistry는 호출자의 레지스트리를 PDF 컨테이너 검사와 함께 쓰고, HPDFValidateEInvoiceXML은 명시적인 XML 바이트와 프로파일을 PDF 컨테이너 평가 없이 검증합니다

보고서는 ProfileSupported, CountryRulesRequired, CountryRulesEvaluated, ValidationComplete, ValidationNote를 노출하고, RuleSets 배열은 선택된 각 리소스의 버전, scope, 요약, 완료 상태를 기록합니다

완료된 규칙 평가에도 비즈니스 규칙 위반이 남을 수 있으니, ValidationComplete뿐 아니라 boolean 결과나 BusinessRuleViolations도 함께 확인하세요

이 API들은 비즈니스 및 country 규칙 커버리지를 보고할 뿐, XML Schema 검증, transport 정책, 법적 수용 판단은 범위 밖입니다

공식 XRechnung CII 규칙

HPDFEInvoiceSaxon은 Lib/resources/Schematron/XRechnung에 함께 제공되는 수정 없는 컴파일형 EN 16931 CII 1.3.16과 XRechnung 3.0.2 Schematron 2.6.0 스타일시트를 실행하는 선택적 Saxon HE 브리지를 공급합니다

리소스는 2026년 8월 31일자 공식 KoSIT validator configuration에서 왔고, 리소스 README에 출처, 라이선스, 해시가 기록되어 있습니다

호스트가 Java 실행 파일과 Saxon class path를 명시적으로 공급하면, 라이브러리는 셸이나 보이는 콘솔 창 없이 변환을 띄우고, 타임아웃을 강제하고, SVRL 소견을 파싱하고, 자기 임시 파일을 제거합니다

타임아웃 0은 60초를 고르고, 3,600,000밀리초를 넘는 값은 거부되며, 진단 출력은 8MiB, 컴파일된 스타일시트와 SVRL 보고서는 파싱·로드 전에 64MiB로 제한됩니다

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에는 Saxon HE와 필요한 의존성을 구성하고, 검증 스레드마다 별도의 registry와 engine 인스턴스를 쓰세요

선택적 브리지는 Windows의 Delphi XE2 이상과 호스트가 공급하는 Java/Saxon 런타임을 요구하며, 런타임을 라이브러리가 다운로드하거나 설치하지 않습니다

누락된 런타임, 잘못된 인보이스 문법, 금지된 DTD, 타임아웃, 실패한 변환, malformed SVRL 출력은 명시적인 미완료 검증 진단을 냅니다

공식 프랑스 CTC 인보이스 규칙

HPDFRegisterFrenchCTCRules는 AFNOR XP Z12-012 버전 1.4를 위해 2026년 9월 4일에 공개된 FNFE-MPE 릴리스 1.4.0.04에서 공식 프로파일 레이어와 엄격한 BR-FR-Flux2 country 레이어를 고릅니다

공식 FNFE-MPE 릴리스는 Apache 2.0으로 공개됐고 FNFE-MPE 리소스 페이지에서 링크되며, 포함된 EN 16931 CII 스타일시트는 EUPL 1.2를 유지합니다. 원본 컴파일 스타일시트, Schematron 소스, 코드 데이터베이스, 라이선스, 소스 경로, 해시는 Lib/resources/Schematron/France 아래에 보존됩니다

fisFacturX의 경우 헬퍼는 공개된 Factur-X 1.09.2 규칙 레이어로 BASIC WL, EN 16931, EXTENDED를 지원하고, EXTENDED-CTC-FR 컨테이너 지정은 같은 Factur-X EXTENDED 레이어에 프랑스 country 검사를 더해 씁니다

독립형 fisCII의 경우 EN 16931과 전용 EXTENDED-CTC-FR CII 레이어를 지원하며, 이 레이어의 제약과 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);

등록은 프로파일 버전과 country 규칙 버전을 따로 유지하고, 프랑스용으로 명시적으로 등록된 EN 16931과 BASIC WL을 포함해 선택된 프로파일에 프랑스 country 레이어를 필수로 만듭니다

공개된 엄격한 국가 스타일시트를 그대로 쓰며, 별도의 경고 전용 변형으로 바꾸거나 소견 등급을 낮추지 않습니다

고정된 공식 패키지에는 EXTENDED-B2B-FR 규칙 프로파일이 없으므로, 헬퍼는 그 레거시 이름을 자동 인증 별칭으로 다루는 대신 거부합니다

성공적인 검증은 이 공개 인보이스 비즈니스 규칙 레이어의 완수를 의미할 뿐, XML Schema, CDAR 수명 주기 메시지, e-reporting 데이터 추출, 플랫폼 인가, transport, 법적 인증은 별도 범위입니다

엔진 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 이상 엔진에서 0으로 유지되며 Delphi 7 스텁 또는 레거시 결과 데이터용으로 예약됩니다

잘못되거나 지원되지 않는 표현식은 명시적 오류 심각도 소견을 생성하고, EvaluationErrors을 증가시키며, 성공적인 검사로 절대 사라지지 않습니다

Factur-X XML 헬퍼 함수

HPDFFacturX 유닛은 DOM을 만들지 않고 Factur-X / ZUGFeRD 인보이스 XML을 읽는 바이트 수준 헬퍼를 제공하므로, 라이브러리가 지원하는 모든 Delphi 버전에서 동작하고 ExtractFacturXXML이 추출한 바이트에도 안전합니다

HPDFFacturXGuidelineIDFromXMLBytes(XMLBytes)는 CII 문서의 GuidelineSpecifiedDocumentContextParameter / ram:ID 요소에서 guideline 식별자를 반환하고, 없으면 빈 문자열을 반환합니다

HPDFIsFacturXConformanceLevel(Value, FileName, Version)은 conformance level 이름을 검사하며 MINIMUM, BASIC WL, BASIC, EN 16931, EN16931, EXTENDED, EXTENDED-CTC-FR, EXTENDED-B2B-FR, XRECHNUNG을 받습니다. 레거시 COMFORT 레벨은 추가로 버전 1.0인 ZUGFeRD 1.0 파일 이름 ZUGFeRD-invoice.xml을 요구합니다

HPDFFacturXXMLGuidelineOK(XMLBytes, ConformanceLevel, Version, FileName)은 XML에서 찾은 guideline을 선언된 conformance level, 버전, 내장 파일 이름과 교차 검사합니다

HPDFFacturXInvoiceSummaryFromXML(XMLBytes, out ASummary)는 인보이스 XML로 THPDFFacturXInvoiceSummary 레코드를 채우고, 최소한 기본 인보이스 XML을 찾았을 때 True를 반환합니다. 요약 레코드 타입 자체는 HPDFDoc에서 THPDFFacturXInvoiceInfo 옆에 선언됩니다

안정적인 진단 및 한계

툴체인 가용성

Delphi XE2 이상은 내장 MSXML 호환 엔진을 사용합니다

Delphi 7은 공유 인터페이스와 결과 유형을 유지하지만 사용 불가 엔진 진단을 반환합니다

관련 API

Non-GUI 수용 테스트

Tests/Delphi/Run-EInvoiceRuleTests.ps1을 명시적인 JavaExecutable과 SaxonClassPath 값 또는 같은 의미의 HOTPDF_JAVA_EXE, HOTPDF_SAXON_CLASSPATH 환경 변수와 함께 실행합니다

기본 runner는 공식 규칙 엔진 구성을 요구하고 PDF viewer 실행을 억제한 채 Win32와 Win64를 모두 실행합니다. -NativeOnly는 의도적으로 공식 Saxon 실행을 뺍니다