Bosanska lokalizacija "Odoo", nove opcije za fiskalne funkcije "FPRINT" (entitet FBiH)


Video


Uvod

U okviru bosanske lokalizacije za “Odoo” open-source platformu, implementirali smo dvije nove opcije za FPrint fiskalni drajver (entitet FBiH). Ove opcije rješavaju praktične probleme koji se javljaju u svakodnevnom radu sa fiskalnim uređajima.

Opcija 1: Identifikacija fiskalnog uređaja (signed_by)

Problem

U okruženjima sa više fiskalnih uređaja (npr. centrala HQ, prodajno mjesto POS1, prodajno mjesto POS2) potrebno je:

  1. Identificirati koji fiskalni uređaj je izdao račun
  2. Spriječiti storniranje na pogrešnom uređaju
  3. Omogućiti upit identiteta uređaja putem API-ja

Rješenje

Nova konfiguraciona opcija signed_by omogućava imenovanje svakog EDI server instance/fiskalnog uređaja.

Konfiguracija

application:
  driver:
    fprint:
      pin: '5555'
      api_key: dev_api_key_fprint_12345678901234567890
      signed_by: HQ  # Identifikator uređaja: HQ, POS1, POS2, itd.

Primjeri konfiguracije

Uređajsigned_byOpis
CentralaHQGlavna kancelarija
POS1POS1Prodajno mjesto 1
POS2POS2Prodajno mjesto 2

Novi API endpoint

# Upit identiteta uređaja
curl -X GET "http://localhost:8100/5555/signed_by" \
  -H "Authorization: Bearer <api_key>"

# Odgovor:
# {"signed_by": "HQ", "driver_name": "fprint"}

Validacija na klijentskoj strani

Odoo klijentski modul može koristiti ovu informaciju za validaciju prije storniranja:

def validate_refund_device(original_invoice, edi_server):
    response = edi_server.get("/signed_by")
    current_device = response["signed_by"]
    original_device = original_invoice.signedBy

    if current_device != original_device:
        raise UserError(
            f"Fiskalni račun izdat na drugom fiskalnom uređaju: {original_device}! STOP!"
        )

Opcija 2: Automatski polog pazara za storno račune (refund_auto_polog)

Problem

FPrint fiskalni printeri zahtijevaju dovoljan iznos gotovine u kasi za obradu storno transakcija. Kada se izdaje storno, printer mora imati gotovinu za vraćanje kupcu. Problem je što gotovina možda nije u ladici.

Rješenje

Automatski workflow za storno račune:

  1. Polog pazara: Prije obrade storna, automatski se šalje komanda za polog gotovine u iznosu storna
  2. Forsiranje gotovinskog plaćanja: Storno se šalje sa tipom plaćanja Cash bez obzira na originalni tip plaćanja

Konfiguracija

application:
  driver:
    fprint:
      pin: '5555'
      api_key: dev_api_key_fprint_12345678901234567890
      refund_auto_polog: true  # default: true

Workflow

Zahtjev klijenta (Storno -15 KM, kartica)


┌─────────────────────────────────────────┐
│ 1. Izračunaj apsolutni iznos storna     │
│    iznos = abs(-15) = 15 KM             │
└─────────────────────────────────────────┘


┌─────────────────────────────────────────┐
│ 2. Pošalji Polog Pazara komandu         │
│    iznos: 15 KM                         │
└─────────────────────────────────────────┘


┌─────────────────────────────────────────┐
│ 3. Override tip plaćanja na Cash        │
│    original: Card → forsirano: Cash     │
└─────────────────────────────────────────┘


┌─────────────────────────────────────────┐
│ 4. Pošalji Storno račun                 │
│    iznos: -15 KM                        │
│    tip_placanja: Cash                   │
└─────────────────────────────────────────┘


Odgovor klijentu

Transparentnost za klijenta

Nema promjena na API nivou. Ponašanje je transparentno za klijente:

  • Klijent šalje storno račun sa bilo kojim tipom plaćanja
  • Server interno obrađuje polog pazara i override tipa plaćanja
  • Odgovor se vraća kao normalno

Logovanje

INFO: Refund auto_polog: sending polog for 15.00 KM
INFO: Refund auto_polog: polog successful
INFO: Refund auto_polog: forcing Cash payment type

Zaključak

Obje nove opcije poboljšavaju rad sa FPrint fiskalnim uređajima u FBiH entitetu:

OpcijaDefaultNamjena
signed_byHQIdentifikacija uređaja u multi-device okruženju
refund_auto_pologtrueAutomatski polog za bezbrižno storniranje

Implementacija je kompatibilna unazad - postojeći klijenti ne zahtijevaju promjene.


Napomena

Članak je izgenerisao Claude, Ernad pregledao.