{"id":"c0924","filename":"c0924_sati_dashboard_client.dok.json","weise3_id":"WEISE3::SATI::dashboard_client::sati_global::cc::20260517T2040::NEW::FENIX2026","tip":"isporuka","naziv":"sati-global — Alpine.js dashboard + sati_client.py","kreator":"cc_sonnet_4_6","datum":"2026-05-17T20:40:00Z","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"isporuka","naziv":"sati-global — Alpine.js dashboard + sati_client.py","datum":"2026-05-17T20:40:00Z","kreator":"cc_sonnet_4_6","server_id":"genesis-new-31.70.90.84","weise3_id":"WEISE3::SATI::dashboard_client::sati_global::cc::20260517T2040::NEW::FENIX2026","bunker_seal":"BPZ9::L0::SATI::dashboard_client::isporuka::FENIX2026","zakon":["ZAKON 2","ZAKON 3","ZAKON 26","ZAKON 27","ZAKON 32"],"vivus":{"status":"aktivan","created":"2026-05-17T20:40:00Z","expires":null},"podaci":{"sto_je_napravljeno":["sati_client.py (21.5KB) — Python klijent library za sati-global API","SatiClient (JWT/Bearer) — async + sync wrappers, za fenix-v4 i web module","SatiPosClient (X-POS-KEY) — za GenesisPos blagajne, shift_summary() za display na kasi","SatiClientPool — singleton pool za async servere (FastAPI/uvicorn)","make_pos_key() — generira X-POS-KEY jednak sati-global verifikaciji","ZAKON 26: sve metode vraćaju SatiResponse TypedDict","Sync wrappers: clock_in_sync, clock_out_sync, get_timesheet_sync (za Django)","CLI test: python3 sati_client.py {base_url} — health provjera","Alpine.js SPA dashboard (index.html, 41KB) — deploy na NEW server","4 taba: Smjena (clock-in/out GPS+timer) | Moje | Manager | Firma","notifyResponse(r) — toast prikazuje r.status_msg + r.chain_ref za svaki API poziv","Dark/light tema toggle (localStorage, OBVEZNO per memory feedback)","PWA: manifest.json + sw.js s offline support (API pozivi nikad u cache)","Nginx /sati-dashboard/ → /var/www/sati-global/public/ (static serve)","Live URL: https://fina-connect.online/sati-dashboard/ → 200 OK"],"arhitektura":{"backend":"sati-global FastAPI v1.0 @ 31.70.90.84:8003","dashboard_url":"https://fina-connect.online/sati-dashboard/","api_url":"https://fina-connect.online/api/sati/","client_path":"/var/www/sati-global/sati_client.py","public_path":"/var/www/sati-global/public/"},"integracije":{"GenesisPos":"SatiPosClient(base_url, make_pos_key(secret, wg_id), wg_id)","fenix_v4":"SatiClient(base_url, genesis_bearer_token)","django_sync":"client.clock_in_sync(work_group_id)","async_server":"init_pool(base_url) + get_pool().request_with_token(token, ...)"},"provjere":{"import_test":"PASS — from sati_client import SatiClient, SatiPosClient, make_pos_key","cli_test":"PASS — health: sati-global servis aktivan i spreman.","dashboard_http":"200 OK","api_http":"200 OK"},"pending":["REVOLUT_API_KEY — sandbox ključ za billing testiranje","sati_worktime Django app — formalno arhivirati/disabled","DIO 2 (c0903) — streaming endpoint + WebRTC player (deferred)","DIO 3 (c0903) — SSIM UI + BunkerSeal L8 binding (deferred)","PWA ikone (icon-192.png, icon-512.png) — placeholder, treba pravi dizajn"]}}}