61 lines
2.7 KiB
Markdown
61 lines
2.7 KiB
Markdown
---
|
||
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.
|