Odvojenost podataka, saglasnosti i otvorene granice
Klub nam poverava podatke dece. Zato je ispod opisan mehanizam, a ne garancija: kako je odvojenost napravljena, ko šta vidi, šta se briše i gde su granice — i one koje nam se ne dopadaju.
-
Odvojenost je u bazi, ne u aplikaciji
Svaki klub je svoj zakupac. Pravilo odvojenosti stoji ispod svakog zapisa u bazi podataka i važi i za vlasnika baze — ne samo za kod koji se može zaboraviti napisati.
-
Zatvoreno pri grešci
Ako se upit izvršava bez konteksta kluba, vraća nula redova. Ne vraća sve i ne javlja grešku — vraća ništa. Greška u našem kodu zato ne može da postane otkrivanje tuđih podataka.
-
Jedan kontekst, jedna transakcija
Aplikacija podacima ne pristupa drugačije nego kroz kontekst kluba, koji se postavlja unutar jedne jedine transakcije i na njenom kraju nestaje. Između istovremenih zahteva se ne prenosi.
-
Podrška ulazi samo sa zapisanim razlogom
Kada nam je za podršku potreban uvid u vaš klub, ulazimo kroz isto pravilo odvojenosti. Razlog je obavezan — bez njega ulaza nema — a ulaz i izlaz se zapisuju u dnevnik događaja.
Odvojenost je jedina stvar na ovoj stranici koju nije moguće dodati naknadno. Zato je izgrađena pre prve funkcije — i zato ima svoj test, koji se izvršava uz svaku promenu.
Svaka promena proizvoda mora da prođe ovaj test. Ako bilo koja od pet tvrdnji padne, promena se ne spaja.
-
Klub vidi samo svoje članoveDva kluba, isti upit, dva različita rezultata.
-
Bez konteksta: nula redovaNe sve, ne greška — ništa.
-
Kontekst ne curi između konekcijaDvanaest istovremenih upita, svaki ostaje pri svom klubu.
-
Zapis u tuđi klub je odbijenOdvojenost važi i pri pisanju, ne samo pri čitanju.
-
Nevažeći klub je odbijen unapredPre nego što se uopšte izvrši prvi upit.
tenant_id = nullif(current_setting('app.tenant_id', true), '')::uuid
Bez konteksta vrednost je prazna, uslov nije ispunjen i rezultat je prazan. To je celo pravilo.
Mehanizam, a ne obećanje: test živi u repozitorijumu koda i uslov je za spajanje, a ne izjava u podnožju stranice.
Staratelj je nosilac računa
Kod maloletnog člana staratelj je taj koji ima pristup, daje saglasnosti i prima račun. Zapis deteta bez staratelja nije samostalna jedinica.
-
Pristup
Maloletni član nema pristup koji bi išao mimo staratelja. Starateljstvo je zapisan odnos između osobe i člana, a ne samo polje sa brojem telefona.
-
Saglasnosti
Pravo da daje i povlači saglasnosti nosi staratelj. Kod člana je zapisano koji je staratelj primarni i ko ima to pravo.
-
Uzrast za sopstvenu saglasnost
Vezan je za državu kluba i određen je u kodu proizvoda, a ne u podešavanju koje bi neko u administratorskom interfejsu mogao da pomeri. U Sloveniji je 15 godina.
-
Platilac
Klub kod svakog deteta određuje ko je platilac — zato razdvojeni roditelji mogu da plaćaju svako za svoje dete. Platilac može da bude i osoba koja detetu nije staratelj: poslodavac, opština ili sponzor.
Šta od toga roditelj vidi u svojoj aplikaciji, opisano je na stranici Za roditelje →
Četiri tipizirane saglasnosti
Saglasnost nije beleška u slobodnom tekstu. Postoje četiri vrste, svaka sa svojim stanjem, sa osobom koja ju je dala i sa vremenom.
| Saglasnost | Stanje | Dao | Zabeleženo |
|---|---|---|---|
| Snimci za klupsku upotrebu Fotografije i video koji ostaju unutar kluba. |
dato | starateljka · A. K. | 3. 9. 2025 |
| Snimci za javnu objavu Fotografije i video na javnim kanalima kluba. |
povučeno | starateljka · A. K. | povlačenje 14. 1. 2026 |
| Zdravstveni podaci Obrada alergija, stanja i lekova — posebna vrsta podataka. |
dato | staratelj · M. K. | 3. 9. 2025 |
| Obaveštavanje Neobavezno. Bez njega član ostaje upisan i ništa ne gubi. |
nije dato | — | — |
Ogledni prikaz. Jedna zapisana odluka po vrsti saglasnosti — ne dva protivrečna zapisa o istoj stvari. Povlačenje se beleži sa vremenom povlačenja i verzijom; prethodno stanje se ne prepisuje, kao da saglasnosti nikada nije ni bilo.
ogledni prikaz · demo klub imena i datumi su ilustracija, a ne podaci kluba
Zdravstveni podaci
Alergije, stanja i lekovi su strukturirana polja kod člana, odvojena od ostatka zapisa — tako da je moguće obrisati ih bez brisanja člana.
Odvojen zapis
Zdravstveni podaci stoje u svom zapisu, vezanom za člana. Odvojenost nije estetska — omogućava brisanje samo tog dela.
Napomene ostaju kod kluba
Interne beleške o članu vidi administrator kluba. Kad trener ode, ostaju u klubu; kad ode član, idu sa njim.
Kontakt za hitne slučajeve
Zapisan je kod člana, da bude dostupan na terenu pri povredi, a ne u fascikli u kancelariji.
Trener vidi članove svojih grupa — i samo njih: lične i zdravstvene podatke, prisustvo i poimenične izveštaje samo za grupe na koje je dodeljen. Odbijen pokušaj uvida u zdravstvene podatke se beleži. Trener bez dodeljene grupe ne vidi nijednog člana.
Klupski raspored ostaje vidljiv u celini, jer je otkrivanje preklapanja ispravno samo prema svim terminima. Klupski izveštaji bez imena i volonterske smene ostaju klupski — to je zapisano ovde, a ne u sitnim slovima.
Prava su podrazumevano zatvorena
Svaki ekran i svaki duboki link traže izričitu dozvolu. Bez nje server sadržaj ne vraća — čak i ako neko adresu prosledi dalje.
| Uloga | Vidi | Ne vidi |
|---|---|---|
| Administrator kluba Predsednik, sekretar |
Sve: članove, raspored, finansije, izveštaje, podešavanja, upise, prenos podataka. | — |
| Blagajnik Ko vodi knjige |
Cenovnike, račune, uplate i potraživanja, finansijske izveštaje, spisak članova i grupa (da zna koga da naplati). | Zdravstvene podatke dece — novcu nisu potrebni; uređivanja članova, osoblja i podešavanja kluba; razgovora među roditeljima. |
| Trener Vođa grupe |
Članove svojih grupa i njihove zdravstvene podatke, prisustvo tih grupa, klupski raspored (zbog preklapanja), objave, volonterske smene i izveštaj o prisustvu svojih grupa. | Pakete članarine, račune i potraživanja; uređivanje podešavanja kluba; uređivanje ličnih podataka člana; red upisa. |
| Roditelj Staratelj |
Svoju decu, njihov raspored i otkazivanja, račune svoje porodice, objave, volonterske smene. | Druge članove i njihove staratelje; tuđe zdravstvene podatke; finansije kluba; interne beleške. |
| Član Punoletan ili stariji maloletnik |
Svoj raspored i objave i stvari svoje porodice, isto kao staratelj. | Isto kao kod roditelja: ništa što se tiče drugih porodica ili klupskih finansija. |
Uloga je pet i ništa više; sabiraju se, pa ista osoba može biti blagajnik i roditelj. Blagajnik postoji upravo zato da klub ne mora da da pune administratorske dozvole onome ko vodi knjige — a pošto novcu nisu potrebni zdravstveni podaci deteta, ova uloga ih ne vidi. Nova funkcija je zatvorena dok je neko izričito ne otvori, nikada obrnuto.
Deljeni link · prikaz
GET /invoices/9f2c… → 403 · sadržaj računa se ne vraća
Adresa računa, prosleđena u grupnom razgovoru, ne otvara ništa. Ništa nije vidljivo «samo zato što imaš link».
Ceo spisak celina 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 da uklonimo i dva nedostatka koja ne krijemo.
-
Brisanje člana u proizvodu
Uklanja člana i sa njim njegove prijave na termine, zapise prisustva, fotografiju, saglasnosti, zdravstveni zapis i članstva u grupama.
-
Granica: izdati računi
Dok za člana postoji račun, brisanje je odbijeno — izdate račune nije dozvoljeno brisati, jer evidencija mora da izdrži proveru. U tom slučaju se članu upisuje datum odlaska.
-
Odbijene prijavnice u proizvodu
Odbijena ili vraćena prijavnica sadrži podatke deteta bez osnova za članstvo. Posle 60 dana lični podaci iz nje se automatski brišu; ostaje samo stanje i vremenska oznaka, da statistika reda ostane poštena.
-
Podesivi rokovi čuvanja
Klub u podešavanjima upisuje koliko meseci posle odlaska člana se njegovi lični podaci brišu — najmanje šest. Bez tog podešavanja se ne briše ništa; podrazumevane vrednosti namerno nema. Pre nego što sačuva, klub vidi poimenično čiji bi zapis sledeći prolaz ispraznio.
-
Zahtev pojedinca za primerkom podataka
Roditelj ili član primerak preuzima sam, bez posredovanja kluba ili nas. Izvoz uvek obuhvata prijavljenog i decu kojoj je staratelj — puta kojim bi neko preuzeo dosije tuđe porodice nema.
Izvoz — na svojoj stvarnoj granici
Celovit izvoz kluba je jedan postupak: administrator preuzima ZIP datoteku sa CSV-ovima — članovi, staratelji, saglasnosti, raspored, prisustvo, računi i plaćanja. Zdravstveni podaci su u svojoj datoteci. Uz to se i dalje odvojeno izvoze dnevnik računa i dnevnik plaćanja za računovodstvo. Bez uslova i bez naknade pri odlasku.
Šta je tačno u oba dnevnika i kako ih računovodstvo koristi, opisano je na stranici Za upravu →
Hosting u potvrđivanju
Ovde bi na većini sajtova pisalo da podaci ostaju u EU. Kod nas piše kada ćete to dobiti napisano tako da se može proveriti.
«Lokaciju hostinga i podizvođače navodimo u ugovoru o obradi, pre nego što potpišete. Do potvrde ugovora te stavke ne navodimo kao činjenicu.»
Zato na ovoj stranici nećete naći ime pružaoca, ime regije ni tvrdnju o lokaciji podataka. Obaveza je prihvaćena; pisani dokaz još nismo objavili, i dok ga ne objavimo, ovaj red nije zelen.
Ugovor o obradi
Klub je rukovalac, youthstack je obrađivač. To nije formalnost — određuje ko o podacima odlučuje, a ko sme samo da ih obrađuje.
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 uputstvima — ne za svoje svrhe, bez oglasa i bez prodaje ili razmene podataka sa trećim licima.
Potpis pre podataka
Ugovor o obradi potpisujemo pre nego što u sistem učitamo prve stvarne podatke. Prenos vašeg spiska članova deo je postavljanja i dešava se posle potpisa, ne pre.
Podobrađivači su u njemu navedeni poimenično. Dok ugovor ne dobijete na uvid, na ovoj stranici o njima ne tvrdimo ništa.
Pre nego što išta učitamo
Prezentacija traje 30 minuta i ide po vašem klubu: vaše grupe, ko koga trenira, ko plaća. Prenos postojećeg spiska članova radimo mi.
Ugovor o obradi dobijate na uvid pre nego što išta učitamo. · 30 minuta · prenos podataka radimo mi · postavljanje ≈ 75 minuta vašeg vremena, raspoređenih kroz četiri dana