4.5 KiB
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)
- 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
- HRS web — nema strukturirane klub liste (samo članci)
- HKS — sličan problem
- sport-pgz.hr — Vue SPA, klubovi nisu u initial HTML
- 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:
-
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
-
Bolji PDF parser za godišnjak:
- Koristiti
pdfplumberumjestopdftotext -layout(bolje za tabele) - Possibly Camelot tablice ekstraktora
- Fallback: ručno otvoriti PDF i preusko table u CSV (1h posla)
- Koristiti
-
Boris baseline SAMO za sad — koristi savez_stats_oficijalno za KPI prikaz, ne čekaj da se popune individual sportaši
-
Web-stranice 39 klubova s
webpoljem — direktan scrape (NK Zamet, AK Kvarner, AK Liburnija, RK Zamet, KK Mlaka itd.). To je manji volume ali precizniji. -
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
# 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
curl -s https://api.rinet.one/sport/api/v2/pgz/enrichment-gap | python3 -m json.tool | head -50