# Ponude u Fiskalnoj — 0.1.4+5

Izdanje 9.10.2026. Dodana je izrada ponuda u povezanom Admin panelu i Android aplikaciji. Zadržan je standardni izgled Fiskalne: bijeli Admin, postojeći zeleni naglasci i mobilne komponente. Korisnik je potvrdio IBAN i HUB-3A barkod **samo na ponudama**. Fiskalna naplata i dalje podržava samo gotovinu i karticu.

- [Admin](https://admin.fiskalna.mobilitasmagna.com/)
- [Javne upute](https://fiskalna.mobilitasmagna.com/ponude.html)
- [APK, kontrolni zbroj i pregled provjera](https://fiskalna.mobilitasmagna.com/audit.html)

## Pregled izvornog projekta

Pregledan je `E:/Codex Projects/izradaponuda`: HTML aplikacija HRPonuda v16 i Flutter izvor. Projekt nije mijenjan. Nisu preneseni njegovi kupci, arhiva, tvrtke, lozinke ili IBAN podaci.

HTML implementacija ima izdavatelja/kupca, datume, neto stavke, količine, PDV, popust po stavci, KPD, pregled i PDF, lokalni nacrt, OIB/IBAN provjere te HUB-3A barkod. U pregledanom HTML izdanju postoje mobilne meta oznake, ali nije pronađen kompletan manifest/service worker za instalaciju. PDF je rasteriziran; dio biblioteka učitava se s vanjskog CDN-a.

Flutter referenca dodatno ima ukupni popust, profile, arhivu, kopiranje/brisanje, ZIP sigurnosnu kopiju/uvoz i vektorski višestranični PDF. Fiskalna je dobila vlastitu implementaciju glavnog postupka, decimalnu matematiku i arhivu na serveru. Izvorni HTML/Flutter kod i demonstracijski podaci nisu kopirani.

## Što je dostupno

| Mogućnost | Fiskalna |
| --- | --- |
| Izdavatelj | Odabrani partner; naziv/OIB/adresa/PDV profil provjeravaju se na serveru |
| Kupac | Naziv, opcionalni OIB, adresa, kontakt, e-mail; ponovno korištenje kupca s učitane stranice arhive |
| Dokument | Datum, vrijedi do, napomena, e-mail i telefon izdavatelja |
| Stavke | Vlastite stavke ili katalog; jedinica, decimalna količina/cijena, postotni popust |
| Cijene i porezi | Način s PDV-om ili bez PDV-a, ukupni postotni popust, porezne grupe, oslobođenje s osnovom |
| KPD 2025 | Lokalna pretraga 3.358 službenih šesteroznamenkastih oznaka; provjera na serveru |
| Arhiva | Zajednička za Admin i operatere istog partnera; stranice po 50, pretraga učitane stranice |
| Broj | Automatski `PON-2026-0001`; zaseban godišnji slijed po partneru |
| Statusi | Nacrt, poslana, prihvaćena, odbijena, poništena; revizija štiti od prepisivanja promjena drugog korisnika |
| Kopiranje | Novi nacrt s vlastitim ID-em i novim brojem nakon spremanja |
| PDF i ispis | A4, tekst/vektorski sadržaj, hrvatski znakovi, ponavljanje zaglavlja, više stranica; Android dijeljenje/ispis, web PDF/ispis |
| Podaci za uplatu | Opcionalni HR IBAN, HR00 ili HR99, poziv na broj, namjena i PDF417 barkod |
| Nacrt na uređaju | Preglednik: korisnik/partner u lokalnoj pohrani; Android: šifrirani NativeVault |
| Instalacija weba | PWA manifest, vlastite ikone i service worker; Chrome/Edge instalacija, ažuriranje uz potvrdu gumbom |

## Postupak u Adminu

1. Prijavite se i odaberite partnera. Otvorite **Ponude** u izborniku.
2. Odaberite **Nova ponuda**. Upišite kupca, datum i rok. OIB je opcionalan; ako je unesen, provjerava se kontrolni broj.
3. Dodajte katalog ili ručne stavke. Katalog ima cijene s PDV-om. Ako odaberete **Bez PDV-a**, iznose unesite kao neto cijene; promjena načina ne preračunava automatski postojeće iznose.
4. Po potrebi odaberite KPD, popuste i napomenu. Profil izvan sustava PDV-a ne obračunava PDV. Oslobođenje kod partnera u sustavu PDV-a traži osnovu.
5. Za barkod otvorite **Uplatnica HUB-3A · samo na ponudi**. Uključite ga i unesite IBAN, ulicu/mjesto izdavatelja, model i ostala polja. HR99 koristi prazan poziv; HR00 traži brojčani poziv. Barkod se ne može izraditi za ukupan iznos nula.
6. **Spremi nacrt** dodjeljuje broj. **Preuzmi PDF**, **Ispis ponude** i **Izvezi podatke** koriste posljednju spremljenu verziju. Najprije spremite promjene.
7. **Označi poslanom** zaključava financijski sadržaj. To je oznaka statusa; sustav ne šalje e-mail. PDF šaljete sami. Poslanu ponudu možete označiti prihvaćenom/odbijenom ili poništenom. Za promjenu sadržaja koristite **Dupliciraj**.

Android ima **Ponude** u navigaciji i isti postupak nakon prijave operatera. Za ponude nisu potrebni certifikat, registrirana fiskalna oznaka uređaja ni otvorena smjena; potrebni su aktivan partner i ovlaštena prijava. Arhiva je ista kao u Adminu. Spremanje na server, dohvat i PDF posljednje spremljene verzije trebaju mrežu.

## HUB-3A i granice

Barkod ima službeni EUR format `HRVHUB30`, binarni UTF-8, devet stupaca, razinu korekcije 4, modul 0,254 mm i omjer 3:1. Iznos se prenosi kao točan broj centi. Format barkoda ograničava duljinu polja; dulji nazivi/adrese u barkodu se skraćuju, a cijeli podaci ostaju u PDF ponudi. Podržani su HR00/HR99, ne svi hrvatski modeli poziva na broj.

PDF sadrži podatke za uplatu i skenirljiv barkod. To nije tvrdnja da je napravljen odobreni standardni papirnati HUB-3A obrazac za šalter. Barkod je neovisno dekodiran iz renderiranog web i Android PDF-a; fizičko skeniranje u odabranoj bankovnoj aplikaciji još treba provjeriti.

Ponuda nema ZKI/JIR, ne kontaktira CIS, nije fiskalni račun niti eRačun. Prihvaćanje statusa ne izdaje račun, ne knjiži uplatu i ne pokreće transakciju. Nema automatskog pretvaranja ponude u fiskalni račun. U CIS DEMO izdanju svi PDF-ovi ponude jasno nose oznaku testnog dokumenta. Produkcija ostaje zaključana.

## Spremanje, zaštita i PWA

Tablica `public.quotes` i privatni brojač uvedeni su vlastitom migracijom `20261009111143_partner_quotes.sql`. Promjene prolaze kroz ovlaštene Admin/operator API-je: provjeravaju se aktivni Auth session, Admin grant ili operaterska pripadnost, partner i CIS DEMO okruženje. Klijentski izravni upis/RPC nije dopušten. RLS ograničava čitanje na partnera. Server računa iznose i sastavlja izdavatelja; ne vjeruje tim poljima iz klijenta. Ponovna dostava istog spremanja je idempotentna; istovremeni zahtjevi ne stvaraju dupli broj. Statusi i promjene imaju audit. Fiskalni brojači uređaja nisu dirani.

Novac se računa cjelobrojno u centima, bez binarnog float zaokruživanja. Količine/cijene/stope putuju kao decimalni stringovi. Ukupni popust raspoređuje se u centima; neto način računa PDV po grupama uz zaokruživanje pola centa naviše. JS i Dart prolaze iste vektore.

Preglednik lokalno zadržava nacrt odvojeno po korisniku i partneru, uključujući oznaku nespremljenih promjena. Odjava uklanja radno stanje iz memorije, ali lokalni nacrt ostaje za tog korisnika. Koristite privatno računalo; lokalna browser pohrana nije Android KeyStore. Android nacrt čuva se u šifriranom vaultu. Server arhiva nije potpuni backup/restore fiskalnog uređaja.

PWA sprema samo vlastiti javni programski sadržaj, manifest, ikone i fontove. API, Auth, certifikati i privatni PDF-ovi nisu u service-worker cacheu. Instalacija ne preskače prijavu ili MFA. Nacrt u već otvorenom editoru može ostati dok nema mreže; mreža je potrebna za prijavu i zajedničku arhivu. Nema offline reda slanja ponuda. Nova verzija nudi gumb **Dostupna je nova verzija · Osvježi**; sadržaj cachea ima verziju i hash. Instalacijski dijalog ovisi o pregledniku; alternativno koristite Chrome/Edge izbornik za instalaciju aplikacije.

## Provjere i objava

- Node: 36 testova; PostgreSQL/PGlite: 26 postojećih i 9 testova ponuda; Flutter: 32 testa, analiza bez nalaza. Dodatna UI regresija provjerava da promjena redoslijeda JSONB ključeva ne označi spremljenu ponudu izmijenjenom.
- Deset zajedničkih JS/Dart vektora: neto/bruto, frakcijski centi, različite stope, popusti, izvan PDV-a i besplatna ponuda.
- Stvarni Supabase/Edge: autoritativni izračun/izdavatelj, paralelni retry i brojevi, zajednička Admin/operator arhiva bez certifikata/smjene, stale revision, zaključavanje, anonimna i tuđa pripadnost odbijene.
- Web i Android PDF: 200 stavki na 13 stranica, prisutna zadnja stavka, hrvatski znakovi i neovisno dekodiran HUB-3A s točnim iznosom 20,25 EUR.
- UI nacrt i mobilne širine provjereni su zasebno; release, javne verzije, APK potpis/hash i lokalna Drive kopija dokumentiraju se u [RELEASE.md](RELEASE.md) i [VERIFICATION.md](VERIFICATION.md).
- Nisu ponavljani stvarni pozitivni CIS pozivi iz prethodnog izdanja: ponude ih ne koriste. Fiskalni dokazi 0.1.3+4 ostaju u [AUDIT_2026-10-09.md](AUDIT_2026-10-09.md).

Nisu preneseni ZIP backup/uvoz iz HRPonude, slobodno uređivi profili izdavatelja, brisanje arhivskih ponuda ili automatski e-mail. Izdavatelje zamjenjuju partneri Fiskalne, a poništenje čuva audit. Windows EXE 0.1.1+2 nije obnovljen i ostaje prezentacija. Prije stvarne uporabe ostaju obveze iz [STATUS.md](STATUS.md).

## Izvori i ključne datoteke

- [DZS KPD 2025 — službena struktura XLSX](https://web.dzs.hr/App/klasus/Docs/KPD_2025_struktura.xlsx); puni indeks i izvorni SHA-256 u `shared/kpd2025.json`, preslika za Android u `mobile/assets/data/`.
- [HUB — EUR PDF417 specifikacija, verzija 6](https://hub.hr/sites/default/files/inline-files/2DBK_EUR_Uputa_1.pdf).
- Matematika: `shared/quotes.mjs`, `mobile/lib/domain/quotes.dart`, `shared/quote-vectors.json`.
- UI: `admin/src/quotes.mjs`, `mobile/lib/quotes/quotes_screen.dart`.
- PDF: `shared/quote-pdf.mjs`, `mobile/lib/documents/quote_pdf.dart`; barkod: `shared/hub3.mjs`, `shared/pdf417.mjs`.
- API i baza: `supabase/functions/_shared/quotes.ts`, `supabase/migrations/20261009111143_partner_quotes.sql`.
- PWA: `admin/pwa-plugin.mjs`, `admin/src/pwa.mjs`, `admin/public/manifest.webmanifest`.
- Provjere: `test/quotes.test.mjs`, `test/quotes-db.mjs`, `test/pwa.test.mjs`, `mobile/test/quotes*_test.dart`, `mobile/test/quote_pdf_test.dart`, `scripts/test-quotes-cloud.mjs`.

Sintetičke QA vjerodajnice i privatni certifikati/ključevi nisu dio ove dokumentacije, javne objave niti APK-a.
