Bosanska lokalizacija Odoo open-source platforme, l10n_ba_edi v16.0.3.8.2, l10n_ba_edi_srv 1.22.0
Današnje izdanje bosanske lokalizacije Odoo platforme donosi dvije popravke u
fiskalnom lancu — Odoo modulu l10n_ba_edi (v16.0.3.8.2) i fiskalnom EDI
serveru l10n_ba_edi_srv (v1.22.0) — te jednu u alatu za produkcijski
deploy.
Kontekst: FPrint “duplikat”
FPrint je jedan od dva podržana fiskalna drivera (uz OFS). Štampa duplikata računa se na uređaj šalje komandom 109, u dvije sintakse:
- po datumu/vremenu (syntax 1) —
mode=1 - po broju dokumenta (syntax 2) —
mode=2, novododano i sada je default
Korisnik bira način u dijalogu Podešavanja fiskalizacije → FPrint duplikat (Po datumu / Po broju), per-korisnik:

Bug #1: duplikat vraća HTTP 404 wrong PIN
Nakon uvođenja varijante “po broju”, klik na Fiskalni duplikat je vraćao golu grešku:
FPRINT: GREŠKA duplikat! (HTTP 404)
Najzbunjivije: EDI server u svom logu nije bilježio nijedan duplikat
zahtjev, iako je Test pristupa (ping) prolazio i prijavljivao ispravan PIN
i verziju drivera (FPrint 1.22.0).
Dijagnoza
Server resolve-a fiskalni driver iz ?driver= query parametra, sa defaultom
ofs:
def get_default_driver() -> str:
return "ofs"
Pin-checked rute idu kroz zajedničku zavisnost koja onda validira PIN za taj driver:
def ensure_pin(pin, driver):
if f"{pin}" != f"{driver.get_pin()}":
raise HTTPException(status_code=404,
detail={"msg": "wrong PIN", "status": 1300})
Klijentski duplikat URL nije slao driver, pa je server koristio OFS driver
(PIN npr. <PINOFS>) i poredio ga sa fprint PIN-om (npr. <PINFPRINT>) → 404 wrong
PIN, i to prije ulaska u sam duplikat handler — zato u logu nije bilo
nikakvog “duplikat” zapisa.
Dokaz uživo (curl na fiskalnu kasu):
GET /<PINFPRINT>/driver_info → 404 {"status":1300,"msg":"wrong PIN"}
GET /<PINFPRINT>/driver_info?driver=fprint → 200 {"driver_name":"fprint",...}
Svi ostali fprint pozivi (ping, signed_by, dnevni/periodični izvještaj) već su
slali driver=fprint; duplikat je bio jedini koji nije.
Popravka
l10n_ba_edi sada šalje driver (iz korisnikovog EDI tipa) u duplikat URL-u, i
osim toga prikazuje stvarno tijelo odgovora servera umjesto golog (HTTP 404):
driver = current_user.l10n_ba_edi_type or 'fprint'
_url = f"{api_host}/{pin}/duplikat/{tip}/{broj}?mode={mode}&driver={driver}"
...
# kod ne-200: mapiraj status 1300 ("wrong PIN") u jasnu poruku + ispiši URL
Bug #2: prebrzo čitanje fajl odgovora (novi parametar)
FPrint međusloj komunicira preko fajlova: zahtjev se upiše u c:\fiscal, a
odgovor uređaja se pojavi u c:\fiscal\answer. Rijetko (~1–2× mjesečno na
stotine računa) server bi pročitao answer fajl u trenutku kad ga međusloj još
upisuje → prazan ili djelimičan sadržaj → lažna greška, iako je fiskalizacija
na uređaju uspjela.
Rješenje je kratka grace pauza nakon što se answer fajl pojavi, prije
čitanja — kroz zajednički helper settle_answer_file() primijenjen na svih 7
fprint čitača odgovora (račun, duplikat, nuliranje, nasilno zatvaranje,
periodični/dnevni izvještaj, polog).
Novi server-side parametar (u dbos-config.yaml, sekcija
application.driver.fprint):
application:
driver:
fprint:
pin: '5555'
timeout: 240
answer_settle_seconds: 1.0 # pauza (s) nakon pojave answer fajla, prije čitanja (default: 1.0)
DEFAULT_ANSWER_SETTLE_SECONDS = 1.0
def settle_answer_file(answer_file, logger=None):
delay = get_answer_settle_seconds() # answer_settle_seconds, default 1.0
if delay > 0:
time.sleep(delay)
Default je 1.0 s; vrijednost se po potrebi može povećati na sporijim kasama ili spustiti na 0 za isključivanje.
Današnji commiti
l10n_ba_edi (Odoo modul, v16.0.3.8.2):
fix: send driver= in FPrint duplikat URL (avoid 404 wrong PIN)l10n_ba_edi: FPrint duplikat po broju (109 syntax 2) + mode config
l10n_ba_edi_srv (fiskalni EDI server, v1.22.0):
fprint: settle delay after answer file appears (fix rare false errors)l10n_ba_edi: FPrint duplikat po broju (109 syntax 2) + mode configbump version → 1.22.0
Napomena
Generisano od strane Claude 🤖
Ernad Husremović, hernad@bring.out.ba