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
@@ -0,0 +1,98 @@
# HANDOFF — 29.04.2026 ~23:00 (Audit + HBS reseed sprint)
## 🚨 KRITIČNI PROBLEM RIJEŠEN: Mock podaci eliminirani
### Što smo imali
Damir je primijetio da Emil Baltić, njegov osobni prijatelj, ima upisan **lažni datum rođenja 08.02.1975** u sustavu - dok je on stvarni kondicioni trener RK Zameta, ne igrač. Pokrenut je ozbiljan audit:
### Što smo otkrili i očistili
| Akcija | Broj | Detalji |
|--------|------|---------|
| Mock datumi/mjesta/slike (manual) | **394** | Sve PURGED + napomena "[PURGED 29.04.2026]" |
| HBS lažni 01-01-YYYY datumi | **674** | Datum→NULL, godina sačuvana u novoj koloni `godina_rodenja` |
| Duplikati osoba (Vedran Babić 2x, Mateo Hrvatin 2x...) | **133** | Smart dedup po quality score |
| **TOTAL očišćeno** | **1.201** atributa | Backup u `clanovi_purge_backup_20260429`, `clanovi_dedup_backup_20260429` |
### Sigurnosni mehanizam (DB trigger)
```sql
CREATE TRIGGER clanovi_validate_source
BEFORE INSERT OR UPDATE ON pgz_sport.clanovi
FOR EACH ROW EXECUTE FUNCTION validate_clanovi_source();
-- Ako pokušaš upisati datum_rodenja BEZ source_url → automatski NULL + WARNING
```
### Nove kolone
- `clanovi.uloga` — 'igrac', 'trener', 'kondicioni_trener', 'direktor', 'predsjednik', 'tajnik', 'fizioterapeut', 'lijecnik', 'sudac', 'ostalo'
- `clanovi.godina_rodenja` — kad znamo samo godinu (HBS savez)
### Primjer ispravljenih osoba RK Zamet (iz rk-zamet.hr)
```
👑 PREDSJEDNIK Vedran Devčić rk_zamet_web
📊 DIREKTOR Vedran Babić rk_zamet_web
📋 TRENER Valter Matošević rk_zamet_web
💪 KONDICIONI Emil Baltić rk_zamet_web ← prije: lažan kao igrač s lažnim datumom
⚽ IGRAČI Mateo Hrvatin, Tin Lučin, Veron Načinović + dr.
```
## ✅ NOVI SCRAPERI (pravi izvori)
### HBS scraper (`/opt/pgz-sport/scrapers/hbs_scraper.py`)
- 34 PGŽ slug-ova (Kastav, Vargon, BK Rijeka, Krimeja, Sveti Jakov, Sveti Rok-Klana, Hreljin, Lovran, Opatija, Krk, Krenovac, Srdoči, Brod-Moravice, ŽBK Drenova/Čavle/Hreljin/Kastav, juniorske ekipe, kadetske ekipe...)
- HVATA: ime, prezime, broj iskaznice (E-XX-YY), godina rođenja, matični klub, sportska grana, slika, sportski put (povijest klubova)
- Voditelji ekipe → uloga='trener'
- HBS scrape u tijeku - stalno dodaje nove sportaše
### HNS scraper popravljen (parser <li class="dob"> i <li class="pob">)
- Hvata datum + mjesto rođenja iz HNS COMET
- 405/408 ima pravi datum rođenja
- 408/408 ima sliku iz hns.family
## 📊 STANJE SADA
```
manual: 922 sportasa (čeka provjeru ručno)
hbs_savez: 781+ sportasa (slike u tijeku)
hns_semafor: 408 sportasa (kompletni)
rk_zamet_web: 10 sportasa (uloge potvrđene)
Klubova boćanje PGŽ: 116 (top: Rijeka 29, Lovran 27, Kastav 21)
Klubova nogomet HNS: 22 (NK Zamet 37, NK Rikard Benčić 36, NK OŠK Omišalj 32...)
Dokumenti: 253 + 2.850 chunks
% sa izvorom (source_url): 56% i raste
```
## 🆕 GUI NOVO
### Audit · Kvaliteta stranica
- Sportaši po izvoru s % source_url
- Klubovi po izvoru
- TRUSTED / VERIFY badges
- ⚠️ Sumnjivi zapisi (top 30 manual sa najmanje info, klikabilni)
- ✅ Trusted zapisi (s datumom rođenja, klikabilni)
- Povijest čišćenja (sys_audit log)
### Drill-down + double-click + breadcrumbs
- **Esc** = back
- **`← Nazad` gumb** + breadcrumbs svugdje
- **Double-click** na klubovima/sportašima
- **Tooltips** "Klik / Dvoklik za..."
- **Uloga badge** (👑 PREDSJEDNIK, 📊 DIREKTOR, 📋 TRENER, 💪 KONDICIONI, ⚽ IGRAČ)
- **Source warning banner** za manual zapise
- **`— nepoznato —`** umjesto skrivanja praznih polja
## 🔄 PENDING
1. **HRS, HVS, HKS scrapers** - savezi nemaju strukturiranu bazu kao HNS COMET
- Mogući izvori: pojedinačne klub web stranice (rk-zamet.hr template moguć i za druge)
2. **Manual 922 zapisa** - svaki treba ručnu validaciju ili obrisati
3. **AI smoke retest** - provjeriti da li AI sad zna prave uloge (Emil Baltić = kondicioni trener)
4. **ZSP PGŽ scraper** - sport-pgz.hr ima detalje za PGŽ saveze i klubove
## Operativni quick-ref
- **Bridge**: `curl -X POST https://api.rinet.one/bridge/exec -H "X-API-KEY: rinet-yS4ZnKlwUqsjk" -d '{"cmd":"..."}'`
- **DB**: `host=localhost dbname=rinet_v3 user=rinet password=R1net2026!SecureDB#v7`
- **HBS scraper**: `python3 /opt/pgz-sport/scrapers/hbs_scraper.py`
- **HNS scraper**: `python3 /opt/pgz-sport/scrapers/hns_semafor.py daily`
- **GUI**: https://api.rinet.one/sport/
- **Audit page**: https://api.rinet.one/sport/#audit
- **Backup tablice**: `clanovi_purge_backup_20260429`, `clanovi_dedup_backup_20260429`