--- plan_id: 20260721-2324-import-json-grosze-ceny title: Poprawka parsowania cen z paragonu JSON (grosze → złote) completed: 2026-07-21T23:24:13+02:00 storage: plan-first quality_radar: degraded --- # Summary: Poprawka parsowania cen z paragonu JSON (grosze → złote) ## Objective Naprawić import paragonu z pliku JSON (eParagon / JPK_KASA_PARAGON), gdzie kwoty były 100× za duże (np. `3,69` odczytane jako `369 zł`), bo format trzyma wartości w groszach, a model dostawał surowy JSON bez informacji o jednostce. ## What Was Built | Area | Result | |------|--------| | Prompt parsera | W `ReceiptParser::prompt()` dodano regułę: dla wejścia JSON wszystkie pola kwotowe (price, total, brutto, cena, wart, fiscalTotal, totalWithPacks, vatSale, amount) to liczby całkowite w groszach → podziel przez 100 | | Zakres reguły | Warunkowa, wyłącznie dla JSON; ścieżka obraz/PDF czyta kwoty jak dotąd | ## Files Modified - `app/Libraries/ReceiptParser.php` — reguła „grosze → złote" w prompcie dla wejścia JSON. ## Acceptance Criteria Results | Criterion | Status | Evidence | |-----------|--------|----------| | AC-1: ceny z JSON w złotych | Pass | Reguła wdrożona; `php -l` czysty. UAT runtime realnego importu potwierdzony przez użytkownika (2026-07-21) — kwoty poprawne | | AC-2: obraz/PDF bez regresji | Pass | Reguła warunkowa tylko dla JSON; gałęzie `input_image`/`input_file` i `normalize()` nietknięte | ## Verification Results | Check | Result | Notes | |-------|--------|-------| | `php -l app/Libraries/ReceiptParser.php` | Pass | No syntax errors detected | | UAT import JSON | Pass | Potwierdzony przez użytkownika 2026-07-21 — kwoty poprawne | ## Quality Radar Results **Status:** degraded (brak pełnego indeksu codebase-memory-mcp; jscpd/ast-grep wyłączone polityką w `config.md`) - New risks: brak - Resolved risks: błędne kwoty z JSON (grosze traktowane jak złote) — obsłużone regułą promptu - Deferred risks: natywny parser eParagon w PHP (0 tokenów, 100% determinizm, ale traci `display`/kategorie z AI) — YAGNI, podnieść jeśli reguła promptu zawiedzie - Raw outputs: `.paul/codebase/impact_map.md`, `.paul/codebase/quality_risks.md`, `.paul/codebase/tooling_status.md` ## Deviations - Brak. Wykonano dokładnie 1 zaplanowany task. ## Key Decisions / Patterns - Wybrano poprawkę promptową (najkrótszy diff, zero zmian w pipeline, bez regresji obraz/PDF) zamiast natywnego parsera JSON. Reguła „/100" jest deterministyczna dla modelu rozumującego. ## Follow-up - UAT runtime: ✅ potwierdzony przez użytkownika (2026-07-21) — import JSON daje poprawne kwoty. - Jeśli reguła promptu okaże się zawodna dla innych paragonów JSON → osobny plan: natywny parser eParagon w PHP.