Skip to content

docs(security): GDPR-dokumentationspaket (Art. 30, subprocessorer, gap-register) - #474

Open
cola500 wants to merge 2 commits into
mainfrom
feature/gdpr-compliance-documentation
Open

docs(security): GDPR-dokumentationspaket (Art. 30, subprocessorer, gap-register)#474
cola500 wants to merge 2 commits into
mainfrom
feature/gdpr-compliance-documentation

Conversation

@cola500

@cola500 cola500 commented Aug 9, 2026

Copy link
Copy Markdown
Owner

Summary

Del av autonom feature-leverans (docs/agent-operations/) för utfallet "säkerställ GDPR-compliance och kunna bevisa det med dokumentation". Efter en Seven Dimensions-scoping (.claude/rules/story-refinement.md) valde Johan Slice 1: dokumentationspaketet (ingen kodrisk) framför bredare slices som inkluderar kodfixar eller cookie-consent-ombyggnad.

Tre nya dokument, rena faktakartläggningar utan kodändringar:

  • docs/security/gdpr-records-of-processing.md -- GDPR Art. 30-register: alla personuppgiftsbärande modeller i prisma/schema.prisma, ändamål, rättslig grund, lagringstid
  • docs/security/gdpr-subprocessor-register.md -- register över personuppgiftsbiträden (Stripe, Supabase, Sentry, Upstash, Resend, Vercel, Fortnox, Anthropic, Apple) med DPA-status (konsekvent markerad "ej verifierat i repo" där inget bevis finns -- inga påhittade efterlevnadspåståenden)
  • docs/security/gdpr-gap-register.md -- 15 konkreta, prioriterade luckor med rekommenderad åtgärd (inga åtgärdade som del av denna PR)

Plus registrering av de tre dokumenten i docs/INDEX.md.

Viktiga fynd (redan existerande beteende, inte nytt i denna PR)

  • Export (Art. 15/20) och kontoradering (Art. 17) finns och fungerar, men täcker inte all personuppgiftsdata (ProviderCustomerNote, Message, RouteOrder, m.fl.) -- besvarar den tidigare öppna frågan R19 i docs/product-audit/technical-risks.md
  • AdminAuditLog (innehåller e-post + IP) saknar retention/radering -- samma tabell som tidigare låg exponerad via en RLS-lucka (åtgärdad i augusti-auditen)
  • Flera modeller (MobileToken, DeviceToken, CustomerInviteToken, Stable) förlitar sig på onDelete: Cascade från User, men kontoradering anonymiserar (UPDATE) snarare än raderar User-raden -- cascaden utlöses aldrig
  • Push-notiser till Apple/APNs innehåller ett utdrag av meddelandeinnehåll, inte bara en enhetstoken

Fullständig prioriterad lista i gap-registret.

Verifiering

  • npm run docs:validate -- inga fel i de nya filerna (158 pre-existerande fel i repot, orört av denna PR)
  • npm run check:swedish -- inga nya problem, korrekt svensk ortografi (å/ä/ö) i alla tre nya dokument
  • Oberoende faktakontroll: en separat agent granskade varje konkret kodpåstående mot prisma/schema.prisma, AccountDeletionService.ts, export/my-data/route.ts, sentry.server.config.ts m.fl. -- hittade 3 sakfel + 4 saknade modeller, samtliga korrigerade innan denna PR (se ändringsloggarna i respektive dokument)
  • Pre-push-hook grön (docs-only, testar/typecheckar/lintar skippas per policy)

Kvarvarande mänskliga beslut

  • Personuppgiftsansvarig-fälten i gdpr-records-of-processing.md (bolagsnamn, org.nr, adress, DPO-beslut) är tomma -- kräver Johans input
  • DPA-status för samtliga 9 personuppgiftsbiträden är overifierad -- kräver att någon faktiskt kollar/accepterar respektive leverantörs DPA
  • Prioritering av gap-registret: vilka av de 15 luckorna (om några) som ska bli egna kodslices, och i vilken ordning
  • data_retention-flaggan: explicit INTE aktiverad som del av detta arbete -- irreversibel dataoperation på produktionsdata, kräver separat godkännande (RED-beslut)

Test plan

  • Läs igenom de tre dokumenten för sakriktighet
  • npm run docs:validate och npm run check:swedish körda lokalt

🤖 Generated with Claude Code

cola500 and others added 2 commits August 7, 2026 13:38
Första design-sync-körningen: Button, Badge, Card (+ delar), Input,
Label, Textarea, Checkbox, Switch, Skeleton synkade till Equinet-
projektet på claude.ai/design med riktiga previews och Tailwind-CSS.

Equinet saknar ett fristående komponentbibliotek-bygge, så synken
använder en handskriven barrel-entry (synth-entry.ts) + componentSrcMap
istället för .d.ts-baserad discovery, och en egen PostCSS-build
(build-css.mjs) för att generera CSS från globals.css. Kända gap
(saknat Inter-typsnitt, dolda Radix-tokens) dokumenterade i NOTES.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…ssorer, gap-register)

Kartlägger nuläget för GDPR-efterlevnad utan kodändringar: register över
behandlingsaktiviteter, register över personuppgiftsbiträden med DPA-status,
och ett prioriterat gap-register. Verifierat mot prisma/schema.prisma,
export/radering-koden och en oberoende faktakontrollsomgång -- besvarar den
tidigare öppna frågan i technical-risks.md (R19) om export/radering täcker
all data: nej, inte helt (se gap-registret).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
cola500 added a commit that referenced this pull request Aug 9, 2026
…ture-leverans

Registrerar docs/agent-operations/ (README, operativ modell, klistra-in-prompt)
i AGENTS.md, CLAUDE.md och docs/INDEX.md. Bygger på befintligt
stationsflöde/review-matris -- inga nya roller eller kvalitetsgrindar.
Verifierat i praktiken via GDPR-dokumentationsleveransen (PR #474).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant