Dodan treci gumb 'BON Vaucer' u pos-pay-methods grid (3 stupca, ranije 2) · Dodan bon-section div — skriva se dok CASH/CARD odabran, pojavljuje se uz BON · bonKodInput s oninput=posOnBonInput — 300ms
tipimplementacija
statusDONE
sto_je_napravljeno[
"Dodan treci gumb 'BON Vaucer' u pos-pay-methods grid (3 stupca, ranije 2)",
"Dodan bon-section div — skriva se dok CASH/CARD odabran, pojavljuje se uz BON",
"bonKodInput s oninput=posOnBonInput — 300ms debounce za validaciju",
"QR scan gumb — getUserMedia + requestAnimationFrame scan petlja (BarcodeDetector/jsQR)",
"bon-status badge s tri stanja: checking/valid/invalid (CSS klase)",
"bon-doplata redak — iskazuje koliko BON pokriva vs koliko je doplata (parcijalno placanje)",
"po
api_diferencijal{
"spec_kaze": "POST /api/v4/bon/{kod}/validiraj body {tvrtka_id: string}",
"stvarnost": "POST /api/v4/bon/{kod}/validiraj?company_id=XXXX (query param)",
"rijesenje": "Koristen query param - tocno kao sto bon/router.py definira"
}
fajlovi[
"/var/www/fenix-v4/templates/pos/terminal.html"
]
deployed_na[
"EU 217.160.71.124",
"MAR 212.227.181.201"
]
sljedeci_koraci[
"Manual test: Robi Android tablet (pravi kamera test QR scan)",
"Marija vizualni AMEN",
"Playwright testovi (12 scenarija iz SPRINT_3_UI_NACRT.md)",
"jsQR.min.js upload u /var/www/fenix-v4/pos/static/pos/lib/ za offline QR scan"
]
zakon[
"ZAKON 3 — nema novog modela, samo UI",
"ZAKON 32 — ovo je chain entry"
]
_opp_sealFENIX2026::POS_BON_UI_SPRINT3