Files
pgz-sport/_handoff/HANDOFF_20260430_1145_PLANINARSTVO_DEDUP_GAP.md

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)

  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.

  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

# 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