- Added validation types for EN16931 compliance in `validation.types.ts`, including interfaces for `ValidationResult`, `ValidationOptions`, and `ValidationReport`. - Introduced `VATCategoriesValidator` in `vat-categories.validator.ts` to validate VAT categories according to EN16931 rules, including detailed checks for standard, zero-rated, exempt, reverse charge, intra-community, export, and out-of-scope services. - Enhanced `IEInvoiceMetadata` interface in `en16931-metadata.ts` to include additional fields required for full standards compliance, such as delivery information, payment information, allowances, and charges. - Implemented helper methods for VAT calculations and validation logic to ensure accurate compliance with EN16931 standards.
8.9 KiB
E-Invoice Standards Compliance Implementation Plan
Executive Summary
Current compliance: ~75% of required rules (up from ~70%) Target: 100% compliance with EN16931, XRechnung, Peppol BIS 3.0, and Factur-X profiles
Latest Update (2025-01-11):
- Completed Saxon-JS Schematron integration with official EN16931 rules
- Implemented comprehensive VAT category validator (all BR-S-, BR-Z-, BR-E-, BR-AE-, BR-K-, BR-G-, BR-O-* rules)
- Added conformance test harness with official test samples
- Created BR coverage matrix generation
Scale of Work
- EN16931 core: ~120-150 business rules
- XRechnung CIUS: 100-200+ format-specific constraints
- Peppol BIS 3.0: Additional Schematron layer
- Factur-X profiles: Profile-specific cardinalities
- Total: 300-500+ validations needed
Implementation Roadmap
Phase 0: Baseline Infrastructure (Week 1) ✅ COMPLETE
- Create rule registry with all EN16931, XRechnung, Peppol rule IDs (partial - EN16931 done)
- Build coverage tracking system (ValidationReport with coverage metrics)
- Set up validation result data model (ValidationResult interface with BT/BG references)
- Implement Schematron engine integration ✅ (Saxon-JS with official rules)
Phase 1: Core EN16931 Business Rules (Weeks 1-2) ✅ PARTIALLY COMPLETE
- Create EN16931BusinessRulesValidator class
- Implement calculation rules (BR-CO-*)
- BR-CO-10: Sum of invoice lines = Line extension amount ✅
- BR-CO-13: Tax exclusive = Lines - Allowances + Charges ✅
- BR-CO-15: Tax inclusive = Tax exclusive + VAT ✅
- BR-CO-14: Invoice total VAT amount ✅
- BR-CO-16: Amount due for payment ✅
- Implement VAT rules (BR-S-, BR-Z-, partial)
- BR-S-01 to BR-S-03: Standard rated VAT ✅
- BR-Z-01: Zero rated VAT ✅
- Add document level rules (BR-01 to BR-65) - ~25 rules implemented
- BR-01 to BR-11: Mandatory fields ✅
- BR-16: Invoice lines ✅
- Add line level rules (BR-21 to BR-30) - All implemented ✅
Phase 2: Calculation Engine (Weeks 2-3) ✅ PARTIALLY COMPLETE
- Build canonical semantic model (BT/BG fields)
- Create UBL/CII adapters to semantic model
- Implement calculation verification:
- Line totals (quantity × price) ✅
- Tax base per category ✅
- Header allowance/charge distribution ✅
- Rounding and tolerance handling ✅ (ISO 4217 currency-aware)
- Handle edge cases:
- Mixed VAT categories ✅
- Reverse charge (partial)
- Multi-currency ✅ (ISO 4217 support)
Phase 3: XRechnung CIUS (Week 4)
- Integrate XRechnung Schematron pack
- Implement Leitweg-ID validation (pattern: [0-9]{2,3}-[0-9]{1,12}-[0-9]{2,30})
- Enforce mandatory buyer reference (BT-10)
- Add German-specific payment terms validation
- IBAN/BIC validation for SEPA
Phase 4: Peppol BIS 3.0 (Week 5)
- Add Peppol Schematron layer
- Implement endpoint ID validation (0088:xxxxxxxxx)
- Add document type ID validation
- Party identification scheme validation
- Process ID validation
Phase 5: Factur-X Profiles (Week 6)
- Implement profile detection
- Add profile-specific validators:
- MINIMUM: Only BT-1, BT-2, BT-3
- BASIC: Core fields
- EN16931: Full compliance
- EXTENDED: Additional structured data
- Profile-based field cardinality enforcement
Phase 6: Code List Validators ✅ COMPLETE
- ISO 4217 currency codes (BR-CL-03, BR-CL-04) ✅
- ISO 3166 country codes (BR-CL-14, BR-CL-15, BR-CL-16) ✅
- UN/ECE 4461 payment means codes (BR-CL-16) ✅
- UNTDID 1001 document type codes (BR-CL-01) ✅
- VAT category codes (UNCL5305 - BR-CL-10) ✅
- UNECE Rec 20 unit codes (BR-CL-23) ✅
Technical Architecture
Layered Validation Approach:
- Schema validation: XSD for UBL/CII
- Schematron packs: EN16931, CIUS, code lists
- Programmatic engine: Calculations and relationships
API Design:
interface ValidationOptions {
format?: 'ubl' | 'cii';
profile?: 'EN16931' | 'XRechnung_3.0' | 'Peppol_BIS_3.0' | 'FacturX_Basic';
tolerance?: number; // Default 0.01
strictMode?: boolean;
}
interface ValidationResult {
ruleId: string;
severity: 'error' | 'warning' | 'info';
message: string;
location?: string; // XPath
context?: any;
}
Security Considerations:
- Disable DTD/XXE in XML parsing
- Enforce document size limits
- Sandbox XSLT execution
- Validate only trusted rule packs
Success Criteria
- Pass official test suites for each standard
- 100% coverage of mandatory rules
- Performance: <100ms for full validation
- Clear error messages with rule IDs and locations
Resources Needed
- EN16931 Schematron from official sources
- XRechnung artifacts for current version
- Peppol BIS 3.0 Schematron
- Factur-X profile documentation
- Official test invoices for each standard
Risk Mitigation
- Version pinning for rule packs
- Snapshot testing for regression detection
- Configurable tolerances for calculations
- Layer precedence for conflicting rules
Immediate Next Steps
Set up Saxon-JS for Schematron integration✅ CompleteDownload official EN16931 Schematron files✅ CompleteCreate hybrid validation pipeline✅ CompleteImplement ISO 4217 currency-aware rounding✅ CompleteComplete remaining VAT category rules✅ CompleteAdd conformance test harness✅ Complete- Implement decimal arithmetic library (next priority)
- Add XRechnung CIUS support
- Implement PEPPOL BIS 3.0 overlay
Accomplishments (2025-01-11)
Implemented Components:
-
EN16931BusinessRulesValidator (
ts/formats/validation/en16931.business-rules.validator.ts
)- ~40 business rules implemented
- Document, calculation, VAT, and line-level validation
- Currency-aware calculation verification with ISO 4217 support
-
CodeListValidator (
ts/formats/validation/codelist.validator.ts
)- All major code lists validated
- Currency, country, tax category, payment means, unit codes
- Context-aware validation with exemption reasons
-
Enhanced ValidationResult Interface (
ts/formats/validation/validation.types.ts
)- Business Term (BT) and Business Group (BG) references
- Semantic model mapping
- Code list metadata
- Remediation hints
-
Extended Metadata Support (
ts/interfaces/en16931-metadata.ts
)- Comprehensive EN16931 metadata fields
- Delivery addresses, payment accounts
- Allowances and charges structure
-
Feature Flag Integration
- Gradual rollout capability
- Backward compatibility maintained
- Separate flags for EN16931 and code lists
-
ISO 4217 Currency-Aware Rounding (
ts/formats/utils/currency.utils.ts
)- Complete ISO 4217 currency minor units database
- 7 rounding modes (HALF_UP, HALF_DOWN, HALF_EVEN, UP, DOWN, CEILING, FLOOR)
- CurrencyCalculator class for EN16931 calculations
- Replaces flat 0.01 tolerance with currency-specific tolerances
-
Saxon-JS Schematron Integration (
ts/formats/validation/schematron.*.ts
)- Saxon-JS for XSLT 3.0 processing
- Official EN16931 Schematron files downloaded (v1.3.14)
- Worker thread pool for non-blocking validation
- Hybrid validator combining TypeScript and Schematron
- Automatic format detection (UBL/CII)
- SVRL parsing and result integration
Test Coverage:
- Unit tests for validators (
test/test.en16931-validators.ts
) - Currency utilities tests (
test/test.currency-utils.ts
) - 7/7 passing - Schematron infrastructure tests (
test/test.schematron-validator.ts
) - 9/9 passing - Integration with existing test suite
- 496/497 tests passing overall (added 16 new tests)
-
VAT Categories Validator (
ts/formats/validation/vat-categories.validator.ts
)- Complete implementation of all VAT category business rules
- BR-S-* (Standard rate), BR-Z-* (Zero rated), BR-E-* (Exempt)
- BR-AE-* (Reverse charge), BR-K-* (Intra-community), BR-G-* (Export)
- BR-O-* (Out of scope services)
- Cross-category validation rules
-
Conformance Test Harness (
ts/formats/validation/conformance.harness.ts
)- Automated testing against official samples
- BR coverage matrix generation
- HTML coverage reports
- Support for PEPPOL and CEN test suites
- Performance metrics collection
-
Test Sample Downloader (
scripts/download-test-samples.ts
)
- Automated download from official repositories
- PEPPOL BIS 3.0 examples
- CEN TC434 test files
- Metadata tracking
- XML to EInvoice Converter (
ts/formats/converters/xml-to-einvoice.converter.ts
)
- Basic UBL and CII parsing
- Integration with conformance testing
Next Priority Items:
Set up Saxon-JS for Schematron integration✅ COMPLETEIntegrate official EN16931 Schematron from ConnectingEurope✅ COMPLETEComplete remaining VAT category rules✅ COMPLETEAdd conformance test harness with official test packs✅ COMPLETE- Implement decimal arithmetic for even more precision
- Add XRechnung CIUS layer
- Implement PEPPOL BIS 3.0 support