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,125 @@
# HANDOFF — 30.04.2026 11:45 — PLANINARSTVO + DEDUP + ENRICHMENT GAP
## ✅ NAPRAVLJENO
### 1. Planinarstvo dilemma
**Verdikt:** SVI PLANINARSKI KLUBOVI OSTAJU AKTIVNI.
Razlog (web verified 30.04.2026):
- HPS član HOO od 1991, prvi HR sport savez u UIAA (Wikipedia + hps.hr)
- 40 klubova promoted na `pgz_sufinanciran=TRUE`
- Audit log id=64
### 2. Dedup + broken naziv fix (pre-enrichment cleanup)
**Pronađeno problema:**
- 27 grupa duplikata (7 trostrukih, 20 dvostrukih) = **34 redundantna zapisa**
- 41 broken naziv (PDF parser pucanje, zalijepljene kolone teksta)
- 2 ne-sport saveza koji su promakli (SAVEZ ZA PROMICANJE ZNANOSTI, KLUB STUDENATA)
**Rješenje:**
- Backup: `pgz_sport.klubovi_pre_dedup_20260430` (1490 redaka)
- 34 duplikata: master = klub s najviše članova → svi članovi reasignani, slaves deaktivirani
- 39 broken naziv-a: split na prvi multispace + audit reason
- 1 KK Kvarner duplikat manual fix
- 2 ne-sport savez reklasificirani
**Rezultat:**
- **1453 aktivnih sport klubova** (s 1490 prije)
- **1449 PGŽ sufinanciranih**
- **0 duplikata, 0 broken naziva**
### 3. Enrichment gap dashboard
**Boris baseline = 18.007 sportaša**
**Mi imamo = 1.548 sportaša (8.6%)**
**Gap = 16.459 sportaša**
Top gap sportova:
| Sport | Imamo | Boris | Gap | % |
|-------|-------|-------|-----|---|
| NOGOMET | 413 | 5.581 | 5.168 | 7.4% |
| ODBOJKA | 33 | 2.047 | 2.014 | 1.6% |
| KARATE | 24 | 1.735 | 1.711 | 1.4% |
| KOŠARKA | 23 | 1.115 | 1.092 | 2.1% |
| ATLETIKA | 29 | 999 | 970 | 2.9% |
| JUDO | 1 | 961 | 960 | 0.1% |
| RUKOMET | 39 | 924 | 885 | 4.2% |
| JEDRENJE | 8 | 737 | 729 | 1.1% |
| KUGLANJE | 0 | 438 | 438 | 0% (NULA) |
| BOKS | 0 | 115 | 115 | 0% (NULA) |
| BOĆANJE | 869 | 980 | **111** | **88.7%** ← najbolji |
**4 saveza s NULA članova:** kuglanje, boks, sportski ribolov, streličarstvo.
### 4. Novi endpointi
```
GET /api/v2/pgz/enrichment-gap - Dashboard za Borisa, sve gap-ove
GET /api/v2/pgz/dedup-summary - Pregled cleanup operacija
GET /api/v2/pgz/savez-stats - Boris baseline statistika
GET /api/v2/pgz/cleanup-summary - Klasifikacija organizacija
GET /api/v2/pgz/sport-organizacije - Filterirani klubovi
```
## ⚠️ PROBLEM ENRICHMENT IZVORA
### Ono što sam probao (i NIJE RADILO)
1. **HNS Semafor expansion** — 21 klub već ima HNS_klub_id, ali 118 nogometnih klubova bez ID-a su uglavnom MALI NOGOMET (futsal) koji NIJE u HNS Comet sustavu
2. **HRS web** — nema strukturirane klub liste (samo članci)
3. **HKS** — sličan problem
4. **sport-pgz.hr** — Vue SPA, klubovi nisu u initial HTML
5. **ZSP godišnjak PDF 2022** — 16 MB PDF s tablicama, ali tabular layout u PDF-u izaziva pucanje regex parsera (samo 16 klubova ekstrahiran od cca 500+)
### Što treba sljedeća sesija (real enrichment options)
**Po prioritetu:**
1. **Direktan kontakt savezima** — emailom Boris/Damir traži CSV liste klubova i registriranih sportaša po savezu. PGŽ ima taj autoritet.
- atletskisavezpgz@gmail.com
- judo-savez-pgz...
- i sl. iz sport-pgz.hr stranica saveza
2. **Bolji PDF parser za godišnjak**:
- Koristiti `pdfplumber` umjesto `pdftotext -layout` (bolje za tabele)
- Possibly Camelot tablice ekstraktora
- Fallback: ručno otvoriti PDF i preusko table u CSV (1h posla)
3. **Boris baseline SAMO za sad** — koristi savez_stats_oficijalno za KPI prikaz, ne čekaj da se popune individual sportaši
4. **Web-stranice 39 klubova s `web` poljem** — direktan scrape (NK Zamet, AK Kvarner, AK Liburnija, RK Zamet, KK Mlaka itd.). To je manji volume ali precizniji.
5. **HBS scraper proširiti** — dodatni boćarski savez slugovi (već imamo 842 člana, gap 111)
## 📊 STANJE NA `https://api.rinet.one/sport/`
```
Aktivnih sport klubova: 1453
Sufinanciranih PGŽ: 1449
Sportaša u DB: 1548
Boris baseline: 18.007
Coverage: 8.6%
Trusted source breakdown:
hbs_savez: 842 (boćanje 88.7% complete)
hns_semafor: 408 (nogomet 7.4%)
manual: 922 (drugi)
rk_zamet_web: 10
```
## 🔄 ROLLBACK
```bash
# Vrati duplikat dedup ako se pokaže pogrešan
PGPASSWORD='R1net2026!SecureDB#v7' psql -h localhost -U rinet -d rinet_v3 -c \
"UPDATE pgz_sport.klubovi SET aktivan=TRUE WHERE id IN (SELECT id FROM pgz_sport.klubovi_pre_dedup_20260430)"
# Vrati pojedini klub
PGPASSWORD='R1net2026!SecureDB#v7' psql -h localhost -U rinet -d rinet_v3 -c \
"UPDATE pgz_sport.klubovi SET aktivan=true WHERE id=<KLUB_ID>"
```
## TEST
```bash
curl -s https://api.rinet.one/sport/api/v2/pgz/enrichment-gap | python3 -m json.tool | head -50
```