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.
This commit is contained in:
2025-08-11 12:25:32 +00:00
parent 01c6e8daad
commit 10e14af85b
53 changed files with 11315 additions and 17 deletions

178
IMPLEMENTATION_SUMMARY.md Normal file
View File

@@ -0,0 +1,178 @@
# 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.