# 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=" ``` ## TEST ```bash curl -s https://api.rinet.one/sport/api/v2/pgz/enrichment-gap | python3 -m json.tool | head -50 ```