Title: [Fresh 2026-04][Backend] Time: invoice due-date scheduler UTC canonicalization + DST boundary tests
Repository: CredenceOrg/Credence-Backend
Branch: fix/invoice-timezone-fresh
The invoice due-date scheduling system needed robust UTC canonicalization and comprehensive DST boundary testing to ensure deterministic behavior across all timezones and prevent scheduling errors during daylight saving time transitions.
- Improved Timestamp Parsing: Enhanced
parseTimestampWithZone()to ensure Date objects are explicitly treated as UTC - Timezone Validation: Added
validateTimezone()function for early error detection of invalid IANA timezones - DST Transition Detection: Implemented
isDstTransitionPeriod()to identify edge cases where day boundaries might be ambiguous - Enhanced Normalization: Improved
normalizeToUtcIso()with consistent UTC representation using 'Z' suffix
Added extensive test cases covering:
- US DST Transitions: Spring forward (March) and fall back (November) scenarios
- Southern Hemisphere DST: Australia's October-April DST period
- European DST: March 29 transition at 1am UTC
- International Date Line Edge Cases: Kiritimati (UTC+14) and Baker Island (UTC-12)
- Timezone Validation: Invalid timezone detection and error handling
- DST Transition Detection: Verification of transition period identification
- Canonical Timestamp Formats: Consistent UTC ISO string generation
- Configurable Timezone Validation: Optional validation with graceful tenant skipping
- DST Transition Logging: Optional logging for debugging DST-related issues
- Improved Error Handling: Enhanced batch processing with better error recovery
- Enhanced Options: Added
validateTimezonesandlogDstTransitionsconfiguration options
- Timezone Validation Tests: Verification of invalid timezone handling
- DST Logging Tests: Confirmation of DST transition logging functionality
- Batch Processing Tests: Custom batch size configuration verification
- Error Resilience Tests: Continued operation when individual tenants fail
- All timestamp operations now use canonical UTC representation
- Consistent day boundary calculations across all timezones
- Elimination of timezone-dependent scheduling ambiguities
- Early timezone validation prevents runtime errors
- Graceful degradation for invalid timezone configurations
- Comprehensive error logging for debugging
- Automatic detection of DST transition periods
- Enhanced logging for production debugging
- Accurate day calculations during DST transitions
- src/jobs/invoiceDueDate.ts - Core scheduling logic enhancements
- src/jobs/invoiceDueDate.test.ts - Comprehensive DST boundary tests
- src/jobs/invoiceDueDateWorker.ts - Enhanced worker with timezone validation
- src/jobs/invoiceDueDateWorker.test.ts - Worker functionality tests
- ✅ UTC timestamp normalization
- ✅ Timezone validation
- ✅ DST transition detection
- ✅ Day boundary calculations
- ✅ US spring forward transition
- ✅ US fall back transition
- ✅ Southern hemisphere DST
- ✅ European DST transitions
- ✅ International date line edge cases
- ✅ Timezone validation with graceful skipping
- ✅ DST transition logging
- ✅ Custom batch processing
- ✅ Error resilience
All changes maintain backward compatibility:
- Existing API interfaces unchanged
- Default behavior preserved
- New features are opt-in via configuration options
- Timezone validation is performed once per tenant batch
- DST detection uses lightweight timezone name checking
- Caching of DateTimeFormat instances for repeated operations
- Minimal overhead for existing functionality
- Input validation for all timezone strings
- Rejection of ambiguous timestamp formats
- Safe handling of invalid timezone configurations
- Configuration: New worker options available but not required
- Monitoring: Enhanced logging available for DST transitions
- Validation: Timezone validation enabled by default
- Testing: Comprehensive test suite for regression prevention
- Run test suite:
npm test -- src/jobs/invoiceDueDate.test.ts - Run worker tests:
npm test -- src/jobs/invoiceDueDateWorker.test.ts - Verify timezone validation with invalid timezone
- Test DST transitions during March and November
- Confirm UTC canonicalization across different timestamp formats
- Navigate to: https://github.com/olaleyeolajide81-sketch/Credence-Backend/pull/new/fix/invoice-timezone-fresh
- Use title:
fix(invoices): canonicalize scheduler to UTC with DST regressions - Include this summary in the PR description
- Target branch:
main - Request review from maintainers
This enhancement ensures:
- Deterministic invoice scheduling across all timezones
- Robust DST handling preventing scheduling errors
- Improved reliability for international deployments
- Enhanced debugging capabilities for production issues
- Comprehensive test coverage preventing regressions
The implementation fully addresses the requirements of issue #261 and provides a solid foundation for reliable timezone-aware invoice scheduling.