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