Skip to main content

GDPR & documente de identitate

Plugin-ul gestionează automat ciclul de viață al documentelor de identitate: stocare securizată, retenție cu ștergere automată, jurnalizarea accesului și integrarea cu instrumentele WordPress de export și ștergere a datelor personale.

Setarea timpului de retenție

În Dentisity → Setări, secțiunea Retenție acte identitate:

Câmpul de retenție documente de identitate din pagina de setări Dentisity, cu valoarea implicită 30 de zile
CâmpOpțiune WordPressImplicitDescriere
Retenție acte identitatedentisity_identity_doc_retention_days30Numărul de zile după încărcare în care documentul este păstrat pe server. 0 = dezactivat (nu se șterg niciodată automat).

Ștergerea automată rulează zilnic printr-un cron WordPress (dentisity_purge_expired_identity_docs). Cronul este programat automat la activarea plugin-ului și dezactivat la dezactivare.

Ștergere ireversibilă

Documentele șterse automat sau manual nu pot fi recuperate. Asigură-te că valoarea de retenție acoperă perioada necesară pentru procesarea completă a verificării.


Ce documente sunt acoperite

Sistemul de retenție acoperă două surse de documente de identitate:

1. Documentul din formularul de înregistrare

Încărcat obligatoriu de fiecare participant. Stocat ca identity_document_file în metadatele utilizatorului. Acesta este întotdeauna tratat ca document de identitate.

2. Documente din formularul de informații suplimentare

Câmpurile de tip Document din formularul de informații suplimentare sunt tratate ca acte de identitate doar dacă editorul sau moderatorul a bifat checkbox-ul „Act identitate" la construirea formularului.

Documentele care nu sunt marcate ca acte de identitate:

  • Nu intră în registrul de retenție
  • Nu sunt șterse automat de cron
  • Sunt șterse doar la ștergerea completă a contului sau la cererea GDPR de ștergere

Registrul de documente de identitate

Fiecare document marcat ca act de identitate este urmărit într-un registru per-utilizator (dentisity_identity_docs user meta).

Structura unui document din registru

{
"source": "registration | info_request",
"field_id": "f0",
"path": "/absolute/path/to/file.pdf",
"filename": "document-original.pdf",
"uploaded_at": 1751616000,
"purged_at": 0
}
CâmpDescriere
sourceregistration = formularul de înregistrare; info_request = formularul de informații suplimentare
field_idIdentificatorul câmpului din formularul de informații (gol pentru documentul din înregistrare)
pathCalea absolută pe server a fișierului
filenameNumele original al fișierului încărcat de participant
uploaded_atTimestamp Unix al încărcării — acesta este momentul de la care se calculează retenția
purged_at0 = document prezent; timestamp Unix = momentul ștergerii automate

Backfill pentru documente anterioare

Documentele încărcate înainte de implementarea registrului sunt migrate automat (dentisity_backfill_identity_docs) prima dată când sunt procesate de cron sau la export/ștergere. Data de încărcare se aproximează din user_registered (pentru documentul de înregistrare) sau din data trimiterii formularului (pentru cele din info-request).


Jurnalul de accesări

Fiecare vizualizare a unui document de identitate de către un administrator sau moderator este înregistrată automat.

Unde se stochează

Opțiunea WordPress dentisity_doc_access_log — un array la nivel de site (nu per-utilizator), care persistă chiar și după ștergerea contului participantului sau a documentului.

Structura unei intrări

{
"ts": 1751616000,
"user_id": 42,
"actor_id": 1,
"file": "document.pdf",
"path": "/absolute/path/to/document.pdf"
}
CâmpDescriere
tsTimestamp Unix al accesării
user_idID-ul participantului al cărui document a fost vizualizat
actor_idID-ul administratorului/moderatorului care a deschis documentul
fileNumele fișierului
pathCalea absolută (utilă pentru audit chiar și după ștergere)

Jurnalul este limitat la 5 000 de intrări. Cele mai vechi se elimină automat când se depășește limita.

Persistență garantată

Jurnalul de accesări este stocat ca opțiune WordPress (wp_options), nu ca metadată a utilizatorului. Ștergerea contului participantului, ștergerea documentului sau cererea GDPR de ștergere nu afectează acest jurnal.


Jurnalul de ștergeri (audit trail)

Fiecare ștergere de document (automată sau manuală) este înregistrată în dentisity_doc_purge_log.

Structura unei intrări

{
"ts": 1751616000,
"user_id": 42,
"file": "document.pdf",
"path": "/absolute/path/to/document.pdf",
"reason": "retention_30d",
"success": true
}
CâmpDescriere
reasonMotivul ștergerii — vezi tabelul de mai jos
successtrue = fișierul a fost eliminat cu succes; false = ștergerea a eșuat (permisiuni, fișier blocat)

Motive de ștergere

Valoare reasonDescriere
retention_30dȘtergere automată de către cronul de retenție (numărul reflectă zilele configurate)
privacy_eraseCerere GDPR de ștergere prin WordPress → Instrumente → Șterge date personale
account_deletedȘtergerea completă a contului WordPress
eraseȘtergere programatică generică
manualȘtergere manuală din cod (fallback)

Jurnalul de ștergeri persistă la fel ca cel de accesări — este o opțiune WordPress, nu metadată de utilizator. Limitat la 5 000 de intrări.

Diagnosticarea eșecurilor

