Files
einvoice/STANDARDS_COMPLIANCE_PLAN.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

230 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
- [x] Create rule registry with all EN16931, XRechnung, Peppol rule IDs (partial - EN16931 done)
- [x] Build coverage tracking system (ValidationReport with coverage metrics)
- [x] Set up validation result data model (ValidationResult interface with BT/BG references)
- [x] Implement Schematron engine integration ✅ (Saxon-JS with official rules)
### Phase 1: Core EN16931 Business Rules (Weeks 1-2) ✅ PARTIALLY COMPLETE
- [x] Create EN16931BusinessRulesValidator class
- [x] 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 ✅
- [x] Implement VAT rules (BR-S-*, BR-Z-*, partial)
- BR-S-01 to BR-S-03: Standard rated VAT ✅
- BR-Z-01: Zero rated VAT ✅
- [x] Add document level rules (BR-01 to BR-65) - ~25 rules implemented
- BR-01 to BR-11: Mandatory fields ✅
- BR-16: Invoice lines ✅
- [x] 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
- [x] Implement calculation verification:
- Line totals (quantity × price) ✅
- Tax base per category ✅
- Header allowance/charge distribution ✅
- Rounding and tolerance handling ✅ (ISO 4217 currency-aware)
- [x] 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
- [x] ISO 4217 currency codes (BR-CL-03, BR-CL-04) ✅
- [x] ISO 3166 country codes (BR-CL-14, BR-CL-15, BR-CL-16) ✅
- [x] UN/ECE 4461 payment means codes (BR-CL-16) ✅
- [x] UNTDID 1001 document type codes (BR-CL-01) ✅
- [x] VAT category codes (UNCL5305 - BR-CL-10) ✅
- [x] UNECE Rec 20 unit codes (BR-CL-23) ✅
## Technical Architecture
### Layered Validation Approach:
1. **Schema validation**: XSD for UBL/CII
2. **Schematron packs**: EN16931, CIUS, code lists
3. **Programmatic engine**: Calculations and relationships
### API Design:
```typescript
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
1. ~~Set up Saxon-JS for Schematron integration~~ Complete
2. ~~Download official EN16931 Schematron files~~ Complete
3. ~~Create hybrid validation pipeline~~ Complete
4. ~~Implement ISO 4217 currency-aware rounding~~ Complete
5. ~~Complete remaining VAT category rules~~ Complete
6. ~~Add conformance test harness~~ Complete
7. Implement decimal arithmetic library (next priority)
8. Add XRechnung CIUS support
9. Implement PEPPOL BIS 3.0 overlay
## Accomplishments (2025-01-11)
### Implemented Components:
1. **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
2. **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
3. **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
4. **Extended Metadata Support** (`ts/interfaces/en16931-metadata.ts`)
- Comprehensive EN16931 metadata fields
- Delivery addresses, payment accounts
- Allowances and charges structure
5. **Feature Flag Integration**
- Gradual rollout capability
- Backward compatibility maintained
- Separate flags for EN16931 and code lists
6. **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
7. **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)
8. **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
9. **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
10. **Test Sample Downloader** (`scripts/download-test-samples.ts`)
- Automated download from official repositories
- PEPPOL BIS 3.0 examples
- CEN TC434 test files
- Metadata tracking
11. **XML to EInvoice Converter** (`ts/formats/converters/xml-to-einvoice.converter.ts`)
- Basic UBL and CII parsing
- Integration with conformance testing
### Next Priority Items:
1. ~~Set up Saxon-JS for Schematron integration~~ COMPLETE
2. ~~Integrate official EN16931 Schematron from ConnectingEurope~~ COMPLETE
3. ~~Complete remaining VAT category rules~~ COMPLETE
4. ~~Add conformance test harness with official test packs~~ COMPLETE
5. Implement decimal arithmetic for even more precision
6. Add XRechnung CIUS layer
7. Implement PEPPOL BIS 3.0 support