Stand. De pilotomgeving is gebouwd en getest, maar nog niet in gebruik genomen. Publiek bereikbaar zijn de website (datavoogd.nl) en de demo (demo.datavoogd.nl), die alleen verzonnen gegevens bevat en niets opslaat. Zolang het taalmodel niet binnen de Europese Unie draait, verwerkt Datavoogd uitsluitend synthetische documenten.
1. Wat Datavoogd verwerkt
| Gegeven | Waar | Hoe lang |
|---|---|---|
| Geüploade verwerkersovereenkomst of DPIA | alleen in het werkgeheugen tijdens de toets | niet bewaard |
| Rapport: classificatie, per toetsregel de bevinding met letterlijke citaten uit het document, signaleringen | werkruimte, JSON-bestanden | zolang de werkruimte bestaat |
| Beslissingen van de functionaris gegevensbescherming (audit trail) | werkruimte, JSONL, alleen toevoegen | zolang de werkruimte bestaat |
| Wegwijzer: beschrijving van de situatie zoals ingevoerd, antwoorden, voorstel | werkruimte | zolang de werkruimte bestaat |
| Opstellen: beschrijving en intake zoals ingevoerd, ingevulde velden, het gebouwde Word-document | werkruimte | zolang de werkruimte bestaat |
| Account: e-mailadres, functie, werkruimte, akkoorden (document, versie, vingerafdruk van de tekst, tijdstip) | accountbestanden | zolang het account bestaat |
| Tegoed, betaalkenmerken, facturen | werkruimte | facturen zeven jaar (fiscale plicht) |
| Kosten per modelaanroep (aantallen tokens en bedrag, zonder inhoud) | werkruimte | zolang de werkruimte bestaat |
Let op: citaten in het rapport en de ingevoerde beschrijvingen bij de wegwijzer en het opstellen zijn wél tekst van de gebruiker. Wie daar persoonsgegevens invoert, laat die in de werkruimte achter. De app vraagt om functies in plaats van namen.
2. Hosting en locatie
- Hostingpartij: Fly.io, regio Amsterdam (
ams), voor de app, de demo en de website. - Opslag: een eigen volume per omgeving in Amsterdam; geen database, geen gedeelde opslag met andere klanten van Fly.io.
- Versleuteling van opslag: volumes van Fly.io zijn standaard versleuteld (bron: Fly.io, Volumes overview, gecontroleerd 17-09-2026).
- Versleuteling onderweg: uitsluitend https (
force_https), met HSTS in de app. - Container: Python 3.12 slim-image; de app draait als gewone gebruiker, niet als root.
- Beschikbaarheid: één machine in de pilot, met een gezondheidscontrole elke 30 seconden. Er is geen tweede regio of failover.
3. Toegang
- Geen wachtwoorden. Deelnemers aan de pilot krijgen een uitnodigingscode per werkruimte, of loggen in met een link per e-mail.
- Uitnodigingscode: willekeurig (72 bits), alleen als SHA-256-hash opgeslagen, in constante tijd vergeleken. Een ingetrokken werkruimte is direct onbereikbaar, ook met een geldige sessie.
- Inloglink: 30 minuten geldig en één keer te gebruiken. De link is ondertekend (HMAC-SHA256) en bevat geen e-mailadres. Op schijf staat alleen een hash van het eenmalige kenmerk. Wie een link aanvraagt, krijgt altijd hetzelfde antwoord, zodat niet te zien is welke adressen een account hebben.
- Sessie: een ondertekende cookie (HMAC-SHA256),
HttpOnly,Secure,SameSite=Lax, 30 dagen geldig. - Formulieren: een verzoek dat iets verandert en van een andere site komt (Origin- of Referer-header), wordt geweigerd.
- Aanmelden per sector: zelf aanmelden kan alleen in een sector die na de pilot is opengezet. Nu staat geen sector open. De uitrolcontrole weigert een open sector zolang alleen synthetische documenten mogen.
- Beheer: werkruimten aanmaken en intrekken gebeurt op de server met een beheeropdracht, niet via een webpagina.
4. Scheiding tussen organisaties
- Elke werkruimte heeft een eigen map. Elk verzoek wordt aan de werkruimte uit de ondertekende sessie gekoppeld; een rapport, concept of factuur van een andere werkruimte geeft "niet gevonden".
- Kenmerken in adressen worden gecontroleerd op alleen letters, cijfers en koppeltekens, zodat een pad niet buiten de werkruimte kan wijzen.
- Kostenplafond per werkruimte per maand (standaard 25 euro modelkosten): daarboven weigert de app nieuw werk voor het taalmodel.
5. Het taalmodel
- Model: Claude van Anthropic, per taak ingesteld in de configuratie.
- Doel na inrichting: Google Vertex AI in de Europese multiregio
eu. De koppeling is gebouwd; het account wordt ingericht. De configuratie weigert in productie elke niet-Europese route, en een regio buiten de EU. - Nu: omgeving ontwikkeling, eerste-partij API van Anthropic, alleen voor synthetische documenten.
- Wat naar het model gaat: bij een toets de tekst van het document in genummerde fragmenten plus één toetsregel per aanroep; bij de wegwijzer en het opstellen de ingevoerde beschrijving.
- Controle op verzinsels: elk citaat dat het model noemt, wordt letterlijk vergeleken met het document. Een citaat dat er niet in staat, wordt geschrapt en de bevinding gaat als escalatie naar de functionaris gegevensbescherming.
- Geen eindoordeel: elke signalering blijft "voorgesteld" tot de functionaris gegevensbescherming bevestigt of afwijst.
- Training: gegevens van klanten worden niet gebruikt om modellen te trainen (verwerkersovereenkomst, artikel 13). De voorwaarden van Google Vertex AI worden bij het inrichten nagelopen en in deze beschrijving opgenomen.
6. Invoer
- Alleen .docx en .pdf; de eerste bytes moeten bij het bestandstype passen.
- Maximaal 25 MB; de app leest niet verder dan die grens.
- Grenzen tegen misvormde bestanden: een .docx van hooguit 100 MB uitgepakt en 2000 onderdelen, een pdf van hooguit 500 pagina's, hooguit 5000 alinea's en tabellen. De opbouw wordt bij ontvangst gecontroleerd.
- Een geweigerd bestand kost geen tegoed en wordt niet bewaard.
7. Webbeveiliging
- App: Content-Security-Policy zonder inline scripts en zonder externe bronnen,
frame-ancestors 'none',X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy: same-origin,Permissions-Policyen HSTS. - Website: statische pagina's zonder cookies en zonder analytics, met Content-Security-Policy,
X-Frame-Options: DENY,nosniffenReferrer-Policy. - Uitvoer: alle tekst in pagina's wordt standaard ge-escaped (Jinja2).
- Demo: accepteert geen enkel verzoek dat iets verandert; er is geen upload, geen opslag en geen modelaanroep, en de demo heeft geen sleutels.
8. Logging en audit trail
- Serverlogboek: kenmerken, aantallen en soorten, zonder documentinhoud en zonder bestandsnamen. Een mislukte toets logt alleen de soort fout. Het toegangslogboek van de webserver staat uit, omdat inloglinks in het adres staan.
- Modelaanroepen: alleen taak, model en tokenaantallen.
- Audit trail: per beslissing tijdstip, signalering, toetsregel, beslissing, toelichting, naam of functie van de beoordelaar zoals ingetypt, het account dat volgens de ondertekende sessie was ingelogd (het e-mailadres, of "uitnodigingscode" bij inloggen met de code van de werkruimte) en de versie van de toetsregels. Het bestand wordt alleen aangevuld, nooit herschreven. Het rapport met beslissingen is te downloaden als Word, het overzicht van alle beslissingen als CSV.
- Akkoorden: wie, wanneer, welk document, welke versie en een SHA-256-vingerafdruk van de tekst.
9. Geheimen
- Sleutels (sessiegeheim, e-maildienst, betaaldienst, taalmodel) staan als geheim bij Fly.io en nooit in de code of in git.
- Alleen de beheerder van Datavoogd stelt ze in.
- De uitrolcontrole meldt per onderdeel of een geheim is ingesteld, zonder het te tonen, en blokkeert uitrol bij een ontbrekend of te kort sessiegeheim.
10. Leveranciers
| Leverancier | Wat | Waar |
|---|---|---|
| Fly.io | hosting en opslag | Amsterdam |
| Google (Vertex AI) | taalmodel, zodra ingericht | Europese multiregio eu |
| Anthropic | taalmodel, nu alleen voor synthetische documenten | eerste-partij API |
| Mollie | betalingen (iDEAL) | Nederlandse betaaldienst; verwerkingslocatie na te gaan |
| Resend | versturen van inloglinks | na te gaan |
De leveranciers die gegevens van klanten verwerken, worden in de verwerkersovereenkomst als subverwerker genoemd; nieuwe subverwerkers worden vooraf gemeld.
11. Continuïteit
- Fly.io maakt dagelijks een snapshot van elk volume en bewaart die standaard vijf dagen, instelbaar tot 60 dagen (bron: Fly.io, Volumes overview, gecontroleerd 17-09-2026).
- Vóór elke wijziging kan een extra snapshot worden gemaakt.
- Na een herstel leest een controleprogramma elk bestand zoals de app het leest en meldt aantallen en onleesbare bestanden, zonder inhoud te tonen. Het stappenplan voor de hersteltest ligt klaar; de eerste test volgt zodra de pilotomgeving draait.
12. Incidenten
- Een inbreuk in verband met persoonsgegevens meldt Datavoogd binnen 24 uur na ontdekking aan het contactpunt van de organisatie, met de gegevens die artikel 33 lid 3 AVG vraagt (verwerkersovereenkomst, artikel 9).
- Contact: info@datavoogd.nl.
13. Ontwikkeling
- Broncode in versiebeheer; elke wijziging is een eigen, beschreven commit.
- 206 automatische tests, waaronder tests voor scheiding van werkruimten, inloggen, headers, herkomstcontrole, cookies, documentgrenzen en de demo die niets opslaat. Tests gebruiken alleen verzonnen gegevens en kunnen het echte taalmodel niet aanroepen.
- De versie van elk softwarepakket in de app ligt vast (49 pakketten) en is op 17-09-2026 gecontroleerd op bekende kwetsbaarheden, zonder bevindingen. Bijwerken gaat volgens een vast stappenplan, met dezelfde controle.
- Juridische keuzes worden niet stilletjes in de software gebouwd, maar als open vraag aan een jurist voorgelegd.
14. Wat nog niet geregeld is
Eerlijk op een rij, met wat wij daaraan doen:
- Geen certificering. Geen ISO 27001 of vergelijkbaar. Vóór de eerste betaalde overeenkomst met echte documenten volgen een onafhankelijke penetratietest en een DPIA op Datavoogd zelf.
- Taalmodel nog niet in de EU. Tot Vertex AI is ingericht: alleen synthetische documenten.
- Controle op kwetsbaarheden gebeurt bij elke update volgens het stappenplan, nog niet automatisch en doorlopend.
- Hersteltest. Snapshots bestaan en de controle is gebouwd; een herstel is nog niet geoefend, omdat de pilotomgeving nog niet draait.
- Verwijderen van een werkruimte gebeurt handmatig op de server; intrekken sluit de toegang direct af.
- Audit trail: het bestand is niet cryptografisch verzegeld. Bij inloggen met de uitnodigingscode van een werkruimte is niet vast te stellen welke persoon beslist; alleen dat het via die code was.
- Sessies zijn niet per stuk op de server in te trekken; alleen door de hele werkruimte in te trekken.
- Eén machine, één regio: geen failover.
- Juridische stukken (voorwaarden, verwerkersovereenkomst, privacyverklaring) zijn concepten en nog niet door een jurist getoetst.
Deze beschrijving wordt bijgewerkt bij elke wijziging die een van de punten hierboven raakt. Vragen: info@datavoogd.nl.