{"id":"c1023","filename":"c1023_komitenti_modul_v4.dok.json","weise3_id":"","tip":"implementacija","naziv":"Komitenti modul V4 — globalni CRUD + HTML frontend","kreator":"genesis","datum":"2026-05-21","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"implementacija","naziv":"Komitenti modul V4 — globalni CRUD + HTML frontend","commit":"4188bbc","datum":"2026-05-21","sustav":"fenix-v4","sto_je_napravljeno":{"backend":["komitenti/router.py — 7 API ruta (list/create/get/patch/deaktiviraj/reaktiviraj/search)","komitenti/schemas.py — KomitentCreate/Update/Out/ListOut Pydantic modeli","komitenti/html_router.py — FastAPI Jinja2 ruter za /hr/komitenti/ (Starlette 1.0 API)","migrations/0015: Company + archive_doc legal fields (ZOR/AO par. 147/UStG par. 14)","companies/models.py — rewrite s novim poljima (adresa, kontakt, IBAN, Steuernummer)","core/middleware.py — fix: HTTPException bez status_code davao 500 umjesto 401","main.py — registriran komitenti_router (API) + komitenti_html_router (HTML)"],"frontend":["templates/komitenti/lista.html — card grid, instant search, filter pills, skeleton loaderi","templates/komitenti/forma.html — 4-step wizard (Osnovno/Adresa/Kontakt+Fin/Pregled)","templates/komitenti/detail.html — hero + 4 taba + FAB + danger zone","nginx: /hr/komitenti/ → port 8005 (V4 FastAPI)"],"testovi":["GET /hr/komitenti/ → 200 (shell, bez auth)","GET /hr/komitenti/novi/ → 200 (wizard forma)","GET /api/v4/komitenti/ → 401 (API zahtijeva auth)","POST /api/v4/komitenti/ → 201 (kreiran komitent)","nginx external: https://v4.limit-connect.com/hr/komitenti/ → 200"]},"arhitektura":{"pattern":"global modul — V4 je source of truth, V3 poziva isti API","parent_child":"Company.parent_id → multi-tenant (booking firma → komitenti)","soft_delete":"is_active=False — ZOR cl. 10, dokumenti ostaju u bazi","entity_types":["d.o.o.","Obrt","OPG","Fizicka osoba","Kucansvo","NGO"],"retention":"HR: 11g (ZOR cl. 10), DE: 10g (AO par. 147)"},"zakoni":["ZAKON 1A","ZAKON 27","ZAKON 32"],"pending":["Statistika tab — chart/table po godini i vrsti dokumenta","Household members DB model — forma prikuplja ali nema tablice","M2M komitent → bookkeeper — assignment","Upload forma: auto-set client_company_id iz URL-a","OPG burza (Korpas) — marketplace feature",".dokarh JSON template za OCR racuna"]}}