{"id":"c1209","filename":"c1209_slim_klijenti_redis_backend.dok.json","weise3_id":"w3_c0c457700681be1dce302ec8bab7c1484ccae359","tip":"IMPLEMENTACIJA","naziv":"Slim klijenti + Redis backend — POS asimilacija","kreator":"Ivan Seki + CC","datum":"2026-05-31","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"IMPLEMENTACIJA","naziv":"Slim klijenti + Redis backend — POS asimilacija","redni":"c1209","datum":"2026-05-31","autor":"Ivan Seki + CC","sto_je":{"kratko":"Zamjena debelih JS klijenata s tankim fetch-only klijentima. Sva logika premjestena na server. ZAKON 41.","princip":"Piranha analiza: stari JS = samostalni mozgovi, 0 fetch poziva. Novi slim JS = ciste fetch ljuske. Server je jedina istina.","zakon_41":"Nema vanjskih SDK-ova. Nema lokalnog state machinea. Browser-native fetch i Web Speech API."},"slim_klijenti":{"genesis_kernel_slim.js":{"zamjenjuje":"genesis_kernel.js","uklonjeno":["lokalni h256","lokalna Krunica","lokalna Sesija","offline state machine"],"api":{"Puz.udi":"POST /api/v1/pos/auth/verify → token, weise3_id, trust","Puz.udi_offline":"POST /api/v1/pos/auth/verify s tprg_token","Sesija.puls":"GET /api/v1/pos/sesija/puls → stanje, preostalo_s","Sesija.atom":"POST /api/v1/pos/krunica/atom → redni, hash","Sesija.predaj":"POST /api/v1/pos/sesija/predaj → ok, paket, atom_count"}},"ai_promatrac_slim.js":{"zamjenjuje":"ai_promatrac.js","uklonjeno":["lokalni regex mozak","lokalna pravila prepoznavanja","lokalni meni matching"],"api":{"razmisli":"POST /api/v1/pos/ai/razumij → stavke, namjere","slusaj":"POST /api/v1/pos/ai/slusaj → prijedlozi, namjere","prati":"GET /api/v1/pos/ai/prati → javi: lista upozorenja","nudi_dopunu":"GET /api/v1/pos/ai/prati?stavke_count=0 → filtrira tip=zaliha"},"napomena":"AI pozivi kroz ZAKON 38 TokenRouter → Haiku T0"},"vozac_vertikala_slim.js":{"zamjenjuje":"vozac_vertikala.js","uklonjeno":["lokalni state machine","TURA_TIJEK logika","lokalna fiskalizacija logika"],"api":{"planiraj_stanicu":"POST /api/v1/pos/tura/planiraj → id, stanje PLANIRANA","pomakni":"POST /api/v1/pos/tura/{id}/pomakni → ok, novo, tip_fiskalizacije","pregled":"GET /api/v1/pos/tura/pregled → stanice, ukupno"},"tura_tijek":"PLANIRANA → U_VOZNJI → NA_MJESTU → ISPORUCENO(ALIBI) → NAPLACENO"},"eho_ai_slim.js":{"zamjenjuje":"eho_ai.js novi protokol","klase":["EhoPoruka","EhoKanal","EhoStandard","EhoVjecni"],"crta_lokalno":"EhoPoruka.ljudski dekodira iz SEMANTIKA registra bez servera","api":{"EhoKanal.posalji":"POST /api/v1/eho/posalji → perla_hash, redni, znacenje","EhoKanal.primi":"POST /api/v1/eho/primi → valjan, tko, znacenje, atom","EhoStandard.manifest":"GET /api/v1/eho/manifest"}}},"server_backend":{"pos_kernel.py":{"lokacija":"/var/www/fenix-v4/api/v1/pos_kernel.py","server":"MAR fenix-v4 port 8005","framework":"FastAPI async, Python 3.13","endpointi":10,"redis_db":5,"redis_namespace":"fenix4:pos:","redis_kljucevi":{"fenix4:pos:sesija:{token}":"JSON sesije, TTL 8h (28800s)","fenix4:pos:krunica:{wid}":"LIST atoma smjene, SHA3-256 lanac","fenix4:pos:tura:{id}":"JSON stanice ture","fenix4:pos:tureSmjene:{wid}":"SET ID-ova tura u smjeni"},"auth":"X-Pos-Token, secrets.token_urlsafe(32), TTL 28800s","weise3_id_formula":"SHA3-256(WEISE3::{genesis_token}::pos::FENIX2026)[:40]","atom_hash_formula":"SHA3-256(oznaka|z|prev_hash|json(sadrzaj))","alibi_atom":"z=9 pri ISPORUCENO: GPS + potpis_hash + dokaz_kadar","fiskalizacija_atom":"z=1 pri NAPLACENO: F1 ili F2 tip"},"eho_api.py":{"lokacija_mar":"/var/www/fenix-v4/api/eho_api.py","lokacija_eu":"/var/www/genesis/api/eho_api.py","redis_db":5,"redis_namespace":"fenix4:eho:","redis_kljucevi":{"fenix4:eho:chain":"LIST cijelog JSON atoma, RPUSH, TTL 7 dana","fenix4:eho:atom:{hash}":"STRING JSON atoma, TTL 7 dana"},"napomena":"Redis rjesava multi-worker problem: atom vidljiv svim gunicorn workerima"}},"pos_adaptive_patch":{"fajl":"templates/pos/adaptive.html","dodano":["slim script tagovi: genesis_kernel_slim, ai_promatrac_slim, vozac_vertikala_slim, eho_ai_slim","smjena bar UI: weise3_id, preostalo vrijeme, Produzi i Predaj gumbi","mic gumb: Web Speech API, ZAKON 41, hr-HR locale","_posInit: sessionStorage pos_slim_token, Puz.udi pri startu","_smjenaPuls: interval 60s, Sesija.puls azurira UI","_micToggle: SpeechRecognition → ai.slusaj → dodajArtikl"]},"nginx_routing":{"MAR_dodano":["location /api/v1/pos/ → proxy_pass http://127.0.0.1:8005","location /api/v1/eho/ → proxy_pass http://127.0.0.1:8005"],"napomena":"Specificni blokovi moraju biti ISPRED catch-all /api/v1/ → :8010"},"arhitekturalne_odluke":[{"odluka":"Redis db=5 za POS i EHO","razlog":"Izolacija od fina db=1 i genesis/brsljani db=4"},{"odluka":"UMD format za slim JS","razlog":"Drop-in zamjena: isti interface kao debeli klijenti, bez promjena na stranicama"},{"odluka":"X-Pos-Token u HTTP headeru","razlog":"ZAKON 29: token nije u URL-u ni logu"},{"odluka":"EHO API na fenix-v4 MAR, ne samo EU genesis","razlog":"JS slim klijent koristi relativne putanje. POS je na limit-connect.com (MAR). Nema CORS."},{"odluka":"ark_pii_filter: dodan eho_protokol tip","razlog":"Brsljani gossip zahtijeva poznat tip. EHO chain entry treba propagirati mrezom."}],"testovi_provedeni":[{"opis":"auth/verify, Redis sesija kreirana","ok":true},{"opis":"krunica/atom, SHA3-256 lanac u Redis","ok":true},{"opis":"sesija/predaj, paket atoma vraca se za POSB prijelaz","ok":true},{"opis":"tura planiraj+pomakni 4x, ALIBI atom pri ISPORUCENO","ok":true},{"opis":"EHO 3-agentni lanac TVRDIM→POTVRDJUJEM→DOKAZUJEM","ok":true},{"opis":"EHO multi-worker Redis shared state","ok":true},{"opis":"EHO javni HTTPS limit-connect.com HTTP 200","ok":true}],"sesija":"2026-05-31 — piranha analiza + 10 endpointa + 4 slim JS + Redis backend + nginx routing","weise3_id":"w3_c0c457700681be1dce302ec8bab7c1484ccae359","krunica_hash":"d33f39b76690cf72f46efe9c68e6a03bfd92cd17e1ab1b19654f8a967e9ca0fb"}}