v1.0 Stable Release - Tracking Issue
Overview
This issue serves as the master tracking issue for releasing einvoice v1.0 - the first stable release of the Go library for reading, writing, and validating EN 16931 electronic invoices (ZUGFeRD/Factur-X format).
Goal: Deliver a stable, production-ready library with comprehensive EN 16931 core support and clear API contracts for long-term stability.
Scope: 1.0 focuses on ZUGFeRD/Factur-X (CII) format with EN 16931 core compliance . UBL format and advanced PEPPOL country-specific rules are explicitly out of scope for 1.0.
Release Criteria
✅ 1. Core EN 16931 Compliance
Goal: Full implementation and validation of EN 16931 v1.3.14.1 specification
Acceptance: All core EN 16931 validation rules pass test suite with 100% compliance
✅ 2. API Stability & Consistency
Goal: Clean, intuitive, backward-compatible API ready for v1 commitment
Acceptance: API review completed with no planned breaking changes post-1.0
📚 3. Documentation Completeness
Goal: Users can successfully adopt the library without external help
Acceptance: New users can successfully parse, validate, and write invoices using only documentation
🧪 4. Testing & Quality Assurance
Goal: Robust test coverage ensuring reliability in production
Acceptance: Test suite provides confidence for production deployments
🔧 5. CLI Tool Stability
Goal: einvoice CLI is production-ready
Acceptance: CLI can be used for production invoice validation workflows
🎯 6. PEPPOL BIS Billing 3.0 Support
Goal: Basic PEPPOL validation works, advanced features deferred
✅ In Scope for 1.0:
❌ Out of Scope for 1.0 (defer to 1.1+):
Rationale: Core PEPPOL validation is functional. Advanced PEPPOL compliance can be enhanced iteratively in 1.1+ without breaking changes.
Acceptance: Users can validate PEPPOL invoices; advanced rules logged as known limitations
📦 7. Release Engineering
Goal: Smooth release process with proper versioning
Acceptance: v1.0.0 tag pushed, binaries released, documentation updated
Out of Scope for 1.0
The following features are explicitly deferred to future releases to ensure 1.0 quality:
1.1+ Features
2.0+ Features
Internationalization (i18n) - Validation messages in multiple languages (Any thoughts about i18n? #30 )
Breaking API Changes - Removal of deprecated methods, major refactorings
Alternative Serialization Formats - JSON, YAML output for invoices (if needed)
Pre-Release Checklist
Before tagging v1.0.0:
Decision Log
Track key decisions made during 1.0 planning:
UBL Support - ❌ Deferred to 1.1+
Rationale: Focus on quality CII/ZUGFeRD support first
PEPPOL Advanced Rules - ❌ Deferred to 1.1+
Rationale: Core PEPPOL validation works; code lists/formats can be added non-breaking
CLI Info Command - ⏸️ DECISION NEEDED
Options: Include in 1.0 OR defer to 1.1
Recommendation: Defer to 1.1 (focus on core library)
API Breaking Changes (Replace ValidatePEPPOL with intelligent auto-detection in Validate() #46 ) - ⏸️ DECISION NEEDED
Options:
A) Implement auto-detection in 1.0 with deprecation warnings (smooth migration)
B) Defer to 2.0, keep current API in 1.x (more conservative)
Recommendation: Option A - implement with deprecation for better UX
i18n Support (Any thoughts about i18n? #30 ) - ❌ Deferred to 2.0+
Rationale: Not critical for initial stable release, adds complexity
Related Issues
Blockers for 1.0:
Nice-to-Have for 1.0:
Post-1.0 Enhancements:
Timeline Estimate
Assuming active development:
Week 1-2:
Week 3:
Week 4:
Release engineering (binaries, CHANGELOG)
Final review & testing
Tag v1.0.0
Target Release: 4 weeks from start (adjust based on team availability)
Success Metrics
Post-release, 1.0 is successful if:
✅ Users can parse/validate/write EN 16931 invoices without bugs
✅ API remains stable for entire 1.x lifecycle (no breaking changes)
✅ Documentation enables self-service adoption
✅ Test coverage prevents regressions
✅ Community reports no critical EN 16931 compliance gaps
Questions & Discussion
Please use this issue for:
✅ Reporting blockers or critical gaps
✅ Discussing "Decision Needed" items
✅ Proposing scope changes (with justification)
❌ Feature requests for post-1.0 (open separate issues)
Let's ship a solid 1.0! 🚀
v1.0 Stable Release - Tracking Issue
Overview
This issue serves as the master tracking issue for releasing einvoice v1.0 - the first stable release of the Go library for reading, writing, and validating EN 16931 electronic invoices (ZUGFeRD/Factur-X format).
Goal: Deliver a stable, production-ready library with comprehensive EN 16931 core support and clear API contracts for long-term stability.
Scope: 1.0 focuses on ZUGFeRD/Factur-X (CII) format with EN 16931 core compliance. UBL format and advanced PEPPOL country-specific rules are explicitly out of scope for 1.0.
Release Criteria
✅ 1. Core EN 16931 Compliance
Goal: Full implementation and validation of EN 16931 v1.3.14.1 specification
BR-1 to BR-65 (core business rules)✅ ImplementedBR-CO-* (calculation rules except CO-19, CO-20)✅ ImplementedBR-S-, BR-AE-, BR-E-, BR-Z-, BR-G-, BR-IC-, BR-IG-, BR-IP-, BR-O-*✅ All VAT validations implementedBR-DEC-* (decimal precision rules)✅ ImplementedAcceptance: All core EN 16931 validation rules pass test suite with 100% compliance
✅ 2. API Stability & Consistency
Goal: Clean, intuitive, backward-compatible API ready for v1 commitment
Validation API Cleanup - Replace
ValidatePEPPOL()with intelligent auto-detectionValidate()auto-detect PEPPOL vs EN 16931 based on specification identifierValidatePEPPOL()with clear migration pathcheck*.go→validate*.gofor consistencycheck*()→validate*()functionsExported vs Unexported Fields Review
Invoice,InvoiceLine,Partystructs for proper encapsulationviolations) is not accidentally exposedError Handling Consistency
ValidationErrorprovides clear, actionable messagesAcceptance: API review completed with no planned breaking changes post-1.0
📚 3. Documentation Completeness
Goal: Users can successfully adopt the library without external help
README.md
Basic usage examples✅ PresentInstallation instructions✅ Presentpkg.go.dev Documentation
CLAUDE.md - Update project instructions
Migration Guide (if breaking changes)
Acceptance: New users can successfully parse, validate, and write invoices using only documentation
🧪 4. Testing & Quality Assurance
Goal: Robust test coverage ensuring reliability in production
Test Coverage ≥ 80%✅ Currently at 85.4%Edge Cases Coverage
Integration Tests
Performance Benchmarks (baseline for future releases)
golangci-lint - Ensure clean static analysis
golangci-lint configured✅ Present in go.modAcceptance: Test suite provides confidence for production deployments
🔧 5. CLI Tool Stability
Goal:
einvoiceCLI is production-readyValidate Command✅ Implemented (cmd/einvoice/validate.go)Human-readable outputJSON output (--format json)Proper exit codes (0=valid, 1=violations, 2=error)Info Command (optional for 1.0, recommended)
Installation & Distribution
go install github.com/speedata/einvoice/cmd/einvoice@latestworksCLI Documentation
--helptext is clear and completeAcceptance: CLI can be used for production invoice validation workflows
🎯 6. PEPPOL BIS Billing 3.0 Support
Goal: Basic PEPPOL validation works, advanced features deferred
✅ In Scope for 1.0:
Core PEPPOL rules (PEPPOL-EN16931-R040, R041, R042, etc.)✅ Implemented✅ Exists (to be merged intoValidatePEPPOL()methodValidate()per Replace ValidatePEPPOL with intelligent auto-detection in Validate() #46)Validate()(Replace ValidatePEPPOL with intelligent auto-detection in Validate() #46)❌ Out of Scope for 1.0 (defer to 1.1+):
Rationale: Core PEPPOL validation is functional. Advanced PEPPOL compliance can be enhanced iteratively in 1.1+ without breaking changes.
Acceptance: Users can validate PEPPOL invoices; advanced rules logged as known limitations
📦 7. Release Engineering
Goal: Smooth release process with proper versioning
Version Tagging Strategy
v1.0.0,v1.0.1, etc.CHANGELOG.md
GitHub Release
git tag v1.0.0 && git push --tagsGo Module Compatibility
go.modhasmodule github.com/speedata/einvoice(not/v2)go get github.com/speedata/einvoice@v1.0.0worksPost-Release Communication
Acceptance: v1.0.0 tag pushed, binaries released, documentation updated
Out of Scope for 1.0
The following features are explicitly deferred to future releases to ensure 1.0 quality:
1.1+ Features
2.0+ Features
Pre-Release Checklist
Before tagging
v1.0.0:go test ./...golangci-lint runDecision Log
Track key decisions made during 1.0 planning:
UBL Support - ❌ Deferred to 1.1+
Rationale: Focus on quality CII/ZUGFeRD support first
PEPPOL Advanced Rules - ❌ Deferred to 1.1+
Rationale: Core PEPPOL validation works; code lists/formats can be added non-breaking
CLI Info Command - ⏸️ DECISION NEEDED
Options: Include in 1.0 OR defer to 1.1
Recommendation: Defer to 1.1 (focus on core library)
API Breaking Changes (Replace ValidatePEPPOL with intelligent auto-detection in Validate() #46) - ⏸️ DECISION NEEDED
Options:
Recommendation: Option A - implement with deprecation for better UX
i18n Support (Any thoughts about i18n? #30) - ❌ Deferred to 2.0+
Rationale: Not critical for initial stable release, adds complexity
Related Issues
Blockers for 1.0:
Nice-to-Have for 1.0:
Post-1.0 Enhancements:
Timeline Estimate
Assuming active development:
Week 1-2:
Week 3:
Week 4:
Target Release: 4 weeks from start (adjust based on team availability)
Success Metrics
Post-release, 1.0 is successful if:
Questions & Discussion
Please use this issue for:
Let's ship a solid 1.0! 🚀