- Remove validation logic from calculate_tax_yearly_average()
- Add _auto_download_missing_monthly_data() for silent auto-download
- Fix duplicate validation code in CLI that caused unintended execution
- Separate validation from calculation: --stats only calculates, --validate only validates
- Maintain auto-download functionality for missing data in calculations
- Ensure stats command shows only calculation results without validation output
Root Cause: Validation code was embedded in tax calculation function and duplicated in CLI
Solution: Extract validation from calculation, keep auto-download separate
Result: --stats shows clean output, --validate provides full analysis
Testing: ✅ Stats command clean, ✅ Validation command works, ✅ No type errors
- Add trading days validation to check expected vs actual data points per year
- Implement calculate_expected_trading_days() accounting for weekends and Czech holidays
- Add validate_trading_days_count() with discrepancy analysis and severity classification
- Integrate trading days validation into main validation workflow
- Add record count analysis by time periods (week, month, quarter, half year, year)
- Implement get_record_counts_by_period() with detailed breakdowns
- Add --record-counts CLI command for standalone period analysis
- Enhance format_validation_text() to display trading days and record count information
- Update data quality scoring to include trading days compliance
- Add comprehensive JSON output support for all new validation features
Trading Days Validation:
- Calculates expected trading days excluding weekends and Czech holidays
- Compares actual data points against expected counts
- Provides discrepancy analysis with severity levels (ok, minor, moderate, severe)
- Shows data completeness percentage
Record Count Analysis:
- Breaks down data by multiple time periods simultaneously
- Supports week-by-week, monthly, quarterly, half-yearly, and yearly counts
- Handles leap years and varying month lengths correctly
- Provides both summary and detailed views
Integration Features:
- Seamlessly integrated with existing price change and gap validation
- Enhanced data quality scoring considers all validation aspects
- Comprehensive JSON schema for programmatic consumption
- Backward compatible with existing validation commands
Usage Examples:
python src/cli.py --validate --currency USD --year 2025 # Shows all validations
python src/cli.py --record-counts --currency USD --year 2025 # Period breakdown only
python src/cli.py --validate --currency EUR --json # Full validation in JSON
Quality Assurance:
- ✅ Pyright type checking: 0 errors, 0 warnings
- ✅ Syntax validation: No compilation errors
- ✅ Functional testing: All features working correctly
- ✅ Czech holiday integration: Proper weekend/holiday exclusion
- ✅ Leap year handling: Correctly accounts for 366-day years
- Add temporal gap analysis to detect missing working days in data sequences
- Implement calculate_working_days_gap() to count business days between dates
- Add detect_temporal_gaps() function with configurable gap threshold
- Integrate gap detection into validate_currency_data() and validate_all_currencies()
- Update format_validation_text() to display temporal gap information
- Add --gap-threshold CLI argument (default: 3 working days)
- Enhance data quality scoring to include temporal gaps
- Update JSON output schema to include temporal gap details
Gap Detection Features:
- Excludes weekends and Czech public holidays from gap calculations
- Classifies gaps by severity (minor: 1-2x threshold, moderate: 2-3x, severe: >3x)
- Provides actionable recommendations for data gaps
- Configurable sensitivity via --gap-threshold parameter
Integration with Existing Validation:
- Combines temporal gap analysis with price change anomaly detection
- Unified data quality scoring incorporating both gap and price metrics
- Consistent JSON/text output formats
- Maintains backward compatibility
Technical Implementation:
- Uses existing holidays.py for Czech holiday calendar
- Efficient date iteration with proper boundary handling
- Robust error handling for edge cases
- Clean integration with existing validation pipeline
Usage Examples:
python src/cli.py --validate --currency USD --year 2025 --gap-threshold 2
python src/cli.py --validate --all-currencies --json
Quality Assurance:
- ✅ Pyright type checking: 0 errors, 0 warnings
- ✅ Syntax validation: No errors
- ✅ Functional testing: Gap detection working correctly
- ✅ JSON output: Proper schema and formatting
- Add --json CLI flag for structured JSON output across all commands
- Implement JSON formatting functions for different data types:
* Single rate lookups with fallback information
* Unified tax rates (single year and multi-year)
* Last available rates
* Error responses with codes and details
- Add auto-download functionality for missing monthly data in tax calculations
- Modify calculate_tax_yearly_average to automatically fetch missing months
- Add rate limiting (1s delay) between API calls to be respectful
- Update CLI argument parsing and output logic for JSON/text modes
- Maintain full backward compatibility - existing commands work unchanged
- Enhance documentation with JSON usage examples and schema
- Update help text to include new --json option
Features:
- JSON output for programmatic consumption
- Automatic data fetching for incomplete years
- Structured error handling
- Comprehensive documentation updates
Breaking changes: None (fully backward compatible)
- Added --debug switch to CLI to show detailed diagnostic information
- In normal mode, --get-rate now outputs only the rate value without additional messages
- All diagnostic messages are now hidden in normal mode and shown only with --debug
- Updated all modules to support debug mode with debug_print() function
- Fixed rate calculation logic to properly handle weekends and holidays according to CNB rules
- For weekends/holidays, uses rate from last working day before them
- For regular days without rates, searches backwards for working day with rate
- Maintains backward compatibility with existing functionality
- Added comprehensive tests for rate calculation with weekends/holidays
- All modules now respect the debug mode setting
- Rate calculation correctly implements CNB rules for tax purposes
- Added --stats YEAR option to generate statistical reports
- Calculates yearly, quarterly and monthly average prices for a given year and currency
- Includes working day counts for accurate averaging
- Supports both normal (minimal) and debug output modes
- Automatically downloads required yearly data if not present
- Shows detailed processing steps in debug mode
- Works with any currency code supported by CNB
- Provides formatted output with Czech month names
- Example usage: --stats 2024 -c USD
- Added --debug switch to show detailed information
- Normal output (--get-rate) now shows only the rate value or 'Kurz nenalezen'
- Debug output shows all processing steps and detailed information
- All modules updated to support debug mode
- Fixed imports and module initialization
- Maintains backward compatibility
- Reports are generated silently in normal mode, with details in debug mode