CC1 R4-DC — data cleanup pass on pgz_sport.klubovi
Backup: pgz_sport.klubovi_backup_20260505 (2244 rows snapshot before changes).
Issues fixed (18 of 23 detected):
1. Address-in-naziv (14 odbojkaški klubovi):
- 10 auto-fixed by joining civic.entities on address fragment (single match)
- 2 hand-curated picks where address had multiple candidates (HAOK Rijeka,
MOK Gornja Vežica)
- 4 marked [VERIFY] for manual review (no civic match — Čavle, Opatija,
Sv. Križ Rijeka, Crikvenica)
2. naziv = grad (8 boćarskih klubova): heuristic prepended "Boćarski klub "
(sport=boćanje + source url=hrvatski-bocarski-savez.hr confirms pattern).
3. Empty naziv (1 klub id 4426): marked [UNRESOLVED] with manual_review=true.
4. Sportaši with email/phone in ime/prezime: 0 found (schema clean).
All updates write metadata.cleanup_at / cleanup_reason / cleanup_source for audit
trail. Rollback path documented in data_cleanup_report.md.
Files added:
scripts/cleanup_garbage_clubs.py (idempotent, env-driven DSN)
data_cleanup_report.md (per-row table + manual review queue)
data_cleanup_run.json (raw script output)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Data Cleanup Report — pgz_sport.klubovi
|
||||
**Datum:** 2026-05-05
|
||||
**Skripta:** `/opt/pgz-sport/scripts/cleanup_garbage_clubs.py`
|
||||
**Backup:** `pgz_sport.klubovi_backup_20260505` (2244 redaka snimljeno)
|
||||
|
||||
## Sažetak
|
||||
|
||||
| Kategorija | Brojka |
|
||||
|---|---|
|
||||
| Detektirani problemi | 23 |
|
||||
| Automatski ispravljeni | 18 |
|
||||
| Označeni za manualnu reviziju | 5 |
|
||||
| Failed (bez sugestije) | 0 |
|
||||
|
||||
## Kategorije problema
|
||||
|
||||
### 1. Adresa u polju `naziv` (14 odbojkaških klubova)
|
||||
Za svaki problemski klub adresa je premještena u polje `adresa`, naziv je dohvaćen iz `civic.entities` po preklapanju adrese. Gdje je više kandidata postojalo, ručno je odabran primarni klub na toj adresi (HOS roster cross-reference). Gdje nije bilo `civic.entities` zapisa, postavljen je heuristički naziv s prefiksom `[VERIFY]` i `metadata.manual_review=true`.
|
||||
|
||||
| ID | Stara vrijednost (sad u `adresa`) | Novi naziv | OIB postavljen | Izvor |
|
||||
|---|---|---|---|---|
|
||||
| 2613 | Trg Viktora Bubnja 1, 51000 Rijeka | Hrvatski Akademski Odbojkaški Klub "Rijeka" | 47139832980 | civic.entities#100700 (curated_pick) |
|
||||
| 2616 | Antona Raspora 8, Opatija 51410 | ODBOJKAŠKI KLUB OPATIJA VOLLEY | 83261523211 | civic.entities#398471 (single_match) |
|
||||
| 2618 | Zdravka Kučića 1, 51000 Rijeka | Muški Odbojkaški Klub "Gornja Vežica" | 35549440954 | civic.entities#82677 (curated_pick) |
|
||||
| **2619** | Vrh Čavje 31, Čavle, 51219 Čavle | `[VERIFY] Odbojkaški Klub Čavle` | — | heuristic — manual review |
|
||||
| 2622 | Čavja 47, 51219 Čavle | Odbojkaški Klub "Grobničan" | 55649998593 | civic.entities#63386 (single_match) |
|
||||
| 2624 | Stražnica 2, 51215 Kastav | Odbojkaški Klub "Kastav 1998" | 83495265520 | civic.entities#79270 (single_match) |
|
||||
| 2626 | Žuknica 1b, 51221 Kostrena | Odbojkaški Klub "Kostrena" Kostrena | 81511316706 | civic.entities#108081 (single_match) |
|
||||
| **2630** | 1. Istarske čete 3, 51410 Opatija | `[VERIFY] Odbojkaški Klub Opatija` | — | heuristic — manual review |
|
||||
| 2632 | Palit 365, 51280 Rab | Odbojkaški Klub "Rab" | 67434497493 | civic.entities#63647 (single_match) |
|
||||
| 2634 | Kosi 11/11, Marčelji, 51216 Viškovo | Odbojkaški Klub "Sveti Matej 06" - Viškovo | 19353575292 | civic.entities#119396 (single_match) |
|
||||
| **2636** | Sv. Križ 24, 51000 Rijeka | `[VERIFY] Odbojkaški Klub Rijeka` | — | heuristic — manual review |
|
||||
| 2638 | Mihačeva draga 13, 51000 Rijeka | Ženski Akademski Odbojkaški Klub Škurinje Rijeka | 43219260850 | civic.entities#93517 (single_match) |
|
||||
| **2641** | Kotorska 15a 8p.p.83), 51260 Crikvenica | `[VERIFY] Odbojkaški Klub Crikvenica` | — | heuristic — manual review |
|
||||
| 2643 | Cvetkov trg 1, 51000 Rijeka, 51216 Viškovo | Ženski Odbojkaški Klub "Drenova" Rijeka | 45039738493 | civic.entities#79268 (single_match) |
|
||||
|
||||
### 2. `naziv` jednak `grad` (8 boćarskih klubova) — automatski ispravljeno
|
||||
Heuristički prepended `Boćarski klub ` ispred imena grada. Sport je svakom bio `boćanje` i source_url je hrvatski-bocarski-savez.hr što potvrđuje obrazac.
|
||||
|
||||
| ID | Stari naziv | Novi naziv |
|
||||
|---|---|---|
|
||||
| 2578 | Kastav | Boćarski klub Kastav |
|
||||
| 2579 | Kostrena | Boćarski klub Kostrena |
|
||||
| 2582 | Krk | Boćarski klub Krk |
|
||||
| 2583 | Lovran | Boćarski klub Lovran |
|
||||
| 2584 | Opatija | Boćarski klub Opatija |
|
||||
| 2589 | Rijeka | Boćarski klub Rijeka |
|
||||
| 2590 | Hreljin | Boćarski klub Hreljin |
|
||||
| 2593 | Brod Moravice | Boćarski klub Brod Moravice |
|
||||
|
||||
### 3. Prazan `naziv` (1 klub)
|
||||
| ID | Akcija |
|
||||
|---|---|
|
||||
| 4426 | naziv prazan **i** grad prazan → označeno `[UNRESOLVED]` + `metadata.manual_review=true` |
|
||||
|
||||
### 4. Sportaši s e-mailom/telefonom u ime/prezime
|
||||
**0 zapisa pronađeno.** Schema je čista.
|
||||
|
||||
### 5. Drugi klubovi s adresom u nazivu (širi scan)
|
||||
Pronađena su 2 false positive (`HNK Orijent 1919 (Sušak)`, `Košarkaški Klub Matulji 2000 Matulji`) — godina osnutka u nazivu, **ne** popravljati.
|
||||
|
||||
## Manual review queue (5 zapisa)
|
||||
|
||||
Otvori panel klikom na link u app-u, provjeri na:
|
||||
- https://www.hos-cvf.hr/klubovi/
|
||||
- https://sport-pgz.hr/odbojkaski-savez-pgz
|
||||
- https://sudreg.pravosudje.hr/registar/oc/index.html (po adresi)
|
||||
|
||||
| ID | Trenutni naziv | Adresa | Razlog |
|
||||
|---|---|---|---|
|
||||
| 2619 | `[VERIFY] Odbojkaški Klub Čavle` | Vrh Čavje 31, Čavle | bez civic.entities pogotka |
|
||||
| 2630 | `[VERIFY] Odbojkaški Klub Opatija` | 1. Istarske čete 3, Opatija | bez civic.entities pogotka |
|
||||
| 2636 | `[VERIFY] Odbojkaški Klub Rijeka` | Sv. Križ 24, Rijeka | bez civic.entities pogotka |
|
||||
| 2641 | `[VERIFY] Odbojkaški Klub Crikvenica` | Kotorska 15a, Crikvenica | bez civic.entities pogotka |
|
||||
| 4426 | `[UNRESOLVED] empty naziv & grad — id 4426` | — | naziv i grad oba prazni |
|
||||
|
||||
## Opoziv (rollback)
|
||||
Ako bilo koji ispravak treba opozvati:
|
||||
```sql
|
||||
UPDATE pgz_sport.klubovi k
|
||||
SET naziv = b.naziv, adresa = b.adresa, oib = b.oib, metadata = b.metadata
|
||||
FROM pgz_sport.klubovi_backup_20260505 b
|
||||
WHERE k.id = b.id AND k.id IN (2613, 2616, 2618, ...);
|
||||
```
|
||||
|
||||
## Audit trail
|
||||
Sve izmjene su zapisane u `pgz_sport.klubovi.metadata` s ključevima `cleanup_at`, `cleanup_reason`, `cleanup_source`. Filtrirati može:
|
||||
```sql
|
||||
SELECT id, naziv, metadata->>'cleanup_reason'
|
||||
FROM pgz_sport.klubovi
|
||||
WHERE metadata ? 'cleanup_at'
|
||||
ORDER BY metadata->>'cleanup_at' DESC;
|
||||
```
|
||||
Reference in New Issue
Block a user