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
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env python3
"""
Ingest PGZ sport key facts into dabi.knowledge for DABI chat
All pulled from DB real data - NO MOCK
"""
import psycopg2, psycopg2.extras, hashlib, json
from datetime import datetime
DSN = "host=10.10.0.2 port=6432 dbname=rinet_v3 user=rinet password=R1net2026!SecureDB#v7"
conn = psycopg2.connect(DSN)
conn.autocommit = True
cur = conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor)
facts = []
def add_fact(fact, category, source="pgz_sport_db", confidence=0.95):
data_hash = hashlib.sha256(fact.encode()).hexdigest()
facts.append((fact, category, source, "https://api.rinet.one/sport/", datetime.now().date(), confidence, data_hash))
# 1. Dashboard stats
cur.execute("SELECT * FROM pgz_sport.savezi WHERE aktivan=true")
savezi = cur.fetchall()
add_fact(f"Primorsko-goranska županija ima {len(savezi)} aktivnih sportskih saveza registriranih u PGŽ Sport sustavu.", "pgz_sport_stats")
cur.execute("SELECT COUNT(*) as n FROM pgz_sport.klubovi WHERE aktivan=true")
n_klubovi = cur.fetchone()["n"]
add_fact(f"Primorsko-goranska županija ima {n_klubovi} aktivnih sportskih klubova.", "pgz_sport_stats")
cur.execute("SELECT COUNT(*) as n FROM pgz_sport.clanovi WHERE aktivan=true")
n_clanovi = cur.fetchone()["n"]
add_fact(f"U PGŽ sportskim klubovima aktivno je {n_clanovi} registriranih članova.", "pgz_sport_stats")
# 2. Budget
cur.execute("SELECT SUM(ukupno) as ukupno, MAX(godina) as godina FROM pgz_sport.proracun WHERE aktivan=true")
r = cur.fetchone()
if r and r["ukupno"]:
add_fact(f"Proračun PGŽ za sport u {r['godina']} godini iznosi {r['ukupno']:,.2f} EUR.", "pgz_sport_financije")
# 3. Top savezi
cur.execute("""
SELECT s.naziv, s.registriranih, s.trenera, s.reprezentativaca,
COUNT(k.id) as klubova
FROM pgz_sport.savezi s
LEFT JOIN pgz_sport.klubovi k ON k.savez_id=s.id
WHERE s.aktivan=true
GROUP BY s.naziv, s.registriranih, s.trenera, s.reprezentativaca
ORDER BY s.registriranih DESC NULLS LAST
LIMIT 10
""")
for row in cur.fetchall():
if row["registriranih"] and row["registriranih"] > 0:
fact = f"{row['naziv']} PGŽ: {row['registriranih']} registriranih sportaša"
if row["klubova"] > 0:
fact += f", {row['klubova']} klubova"
if row["trenera"] and row["trenera"] > 0:
fact += f", {row['trenera']} trenera"
add_fact(fact, "pgz_sport_savezi")
# 4. HNS natjecanja
cur.execute("SELECT COUNT(*) as n FROM pgz_sport.hns_natjecanja")
r = cur.fetchone()
if r:
add_fact(f"U PGŽ se odvijaju {r['n']} HNS nogometnih natjecanja u sezoni 2025/26 (NS Rijeka i ŽNS PGŽ).", "pgz_sport_hns")
cur.execute("SELECT naziv, sezona FROM pgz_sport.hns_natjecanja WHERE sezona='2025/2026' ORDER BY naziv LIMIT 10")
for row in cur.fetchall():
add_fact(f"HNS natjecanje u PGŽ (sezona 2025/26): {row['naziv']}", "pgz_sport_hns")
# 5. RNO
cur.execute("SELECT COUNT(*) as n FROM pgz_sport.rno_organizacije WHERE aktivna=true")
r = cur.fetchone()
if r:
add_fact(f"Registar neprofitnih organizacija bilježi {r['n']} aktivnih sportskih organizacija u PGŽ.", "pgz_sport_rno")
cur.execute("SELECT COUNT(*) as n FROM pgz_sport.rno_organizacije WHERE aktivna=false AND datum_brisanja IS NOT NULL")
r = cur.fetchone()
if r:
add_fact(f"U PGŽ je kroz godine upisano ukupno {r['n']} sportskih organizacija koje više nisu aktivne.", "pgz_sport_rno")
# 6. Gradovi s najviše klubova
cur.execute("""
SELECT k.grad_opcina, COUNT(*) as n
FROM pgz_sport.klubovi k
WHERE k.aktivan=true AND k.grad_opcina IS NOT NULL
GROUP BY k.grad_opcina
ORDER BY n DESC LIMIT 5
""")
for row in cur.fetchall():
add_fact(f"Grad/općina {row['grad_opcina']} u PGŽ ima {row['n']} aktivnih sportskih klubova.", "pgz_sport_lokacija")
# 7. Portal URL
add_fact("PGŽ Sport portal dostupan je na adresi https://api.rinet.one/sport/ — sadrži evidenciju svih saveza, klubova, članova, dokumenta i proračuna.", "pgz_sport_info")
add_fact("Boris Milanović je stručni suradnik za sport u Primorsko-goranskoj županiji, Upravni odjel za kulturu, sport i tehničku kulturu, Ciottina 17b/I, 51000 Rijeka.", "pgz_sport_info")
add_fact("Godišnjaci Zajednice sportova PGŽ dostupni su za periode 2006-2024 i sadrže sveobuhvatne podatke o sportu u PGŽ kroz 19 godina.", "pgz_sport_godisnjaci")
print(f"Facts to insert: {len(facts)}")
# Insert
psycopg2.extras.execute_batch(cur, """
INSERT INTO dabi.knowledge (fact, category, source, source_url, source_date, confidence, data_hash)
VALUES (%s, %s, %s, %s, %s, %s, %s)
ON CONFLICT (data_hash) DO UPDATE SET updated_at=now()
""", facts, page_size=100)
print(f"✅ Inserted {len(facts)} PGZ sport facts into dabi.knowledge")
conn.close()