# Bilko Modul B (Knjigovodstvo) — Spec + Board presuda (2026-06-13)

<div class="callout success" id="bkmrk-tl%3Bdr-%E2%80%94-4%2F4-conditio"> **TL;DR** — 4/4 CONDITIONAL GO (jednoglasno). Modul B = dovršenje Modula A, ne ekspanzija. Četiri tvrda uvjeta (U1–U4) moraju biti zadovoljeni prije B-1 sprintova. Gate je komercijalni: 1 imenovan, obvezani ovlašteni računovođa kao design-partner. CEO direktiva 2026-06-13: "kreni kao da imamo računovođu" → B-1 path otvoren; U1 (Vlado posting-rule templates) u toku — MC #103530. </div>## 1. Presuda odbora — Board Verdict

Datum: 2026-06-13 · MC #103523  
Članovi: Markos Zachariadis (fintech/tržište), Petter Graff (izvodljivost), Vlado Brkanić (HR domena/regulativa), Skybound (SaaS strategija)

### Rezultat: 4/4 CONDITIONAL GO (jednoglasno uvjetno DA)

Nijedan NO-GO. Nijedan bezuvjetni GO. Sva četiri nezavisna glasa stigla na istu strukturu — što je sam po sebi signal: nije pristranost jednog ugla, nego konvergencija.

### Zajednički zaključci (sva 4 se slažu)

1. **B nije "drugi proizvod" / premature expansion** — to je dovršenje Modula A. Bez GL-a, svaka A-faktura pada u računovodstvenu crnu rupu (računovođa je ručno pretipkava). B pretvara Bilko iz "alata koji STVARA posao računovođi" u "platformu gdje računovođa živi". Vertikalna integracija unutar istog workflowa.
2. **Računovođa = distribucijski kanal.** Na HR/Balkan tržištu vlasnik NE bira računovodstveni softver — bira ga (ili veta) računovođa. 1 računovođa = potencijalno 30 firmi na Modulu A. To je flywheel (isti mehanizam kao Xero).
3. **"Light-export" alternativa = povlačenje, ne strategija** (Skybound + Markos). Cementira Bilko u trajno podređenu "feeder" poziciju, bez lock-ina, bez cjenovne poluge. Gradi se SAMO kao fallback ako uvjet ispod ne padne u 30 dana.
4. **Pakiranje "2 proizvoda 1 platforma" = koherentno** (Xero/QuickBooks/FreeAgent rade isto). Cijena: računovođin seat (flat) + po-firmi iznad besplatnog praga. Mapira se na postojeći feature-gate #102481. Bez arhitektonske kontradikcije.

### Četiri hard uvjeta (presjek svih glasova — moraju biti TRUE prije builda)

<table id="bkmrk-uvjetopisglasa%C4%8Dirok-"> <thead> <tr><th>Uvjet</th><th>Opis</th><th>Glasači</th><th>Rok / Eskalacija</th></tr> </thead> <tbody> <tr> <td>**U1**</td> <td>Vladini posting-rule templates ISPISANI i ovjereni PRIJE prve linije B-1 koda. Ne razgovor — potpisan dokument: konto po tipu dokumenta po jurisdikciji u JSONB formatu. Bez toga B-1 ship-a s placeholder pravilima = kriva knjiga = gore od ničega.</td> <td>Markos + Petter + Skybound + Vlado</td> <td>Markos: ako nije u 3 tjedna → NO-GO</td> </tr> <tr> <td>**U2**</td> <td>Jedan IMENOVANI, obvezani ovlašteni računovođa kao design-partner: (a) daje posting pravila, (b) vodi praksu na B-1 MVP-u u pilotu, (c) tjedni feedback. Čak WhatsApp potvrda dovoljna na ovom stupnju.</td> <td>Skybound (gate)</td> <td>Postiže se u danima/tjednima. Ako ne padne u 30 dana → light-export fallback.</td> </tr> <tr> <td>**U3**</td> <td>SAMO B-1 sada (8-10 tj, 1 senior BE + 0.5 FE). B-2/B-3 ODGOĐENI dok: A stabilan (0 sev-1 bugova 60 dana), riješen domain-QA kapacitet, ≥1 PLAĆAJUĆI računovodstveni servis koristi B-1. Kill-switch (Unleash ACCOUNTING\_GL\_MODULE / GL\_AUTO\_POST) ožičen i testiran PRIJE bete.</td> <td>Petter + Vlado</td> <td>B-2/B-3 su zasebna CEO odluka tek nakon dokaza.</td> </tr> <tr> <td>**U4**</td> <td>Za F3 (GFI/PD/PDV obrasci prema FINA/Poreznoj): stalni ovlašteni računovođa kao "regulatory owner" na platnoj listi. Honorarni konzultant NE zadovoljava. F4 (JOPPD/plaće) = zasebna CEO odluka, NE u ovom glasu.</td> <td>Vlado (hard uvjet)</td> <td>Preduvjet za F3 fazu — ne za B-1.</td> </tr> </tbody></table>

