diff --git a/README.md b/README.md index 0dc41b5..bce8613 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,9 @@ Tento projekt je určen pro stahování a správu kurzů cizích měn vůči če - **Generování reportů**: Lze vygenerovat report kurzů pro zadaný rok, měsíc nebo časové období včetně dopočítaných kurzů pro dny, kdy ve vstupních datech neexistovali. - **Správné dopočítání kurzů**: Program správně aplikuje pravidla ČNB pro dopočítání kurzů pro víkendy a svátky jak při vyhledávání (`--get-rate`), tak při generování reportů. - **Výpočet Jednotného kurzu**: Lze vypočítat 'Jednotný kurz' pro daňové účely podle metodiky ČNB jako aritmetický průměr kurzů k posledním dnům každého měsíce v roce. + - **Validace dat**: Program umí validovat data pro konzistenci, detekovat změny kurzů přesahující prahové hodnoty, kontrolovat počet obchodních dnů a analyzovat časové mezery v datech. + - **Analýza počtu záznamů**: Lze zobrazit počty záznamů podle různých časových období (týden, měsíc, čtvrtletí, pololetí, rok). + - **Adaptivní prahy**: Systém se učí z historických dat a automaticky upravuje prahy pro detekci anomálií. - **JSON výstup**: Všechny příkazy podporují JSON formát pro programové zpracování pomocí přepínače `--json`. ## Požadavky @@ -65,6 +68,11 @@ Při každém spuštění programu: - `--report-year ROK [--report-month MESIC]`: Vygeneruje report kurzů pro zadaný rok (a případně měsíc). Vyžaduje `-c` nebo `--currency`. - `--report-period ZACATEK KONEC`: Vygeneruje report kurzů pro zadané časové období. Vyžaduje `-c` nebo `--currency`. - `--stats [ROK]`: Vypočítá 'Jednotný kurz' pro daňové účely podle metodiky ČNB. Pokud je zadán rok, vytvoří kurz pro konkrétní rok. Pokud není rok zadán, vytvoří kurzy pro všechny roky s dostupnými daty. Vyžaduje `-c` nebo `--currency`. + - `--validate`: Validuje data pro měnu nebo všechny měny. Zkontroluje konzistenci kurzů, počet obchodních dnů a detekuje možné chyby. + - `--record-counts`: Zobrazí počet záznamů podle časových období (týden, měsíc, čtvrtletí, pololetí, rok). Vyžaduje `-c` nebo `--currency`. + - `--change-threshold PRAH`: Práh pro detekci změn kurzů v procentech (výchozí: 1.0). + - `--no-adaptive`: Vypne adaptivní učení prahů na základě historických dat. + - `--gap-threshold DNY`: Maximální přijatelná mezera v pracovních dnech (výchozí: 3). - `--json`: Výstup ve formátu JSON místo prostého textu pro programové zpracování. ### Příklady @@ -125,19 +133,34 @@ Při každém spuštění programu: python src/cli.py --stats -c USD ``` -12. **Získání posledního dostupného kurzu USD**: +12. **Validace dat pro měnu USD za rok 2025**: + ```bash + python src/cli.py --validate --currency USD --year 2025 + ``` + +13. **Validace všech měn s vlastními prahy**: + ```bash + python src/cli.py --validate --change-threshold 0.5 --gap-threshold 2 + ``` + +14. **Zobrazení počtu záznamů podle časových období pro USD**: + ```bash + python src/cli.py --record-counts --currency USD --year 2025 + ``` + +15. **Získání posledního dostupného kurzu USD**: ```bash python src/cli.py -c USD ``` -13. **JSON výstup pro vyhledání kurzu**: +16. **JSON výstup pro vyhledání kurzu**: ```bash python src/cli.py --get-rate 01.01.2025 -c USD --json ``` -14. **JSON výstup pro výpočet Jednotného kurzu**: +17. **JSON výstup pro validaci dat**: ```bash - python src/cli.py --stats 2025 -c USD --json + python src/cli.py --validate --currency USD --year 2025 --json ``` ## JSON formát @@ -196,6 +219,60 @@ Při použití přepínače `--json` program vrací strukturovaná data ve form } ``` +### Validace dat +```json +{ + "currency": "USD", + "validation_year": 2025, + "adaptive_analysis": { + "adaptive_threshold": 1.5, + "base_threshold": 1.0, + "volatility_percent": 0.24, + "data_points": 62 + }, + "price_change_violations": [ + { + "date": "06.01.2025", + "change_percent": 1.19, + "severity": "minor" + } + ], + "temporal_gaps": [], + "trading_days_validation": { + "expected_trading_days": 251, + "actual_data_points": 251, + "discrepancy_days": 0, + "data_completeness_percent": 100.0 + }, + "record_counts_by_period": { + "2025": { + "year": 251, + "half_year": {"H1": 124, "H2": 127}, + "quarter": {"Q1": 63, "Q2": 61, "Q3": 66, "Q4": 61}, + "month": {"01": 22, "02": 20, "03": 21}, + "week": {"W01": 5, "W02": 5} + } + }, + "data_quality_score": 95 +} +``` + +### Počty záznamů podle období +```json +{ + "currency": "USD", + "record_counts": { + "2025": { + "year": 251, + "half_year": {"H1": 124, "H2": 127}, + "quarter": {"Q1": 63, "Q2": 61, "Q3": 66, "Q4": 61}, + "month": {"01": 22, "02": 20, "03": 21, "04": 20}, + "week": {"W01": 5, "W02": 5, "W03": 5} + } + } +} +``` + ## Chování při různých časech a datumech - **Budoucí datum**: Program vrátí chybu, protože kurzy pro budoucí data ještě nebyly vydány.