Dacă success este false, cauza uzuală este o problemă de permisiuni pe directorul privat. Plugin-ul scrie detaliile erorii în error_log WordPress. Verifică fișierul de log al serverului pentru mesaje care conțin [Dentisity] Failed to unlink.


Procesul de ștergere automată (cronul de retenție)

Cronul WordPress dentisity_purge_expired_identity_docs rulează zilnic și execută:

  1. Citește valoarea dentisity_identity_doc_retention_days. Dacă este 0, se oprește.
  2. Calculează cutoff = now - (zile × 86400 secunde)
  3. Interogează toți utilizatorii care au dentisity_identity_docs sau identity_document_file în metadate
  4. Pentru fiecare utilizator, backfill-ul migrează documentele anterioare în registru
  5. Șterge de pe disk fiecare document cu uploaded_at < cutoff și purged_at = 0
  6. Marchează intrarea din registru cu purged_at = timestamp
  7. Curăță referințele: identity_document_file se golește; în dentisity_info_responses valoarea se înlocuiește cu [document șters — data]
  8. Scrie în jurnalul de ștergeri (dentisity_doc_purge_log)

Verificarea stării cronului

Din WP-CLI:

wp cron event list | grep dentisity_purge

Rulare manuală (testare):

wp cron event run dentisity_purge_expired_identity_docs

Exportul de date personale (WordPress)

La utilizarea WordPress → Instrumente → Exportă date personale, plugin-ul exportă următoarele secțiuni:

Secțiune exportCe conține
Cont & înregistrareData înregistrării, starea verificării emailului
Profil congresTip participant, universitate, specializare, an de studiu, telefon, date facturare
Verificare identitateStarea verificării, politica de retenție activă, lista completă a documentelor cu sursa (înregistrare/formular), data încărcării, statusul (prezent/șters + dată)
Jurnal accesări documenteFiecare administrator care a vizualizat documentele participantului, cu dată, nume și ID
Răspunsuri informații suplimentareToate răspunsurile trimise la formularele de informații, inclusiv numele fișierelor document
Pass-uriPass-ul curent, prețul de achiziție, ID-ul comenzii
Workshop-uri înscriseLista workshop-urilor la care participantul este înscris
Emailuri trimiseIstoricul emailurilor trimise de platformă către participant

Informații specifice documentelor de identitate

Exportul include pentru fiecare document:

  • Numele original al fișierului
  • Sursa: formularul de înregistrare sau formularul de informații
  • Data și ora exactă a încărcării
  • Statusul curent: prezent pe server sau șters automat + data ștergerii
  • Politica de retenție activă la momentul exportului

Ștergerea datelor personale (WordPress)

La utilizarea WordPress → Instrumente → Șterge date personale, plugin-ul:

Ce se șterge

  1. Toate documentele de identitate — fișierele de pe disk (registru + safety-net pentru documente neearmarked)
  2. Metadate personale — profil, verificare, OTP, info-request, note admin, email log
  3. Emailuri trimise — jurnalul per-utilizator
  4. Grupuri — participantul este scos din toate grupurile Dentisity (pass, workshop-uri, grup principal)
  5. Jurnal global de emailuri — intrările acestui utilizator sunt anonimizate (user_id, nume, email → gol)

Ce se păstrează

  • Date financiare — pass-uri achiziționate, prețuri, ID-uri comenzi, credite workshop (obligații contabile/fiscale)
  • Comenzi WooCommerce — nu sunt gestionate de plugin (WooCommerce are propriul eraser)
  • Jurnalul de accesări documente — persistă (opțiune WordPress, nu metadată utilizator)
  • Jurnalul de ștergeri documente — persistă
  • Contul WordPress — nu este șters sau anonimizat de acest eraser (pentru ștergere completă, șterge contul manual)

Structura datelor — referință rapidă

Opțiuni WordPress (wp_options)

CheieTipDescriere
dentisity_identity_doc_retention_daysintZile retenție; 0 = dezactivat
dentisity_doc_access_logarrayJurnal accesări documente (max 5 000)
dentisity_doc_purge_logarrayJurnal ștergeri documente (max 5 000)

Metadate utilizator (usermeta)

CheieTipDescriere
identity_document_filestringCalea fișierului document din înregistrare
identity_check_statusstringpending / approved / rejected / awaiting_info
dentisity_identity_docsarrayRegistrul complet de documente de identitate
dentisity_info_requestarrayDefiniția câmpurilor formularului de informații
dentisity_info_responsesarrayRăspunsurile trimise la formularul de informații

Cron WordPress

HookFrecvențăDescriere
dentisity_purge_expired_identity_docsZilnicȘterge documentele de identitate cu retenția expirată

Funcții PHP principale

FuncțieDescriere
dentisity_identity_doc_retention_days()Returnează numărul de zile de retenție configurat
dentisity_get_identity_docs( $user_id )Returnează registrul de documente al unui utilizator
dentisity_register_identity_doc( ... )Adaugă un document în registru
dentisity_backfill_identity_docs( $user_id )Migrează documente anterioare în registru
dentisity_purge_identity_document( $user_id, $path, $reason )Șterge un document de pe disk și marchează în registru
dentisity_purge_all_identity_docs( $user_id, $reason )Șterge toate documentele unui utilizator
dentisity_log_doc_access( $user_id, $path )Înregistrează o accesare de document
dentisity_log_doc_purge( $user_id, $path, $reason, $success )Înregistrează o ștergere de document
dentisity_run_identity_doc_retention()Funcția executată de cronul zilnic