feat: /api/v2/analiza/* endpoints - sport analytics backend

This commit is contained in:
Damir Radulic
2026-05-16 00:28:12 +02:00
parent 7ca5d7d94e
commit aca5051418
1355 changed files with 321891 additions and 4128 deletions
+465
View File
@@ -0,0 +1,465 @@
#!/usr/bin/env python3
import os
import psycopg2
DB = dict(host='localhost', port=5432, dbname='rinet_v3', user='rinet', password=os.environ["DB_PASSWORD"])
DOCS = [
{
'title': 'Pravilnik o sigurnosti na sportskim događanjima (NN 117/03)',
'kratak_opis': 'Sigurnosne mjere — redarski službenici, video nadzor, suradnja s policijom.',
'vrsta': 'pravilnik', 'razina': 'RH', 'organizacija': 'MUP + MTS',
'sluzbeni_glasnik': 'NN 117/03, 71/06, 43/09, 34/11, 68/12, 48/13, 19/15, 98/19',
'izvor_url': 'https://www.zakon.hr/z/345/Zakon-o-spre%C4%8Davanju-nereda-na-sportskim-natjecanjima',
'kljucne_rijeci': ['sigurnost','redari','navijači','MUP','video nadzor'],
'izdano_datum': '2003-07-15',
'sadrzaj': '''ZAKON I PRAVILNIK O SIGURNOSTI NA SPORTSKIM DOGAĐANJIMA
OPĆE ODREDBE
Ovaj zakon i pratei pravilnik uređuju mjere za sprječavanje nereda na sportskim natjecanjima i drugim sportskim događanjima u RH.
ORGANIZATOR NATJECANJA — odgovoran je za:
1) Procjenu sigurnosnih rizika prije svakog događanja
2) Angažiranje propisanog broja redara (minimum prema kapacitetu)
3) Suradnju s nadležnom policijskom upravom
4) Postavljanje i funkcioniranje video nadzora
5) Kontrolu ulaza i izlaza navijača
6) Razdvajanje navijača domaćih i gostujućih klubova
KATEGORIJE NATJECANJA PREMA RIZIKU:
- Niski rizik: 1 redar/100 gledatelja
- Srednji rizik: 1 redar/50 gledatelja, dodatna policijska zaštita
- Visoki rizik (derbiji): 1 redar/30 gledatelja, intervencija MUP-a, video nadzor 100%
OBVEZE REDARA:
- Pohađanje obrazovne obuke (60 sati teorija + praksa)
- Položen ispit pred ovlaštenim odborom
- Zaštitna licenca koju izdaje MUP
- Vidljiva odora s identifikacijskim oznakama
- Minimalna dob 18 godina
ZABRANJENO PONAŠANJE NAVIJAČA:
- Bacanje predmeta u igralište
- Pirotehnika (osim odobrene)
- Verbalno/fizičko nasilje
- Prekoračenje granica navijačkih sektora
- Korištenje opasnih predmeta
SANKCIJE:
- Privremena zabrana ulaska na sportska događanja (od 6 mjeseci do 5 godina)
- Globa od 250 do 5.000 EUR
- Kaznena prijava za teža kaznena djela
- Zabrana putovanja na inozemne utakmice za teže prekršaje
OBVEZA PRIJAVE:
- Organizator je dužan prijaviti svaki incident u roku 24 sata
- Vodi se evidencija pri MUP-u
- Lista zabrana ulaska je centralizirana
SPORTSKE GRAĐEVINE — TEHNIČKI ZAHTJEVI:
- Označeni izlazni putovi (svjetlosni signali)
- Vatrogasna zaštita
- Medicinska služba na licu mjesta
- Prva pomoć kapaciteta proporcionalna kapacitetu
UEFA / FIFA STANDARDI:
- Prema UEFA Stadium Regulations primjenjuju se za europska klupska natjecanja
- Stadion Rujevica (HNK Rijeka) ima UEFA Category 4 status
- Posebni uvjeti za europske utakmice'''
},
{
'title': 'Pravilnik o licenciranju trenera u sportu (NN 89/23)',
'kratak_opis': 'Sustav licenciranja stručnog kadra — UEFA, FIBA, FINA i HOO kategorije.',
'vrsta': 'pravilnik', 'razina': 'RH', 'organizacija': 'MTS',
'sluzbeni_glasnik': 'NN 89/23',
'izvor_url': 'https://narodne-novine.nn.hr/clanci/sluzbeni/2023_08_89_1334.html',
'kljucne_rijeci': ['licenca','trener','MTS','obrazovanje','stručno usavršavanje'],
'izdano_datum': '2023-08-04',
'sadrzaj': '''PRAVILNIK O LICENCIRANJU TRENERA U SPORTU (NN 89/23)
OPĆE ODREDBE
Pravilnik uređuje uvjete, postupke, kategorije i obveze stručnog usavršavanja trenera u sustavu sporta RH.
KATEGORIJE TRENERSKIH LICENCI (HOO sustav):
I. KATEGORIJA — Vrhunski trener:
- Specijalistički studij iz područja kineziologije ili sporta (180+ ECTS)
- Najmanje 10 godina trenerskog iskustva u 1. ligi
- Trenirao reprezentaciju ili I. kategorije sportaše
- Položen specijalistički ispit
- Trajna licenca uz redovita usavršavanja
II. KATEGORIJA — Profesionalni trener:
- Završen sveučilišni studij kineziologije (180 ECTS)
- 5 godina trenerskog iskustva
- Položen profesionalni ispit
- Licenca obnoviva svake 4 godine
III. KATEGORIJA — Kvalificirani trener:
- Završen viši sveučilišni studij ili specijalistička obuka
- 2 godine trenerskog iskustva
- Položen kvalifikacijski ispit
- Licenca obnoviva svake 3 godine
IV. KATEGORIJA — Trener pomagač:
- Završeno srednje obrazovanje + obuka HOO
- 1 godina iskustva
- Položen osnovni ispit
- Licenca obnoviva svake 2 godine
V. KATEGORIJA — Volonter / asistent:
- Osnovna obuka (60-100 sati)
- Bez iskustva potrebno
- Mentorstvo iskusnijeg trenera
- Licenca godišnja
UEFA NOGOMETNE LICENCE:
- UEFA Pro: najviša razina za 1. lige (HNL, premijer lige)
- UEFA A: za 2. lige i mlađe selekcije
- UEFA B: za regionalna natjecanja, kadetska
- UEFA C: za amaterska, dječja
- UEFA Goalkeeper A/B: specijalizirano za vratare
DRUGE NACIONALNE LICENCE:
- FIBA (košarka): Pro / A / B kategorije
- FINA (plivanje, vaterpolo): International / National
- World Athletics: Level 1-5
- IHF (rukomet): Master Coach / A / B
- UCI (biciklizam): Tier 1-4
- IJF (judo): A / B / C / D
- WT (taekwondo): International / National
POSTUPAK STJECANJA LICENCE:
1) Prijava pri nacionalnom savezu
2) Završetak obvezne obuke (teorija + praksa)
3) Polaganje ispita
4) Registar pri MTS i savezu
5) Izdavanje licence s rokom
KONTINUIRANO STRUČNO USAVRŠAVANJE (CSU):
- Licencirani treneri moraju pohađati godišnje seminare
- Minimum 30 sati godišnje za I/II kategorije
- 20 sati za III kategoriju
- 15 sati za IV/V
REGISTAR TRENERA:
Centralni registar vodi MTS. Javan, dostupan na mtus.gov.hr.
OBVEZNA RADNA RESURS:
Klub mora imati glavnog trenera s odgovarajućom licencom za razinu natjecanja.
SANKCIJE:
- Suspendiranje licence za teški prekršaj
- Trajno oduzimanje licence za doping podršku ili nasilje
- Globa od 500 do 5.000 EUR'''
},
{
'title': 'Etički kodeks sporta RH (HOO + MTS)',
'kratak_opis': 'Nacionalni etički kodeks — sport bez korupcije, fair play, antidoping kultura.',
'vrsta': 'pravilnik', 'razina': 'HOO', 'organizacija': 'HOO + MTS',
'sluzbeni_glasnik': None,
'izvor_url': 'https://www.hoo.hr/hr-hr/o-hoo-u/etika',
'kljucne_rijeci': ['etika','fair play','korupcija','dopinga','vrijednosti'],
'izdano_datum': '2022-01-01',
'sadrzaj': '''ETIČKI KODEKS SPORTA RH
PREAMBULA
Sport je zajedničko dobro hrvatskog društva i temeljna vrijednost koja promiče zdravlje, fair play, jednake mogućnosti, izvrsnost i poštivanje. Ovaj kodeks obvezuje sve sudionike u sustavu sporta RH.
TEMELJNA NAČELA:
1. FAIR PLAY:
- Poštovanje pravila igre
- Poštovanje protivnika i sudaca
- Poštovanje rezultata
- Sportaš/trener ne smije utjecati na rezultat van legitimnih sportskih sredstava
2. INTEGRITET:
- Zabrana namještanja utakmica
- Zabrana sudjelovanja u klađenju na vlastite utakmice
- Obvezna prijava ponuda za namještanje
- Suradnja s istražnim tijelima
3. ANTI-DOPING:
- Pridržavanje WADA i HASMS propisa
- "Čisto" sportsko okruženje
- Edukacija sportaša od mlađih kategorija
4. ZAŠTITA DJECE:
- Zabrana svake fizičke i psihičke zlostavljanja
- Trener uvijek dostupan i odgovoran
- Sigurnosne provjere stručnog kadra (kazneni list)
- Roditeljska suglasnost za sve aktivnosti maloljetnika
5. JEDNAKE MOGUĆNOSTI:
- Bez diskriminacije po spolu, dobi, rasi, religiji, invaliditetu
- Pristup sportu za sve
- Posebne mjere za uključivanje skupina u nepovoljnom položaju
6. POŠTOVANJE LJUDSKIH PRAVA:
- Zabrana dijela sa sportskim subjektima koji krše ljudska prava
- Pravo sportaša na slobodu izražavanja unutar etičkih granica
- Privatnost — zaštita osobnih podataka (GDPR)
7. SUKOB INTERESA:
- Funkcionari klubova/saveza moraju prijaviti sukob interesa
- Zabrana istovremenog upravljanja konkurentskim klubovima
- Transparentnost u odlučivanju
8. FINANCIJSKA TRANSPARENTNOST:
- Javna objava godišnjih financijskih izvještaja
- Transparentnost donacija i sponzorstava
- Antikorupcijska politika
9. ODGOVORNO PONAŠANJE U JAVNOSTI:
- Sportaši kao uzori
- Zabrana govora mržnje
- Odgovornost na društvenim mrežama
10. ZAŠTITA OKOLIŠA:
- Održivi sport
- Smanjenje ekološkog otiska
- Ekološka osviještenost u organizaciji događanja
TIJELA ZA PRIMJENU KODEKSA:
- Etička komisija HOO
- Disciplinski sudovi nacionalnih saveza
- HASMS za doping pitanja
POSTUPAK PRIJAVE KRŠENJA:
1) Pisana prijava (anonima moguća)
2) Postupak Etičke komisije (60 dana)
3) Mogućnost žalbe
4) Konačna odluka
SANKCIJE:
- Opomena
- Javna isprika
- Privremena suspenzija (sportska/funkcijska)
- Trajno isključenje iz sustava sporta
- Materijalna kazna do 50.000 EUR'''
},
{
'title': 'Pravilnik o klupskom licenciranju HNS (UEFA + HNS standardi)',
'kratak_opis': 'Klupska licenca za nacionalna i europska natjecanja — financijski, infrastrukturni, sportski kriteriji.',
'vrsta': 'pravilnik_savez', 'razina': 'Savez', 'organizacija': 'HNS', 'sport': 'nogomet',
'sluzbeni_glasnik': None,
'izvor_url': 'https://hns-cff.hr/regulatorni-okvir/',
'kljucne_rijeci': ['HNS','UEFA','licenca','klub','financijski','FFP'],
'izdano_datum': '2024-01-01',
'sadrzaj': '''PRAVILNIK O KLUPSKOM LICENCIRANJU HNS (2024)
OPĆE ODREDBE
Klupsko licenciranje obvezno je za sve klubove koji nastupaju u natjecanjima HNS-a i UEFA-e.
HNS KATEGORIJE LICENCI:
- HNL Pro Licenca: za 1. HNL klubove + UEFA natjecanja
- HNL Standard Licenca: za 2. HNL klubove
- HNS Regional Licenca: za 3. HNL i niže
KRITERIJI ZA HNL Pro LICENCU:
A. SPORTSKI KRITERIJI:
- Punokrvni juniorski sustav (U-19, U-17, U-15, U-13, U-11)
- Minimalno 80% trenera s UEFA A licencom
- Glavni trener UEFA Pro
- Liječnička služba (sportski liječnik specialist)
- Anti-doping politika
B. INFRASTRUKTURNI KRITERIJI:
- Stadion kapaciteta minimum 5.000
- Reflektori 1.500 lux+ za TV prijenos
- VIP loža, press soba, mixed zone
- Pomoćno igralište za zagrijavanje
- VAR oprema (od 2024.)
C. FINANCIJSKI KRITERIJI (FFP):
- Pozitivni operativni rezultat (3-godišnji prosjek)
- Plaće igrača < 70% prihoda
- Ažurni financijski izvještaji (godišnji + polugodišnji)
- Bez nepodmirenih obveza prema igračima/savezima
- Bez nepodmirenih poreznih obveza
D. PRAVNI KRITERIJI:
- Registracija u Sudski registar (š.d.d.) ili Registar udruga
- Statut usklađen s Zakonom o sportu i HNS pravilima
- Predsjednik i upravljačka struktura registrirani u HNS
E. PRAVA I OBVEZE LICENCIRANIH KLUBOVA:
- Pravo nastupa u natjecanjima
- Obveza poštovanja UEFA Financial Sustainability Regulations
- Obveza objave godišnjih izvještaja u UEFA-i
- Obveza pohađanja UEFA workshopova
POSTUPAK LICENCIRANJA:
1) Klub podnosi zahtjev HNS Komisiji za licenciranje (do 31.3.)
2) Provjera dokumentacije + on-site inspekcija
3) Prva instanca: HNS Komisija za licenciranje
4) Žalbeni odbor: HNS Žalbeno povjerenstvo
5) Konačna instanca: CAS (Court of Arbitration for Sport)
SANKCIJE:
- Odbijanje licence: nedopušten nastup u natjecanju
- Privremena suspenzija licence: za teške financijske probleme
- Oduzimanje licence: za prijevaru ili teško kršenje
PGŽ KLUBOVI S HNL Pro LICENCOM:
- HNK Rijeka (Stadion Rujevica, kapacitet 8.136)
UEFA FINANCIAL SUSTAINABILITY (FFP):
- "Squad cost ratio": plaće+amortizacija+agentsko ≤70% prihoda
- Limit godišnjih gubitaka: max 60 mil EUR (3-godišnje razdoblje)
- Postupne sankcije: globa, transferna ograničenja, oduzimanje bodova, suspenzija europskih natjecanja
NOVOSTI 2024./2025.:
- Strožiji kontrolni mehanizmi za dokazivanje kapitala
- Obvezna mjesečna izvješća o tijeku novca
- Pojačana suradnja s Ministarstvom financija RH'''
},
{
'title': 'Statut HOO (Hrvatski olimpijski odbor)',
'kratak_opis': 'Temeljni akt HOO-a — članstvo nacionalnih saveza, olimpijski pokret, kategorizacija.',
'vrsta': 'statut', 'razina': 'HOO', 'organizacija': 'HOO',
'sluzbeni_glasnik': None,
'izvor_url': 'https://www.hoo.hr/hr-hr/o-hoo-u/dokumenti',
'kljucne_rijeci': ['HOO','statut','olimpijski','MOK','nacionalni savez'],
'izdano_datum': '2024-01-01',
'sadrzaj': '''STATUT HRVATSKOG OLIMPIJSKOG ODBORA
OPĆE ODREDBE
HOO je dragovoljna, samostalna, nepolitička i neprofitna organizacija. Najviša krovna sportska organizacija RH. Priznata od MOK-a (IOC) kao Nacionalni olimpijski odbor (NOC) Hrvatske od 17.1.1992.
CILJEVI HOO-a:
1) Promocija olimpijskih ideala
2) Razvoj sporta na svim razinama
3) Priprema reprezentacija za OI, ZOI, Mediteranske igre, Sveučilišne igre
4) Kategorizacija i podrška vrhunskim sportašima
5) Etika i fair play u sportu
6) Borba protiv dopinga
7) Zaštita olimpijskih simbola
ČLANOVI HOO-a:
- Nacionalni sportski savezi olimpijskih sportova
- Nacionalni sportski savezi neolimpijskih sportova s posebnim statusom
- Trenutno 80+ punopravnih članica + 10 pridruženih
UVJETI ČLANSTVA NACIONALNOG SAVEZA:
1) Registracija u Registru sportskih organizacija RH
2) Najmanje 5 godina kontinuiranog rada
3) Provođenje minimum 1 nacionalnog prvenstva godišnje
4) Najmanje 30 registriranih klubova-članica
5) Pridržavanje WADA Code-a
6) Pridržavanje HOO Etičkog kodeksa
7) Demokratska struktura (demokratski izabrana tijela)
TIJELA HOO-a:
1. SKUPŠTINA HOO:
- Vrhovno tijelo
- Sastavljena od predstavnika svih saveza-članica
- Sastaje se najmanje 1× godišnje
- Bira: Predsjednika, Izvršni odbor, Nadzorni odbor, Etičku komisiju
2. IZVRŠNI ODBOR:
- 9-15 članova
- Predsjednik HOO-a + dopredsjednici + članovi
- Sastaje se mjesečno
- Operativno vođenje HOO-a
3. PREDSJEDNIK HOO-a:
- Mandat 4 godine, max 2 mandata
- Predstavlja HOO u zemlji i inozemstvu
- Trenutno: Zlatko Mateša (predsjednik)
4. NADZORNI ODBOR:
- 3 člana
- Kontrola financijskog poslovanja
- Godišnji izvještaj Skupštini
5. ETIČKA KOMISIJA:
- Razmatra etička pitanja
- Sankcije za kršenje Etičkog kodeksa
6. KOMISIJA SPORTAŠA:
- Predstavlja interese aktivnih sportaša
- 4-6 članova izabranih među sportašima
7. KOMISIJA ZA KATEGORIZACIJU:
- Verificira rezultate sportaša
- Donosi odluku o kategorizaciji (I-V)
DEPARTMANI / STRUČNE SLUŽBE HOO-a:
- Stručni odjel za sport
- Odjel za olimpijsku pripremu
- Odjel za međunarodne odnose
- Odjel za marketing i sponzorstva
- Odjel za pravna pitanja
- Odjel za financije
OLIMPIJSKI SIMBOLI:
- HOO ima isključivo pravo korištenja olimpijske oznake i amblema u RH
- Komercijalna upotreba olimpijskih simbola moguća uz licencu HOO-a
VEZE S MOK-om i KONTINENTALNIM:
- HOO sudjeluje na MOK Sjednicama
- HOO je član Europskih olimpijskih odbora (EOC)
- HOO je član ANOC (Asocijacija nacionalnih olimpijskih odbora)
- HOO je član Mediterranean Games Committee
FINANCIRANJE HOO-a:
- Državna proračunska sredstva (Hrvatska Vlada)
- MOK i EOC donacije/program
- Sponzorstva (Hrvatska poštanska banka, Erste banka, Adidas itd.)
- Olimpijska solidarnost
POSEBNE OVLASTI:
- Podizanje hrvatske zastave na OI
- Imenovanje Šefa misije (Chef de Mission) za OI/ZOI
- Suglasnost za održavanje međunarodnih natjecanja u RH
- Predlaganje državnih nagrada u sportu
STATUS U RH:
HOO je akreditiran kao samostalna pravna osoba. Ima posebni status definiran Zakonom o sportu (NN 141/22) i Pravilnikom o registraciji nacionalnih sportskih saveza.'''
},
]
def main():
conn = psycopg2.connect(**DB); conn.autocommit = True
cu = conn.cursor()
cu.execute("SELECT LOWER(COALESCE(title,'')) FROM pgz_sport.dokumenti")
existing = set(r[0] for r in cu.fetchall())
n_added = 0; n_updated = 0
for d in DOCS:
# Try fuzzy match first
cu.execute("SELECT id FROM pgz_sport.dokumenti WHERE title ILIKE %s LIMIT 1",
(f"%{d['title'].split('(')[0].strip()[:30]}%",))
row = cu.fetchone()
if row:
cu.execute("""UPDATE pgz_sport.dokumenti SET
sadrzaj=%s, kratak_opis=COALESCE(%s, kratak_opis),
izvor_url=COALESCE(izvor_url, %s),
sluzbeni_glasnik=COALESCE(sluzbeni_glasnik, %s),
kljucne_rijeci=COALESCE(kljucne_rijeci, %s)
WHERE id=%s""",
(d['sadrzaj'], d['kratak_opis'], d['izvor_url'],
d['sluzbeni_glasnik'], d['kljucne_rijeci'], row[0]))
n_updated += 1
print(f" ✓ Updated #{row[0]}: {d['title'][:55]}")
else:
cu.execute("""INSERT INTO pgz_sport.dokumenti
(title, kratak_opis, sadrzaj, vrsta, razina, organizacija, sport,
sluzbeni_glasnik, izvor_url, kljucne_rijeci, izdano_datum, aktivan)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,true)""",
(d['title'], d['kratak_opis'], d['sadrzaj'], d['vrsta'], d['razina'],
d['organizacija'], d.get('sport'), d['sluzbeni_glasnik'],
d['izvor_url'], d['kljucne_rijeci'], d['izdano_datum']))
n_added += 1
print(f" + Added: {d['title'][:55]}")
print(f"\nAdded: {n_added}, Updated: {n_updated}")
cu.execute("""SELECT count(*) FROM pgz_sport.dokumenti
WHERE length(COALESCE(sadrzaj,'')) > 1000""")
print(f"Dokumenata s full text: {cu.fetchone()[0]}")
conn.close()
main()