- 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.
5.8 KiB
E-Invoice Standards Implementation Summary
Executive Summary
We've successfully improved the einvoice module from ~10% to ~35% EN16931 compliance by implementing core validation infrastructure, business rules, and code list validators with a feature flag system for gradual rollout.
Accomplishments (2025-01-11)
1. EN16931 Business Rules Validator
File: ts/formats/validation/en16931.business-rules.validator.ts
Implemented ~40 of 120+ business rules:
-
Document Rules (BR-01 to BR-11, BR-16)
- Mandatory field validation
- Seller/buyer information requirements
- Invoice line presence checks
-
Calculation Rules (BR-CO-*)
- BR-CO-10: Sum of invoice lines validation
- BR-CO-13: Tax exclusive calculations
- BR-CO-14: Total VAT amount verification
- BR-CO-15: Tax inclusive totals
- BR-CO-16: Amount due for payment
-
VAT Rules (Partial)
- BR-S-01 to BR-S-03: Standard rated VAT
- BR-Z-01: Zero rated VAT
-
Line Rules (BR-21 to BR-30)
- All line-level validation rules implemented
- Quantity, unit code, pricing validation
2. Code List Validator
File: ts/formats/validation/codelist.validator.ts
Complete implementation of standard code lists:
- ISO 4217 Currency codes (BR-CL-03, BR-CL-04)
- ISO 3166 Country codes (BR-CL-14, BR-CL-15, BR-CL-16)
- UNCL5305 VAT category codes (BR-CL-10)
- UNCL1001 Document type codes (BR-CL-01)
- UNCL4461 Payment means codes (BR-CL-16)
- UNECE Rec 20 Unit codes (BR-CL-23)
3. Enhanced Validation Infrastructure
Files:
ts/formats/validation/validation.types.ts
ts/interfaces/en16931-metadata.ts
Features:
- Business Term (BT) and Business Group (BG) references
- Semantic model mapping for EN16931 fields
- Code list metadata and versioning
- Remediation hints for errors
- Extended metadata interface for all EN16931 fields
4. Feature Flag System
Enables gradual rollout without breaking changes:
EN16931_BUSINESS_RULES
- Enables business rule validationCODE_LIST_VALIDATION
- Enables code list checks- Report-only mode for non-blocking validation
5. Test Coverage
File: test/test.en16931-validators.ts
- Unit tests for all validators
- Integration with existing test suite
- 480/481 tests passing
GPT-5 Assessment
Strengths
✅ Clear layered validation architecture ✅ Feature flags for safe rollout ✅ Early code list coverage (often neglected) ✅ Enhanced ValidationResult with BT/BG references ✅ Developer-friendly error messages
Critical Next Steps (Priority Order)
1. Schematron Integration (Highest Priority)
- Integrate official EN16931 Schematron from ConnectingEurope/eInvoicing-EN16931
- Run in parallel with code validators (hybrid approach)
- Use Saxon-JS in worker threads for Node.js
2. Currency-Aware Rounding
- Replace flat 0.01 tolerance with ISO 4217 minor units
- Implement decimal arithmetic (big.js/decimal.js)
- Explicit rounding at defined calculation points
3. Complete VAT Rules
- Enforce all VAT categories (S, Z, E, AE, K, G, O)
- Validate exemption reasons and reverse charge
- Cross-field validation for VAT breakdowns
4. Conformance Test Harness
- Import official CEN test cases
- PEPPOL BIS Billing 3 samples
- XRechnung test packs
- Coverage matrix per BR-ID
Recommended Architecture (from GPT-5)
Hybrid Validation Pipeline
Stage 0: XSD validation (optional, fast fail)
Stage 1: TS validators on TInvoice (real-time UX)
Stage 2: Schematron on native XML (conformance)
Stage 3: Merge and normalize results
Key Decisions
- Run both validators: Schematron for conformance, TS for UX
- Validate native XML: Don't adapt Schematron to internal model
- Feature flags: Control when Schematron runs (submit vs interactive)
Comparison to Other Implementations
We Compare Well On:
- Developer ergonomics (ValidationResult, feature flags)
- TypeScript/Node.js ecosystem (rare for e-invoicing)
- Gradual rollout capability
To Match Maturity:
- Add official Schematron validation
- Complete test pack coverage
- Implement CIUS overlays (PEPPOL, XRechnung)
Resources Found
Official Repositories
- ConnectingEurope/eInvoicing-EN16931 - v1.3.14.2 with UBL/CII Schematron
- OpenPEPPOL/tc434-validation - CEN/TC 434 artefacts
- itplr-kosit/xrechnung-schematron - German CIUS
Reference Implementations
- Philip Helger's PHIVE - Comprehensive Java validator
- KoSIT XRechnung Validator - Official German validator
- Mustangproject - ZUGFeRD/Factur-X focus
Next Sprint Plan (2 Weeks)
Week 1
- Set up Saxon-JS worker pool for Schematron
- Integrate ConnectingEurope EN16931 Schematron
- Implement ISO 4217 currency minor units
- Replace tolerance with currency-aware rounding
Week 2
- Complete VAT category/exemption rules
- Add conformance test harness
- Import official test packs
- Create BR-ID coverage matrix
Long-term Roadmap
Phase 1: Core Compliance (Current → 60%)
- Complete remaining EN16931 business rules
- Full Schematron integration
- Conformance test coverage
Phase 2: CIUS Support (60% → 80%)
- PEPPOL BIS 3.0 overlay
- XRechnung 3.0 CIUS
- Profile-based validation
Phase 3: Production Ready (80% → 100%)
- Performance optimization
- Security hardening (XXE, limits)
- Comprehensive documentation
- CI/CD integration
Success Metrics
- ✅ Pass official EN16931 test suite
- ✅ 100% BR-ID coverage
- ✅ <100ms validation performance
- ✅ Clear remediation messages
- ✅ PEPPOL/XRechnung certification ready
Conclusion
We've built a solid foundation with ~35% compliance and clear architecture. The path to 100% is well-defined with official Schematron integration as the critical next step. Our TypeScript implementation with enhanced developer experience positions us well in the ecosystem.