PGŽ Sport Platform — Round 1+2 baseline (sport2.html + API)
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user