Skip to main content

HR Product Health Review — 2026-07-11 (MC #105260)

MC #105260 — Bilko HR Product Health Review — SINTEZA za CEO

Datum: 2026-07-11 | Reviewers: bilko-racunovodstvo-hr (lead) + bilko-porez-fiskalizacija-hr | John verifikacija spornih nalaza live probama

Executive verdikt

Jezgro je zdravo. Ljuska nije spremna za prodaju bez 5 fixeva.

  • Knjigovodstveno jezgro: dvojno knjiženje RADI (John live probe: e2e org, jun P&L 3750 EUR, debit/credit konta ispravna), RRiF kontni plan, NUMERIC(19,4), KIR/KPR ispravni, PDV matematika tačna, OIB checksum ispravan, bilanca invarijanta drži.
  • Porezni verdikt (bilko-porez-fiskalizacija-hr): "NE smije se prodavati HR firmama bez ograde" — uslovi za DA dolje.

Nalazi — konsolidovano i rangirano

CRITICAL (zakonski rizik / blokira prodaju)

  1. PDV filing period hardkodiran kvartalno (PluginHR.getFilingDeadlines) — mjesečni obveznici (iznad praga, čl.85 ZPDV) dobili bi POGREŠAN ROK → rizik kazne klijentu. [porez #1]
  2. Nema server-side whitelist PDV stope — taxRate prima bilo šta, tiho truje PDV izvještaj. [porez #2]

HIGH

  1. Demo-seed zaobilazi knjiženje → demo/trial org ima fakture bez GL zapisa → P&L=0 → svaki trial korisnik zaključi da je proizvod pokvaren. (John reklasifikovao s P0: runtime je ispravan, seed je bug.) [rač #1 + John probe]
  2. Dashboard bez period parametra (ReportService.kt:31, hardkodiran tekući mjesec) — CEO-ov trigger nalaz; uneseni stariji račun "nestane" s glavnog ekrana. [rač + CEO]
  3. B2G eRačun ne postoji (obaveza za javni sektor od 2019) — ili implementirati ili eksplicitni disclaimer "bez javnog sektora". [porez #3]
  4. Generic 404 vraća "Invoice not found" (BILKO-INV-001) za SVE rute — zbunjuje korisnike i mobile tim. [rač #2]

MEDIUM

  1. Expense kategorije freetext umjesto RRiF konta (accountId nullable, ne popunjava se uvijek). [rač #3]
  2. buyerOib se ne preuzima automatski s kupca + einvoiceReadiness se ne prekalkuliše poslije create. [porez live]
  3. Retention period kontradikcija: kod tvrdi 11 god (NN 78/2015), dokument kaže UNVERIFIED — pravno raščistiti. [porez]
  4. HrEInvoiceServiceTest: 20 padova (test-šema drift o.deleted_at) + PluginHRTest 3 UBL pada = LAŽNI ALARM (osirotjeli test mrtve grane; produkcijski UBL put ispravan) — test dug čisti CI signal. [porez bonus]

META (proces)

  1. USER-STORIES.md je Srbija-scoped — HR tržište NEMA formalne story-je (samo 2 placeholder ćelije). Review rađen na kod+API. HR story backlog treba napisati. [porez metod]
  2. Agent-dizajn bez product review-a (MTD odluka) — persona-review gate prije shipa user-facing feature-a (ide u #105241 proces lekcije).

Minimum za "smije se prodavati" (B2B SMB, bez javnog sektora)

  1. Fix #1 mjesečno/kvartalno razlikovanje
  2. Fix #2 PDV rate whitelist {25,13,5,0}
  3. Fix #3 demo-seed kroz servisni sloj (trial kredibilitet)
  4. HrEInvoiceServiceTest šema fix (da issue/submit tok bude CI-dokaziv)
  5. Eksplicitan B2G disclaimer + retention pravna potvrda

Skorovi

  • Računovodstvo: PASS 8 / GAP 5 / FAIL 2 (15 testabilnih; 3 van read-only opsega)
  • Porez: 9 verdikt stavki (tabela u porez fajlu); HR formalne stories ne postoje

Puni izvještaji: racunovodstvo-hr-review.md (131 l.) + porez-fiskalizacija-hr-review.md (173 l.)

Fix status — 2026-07-12

Talas 1 + 2a (CRITICAL/HIGH nalazi iz reviewa) — MERGED na azdo/main, potvrđeno git merge-base --is-ancestor <sha> azdo/main 2026-08-08.

MC # Nalaz PR Commit Verdikt Evidence
#105271 CRITICAL-1 PDV filing period (mjesečno/kvartalno) PR 97 b7e04fef PARTIAL — setting + oba perioda testirana OK, ali PluginHR.getFilingDeadlines() bez callera van testova na živoj ruti → wiring gap (vidi #105317 ispod) ~/system/evidence/105271/verdict-105271.json
#105272 CRITICAL-2 PDV rate whitelist {25,13,5,0} PR 97 b7e04fef PASS ~/system/evidence/105272/verdict-105272.json
#105273 HIGH-3 Demo-seed kroz servisni sloj (GL backfill) PR 98 2f644346 PASS — live P&L probe 6500 EUR; usput otkrio BUG-C i BUG-D (out-of-scope, praćeno posebno) ~/system/evidence/105273/verdict-105273.json
#105261 CI gap — blokirajući Kotlin compile gate u PR validaciji PR 99 a48cb045 PASS (statička YAML verifikacija gate_kotlin_compile) ~/system/evidence/105261/verdict-105261.json
#105269 HR eRačun rabat — cac:AllowanceCharge u UBL PR 101 a0af66eb PASS — 39/39 testova; DB+UBL emisija gotova, UI wiring ostaje (vidi #105309 ispod) ~/system/evidence/105269/verdict-105269.json

Napomena o mapiranju: peti commit naveden uz PR listu u naslovu ovog taska (d42817fa) NIJE #105269 nego #105278 (HIGH-7 HR story backlog — USER-STORIES-HR.md, 707 linija/21 stories, PASS, merge d42817fa, ~/system/evidence/105278/verdict-105278.json). #105269 je isporučen kroz a0af66eb (PR 101). Ispravljeno ovdje da se izbjegne identifier-mismatch greška.

Follow-up status (ažurirano 2026-08-08)

Originalni tekst ovog taska (kreiran 2026-07-12) je #105317 i #105284 zvao "otvoreni follow-upi" — stanje se od tada promijenilo, oba su danas merge-ovana:

MC # Šta Status danas Verdikt/Evidence
#105317 Wiring gap iz #105271 — ComplianceCalendarService na živoj ruti /compliance/deadlines sad čita org pdv_filing_period umjesto hardkodiranog monthly DONE, MERGED na azdo/main (85855216) Peer verify PASS (26+28+9 testova, 0 fail) + statutarna validacija PARTIAL-bez-blokera (novi follow-up #105377 za GA pitanja). ~/system/evidence/105317/verdict-105317-ready.json
#105284 BUG-C iz #105273 — deterministički account lookup (V97 migracija dala LIKE-prefiks sudare 10%/12%/6%) DONE, MERGED na azdo/main (20c6b6fa) Peer verify PASS, repro dokazan 4/8→8/8 + regresije 46/46+31/31+5/5 (novi follow-up #105375 za ASC fallback granu). ~/system/evidence/105284/verdict-105284-ready.json
#105309 eRačun rabat DTO/UI wiring iz #105269 — invoice create/edit API i web UI još nemaju discount polje I DALJE OTVOREN — status in_progress, re-opened na backlog/L (stale-task-escalator 2026-08-08, nema owner aktivnosti) Nema evidence dir — rad nije počeo
#105285 BUG-D iz #105273 — BA_FED plugin revenue-konto 4000 vs hardkodirani LIKE '6%' u InvoiceService I DALJE OTVOREN — status paused, backlog/L Nema evidence dir — rad nije počeo

Napomena: i #105317 i #105284 su u svom "ready" izvještaju (2026-07-12) imali napomenu "push/PR pending keychain unlock" — to je od tada razriješeno; oba commita (85855216, 20c6b6fa) su danas potvrđeno na azdo/main (git log 2026-08-08: azdo/main HEAD = c7245a16, 2026-08-07).

Parent review: MC #105260. Ovaj docs task: MC #105318.