Skip to main content

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

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.

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)

UvjetOpisGlasačiRok / Eskalacija
U1 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. Markos + Petter + Skybound + Vlado Markos: ako nije u 3 tjedna → NO-GO
U2 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. Skybound (gate) Postiže se u danima/tjednima. Ako ne padne u 30 dana → light-export fallback.
U3 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. Petter + Vlado B-2/B-3 su zasebna CEO odluka tek nakon dokaza.
U4 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. Vlado (hard uvjet) Preduvjet za F3 fazu — ne za B-1.

Glasačka tablica

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

Š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):

Tip dokumentaKnjiženje (D = Duguje / P = Potražuje)
Izlazni računD 1200 Kupci / P 7600 Prihod + P 2400 PDV-obveza
Naplata (uplata klijenta)D 1000 Banka / P 1200 Kupci
Ulazni računD 4xxx Trošak + D 1400 Pretporez / P 2200 Dobavljači
Plaćanje dobavljačuD 2200 Dobavljači / P 1000 Banka
Putni nalogD 4200/4201 Dnevnice / P 2310 Obveza prema zaposleniku
Blagajnički primitakD 1020 Blagajna / P 1200 Kupci ili P 7600 Prihod

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

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

FazaTrajanjeResursiSadržaj
B-1 MVP 8–10 tj 1 senior BE + 0.5 FE 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
B-2 6–8 tj isti Ulazni računi, plaćanja, putni→temeljnice, pravi PDV obrazac, period close, salda-konti
B-3 6–8 tj isti GFI (bilanca/RDG/bilješke), DI+amortizacija, PD obrazac
B-4 8–12 tj TBD Plaće/JOPPD — ZASEBNA CEO odluka, samo iza certificirane cijevi

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 & 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.