Data contract on kirjallinen sopimus datan tuottajan ja datan kuluttajan välillä. Se määrittelee mitä dataa tuotetaan, missä muodossa, millä laadulla, kuka siitä vastaa ja millä ehdoilla sitä saa käyttää. Data contract tuo dataan samat odotukset, joita organisaatioilla on muista palveluista: selkeät vastuut, sovittu laatu ja ennustettava käyttäytyminen.
Ilman data contractia datan kuluttaja — analyytikko, raporttikehittäjä tai toinen tiimi — ei tiedä voidaanko dataan luottaa, muuttuuko skeema varoittamatta tai kuka korjaa ongelman kun data ei saavu ajallaan. Data contract on sopimuksen muotoinen ratkaisu tähän epävarmuuteen.
Data contract ei ole byrokratiaa — se on kohteliaisuutta. Kun kirjaat ylös mitä lupaat datan suhteen, pakota itsesi miettimään lupauksen realistisuus. Samalla kuluttaja tietää mihin luottaa ja mihin ei. Aloita yksinkertaisesta: yksi sivu, tärkeimmät kentät, vastuuhenkilö ja yksi SLA. Se on parempi kuin täydellinen sopimus jota ei ole olemassa.
Alla on esimerkki käytännön data contractista. Sopimus kattaa uutissivuston verkkoseurannan tuottaman lukijadatan, jota toimituksen analytiikkatiimi, markkinointi ja tuotekehitys käyttävät sisältöpäätösten ja tilaajakonversion tukena. Koska data sisältää henkilötietoja, GDPR asettaa sopimukselle erityisvaatimuksia.
| Rooli | Henkilö / Taho | Vastuu |
|---|---|---|
| Data Owner | Sanna Heikkinen, digitaalinen päätoimittaja | Vastaa datan käyttötarkoitusten hyväksynnästä liiketoiminnan näkökulmasta. Hyväksyy skeemanmuutokset ja uudet käyttötarkoitukset. Viimekätinen vastuu GDPR-noudattamisesta tässä sopimuksessa. |
| Data Steward | Petra Laine, web-analyytikko | Päivittäinen laadunvalvonta. Hallinnoi suodatuslistoja (botit, sisäinen liikenne). Käsittelee rekisteröityjen poistopyynnöt tekniselle tiimille. |
| Data Custodian | Mikko Virtanen, data engineer | Tekninen vastuu keräysputkesta, tallennuksesta, anonymisoinnista ja skeemanmuutosten toteutuksesta. Toteuttaa poistopyynnöt 30 vrk sisällä. |
| Tietosuojavastaava (DPO) | Laura Mäkinen | Varmistaa GDPR-vaatimusten täyttymisen. Hyväksyttävä ennen uusien henkilötietokategorioiden lisäämistä skeemaan. |
| Data Consumer | Analytiikkatiimi, markkinointi, tuotekehitys | Käyttää dataa sovitun käyttötarkoituksen ja myönnetyn roolin mukaan. Raportoi laatu- ja tietosuojapoikkeamat Data Stewardille välittömästi. |
| Sarake | Tyyppi | Pakollinen | Henkilötieto | Kuvaus |
|---|---|---|---|---|
| kaynti_id | BIGINT | Kyllä | Ei | Surrogaattiavain. Yksilöi yksittäisen sivulatauksen. |
| istunto_id | VARCHAR(64) | Kyllä | Kyllä | Pseudonymisoitu istuntotunniste. Yhdistää saman selaajan käynnit yhden sessioikkunan sisällä. Hashattu SHA-256. |
| lukija_id | VARCHAR(64) | Ei | Kyllä | Pseudonymisoitu pitkäaikainen tunnisteevästetunniste. NULL jos evästettä ei ole hyväksytty tai selain estää. |
| kayttaja_id | INT | Ei | Kyllä | Tilaajan käyttäjätunnus jos kirjautunut. NULL anonymeille. Viiteavain tilaajakantaan. |
| artikkeli_id | INT | Kyllä | Ei | Viiteavain sisältötauluun. NULL etusivulle ja kategorianäkymille. |
| sivutyyppi | VARCHAR(30) | Kyllä | Ei | Arvot: artikkeli, etusivu, kategoria, haku, tilaus, muu. Ei vapaata tekstiä. |
| kayntiaikaleima | DATETIME | Kyllä | Ei | Sivun latausaika UTC-aikavyöhykkeessä. Ei tulevaisuuden aikoja. |
| lukuaika_sekuntia | INT | Ei | Ei | Arvioitu aktiivinen lukuaika sekunteina. NULL jos selain ei tue tapahtumia. Arvot 0–3600. |
| vierityssyvyys_pct | TINYINT | Ei | Ei | Kuinka pitkälle artikkeli vieritetty, prosentteina 0–100. NULL jos ei mitata. |
| laitetyyppi | VARCHAR(10) | Kyllä | Ei | Arvot: desktop, mobile, tablet. Johdettu User-Agent-merkkijonosta. |
| maa_koodi | CHAR(2) | Ei | Kyllä | ISO 3166-1 alpha-2 -maakoodi IP-geolokalisaatiosta. NULL jos ei voida määrittää. IP-osoitetta ei tallenneta. |
| suostumus_tila | VARCHAR(15) | Kyllä | Ei | Arvot: hyvaksytty, hylätty, vanhentunut, ei_kysytty. Kuvaa evästesuostumuksen tilan lataushetkellä. |
| tilaaja_tyyppi | VARCHAR(15) | Kyllä | Ei | Arvot: anonyymi, rekisteröitynyt, ilmaistilaaja, maksullinen. Johdetaan kayttaja_id:n perusteella. |
| viittaaja_luokka | VARCHAR(20) | Ei | Ei | Liikenteen lähteen luokka. Arvot: suora, hakukone, some, uutiskirje, muu. Tarkkaa viittaaja-URL:ia ei tallenneta. |
| on_botti | BIT | Kyllä | Ei | 1 jos tunnettu botti tai indeksointirobotti, muuten 0. Botit suodatetaan pois analytiikkanäkymistä muttei raakadatasta. |
| Sääntö | Ehto | Toimenpide rikkomuksesta |
|---|---|---|
| Suostumus ennen henkilötietojen tallennusta | Jos suostumus_tila = 'hylätty', sarakkeet lukija_id, kayttaja_id ja maa_koodi on oltava NULL | ETL-prosessi nollaa henkilötietosarakkeet automaattisesti. Poikkeamat kirjataan tietosuojalokiin. DPO:lle ilmoitus välittömästi jos > 0 rikkomusta vuorokaudessa. |
| Ei NULL-arvoja avaintiedoissa | kaynti_id, kayntiaikaleima, sivutyyppi, laitetyyppi, suostumus_tila, on_botti eivät saa olla NULL | Rivi hylätään ETL-vaiheessa. Data Stewardille ilmoitus jos > 0,5 % riveistä hylätään. |
| Sivutyyppi sallituista arvoista | sivutyyppi IN (artikkeli, etusivu, kategoria, haku, tilaus, muu) | Rivi ohjataan karanteeniin. Uudet sivutyypit lisätään Data Ownerin hyväksynnällä. |
| Aikaleima ei tulevaisuudessa | kayntiaikaleima <= UTC_NOW() + 5 min (toleranssi kelloneroille) | Rivi hylätään. Ilmoitus Data Stewardille. |
| Botisuodatus | Tunnettujen bottien User-Agent-sormenjäljet suodatetaan IAB/ABC-listan mukaan. Lista päivitetään kuukausittain. | Bottirivit merkitään on_botti = 1 ja jätetään raakadataan mutta poissuodatetaan kaikista analytiikkanäkymistä. |
| Sisäisen liikenteen poissulkeminen | Toimiston IP-alueet (10.10.0.0/16) merkitään on_botti = 1 | Lista päivitetään IT:n toimesta aina toimistoverkon muuttuessa. Data Steward vastaa ajantasaisuudesta. |
| Lukuajan arvoalue | lukuaika_sekuntia IN [0, 3600] tai NULL | Yli 3600 sekunnin arvot katkaistaan 3600:aan ennen latausta. Kirjataan muutoslokiin. |
| Päivittäinen kattavuus | Vuorokausitaulukossa jokaiselle kalenteripäivälle vähintään 1 000 käyntiriviä (arkipäivät) | Hälytys Data Stewardille ja Data Custodianille klo 04:30 mennessä. Alle 500 käyntiä käynnistää P1-prosessin automaattisesti. |
Koska skeema sisältää henkilötietoja, kaikki muutokset vaativat DPO:n arvion ennen käyttöönottoa.
| Muutostyyppi | Esimerkit | Ilmoitusaika | Hyväksyntä |
|---|---|---|---|
| Ei-rikkova muutos | Uuden valinnaisen ei-henkilötietosarakkeen lisäys, indeksin lisäys, kuvauksen päivitys, sallitun arvojoukon laajennus | 7 päivää ennen | Data Custodian ilmoittaa, DPO:n tieto riittää jos ei koske henkilötietoja |
| Ei-rikkova muutos (henkilötieto) | Uuden valinnaisen henkilötietosarakkeen lisäys, keräyslaajuuden muutos | 21 päivää ennen | Data Ownerin ja DPO:n kirjallinen hyväksyntä. Tietosuojaseloste päivitettävä ennen käyttöönottoa. |
| Rikkova muutos | Sarakkeen poisto tai uudelleennimeäminen, tietotyypin muutos, pakollisen sarakkeen lisäys, arvojoukon kaventaminen | 30 päivää ennen | Data Ownerin ja DPO:n kirjallinen hyväksyntä + kaikkien nimettyjen kuluttajien vahvistus |
Muutosten hallintakäytäntö:
web.LukijaKaynti_v1 ja web.LukijaKaynti_v2), ellei toisin sovita.metadata.sopimukset-taulusta kentistä versio ja voimassa_alkaen.| Vakavuus | Kuvaus | Vasteaika | Ratkaisuaika | Tiedotusväli |
|---|---|---|---|---|
| P1 — Kriittinen | Keräysputki poikki — dataa ei saavu lainkaan. Tai tietosuojarikkomus: henkilötietoja tallennetaan ilman suostumusta. | 30 min | 4 tuntia | Joka 30 min. Tietosuojarikkomus: DPO:lle välitön ilmoitus, 72 h ilmoitusvelvollisuus viranomaiselle. |
| P2 — Korkea | Data on osittain virheellistä tai puuttuu yli 10 % riveistä. Suostumustieto virheellinen yli 1 % riveissä. | 2 tuntia | Saman päivän loppuun | Kerran 4 tunnissa. DPO saa tilannetiedon välittömästi jos suostumukseen liittyy. |
| P3 — Normaali | Yksittäisiä laaturikkomuksia, ei vaikuta kokonaisuuteen. Bottisuodatuslistassa puutteita. Dokumentoitu poikkeus. | 1 työpäivä | 5 työpäivää | Seuraava säännöllinen katselmus |
Ongelmailmoituksen kanava: Sähköposti data-tuki@uutislehti.fi tai Teams-kanava #data-ongelmat. P1-tapaukset myös puhelinsoitto Data Custodianille. Tietosuojarikkomuksissa lisäksi välitön soitto DPO:lle.
Postmortem: P1- ja P2-tapauksista kirjoitetaan juurisyyanalyysi viiden arkipäivän sisällä. Tietosuojarikkomuksissa dokumentaatio toimitetaan DPO:lle 48 tunnin kuluessa.
Pääsy: Data on avointa kaikille toimituksen ja teknisen tiimin jäsenille ilman roolikohtaisia rajoituksia. Jokainen näkee kaikki artikkelit, niiden lukijamäärät, lukuajat ja muut mittarit — myös sen, kenen kirjoittamia artikkelit ovat.
Sallitut käyttötarkoitukset:
Kielletyt käyttötarkoitukset:
Rekisteröidyn oikeudet: Lukijoita koskevat tietopyynnöt (tarkastus, poisto, siirto) ohjataan osoitteeseen tietosuoja@uutislehti.fi. Data Custodian toteuttaa poistopyynnöt 30 kalenteripäivän kuluessa.
Avoin data sisällä on usein parempi valinta kuin monimutkainen roolihierarkia. Kun kaikki näkevät samat luvut, syntyy yhteinen todellisuus — ei kilpailevia versioita siitä mitä "meillä menee hyvin". Toimittaja, joka näkee kollegoidenkin artikkelien lukemat, oppii nopeammin mikä toimii. Läpinäkyvyys rakentaa luottamusta enemmän kuin suojatut näkymät. RLS on oikea työkalu silloin kun datassa on oikeasti arkaluonteista tai roolisidonnaista tietoa — ei oletusasetus joka otetaan käyttöön varmuuden vuoksi.