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âmp | Opțiune WordPress | Implicit | Descriere |
|---|---|---|---|
| Retenție acte identitate | dentisity_identity_doc_retention_days | 30 | Numă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.
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âmp | Descriere |
|---|---|
source | registration = formularul de înregistrare; info_request = formularul de informații suplimentare |
field_id | Identificatorul câmpului din formularul de informații (gol pentru documentul din înregistrare) |
path | Calea absolută pe server a fișierului |
filename | Numele original al fișierului încărcat de participant |
uploaded_at | Timestamp Unix al încărcării — acesta este momentul de la care se calculează retenția |
purged_at | 0 = 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âmp | Descriere |
|---|---|
ts | Timestamp Unix al accesării |
user_id | ID-ul participantului al cărui document a fost vizualizat |
actor_id | ID-ul administratorului/moderatorului care a deschis documentul |
file | Numele fișierului |
path | Calea 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.
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âmp | Descriere |
|---|---|
reason | Motivul ștergerii — vezi tabelul de mai jos |
success | true = fișierul a fost eliminat cu succes; false = ștergerea a eșuat (permisiuni, fișier blocat) |
Motive de ștergere
Valoare reason | Descriere |
|---|---|
retention_30d | Ștergere automată de către cronul de retenție (numărul reflectă zilele configurate) |
privacy_erase | Cerere 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.
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ă:
- Citește valoarea
dentisity_identity_doc_retention_days. Dacă este0, se oprește. - Calculează cutoff =
now - (zile × 86400 secunde) - Interogează toți utilizatorii care au
dentisity_identity_docssauidentity_document_fileîn metadate - Pentru fiecare utilizator, backfill-ul migrează documentele anterioare în registru
- Șterge de pe disk fiecare document cu
uploaded_at < cutoffșipurged_at = 0 - Marchează intrarea din registru cu
purged_at = timestamp - Curăță referințele:
identity_document_filese golește; îndentisity_info_responsesvaloarea se înlocuiește cu[document șters — data] - 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 export | Ce conține |
|---|---|
| Cont & înregistrare | Data înregistrării, starea verificării emailului |
| Profil congres | Tip participant, universitate, specializare, an de studiu, telefon, date facturare |
| Verificare identitate | Starea 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 documente | Fiecare administrator care a vizualizat documentele participantului, cu dată, nume și ID |
| Răspunsuri informații suplimentare | Toate răspunsurile trimise la formularele de informații, inclusiv numele fișierelor document |
| Pass-uri | Pass-ul curent, prețul de achiziție, ID-ul comenzii |
| Workshop-uri înscrise | Lista workshop-urilor la care participantul este înscris |
| Emailuri trimise | Istoricul 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
- Toate documentele de identitate — fișierele de pe disk (registru + safety-net pentru documente neearmarked)
- Metadate personale — profil, verificare, OTP, info-request, note admin, email log
- Emailuri trimise — jurnalul per-utilizator
- Grupuri — participantul este scos din toate grupurile Dentisity (pass, workshop-uri, grup principal)
- 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)
| Cheie | Tip | Descriere |
|---|---|---|
dentisity_identity_doc_retention_days | int | Zile retenție; 0 = dezactivat |
dentisity_doc_access_log | array | Jurnal accesări documente (max 5 000) |
dentisity_doc_purge_log | array | Jurnal ștergeri documente (max 5 000) |
Metadate utilizator (usermeta)
| Cheie | Tip | Descriere |
|---|---|---|
identity_document_file | string | Calea fișierului document din înregistrare |
identity_check_status | string | pending / approved / rejected / awaiting_info |
dentisity_identity_docs | array | Registrul complet de documente de identitate |
dentisity_info_request | array | Definiția câmpurilor formularului de informații |
dentisity_info_responses | array | Răspunsurile trimise la formularul de informații |
Cron WordPress
| Hook | Frecvență | Descriere |
|---|---|---|
dentisity_purge_expired_identity_docs | Zilnic | Șterge documentele de identitate cu retenția expirată |
Funcții PHP principale
| Funcție | Descriere |
|---|---|
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 |