{"id":"c0167","filename":"c0167_dispo_modul_mvp_plan.dok.json","weise3_id":"","tip":"plan","naziv":"c0167 — Dispo Module MVP (dispatcher nalog → vozač prihvaća → plaćanje)","kreator":"Ivan + CC","datum":"2026-05-08","snippet":"","status":"DONE","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"plan","naziv":"c0167 — Dispo Module MVP (dispatcher nalog → vozač prihvaća → plaćanje)","datum":"2026-05-08","autor":"Ivan + CC","status":"DONE","kontekst":{"cilj":"Dispatcher kreira prijevozni nalog, vozač ga vidi i prihvaća, dispatcher prati plaćanje. Sve interno u digigraf.online — bez Stripe.","prodajni_lijevak":"QR (Stanko FB) → Genesis login → vozac.html → app.js → vidim otvorene naloge → prihvaćam → radim → dobivam potvrdu"},"faze":[{"id":"D1","naziv":"DispoJob SQLAlchemy model","opis":"Novi model u tahograf-mvp/api/models.py — status lifecycle: draft→open→accepted→in_progress→completed→paid","polja":["weise3_id (PK)","dispatcher_weise3","driver_weise3 (null)","vehicle_weise3 (null)","status","price_eur","currency","origin_city","destination_city","cargo_desc","cargo_weight_kg","notes","scheduled_at","accepted_at","completed_at","paid_at","created_at"],"zakon":"ZAKON 27 (weise3_id obavezan)"},{"id":"D2","naziv":"API endpoints (FastAPI, tahograf-mvp/api/)","opis":"Novi file dispo_endpoints.py + router u app.py","endpointovi":["POST /api/v1/dispo/jobs/ — dispatcher kreira nalog","GET  /api/v1/dispo/jobs/ — dispatcher vidi sve naloge","GET  /api/v1/dispo/jobs/available/ — vozač vidi otvorene (status=open)","POST /api/v1/dispo/jobs/{weise3_id}/accept/ — vozač prihvaća","POST /api/v1/dispo/jobs/{weise3_id}/complete/ — vozač označava završeno","POST /api/v1/dispo/jobs/{weise3_id}/pay/ — dispatcher potvrđuje plaćanje"],"auth":"Genesis token (weise3_id iz Authorization header)"},{"id":"D3","naziv":"Dispatcher UI — nova kartica u dispatcher.html","opis":"Nova sekcija 'Nalozi' u dispatcher.html + dispatcher.js — forma za kreiranje naloga + lista + status","lokacija":"/var/www/genesis/tahograf-mvp/pwa/dispatcher.html","detalji":"Nova sidebar kartica 'Nalozi' s formom (origin, dest, cargo, price, scheduled_at) + lista otvorenih naloga s drag-assign"},{"id":"D4","naziv":"Vozač UI — nalozi u app.js","opis":"Tab 'Nalozi' u app.js — vozač vidi otvorene naloge, prihvaća s jednim klikom","lokacija":"/var/www/genesis/tahograf-mvp/pwa/app.js","detalji":"Nova sekcija dostupna SAMO ako je vozač prijavljen s Genesis SSO"}],"zakon":"ZAKON 0 (tahograf-mvp = genesis submodule), ZAKON 2 (brsljani), ZAKON 27 (weise3_id)","_chain_meta":{"prev_entry":"c0166_digigraf_vozac_qr_kampanja.dok.json","opp_seal":"WEISE3::c0167::DISPO_MVP::FENIX2026","lanac_visina":167},"d3_done":"2026-05-08","d3_commit":"1e700f7","d3_fajlovi":["tahograf-mvp/pwa/dispatcher.html","tahograf-mvp/pwa/dispatcher.js"],"zavrseno":"2026-05-08T21:32:11Z","commit_d4":"5888a15","sto_je_napravljeno":{"D1":"DispoJob model — VEC POSTOJAO u tahograf-mvp/api/models.py","D2":"FastAPI dispo router — VEC POSTOJAO u genesis/api/dispo.py (includeRouter u main.py)","D3":"Dispatcher UI — HTML + CSS + DispoModule JS u dispatcher.html/dispatcher.js (bio gotov)","D4":"Vozac UI — nalozi-screen u index.html, VozacNalozi JS u app.js, card-nalozi u dashboardu. commit 5888a15"},"napomena":"Nginx za digigraf.online /api/ → port 8010 (Genesis FastAPI). Flask 5050 je tahograf API, ne dispo. Dispo je na Genesis.","d4_done":"2026-05-08","d4_commit":"99f30bc","d4_bugfix":"_actions onclick quote escaping bug fixed","d4_fajlovi":["tahograf-mvp/pwa/app.js","tahograf-mvp/pwa/styles.css","tahograf-mvp/pwa/index.html"]}}