- 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.
178 lines
5.8 KiB
Markdown
178 lines
5.8 KiB
Markdown
# 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
|
|
|
|
## 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. |