Odvojenost podataka, privole i otvorene granice
Klub nam povjerava podatke djece. Zato je ispod opisan mehanizam, a ne jamstvo: kako je odvojenost napravljena, tko što vidi, što se briše i gdje su granice — i one koje nam se ne sviđaju.
-
Odvojenost je u bazi, ne u aplikaciji
Svaki je klub svoj najmoprimac. Pravilo odvojenosti stoji ispod svakog zapisa u bazi i vrijedi i za vlasnika baze — ne samo za kod koji se može zaboraviti napisati.
-
Zatvoreno pri grešci
Ako upit teče bez konteksta kluba, vraća nula redaka. Ne vraća sve i ne javlja grešku — vraća ništa. Greška u našem kodu zato ne može postati otkrivanje tuđih podataka.
-
Jedan kontekst, jedna transakcija
Aplikacija podacima ne pristupa drukčije nego kroz kontekst kluba, koji je postavljen unutar jedne jedine transakcije i na njezinu kraju nestaje. Između istodobnih zahtjeva se ne prenosi.
-
Podrška ulazi samo sa zapisanim razlogom
Kada za podršku trebamo uvid u vaš klub, ulazimo kroz isto pravilo odvojenosti. Razlog je obavezan — bez njega ulaza nema — a ulaz i izlaz zapisuju se u dnevnik događaja.
Odvojenost je jedina stvar na ovoj stranici koju nije moguće dodati naknadno. Zato je izgrađena prije prve funkcije — i zato ima svoj test koji teče uz svaku promjenu.
Svaka promjena proizvoda mora proći ovaj test. Ako bilo koja od pet tvrdnji padne, promjena se ne spaja.
-
Klub vidi samo svoje članoveDva kluba, isti upit, dva različita rezultata.
-
Bez konteksta: nula redakaNe sve, ne greška — ništa.
-
Kontekst ne curi između vezaDvanaest istodobnih upita, svaki ostaje pri svom klubu.
-
Zapis u tuđi klub je odbijenOdvojenost vrijedi i pri pisanju, ne samo pri čitanju.
-
Nevažeći klub je odbijen unaprijedPrije nego se uopće izvede prvi upit.
tenant_id = nullif(current_setting('app.tenant_id', true), '')::uuid
Bez konteksta vrijednost je prazna, uvjet se ne ispunjava i rezultat je prazan. To je cijelo pravilo.
Mehanizam, a ne obećanje: test živi u repozitoriju koda i uvjet je za spajanje, a ne izjava u podnožju stranice.
Skrbnik je nositelj računa
Kod maloljetnog člana skrbnik je taj koji ima pristup, daje privole i prima račun. Djetetov zapis bez skrbnika nije samostalna jedinica.
-
Pristup
Maloljetni član nema pristup koji bi išao mimo skrbnika. Skrbništvo je zapisan odnos između osobe i člana, a ne samo polje s telefonskim brojem.
-
Privole
Pravo davanja i povlačenja privola nosi skrbnik. Kod člana je zapisano koji je skrbnik primarni i tko ima to pravo.
-
Dob za vlastitu privolu
Vezana je uz državu kluba i određena je u kodu proizvoda, a ne u postavci koju bi netko u administratorskom sučelju mogao pomaknuti. U Sloveniji je 15 godina.
-
Platitelj
Klub kod svakog djeteta određuje tko je platitelj — zato razdvojeni roditelji mogu plaćati svatko za svoje dijete. Platitelj može biti i osoba koja djetetu nije skrbnik: poslodavac, općina ili sponzor.
Što od toga roditelj vidi u svojoj aplikaciji, opisano je na stranici Za roditelje →
Četiri tipizirane privole
Privola nije bilješka u slobodnom tekstu. Postoje četiri vrste, svaka sa svojim stanjem, s osobom koja ju je dala i s vremenom.
| Privola | Stanje | Dao | Zapisano |
|---|---|---|---|
| Snimke za klupsku uporabu Fotografije i video koji ostaju unutar kluba. |
dano | skrbnica · A. K. | 3. 9. 2025 |
| Snimke za javnu objavu Fotografije i video na javnim kanalima kluba. |
povučeno | skrbnica · A. K. | povlačenje 14. 1. 2026 |
| Zdravstveni podaci Obrada alergija, stanja i lijekova — posebna vrsta podataka. |
dano | skrbnik · M. K. | 3. 9. 2025 |
| Obavještavanje Neobavezno. Bez njega član ostaje upisan i ništa ne gubi. |
nije dano | — | — |
Ogledni prikaz. Jedna zapisana odluka po vrsti privole — ne dva proturječna zapisa o istoj stvari. Povlačenje se zapisuje s vremenom povlačenja i inačicom; prethodno se stanje ne prepisuje, kao da privole nikad nije ni bilo.
ogledni prikaz · demo klub imena i datumi su prikaz, a ne podaci kluba
Zdravstveni podaci
Alergije, stanja i lijekovi strukturirana su polja kod člana, odvojena od ostatka zapisa — tako da ih je moguće izbrisati bez brisanja člana.
Odvojen zapis
Zdravstveni podaci stoje u svom zapisu, vezanom uz člana. Odvojenost nije estetska — omogućuje brisanje samo tog dijela.
Bilješke ostaju kod kluba
Interne bilješke o članu vidi administrator kluba. Kad trener ode, ostaju u klubu; kad ode član, idu s njim.
Kontakt za hitne slučajeve
Zapisan je kod člana, da je pri ozljedi dostupan na terenu, a ne u mapi u uredu.
Trener vidi članove svojih grupa — i samo njih: osobne i zdravstvene podatke, dolaske te poimenične izvještaje samo za grupe na koje je dodijeljen. Odbijen pokušaj uvida u zdravstvene podatke se bilježi. Trener bez dodijeljene grupe ne vidi nijednog člana.
Klupski raspored ostaje vidljiv u cijelosti, jer je otkrivanje sukoba ispravno samo prema svim terminima. Klupski izvještaji bez imena i volonterske smjene ostaju klupski — to je zapisano ovdje, a ne u sitnom tisku.
Prava su zadano zatvorena
Svaki zaslon i svaka duboka poveznica traže izričito dopuštenje. Bez njega poslužitelj sadržaj ne vraća — čak i ako adresu netko proslijedi dalje.
| Uloga | Vidi | Ne vidi |
|---|---|---|
| Administrator kluba Predsjednik, tajnik |
Sve: članove, raspored, financije, izvještaje, postavke, upise, prijenos podataka. | — |
| Blagajnik Tko vodi knjige |
Cjenike, račune, uplate i potraživanja, financijska izvješća, popis članova i grupa (da zna koga naplatiti). | Zdravstvene podatke djece — novcu nisu potrebni; uređivanja članova, osoblja i postavki kluba; razgovora među roditeljima. |
| Trener Voditelj grupe |
Članove svojih grupa i njihove zdravstvene podatke, dolaske tih grupa, klupski raspored (zbog sukoba), objave, volonterske smjene i izvještaj o dolascima svojih grupa. | Cjenike, račune i potraživanja; uređivanje postavki kluba; uređivanje osobnih podataka člana; red upisa. |
| Roditelj Skrbnik |
Svoju djecu, njihov raspored i otkazivanja, račune svoje obitelji, objave, volonterske smjene. | Druge članove i njihove skrbnike; tuđe zdravstvene podatke; financije kluba; interne bilješke. |
| Član Punoljetan ili stariji maloljetnik |
Svoj raspored i objave te stvari svoje obitelji, jednako kao skrbnik. | Jednako kao kod roditelja: ništa što se tiče drugih obitelji ili klupskih financija. |
Uloga je pet i ništa više; zbrajaju se, pa ista osoba može biti blagajnik i roditelj. Blagajnik postoji upravo zato da klub ne mora dati pune administratorske ovlasti onome tko vodi knjige — a budući da novcu ne trebaju zdravstveni podaci djeteta, ova ih uloga ne vidi. Nova je funkcija zatvorena dok je netko izričito ne otvori, nikad obrnuto.
Podijeljena poveznica · prikaz
GET /invoices/9f2c… → 403 · sadržaj računa se ne vraća
Adresa računa, proslijeđena u grupnom razgovoru, ne otvara ništa. Ništa nije vidljivo «samo zato što imaš poveznicu».
Cijeli popis cjelina i njihovih granica je na stranici Funkcije →
Čuvanje i brisanje
Brisanje je funkcija u proizvodu, a ne molba e-poštom. Ima pak jednu granicu koju ne možemo ukloniti i dva nedostatka koja ne skrivamo.
-
Brisanje člana u proizvodu
Uklanja člana i s njim njegove prijave na termine, zapise dolazaka, fotografiju, privole, zdravstveni zapis i članstva u grupama.
-
Granica: izdani računi
Dok za člana postoji račun, brisanje je odbijeno — izdane račune nije dopušteno brisati, jer evidencija mora izdržati pregled. U tom se slučaju članu zapisuje datum odlaska.
-
Odbijene prijavnice u proizvodu
Odbijena ili vraćena prijavnica sadrži podatke djeteta bez osnove za članstvo. Nakon 60 dana osobni se podaci iz nje automatski brišu; ostaje samo stanje i vremenska oznaka, da statistika reda ostane poštena.
-
Podesivi rokovi čuvanja
Klub u postavkama upisuje koliko se mjeseci nakon odlaska člana njegovi osobni podaci brišu — najmanje šest. Bez postavke ne briše se ništa; zadane vrijednosti namjerno nema. Prije spremanja klub vidi poimenično čiji bi zapis sljedeći prolaz ispraznio.
-
Zahtjev pojedinca za primjerkom podataka
Roditelj ili član primjerak preuzima sam, bez posredovanja kluba ili nas. Izvoz uvijek obuhvaća prijavljenog i djecu kojima je skrbnik — puta kojim bi netko preuzeo mapu tuđe obitelji nema.
Izvoz — na svojoj stvarnoj granici
Cjelovit izvoz kluba jedan je postupak: upravitelj preuzima ZIP datoteku s CSV-ovima — članovi, skrbnici, privole, raspored, dolasci, računi i plaćanja. Zdravstveni su podaci u svojoj datoteci. Uz to se i dalje odvojeno izvoze dnevnik računa i dnevnik plaćanja za računovodstvo. Bez uvjeta i bez naknade pri odlasku.
Što je točno u oba dnevnika i kako ih računovodstvo koristi, opisano je na stranici Za upravu →
Hosting u potvrđivanju
Ovdje bi na većini stranica pisalo da podaci ostaju u EU. Kod nas piše kada ćete to dobiti napisano tako da se može provjeriti.
«Lokaciju hostinga i podizvođače navodimo u ugovoru o obradi, prije nego potpišete. Do potvrde ugovora te stavke ne navodimo kao činjenicu.»
Zato na ovoj stranici nećete naći ime pružatelja, ime regije ni tvrdnju o lokaciji podataka. Obveza je prihvaćena; pisani dokaz još nismo objavili, i dok ga ne objavimo, ovaj redak nije zelen.
Ugovor o obradi
Klub je voditelj obrade, youthstack je izvršitelj obrade. To nije formalnost — određuje tko o podacima odlučuje, a tko ih smije samo obrađivati.
Klub odlučuje
Klub određuje koji se podaci obrađuju i zašto. Podaci su klupski i onda kad od nas ode.
Mi ih obrađujemo po njegovim uputama — ne za svoje svrhe, bez oglasa i bez prodaje ili razmjene podataka s trećima.
Potpis prije podataka
Ugovor o obradi potpisujemo prije nego u sustav učitamo prve stvarne podatke. Prijenos vašeg popisa članova dio je postavljanja i događa se nakon potpisa, ne prije.
Podizvođači su u njemu navedeni poimenično. Dok ugovor ne dobijete na uvid, na ovoj stranici o njima ne tvrdimo ništa.
Prije nego išta učitamo
Prezentacija traje 30 minuta i ide po vašem klubu: vaše grupe, tko koga trenira, tko plaća. Prijenos postojećeg popisa članova radimo mi.
Ugovor o obradi dobivate na uvid prije nego išta učitamo. · 30 minuta · prijenos podataka radimo mi · postavljanje ≈ 75 minuta vašeg vremena, raspoređenih kroz četiri dana