tipPLAN_ARHIVA
verzija1.0
statusPLAN — čeka sprint RACUNI da završi
prioritet3
sustavfenix-v4
serverEU (217.160.71.124) + NEW (31.70.90.84)
dir/var/www/fenix-v4/
sto_trebaZamijeniti WAHA/WhatsApp s vlastitim poslovnim komunikacijskim slojem koji ne ovisi ni o jednoj trećoj strani. Svaki korisnik u NO LIMIT ekosustavu ima inbox. Poruke su DokArh chain entriji — proof + komunikacija istovremeno. Delivery bez instalacije aplikacije.
zasto_ne_waha[
"Meta može blokirati poslovni broj bez upozorenja — regulatorna ovisnost na tuđu infrastrukturu",
"Svaka poruka prolazi Meta serverima — poslovni dokazi ovise o trećoj strani",
"WAHA server = dodatna kompleksnost, održavanje, licenciranje — bez dugoročne vrijednosti"
]
zasto_nas_sustav[
"Poruka = DokArh proof (BunkerSeal + WeisE3) — auditabilno, nemoguće krivotvoriti",
"ref_weise3_id → svaka poruka direktno linkana na entitet (faktura, CMR, booking, vozilo)",
"Radi offline (QR token), radi bez smartphonea, radi bez interneta (carinik, vozač)"
]
pogledi_iz_buducnosti[
"Svaki dokument (faktura, ugovor, CMR) nosi Inbox thread uz sebe — komunikacija i dokaz su jedno",
"Carinik na granici skenira QR kamiona → prima poruku od vozača offline, bez 5G signala",
"Klijentski portal (/client/<token>/) postaje vlastiti inbox — bez registracije, bez lozinke"
]
arhitektura{
"model": "GenesisMessage",
"polja": {
"sender_weise3_id": "tko šalje (WeisE3 identitet — GenesisLogin)",
"receiver_weise3_id": "tko prima (osoba ili entitet)",
"channel": "inapp | email | push | sms | qr_callback",
"scope": "direct | workspace | company | domain | broadcast",
"topic_type": "obavijest | zadatak | dokument | alarm | chat",
"ref_weise3_id": "KLJUČ — vezano za koji .dok.json entitet",
"status": "sent | delivered | read | archived",
"expires_at":
slojevi{
"sloj_1_api": {
"opis": "V4 FastAPI endpoints",
"rute": [
"POST /api/v1/inbox/send",
"GET /api/v1/inbox/ — moje poruke, filtrirano",
"GET /api/v1/inbox/unread — badge count za navigaciju",
"PUT /api/v1/inbox/{id}/read",
"POST /api/v1/inbox/broadcast — admin only, scope=domain"
]
},
"sloj_2_delivery": {
"opis": "Celery async delivery engine",
"kanali": {
"inapp": "WebSocket/SSE push na aktivne sesije (trenutno)",
veza_s_postojecim{
"digigraf_chat": "Digigraf chat forma → postaje prvi channel; jedan API endpoint poziv umjesto custom forme",
"genesis_login_qr": "QR kod može sadržavati inbox_token → skeniraš, vidiš poruku bez registracije",
"dokarh": "Svaki dokument ima ref_weise3_id → sve poruke vezane uz taj dokument",
"brsljani_mreza": "Fan-out broadcast ide kroz brsljani stream (db=4) — bez centralnog servera",
"klijentski_portal": "/client/<token>/ već postoji → dodati inbox tab bez promjena u auth"
}
sprinti{
"INBOX-1": {
"status": "TODO",
"zadaci": [
"GenesisMessage model + ZAKON 27 polja (weise3_id, bunker_seal_id, created_at, expires_at)",
"ZAKON 28 cleanup task za expires_at u istom commitu",
"POST /send + GET /inbox + PUT /read endpoints",
"Inapp delivery: SSE polling na /api/v1/inbox/stream/{weise3_id}",
"Digigraf chat forma → poziva Inbox API (jedan endpoint, bez mijenjanja Digigrafa)",
"Badge count (unread) u navigaciji svih Fenix sustava",
zakoni[
"ZAKON 2",
"ZAKON 3",
"ZAKON 17",
"ZAKON 27",
"ZAKON 28",
"ZAKON 31",
"ZAKON 37"
]
napomena_za_ccPočni s INBOX-1. Model u /var/www/fenix-v4/apps/inbox/models.py (kreiraj app). Delivery engine u /var/www/fenix-v4/services/inbox_delivery.py. API rute u /var/www/fenix-v4/api/v1/inbox.py. Digigraf integracija: POST na /api/v1/inbox/send s topic_type='chat' i scope='direct'. Svaki send() mora kreira