### Glasačka tablica

<table id="bkmrk-glasa%C4%8Dglasklju%C4%8Dni-uv"> <thead> <tr><th>Glasač</th><th>Glas</th><th>Ključni uvjet</th></tr> </thead> <tbody> <tr> <td>Markos Zachariadis (Finverge)</td> <td>CONDITIONAL GO</td> <td>Vlado posting-rule templates zaključani PRE B-1 sprinta; referentni računovođa potpisan; A ima mjerljive klijente</td> </tr> <tr> <td>Petter Graff (CodeCraft)</td> <td>CONDITIONAL GO — B-1 ONLY NOW, B-2/B-3 DEFERRED</td> <td>8-10 tjd bounded bet; Vlado pisana pravila PRIJE prvog koda; kill-switch aktivno testiran</td> </tr> <tr> <td>Vlado Brkanić (domena)</td> <td>UVJETNO GO — F1 DA; F3 UVJETNO; F4 NE</td> <td>F3+: stalni ovlašteni računovođa na platnoj listi; VERIFY-NN runda za sve obrasce</td> </tr> <tr> <td>Skybound (SaaS strategija)</td> <td>CONDITIONAL GO</td> <td>Jedan imenovan design-partner računovođa s posting-rule obvezom PRIJE kickoffa; inače light-export fallback</td> </tr> </tbody></table>

### Što odbor poručuje CEO-u (akcija)

Build-odluka NIJE inženjerska — gate je KOMERCIJALNI: nađi 1 obvezanog računovođu (čak WhatsApp potvrda dovoljna na ovom stupnju). To istovremeno rješava U1 (daje pravila), U2 (validira spremnost na prelazak prije 20-26 tj builda) i prvi referentni/plaćajući slučaj.

Ako CEO potvrdi imenovanog računovođu u 30 dana → B-1 ide CodeCraftu na scoping (8-10 tj). Ako ne → light-export layer kao privremeni kanal, B se revidira.

### Raspon koji nije u specu (rizici koje je odbor dodao)

- **Compliance je DOŽIVOTNI OPEX**, ne jednokratni build trošak — COMBINED spec ga nije ucijenio (Vlado + Petter).
- **Attention-split:** 1 senior BE + 0.5 FE radi SAMO ako su to DODATNI ljudi, ne postojeći A-tim. Inače A skuplja neservisirani dug. Provjeri headcount prije GO.
- **Opening-balance onboarding wizard** mora biti stvarno dobar — računovođa ne migrira 30 firmi sredinom porezne godine bez toga.

**Jedna rečenica:** A = jezgra i ulaz na tržište; B-1/F1 = GRADI (uz imenovanog računovođu + Vladina pisana pravila); B-2/B-3 = tek nakon dokaza plaćanja; F4/plaće = zasebna odluka.

---

## 2. Modul B Spec — Vizija i arhitektura

### Jedna platforma, dva proizvoda

