PGŽ Sport Platform — Round 1+2 baseline (sport2.html + API)

This commit is contained in:
Damir Radulić
2026-05-04 23:39:08 +02:00
commit a7ec0a86be
1820 changed files with 694455 additions and 0 deletions
+166
View File
@@ -0,0 +1,166 @@
# 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.**