Bilko Modul B (Knjigovodstvo) — Spec + Board presuda (2026-06-13)
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)
- 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.
- 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).
- "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.
- 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)
| Uvjet | Opis | Glasači | Rok / 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č | Glas | Ključ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 logikomdocument_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 dokumenta | Knjiženje (D = Duguje / P = Potražuje) |
|---|---|
| Izlazni račun | D 1200 Kupci / P 7600 Prihod + P 2400 PDV-obveza |
| Naplata (uplata klijenta) | D 1000 Banka / P 1200 Kupci |
| Ulazni račun | D 4xxx Trošak + D 1400 Pretporez / P 2200 Dobavljači |
| Plaćanje dobavljaču | D 2200 Dobavljači / P 1000 Banka |
| Putni nalog | D 4200/4201 Dnevnice / P 2310 Obveza prema zaposleniku |
| Blagajnički primitak | D 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)
| Faza | Trajanje | Resursi | Sadrž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)
- 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.
- Double-post: DB unique constraint (entry + idempotency u jednoj tx).
- GL query perf: composite index (org_id, account_id, created_at); materijalizirani snapshots u Fazi B-3.
- 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.
No comments to display
No comments to display