Ga naar inhoud

Data model — wat we wel/niet bewaren

Per pull-cycle vervangen we de hele snapshot van een org.

Veld Bron Hashed?
openai_user_id user_... (OpenAI ID) nee
email_hash SHA256(lowercase email) ✓
email_prefix Eerste 4 chars vóór @ + ‘…’ partial
role “owner” / “reader” nee
added_at Unix → TIMESTAMPTZ nee
Veld Bron Hashed?
openai_project_id proj_... nee
name Operator-supplied label nee
status “active” / “archived” nee
created_at_openai Unix → TIMESTAMPTZ nee
archived_at Unix → TIMESTAMPTZ nee
Veld Bron Hashed?
openai_key_id key_... nee
name Operator label nee
type “user” / “service_account” nee
redacted_value sk-...xxxx (laatste 4 chars) partial
owner_user_id Voor user-keys: user_... nee
created_at_openai Unix → TIMESTAMPTZ nee
last_used_at Unix → TIMESTAMPTZ of NULL nee

Append-only. Idempotent op (connection_id, openai_event_id).

Veld Bron Hashed?
openai_event_id OpenAI’s id (audit_log_…) nee
event_type OpenAI’s type field nee
actor_email_hash SHA256(lowercase actor.session.user.email) ✓
actor_email_prefix Eerste 4 chars + ‘…’ partial
target_id project.id (als event over project gaat) nee
occurred_at OpenAI’s effective_at (Unix) nee
payload_json Rest van de payload, PII-velden gedropt partial

Volgende keys worden uit de raw payload gedropt voor opslag (isOpenAIPIIField in openai_worker.go):

  • actor, user, email, actor_email, session — al opgeslagen als hash
  • name, full_name — display-namen
  • Volledige e-mailadressen — gedropt bij ingest
  • De volledige API-key value — alleen sk-...4-char-redacted (de echte value heeft alleen OpenAI; wij krijgen die NIET via de API)
  • Wat een API-key heeft aangeroepen — last_used_at is het enige usage signal; OpenAI exposeert geen per-key request log
  • Prompt/completion content — niet in admin API
  • ChatGPT browser-conversaties — vereist Compliance API (Q4 2026)

Het email_prefix veld toont jan… voor jan.peeters@company.be. Match dit prefix met je HR-systeem of LDAP/Azure AD om te weten wie het is. Wij hebben de mapping niet en willen die niet hebben.