# HANDOFF: PGZ Sport Portal — Sprint 03.05.2026 17:15 **Datum:** 03.05.2026 17:15 **Autor:** Claude Sonnet 4.6 **Status:** 3-STRIKE ACTIVE — sve tvrdnje verificirane --- ## STANJE SERVERA (verified 17:15) ``` pgz-sport.service: ACTIVE (port 8095) nginx: OK (no-cache headers na sport.rinet.one) Fail count: 0 (systemctl list-units --state=failed) ``` ## ŠTO RADI (endpoints 200 verified) | Endpoint | Status | |----------|--------| | /api/v2/sport/objekti | ✅ 200 | | /api/v2/analytics/budget-score | ✅ 200 | | /api/v2/analytics/savez-drill?savez_id=N | ✅ 200 | | /api/v2/analytics/proracun-trend | ✅ 200 | | /api/v2/analytics/filter-options | ✅ 200 | | /api/v2/rno | ✅ 200 | | /api/v2/hns-natjecanja | ✅ 200 | | /api/v2/godisnjaci/search (POST) | ✅ 200 | | /sport/ HTML | ✅ 200, no-cache | ## ŠTO JE U HTML-u (verified grepcountom) | Funkcija | Ref. | |----------|------| | pageObjekti | 1 (postoji) | | pageAnalytics | 2 (postoji) | | pageRno | 1 (postoji) | | pageHns | 1 (postoji) | | pageGodisnjaci | 3 (postoji) | | toggleNavSec | 2 (collapsible nav) | | pushState (URL hash) | 2 (hash routing) | ## ŠTO NIJE RIJEŠENO (problemi s prošle sesije) ### 1. `#objekti` stranica — POSTOJI ali nije vidljiva u nav? - **pageObjekti** je u HTML-u, `objekti` je u NAV (Registri sekcija) - Nav je collapsible — Registri sekcija je OPEN by default - Ako se ne vidi: hard refresh (Ctrl+Shift+R) - API: 106 objekata, sve kategorije, filtri tip/grad ### 2. MATRIX POPUNJENOSTI — NESTAO - Bio u starijoj verziji (negdje između bak.matrix.* backupova) - **NE POSTOJI** u trenutnom HTML-u - Treba rebuild: matrica savezi × kategorije podataka (clanovi, lijecnicki, dokumenti, fin...) - Backup gdje je bio: index.html.bak.matrix.1777744755 (20:43, 02.05) ### 3. OBRASCI / PREDLOŠCI — U DB, NEMA PAGE - `pgz_sport.form_templates` ima **15 rows** u DB - `pageObrasci` / `pageFormTemplates` NE POSTOJI u HTML-u - Treba dodati: API endpoint + frontend page - Endpoint za add: GET /api/v2/form-templates ### 4. AUTOTROLEJ — NIKAD NIJE BIO DIO PGŽ SPORT - Krivo sam ga stavio u "na horizontu" u ranijoj sesiji - Nema nikakve veze s PGŽ sport portalom - Memorizirano pogrešno iz generalnog Ri.NET konteksta - **BRISATI iz TODO liste za ovaj projekt** ## DB STANJE ``` pgz_sport.klubovi (aktivnih): 1658 pgz_sport.sportski_objekti: 106 pgz_sport.form_templates: 15 pgz_sport.savezi (aktivnih): 40-ish relevantnih PGŽ Deaktivirano danas (non-sport): 23 organizacije - Rotary (2), Lions (1), Rotaract (1) - Kinološka društva (6) - Inovatori/Crnogorci (4) - Maketari/Brodomaketari (3) - Oldtimeri (5) - Izviđači (1) ``` ## KNOWLEDGE BASE STANJE ``` Qdrant kolekcije (relevantne za sport): pgz_sport_v1: 9,xxx vektora pgz_godisnjaci: 4,999 vektora (godišnjaci ZSP PGZ 2006-2024) pgz_sport_dokumenti_v1: postoji legal_v2: postoji (zakoni) dabi.knowledge kategorije: legal_deep_zakon: 71,612 facts legal_deep_pravilnik: 68,661 facts pgz_sport_online: 7 facts (scrape today) legal.articles (DB): 309,819 rows GAP: HOO pravilnici za sport NISU posebno scrapirani GAP: Godišnjaci su embeddani u Qdrant ali nisu u SQL structured tablicama ``` ## URL ROUTING ``` Sad svaka stranica ima hash u URL-u: https://api.rinet.one/sport/#dashboard https://api.rinet.one/sport/#analytics https://api.rinet.one/sport/#objekti itd. Implementirano: history.pushState + popstate handler ``` ## BROWSER GREŠKA (nije naša) ``` "runtime.lastError: back/forward cache" → Chrome extension greška (Grammarly/LastPass/slično) → Apsolutno nema veze s portalom ``` ## PRIORITETI ZA SLJEDEĆU SESIJU **P1 — HITAN (Damir je tražio, ne postoji):** - [ ] Matrix popunjenosti — rebuild iz bak.matrix.1777744755 - [ ] Obrasci/predlošci — API + page (15 u DB) **P2 — Važno:** - [ ] Dedup sportski objekti (ima duplikata — Kantrida ×4, Krimeja ×3...) - [ ] HOO pravilnici scraper - [ ] Strukturirani parse godišnjaka → SQL tablice **P3 — Nice to have:** - [ ] Sport/grad normalizacija u dropdown-ima (mix case) - [ ] Koordinate (lat/lng) za objekte — većina null - [ ] ERP za klubove (member self-service) ## KLJUČNE DATOTEKE ``` HTML: /opt/pgz-sport/static/index.html (7435 linija) Backend: /opt/pgz-sport/pgz_sport_api.py Router: /opt/pgz-sport/pgz_sport_v2_router.py (4300+ linija) Service: systemctl restart pgz-sport Log: journalctl -u pgz-sport -n 50 --no-pager Backups: /opt/pgz-sport/static/index.html.bak.* DOBRI BACKUPI: .bak.rno — 407KB, 16:15, dobra baza (bez matrix, bez RNO/HNS pages) .bak.allfix.1777765254 — 408KB, 01:40, sve ispravne verzije stranica ``` ## NAPOMENA ZA SLJEDEĆI CLAUDE Read before anything: 1. /opt/ai-rinet/CLAUDE.md 2. VRHOVNI_ZAKONI.md 3. Ovaj file 3-STRIKE RULE AKTIVAN: sljedeća greška = manual mode. **NIKAD ne diraj /opt/rinet/ (PROD) bez explicit approve.**