HR eRačun — aktivacija produkcije za SMART FORGE d.o.o. (MC #103443, 2026-08-20)
HR eRačun — aktivacija produkcije za SMART FORGE d.o.o. (MC #103443, 2026-08-20)
Status: ŽIVO · Verdikt: PARTIAL (peer: eracun-verifier, PARTIAL)
Subjekt: SMART FORGE d.o.o., OIB 09582110234 · Posrednik: PostLink d.o.o. / sveRačun, OIB 53625326797
Obavezni B2B eRačun u HR važi od 2026-01-01. Aktivacija je izvedena 7,5 mjeseci nakon roka; blokator je od 03.08. bio samo neodrađen korak u FiskAplikaciji, dok su prod nalog i API ključ postojali.
1. Korak koji agent ne može odraditi
Potvrda posrednika u ePorezna → Usluge → FiskAplikacija → Administracija traži osobnu NIAS prijavu zakonskog zastupnika. Dva odvojena taba, oba obavezna:
| tab | radnja |
|---|---|
| Adrese za zaprimanje eRačuna | red POSTLINK u statusu „Čeka potvrdu" → Akcije → Potvrdi |
| Ovlaštenja za fiskalizaciju | Novo odobrenje → OIB 53625326797 → Dohvati → „Vrijedi od" → Spremi |
Bez drugog taba posrednik je potvrđen samo kao adresa za zaprimanje, a zaprimljeni eRačuni se ne fiskaliziraju automatski. Porezna to navodi kao čest propust.
Izvedeno 2026-08-20 11:08, korisnik ALEM BASIC. Adresa je bila dostavljena od PostLinka 03.08. u 13:27 i čekala potvrdu 17 dana.
Zid koji je usporio: prazna kategorija „FiskAplikacija"
Pokušaj da zastupnik sam sebi dodijeli ovlaštenje odbijen je porukom „Nije dozvoljeno drugim ovlaštenicima… da dodjeljuju ovlaštenja za pravne zastupnike."
To je bio pogrešan ekran. Službena uputa Porezne kaže: „Sustav će prepoznati da se radi o ovlaštenoj osobi te će pokrenuti registraciju korisnika. U postupku registracije korisniku će se dodijeliti potrebna ovlaštenja." Zastupnik ovlaštenje dobiva automatski. „Upravljanje ovlaštenjima" služi isključivo za delegiranje trećim osobama; prazna kategorija tamo znači „nikome nisi delegirao", ne „nemaš pristup".
2. Mašinski dokaz — prije/poslije
POST https://hr.sveracun.hr/api/rest/v1/organizations/amsCheck, tijelo {"vatNumber":"09582110234"}:
| vrijeme | odgovor |
|---|---|
| prije 11:08 | {"isAmsRegistered": false} |
| 11:23 | {"isAmsRegistered": true} |
Format: vatNumber ide goli OIB. HR-prefiksiran vraća 401 — ključ je scoped na točan string. To je drugo polje od companyVatNumber u headeru, koji jest HR-prefiksiran.
3. Konfiguracija — šta se stvarno mijenja
Baza hr_einvoice_issuer_config
| org | issuer_oib | api_base_url | enabled |
|---|---|---|---|
| Smart Forge | HR09582110234 | https://hr.sveracun.hr/api |
true |
| Bilko Demo Hrvatska | HR91276104352 | test.sveracun.hr | false |
| Bilko E2E Test | HR91276104352 | test.sveracun.hr | false |
Azure bilko-api-demo (rg-bilko-demo)
SVERACUN_HR_LIVE=true · SVERACUN_SENDER_VAT=HR09582110234 · secret sveracun-api-key ← prod ključ
4. Četiri zamke koje su koštale vremena
Z1 — api_base_url default je TEST. Migracija V75 postavlja https://test.sveracun.hr/api. Flip samo enabled=true šalje prave račune na TEST i sve izgleda ispravno. Tihi lažni uspjeh. Uvijek oba polja u istom UPDATE-u.
Z2 — api_key_secret_ref se razrješava kroz mapu s jednim unosom. GcpSecretManagerClient.kt: "bilko-sveracun-test-api-key" → "SVERACUN_API_KEY". Ime mora ostati takvo iako sadrži riječ „test". Preimenovanje u produkcijsko obara razrješavanje (IllegalStateException — pada glasno).
Z3 — jedan ključ služi sve redove. api_base_url je po redu, ali svi redovi dobijaju isti env var. Test i produkcija se ne mogu voziti istovremeno. Zato su testni redovi ugašeni. Pravi fix je izmjena koda → MC #900029.
Z4 — Multiple revisions mod ne prebacuje saobraćaj. Najskuplja. az containerapp update --set-env-vars napravi novu reviziju s ispravnim configom, ali 100% saobraćaja ostaje na staroj. latestRevisionName i latestReadyRevisionName pokazuju novu i oba su tačna — ali nijedno ne mjeri ko prima saobraćaj.
az containerapp ingress traffic show -g <rg> -n <app>
az containerapp ingress traffic set -g <rg> -n <app> --revision-weight <app>--000008X=100
Prije prebacivanja obavezno uporedi image digest stare i nove revizije, da config flip usput ne isporuči kod koji čeka u novijem image-u.
5. Opseg — šta ovo NIJE
SveRacunHrEInvoiceAdapter.kt:117: „the XML supplier party is always SVERACUN_SENDER_VAT, regardless of what is set on invoice.supplier.taxId (which is the Bilko customer's own OIB)."
U DIRECT modu svaki račun izlazi pod OIB-om držaoca ključa. Ispravno za vlastite račune, pravno pogrešno za račune kupaca. Multi-tenant traži submission_mode=INTERMEDIARY i posrednički ugovor s PostLinkom → MC #106636.
6. Šta namjerno nije dokazano
Prvi eRačun nije poslan. hr.sveracun.hr je produkcija — račun poslan tamo je stvaran fiskalni dokument prijavljen Poreznoj upravi. Org nema kupaca (0 kontakata, 0 artikala, 0 računa), pa bi svaki račun bio izmišljen, a poništavanje izdanog računa traži knjižno odobrenje, ne storno (MC #106379).
Zato PARTIAL, ne PASS. Zadnju kariku dokazuje prvi stvarni račun.
Nekritično i otvoreno: findByVatNumber vraća HTTP 204 za naš OIB, neobjašnjeno, ne blokira.
7. Rollback
~/system/evidence/103443/rollback/ — rollback-2026-08-20.sql (stanje sva tri DB reda) i aca-env-before-2026-08-20.json (45 env varijabli).
Testni API ključ nije postojao nigdje osim u ACA secretu; sačuvan u vault item 63e5c91e-52bc-4f92-ae03-aabeafea5b28, verifikovan čitanjem nazad.
8. Provjere koje vrijede
curl https://app-api.bilko.cloud/api/v1/health # /health je 404, ovo je živi path
az containerapp ingress traffic show -g rg-bilko-demo -n bilko-api-demo
Evidence: ~/system/evidence/103443/ams-confirmation-2026-08-20.md · peer: peer-review-2026-08-20.md
No comments to display
No comments to display