Files
einvoice/IMPLEMENTATION_SUMMARY.md
Juergen Kunz 10e14af85b feat(validation): Implement EN16931 compliance validation types and VAT categories
- 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.
2025-08-11 12:25:32 +00:00

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 validation
  • CODE_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

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.