This commit is contained in:
2026-07-22 00:27:20 +02:00
parent 9641eab2f4
commit 9995ac4dd0
8 changed files with 239 additions and 21 deletions
@@ -0,0 +1,60 @@
---
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.