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)
- 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]
- Nema server-side whitelist PDV stope — taxRate prima bilo šta, tiho truje PDV izvještaj. [porez #2]
HIGH
- 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]
- 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]
- B2G eRačun ne postoji (obaveza za javni sektor od 2019) — ili implementirati ili eksplicitni disclaimer "bez javnog sektora". [porez #3]
- Generic 404 vraća "Invoice not found" (BILKO-INV-001) za SVE rute — zbunjuje korisnike i mobile tim. [rač #2]
MEDIUM
- Expense kategorije freetext umjesto RRiF konta (accountId nullable, ne popunjava se uvijek). [rač #3]
- buyerOib se ne preuzima automatski s kupca + einvoiceReadiness se ne prekalkuliše poslije create. [porez live]
- Retention period kontradikcija: kod tvrdi 11 god (NN 78/2015), dokument kaže UNVERIFIED — pravno raščistiti. [porez]
- 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)
- 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]
- 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)
- Fix #1 mjesečno/kvartalno razlikovanje
- Fix #2 PDV rate whitelist {25,13,5,0}
- Fix #3 demo-seed kroz servisni sloj (trial kredibilitet)
- HrEInvoiceServiceTest šema fix (da issue/submit tok bude CI-dokaziv)
- 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.
No comments to display
No comments to display