**A = Bilko Fakturiranje** (vlasnik firme) — postoji. **B = Bilko Knjigovodstvo** (OVLAŠTENI RAČUNOVOĐA, multi-org) — novo. Feature-gated preko postojeće #102481 arhitekture (Feature enum / PlanTier / FeatureMatrix — operativno; B se uključi BEZ mijenjanja postojećeg koda). Novi Stripe add-on/plan za B.

### Temelj koji već postoji (tool-verificirano u repou)

- accounts/account\_types (kontni plan, seeded per jurisdikcija V23/24/27/62) ✓
- Transactions tabela + validateDoubleEntry() stub (no.alai.bilko.accounting) ✓
- Feature-gate (#102481) operativan ✓ · orgTransaction/RLS čist ✓ · ReportExportService (PDF/XLSX) reuse ✓
- **KRITIČNO:** postojeća Transactions = 2-leg (debit\_account\_id/credit\_account\_id) = prečica, NIJE prava temeljnica. Izlazni račun s PDV-om = 3 noge (Kupci D / Prihod P / PDV-obveza P). GL engine treba PRAVI multi-leg model. Transactions ostaje za bank-recon, nije GL.

### GL Engine (Petter Graff)

**4 nove tabele:**

- `journal_entries` — glava temeljnice (org\_id, period, status: DRAFT/POSTED/REVERSED)
- `journal_postings` — noge (account\_id, debit/credit amount; multi-leg per entry)
- `accounting_periods` — periodi s OPEN/CLOSED statusom i period-close logikom
- `document_postings` — idempotency bridge: UNIQUE(org\_id, source\_type, source\_document\_id)
- `posting_rules` (config) — JSONB konfiguracija po dokumentu po jurisdikciji

**3 PG triggera:** balance enforcement (ΣD=ΣP na POSTED), immutability (entries+postings readonly nakon POSTED).

**1 servis:** PostingRuleEngine — evaluira posting\_rules JSONB, generira journal\_postings automatski.

**A→B bridge:** SINHRON unutar orgTransaction (DB atomicity). Idempotencija: UNIQUE constraint → dokument se knjiži tačno jednom; edit/void = reversing entry.

**Codebase disciplina (Petter):** B routes ostaju u /accounting/\* namespace; GlService nikada ne importira iz InvoiceService (bridge kroz domain event / DTO); Flyway migracije B prefiksovane zasebno (VN\_\_gl\_\*.sql).

### Kako A hrani B — auto-prijedlog temeljnice

Svaki A-dokument → auto-PRIJEDLOG temeljnice (računovođa pregleda/potvrdi, ne naslijepo):

<table id="bkmrk-tip-dokumentaknji%C5%BEen"> <thead> <tr><th>Tip dokumenta</th><th>Knjiženje (D = Duguje / P = Potražuje)</th></tr> </thead> <tbody> <tr><td>Izlazni račun</td><td>D 1200 Kupci / P 7600 Prihod + P 2400 PDV-obveza</td></tr> <tr><td>Naplata (uplata klijenta)</td><td>D 1000 Banka / P 1200 Kupci</td></tr> <tr><td>Ulazni račun</td><td>D 4xxx Trošak + D 1400 Pretporez / P 2200 Dobavljači</td></tr> <tr><td>Plaćanje dobavljaču</td><td>D 2200 Dobavljači / P 1000 Banka</td></tr> <tr><td>Putni nalog</td><td>D 4200/4201 Dnevnice / P 2310 Obveza prema zaposleniku</td></tr> <tr><td>Blagajnički primitak</td><td>D 1020 Blagajna / P 1200 Kupci ili P 7600 Prihod</td></tr> </tbody></table>

Mapiranje konfigurabilno po orgu; bez mapiranja → status "za kontiranje" (računovođa ručno unosi).

### Faze i trud (order-of-magnitude, Petter)

<table id="bkmrk-fazatrajanjeresursis"> <thead> <tr><th>Faza</th><th>Trajanje</th><th>Resursi</th><th>Sadržaj</th></tr> </thead> <tbody> <tr> <td>**B-1 MVP**</td> <td>8–10 tj</td> <td>1 senior BE + 0.5 FE</td> <td>GL shema, kontni plan UI, auto-post izlazni računi, ručne temeljnice, glavna knjiga, BRUTO BILANCA, feature-gate, Stripe add-on, opening-balance wizard</td> </tr> <tr> <td>**B-2**</td> <td>6–8 tj</td> <td>isti</td> <td>Ulazni računi, plaćanja, putni→temeljnice, pravi PDV obrazac, period close, salda-konti</td> </tr> <tr> <td>**B-3**</td> <td>6–8 tj</td> <td>isti</td> <td>GFI (bilanca/RDG/bilješke), DI+amortizacija, PD obrazac</td> </tr> <tr> <td>**B-4**</td> <td>8–12 tj</td> <td>TBD</td> <td>Plaće/JOPPD — ZASEBNA CEO odluka, samo iza certificirane cijevi</td> </tr> </tbody></table>

**Ukupno bez B-4: 20–26 tj (~5–6.5 mj), gated po fazama, ne blank check.**

### Build vs Buy: BUILD

Nema OSS JVM double-entry s Balkan jurisdikcijom + multi-tenant RLS. Engine ~1500 linija Kotlina. Složenost je u Vladinim domenskim pravilima, ne u mehanizmu. Ništa eksterno.

### Pravne granice (Vlado Brkanić)

- Bilko PRIPREMA + IZVOZI; uprava potpisuje GFI (čl. 18.9–10 ZoR); ovlaštena osoba podnosi PDV/PD/JOPPD.
- **ZABRANJENO:** "automatski/jednim klikom/garantirano/zamjenjuje računovođu".
- Disclaimer ostaje na svakom regulatornom outputu — vidljiv, perzistentan, ne-dismissable.
- Plaće/JOPPD = crvena zona (F4 = zasebna CEO odluka).

### Rizici (Petter)

1. **Posting-rule correctness (BLOKER):** Vlado mora dati konta za svaki tip dokumenta po jurisdikciji; krivo pravilo = kriva glavna knjiga. Platform-admin review gate PRIJE auto-post aktivacije.
2. **Double-post:** DB unique constraint (entry + idempotency u jednoj tx).
3. **GL query perf:** composite index (org\_id, account\_id, created\_at); materijalizirani snapshots u Fazi B-3.
4. **Migracija postojećih:** orgovi sredinom godine trebaju opening-balance → GL onboarding wizard obavezan u B-1.

### VERIFY NN (potrebno prije F2/F3)

PDV-K status, dnevnice iznosi, JOPPD osnovice, amortizacija udvostručenje — nije potvrđeno, FINA URL 404 (Vlado napomena). Eksplicitna VERIFY-NN runda obvezna.

---

## 3. Status odluke — CEO direktiva 2026-06-13

CEO direktiva 2026-06-13: **"kreni kao da imamo računovođu"** → B-1 path otvoren.

- **U1 u toku:** Vlado Brkanić ispisuje posting-rule templates → MC #103530.
- **U2 pending:** CEO traži imenovanog računovođu-design-partnera (rok: 30 dana ili light-export fallback).
- **U3:** B-1 jedino ovlašteno; B-2/B-3 freezed dok A ne postigne 0 sev-1 bugova 60 dana + ≥1 plaćajući računovodstveni servis na B-1.
- **U4:** F3 faza blokirana dok Bilko ne zaposli stalnog ovlaštenog računovođu kao "regulatory owner".

Sljedeći korak za CodeCraft (Petter): čekaj U1 (Vladine template) → B-1 scoping sprint (8-10 tj estimate).

---

## Appendix: Sažetak individualnih glasova

### Markos Zachariadis — Finverge (FinTech &amp; tržište)

**Glas: CONDITIONAL GO**

Tržišna analiza: SMB bookkeeping SaaS segment u HR/BA/RS podservisiran — incumbenti (RRiF, Pantheon, Minimax, Saga) su desktop-native, single-org, bez eRačun-native workflowa. Bilko-ov wedge: računovođa dovodi 30 klijenta na platformu gdje su već (kao A korisnici) — obrnut distribucijski model od Minimaxa i fundamentalno jeftiniji za akviziciju. A→B flywheel realan, ali aktivira se kasno (tek kad A ima dovoljno penetracije da računovođe naiđu organski). Efikasni wedge pitch: "eRačun-first" — klijentovi eRačuni teku direktno u knjige bez re-unoса.

Tri hard pre-condition gate: (1) Domain input locked — Vlado potpisani JSONB konto-templates PRIJE B-1 sprinta; (2) Referentni računovođa potpisan — ovlašteni računovođa (HZRFD ili ekvivalent) kao beta partner PRIJE B-1 produkcijskog laунcha; (3) A ima mjerljive traction (preporuka: 50 plaćajućih A klijenata ILI 3 računovodstvena servisa na A).

Flip to NO-GO: ako Vlado posting-rule input nije dostupan u 3 tjedna od B-1 start datuma. Matematički balansiran ali sadržajno pogrešan GL = tiha erozija povjerenja + pravna izloženost računovođi.

### Petter Graff — CodeCraft (arhitektura i izvodljivost)

**Glas: CONDITIONAL GO — B-1 ONLY, B-2/B-3 DEFERRED**

Arhitektura je ispravna i čista. B-1 isporučuje pravi minimalni proizvod kojim računovođa može raditi (izlazni računi, ručne temeljnice, bruto bilanca). 8-10 tjd = bounded bet; 26 tjd sada = blank check na proizvod koji još pronalazi PMF, s otvorenim A-bugovima iz UAT-a.

Glavni rizik nije u engine-u — nego u posting-rule correctness kao TRAJNOJ operativnoj funkciji: PDV stope, GFI FINA sheme, dnevnice iznosi mijenjaju se godišnje. Vlado nije na stalnom ugovoru → domenska QA kapacitet ne postoji za B-2/B-3 opseg. Uvjeti za B-2/B-3: (1) A stabilan (0 sev-1 bugova 60 dana + bank recon live); (2) Vlado na retaineru ILI stalni ovlašteni računovođa; (3) ≥1 plaćajući B-1 accounting firm.

### Vlado Brkanić — Domena (HR računovodstvo/porez)

**Glas: UVJETNO GO — F1 DA; F3 UVJETNO; F4 NE dok uvjet ne padne**

F1 = sigurna zona (ništa ne ide državi; računovođa pregledava; bruto bilanca nije regulatorni output). F3 = visoki regulatorni rizik (GFI/PDV/PD obrasci prema FINA/Poreznoj se mijenjaju godišnje; NN/Pravilnici/FINA sheme). F4 (JOPPD/plaće) = crvena zona — ne u ovom glasu.

Jedan hard uvjet za F3: Bilko zapošljava stalnog ovlaštenog računovođu kao "regulatory owner" Modula B. Honorarni konzultant NE zadovoljava. Compliance = doživotni OPEX, ne jednokratni build trošak. Bilko na govorljivom HR tržištu — jedan bug koji 30 firmi jednog servisa pogrešno proknjiži = trajno narušeno ime.

### Skybound — SaaS strategija

**Glas: CONDITIONAL GO**

B nije premature expansion — to je vertikalna integracija unutar istog workflowa. Računovođa = stvarni decision-maker za A-akviziciju (vlasnik ne bira software, bira računovođa). Light-export alternativa = retreat opcija, ne strategija — cementira Bilko u podređenu "feeder" poziciju bez lock-ina i bez cjenovne poluge.

Pricing model: računovođin seat (flat) + per-client-org fee iznad besplatnog praga (npr. prvih 5 orgova uključeno, zatim X BAM/mj po dodatnom orgu) — koherentno s #102481 feature-gate arhitekturom. Jedan hard gate: imenovan design-partner računovođa s posting-rule obvezom PRIJE B-1 kickoffa (čak WhatsApp potvrda dovoljna). Bez toga: light-export fallback u 30 dana. Sequencing: B-1 s design-partnerom u svakom sprintu → tek po prvom plaćajućem korisniku komercijalni push A → B-2/B-3 na temelju feedback-a.