← AXON · HR · EN

Working copy. Confirm the legal text with the controller (Leonard) or a lawyer before relying on it in production.

Privacy and GDPR

This text is a working draft. Legal content must be confirmed by the controller or a lawyer before you rely on it in production.

Public page: /privacy (session cookie axon_cookie_ok). Hub: Administration → GDPR (/admin/gdpr). Needs admin.gdpr.manage. The controller is the company you are signed into. Package: Enterprise/Full (feature gdpr).

Entry URL
GDPR hub /admin/gdpr
Public privacy /privacy
Public DSAR /privacy/dsar
DSAR status token /privacy/dsar/{token}
Compliance PDF /admin/gdpr/compliance.pdf
Contract verification /verify/contract/{token}

  1. Left Administration → GDPR.
  2. Record consent — subject type, ID, consent kind, optional note.
  3. The system binds the active published consent-text version (consent_document_id) if one exists.
  4. Revokeconsent_id + optional revoke reason.
Field Required What
subject_type Yes See subject table
subject_id Yes Record ID
consent_type Yes DATA_PROCESSING / MARKETING / LOYALTY / CARD / TERMS
note No Internal note

Subject types

Subject (subject_type) Example screen
partner /partners/{id}
employee /hr/employees/{id}
loyalty_member /crm/loyalty
rac_renter /rentacar/renters/{id}
crm_lead /crm/leads
crm_contact /crm/contacts
hos_guest /hospitality/guests/{id}

How to open a DSAR (export or erasure)

  1. On the hub Open DSAR — type ACCESS (export) or ERASURE.
  2. Fill subject, optional requester name/email, notes → Save. Status: OPEN.
  3. On ACCESS: Export JSON / ZIP / PDF (…/export.json, …/export.zip, …/export.pdf). Status → EXPORT_READY / COMPLETED; email when export is ready.
  4. ERASURE: Apply erasure (POST …/erase) — anonymises contacts, deletes subject attachments, revokes active consents. Journals stay.
  5. Table Who viewed the dossier — VIEW events from cards.

Fields — admin DSAR

Field Required What
subject_type / subject_id Yes Subject
request_type Yes ACCESS or ERASURE
requester_name / requester_email No Requester
notes No Note

Request statuses

Status Meaning
OPEN Open
EXPORT_READY Export ready to download
COMPLETED Finished (export or erasure)
REJECTED Rejected

What erasure does / does not

Does Does not delete
Anonymises contact fields Accounting journals
Deletes subject attachments Fiscal queue
Revokes active consents Legal archive
Partner: name → GDPR-{id}; tax ID kept Books / AR / GL

How to use public DSAR and cookies

  1. Subject opens /privacy/dsar.
  2. Enters company code or tax ID, name, email, personal tax ID, request type, notes + captcha (or Turnstile).
  3. Receives a status token; admin gets an email.
  4. When export is ready: download via the token URL.

Fields — public DSAR

Field Required What
company_code or company_oib One of Company identity
requester_name / requester_email Yes Requester
tax_number No Subject tax ID
request_type Yes ACCESS / ERASURE
notes No Note
Captcha / Turnstile Yes Anti-bot
website_url Honeypot Leave empty

How to maintain ROPA, breaches, DPO and retention

ROPA (processing activities)

POST /admin/gdpr/ropa

Field What
activity_code / title Code and title
purpose, data_categories, subject_categories Processing description
recipients, transfers, legal_basis Recipients / transfers / basis
retention_days 30–10950
security_measures, is_active Measures / active

Breach register

POST /admin/gdpr/breaches · mark authority notified: POST /admin/gdpr/breaches/{id}/authority-notified

Field What
incident_number, discovered_at, reported_at Identity / dates
severity LOW / MEDIUM / HIGH / CRITICAL
status OPEN / INVESTIGATING / CLOSED
affected_count, description, measures_taken Description
notified_authority, notified_subjects Notifications

DPO contact

POST /admin/gdpr/dpo-settings: gdpr_dpo_name, gdpr_dpo_email, gdpr_dpo_phone.

Retention

POST /admin/gdpr/retention: document_kind, keep_days (30–10950), is_active. Cleanup: php artisan axon:gdpr-retention (daily).

Kind Default days
partner_attachment 2555
employee_document 3650
onboarding_upload 3650
rac_attachment 1825
generated_document 3650

How to version consents and verify contracts (Phase 3)

  1. Versioned textsPOST /admin/gdpr/consent-documents: consent_type, version?, title, body_hr?, body_en?. A new version deactivates the old one; contract signatures bind consent_document_id.
  2. Public DSAR — see above (/privacy/dsar).
  3. Email when export is ready — after JSON/ZIP/PDF.
  4. Public contract verification/verify/contract/{token} — audit trail (MVP, not eIDAS).

How to run operational compliance (Phase 4A)

  1. DPO contact on the hub.
  2. Breach register + Authority notified button.
  3. Scheduler (see tools/SERVER_CRON.md):
    • axon:gdpr-breach-deadlines — DPO reminder
    • axon:gdpr-retention — attachment cleanup
    • axon:contract-expiry-notify — contracts (see /help/contracts)
  4. Audit pack/admin/gdpr/compliance.pdf (ROPA, consents, DSAR, breaches).

If it fails

Problem Cause What to do
Hub 403 No admin.gdpr.manage / package Enterprise+ + right
Empty export Wrong subject / no data Check type + ID
Erasure “keeps tax ID” Intentional Tax ID remains a business ID
Public DSAR throttle Too many attempts Wait; captcha
Retention does not clean Days / job Set keep_days + run artisan
No breach reminder No DPO email / cron DPO settings + scheduler
Empty compliance PDF No ROPA/consents Bootstrap or manual entry
Consent unbound to version No published text Publish consent document

Who

admin.gdpr.manage (or master-data admin, depending on assignment). Public DSAR without login (throttled).

What gets posted

Nothing. Books are never erased.