MÓDULO 6 · OBSERVABILIDAD · LECCIÓN 08 · 25 MIN

PII y soberanía del dato

Instrumentar es enviar a un tercero el texto exacto que escribió tu usuario. La pregunta no es si viaja cifrado — viaja cifrado siempre — sino qué contiene ese JSON y en qué jurisdicción se queda.
01 — Tres capas independientes
Seguridad de transporte no es privacidad del dato
Qué protegeQué NO protege
HTTPSQue nadie lea el tráfico por el caminoLo que hay dentro del JSON, ni dónde acaba almacenado
AnonimizaciónEl contenido: nombres, correos, teléfonosLa ubicación del servidor ni quién puede consultarlo
AutoalojamientoDónde vive el dato y quién lo custodiaLo que registras: si mandas el DNI, se guarda igual

"Usamos HTTPS" no es una respuesta a "¿dónde acaban los datos de mis pacientes?", y "está en nuestro servidor" no es una respuesta a "¿por qué hay un correo electrónico en esa traza?".

02 — Dos palancas
Se combinan según el requisito
Dónde vive el servidor
LangFuse es open source y se despliega en tu infraestructura; el cliente solo cambia de host. Resuelve soberanía: el dato no sale de tu red.
Qué contiene el payload
Limpiar los datos en el cliente antes de enviarlos. Resuelve el contenido, no la ubicación.
// un banco con compliance suele necesitar las dos. Una startup con datos poco sensibles puede vivir solo con la segunda.
03 — Privacy by design
El orden importa más que la técnica
usuario → sanitizar → traza    ✓ nunca existió fuera
usuario → traza → borrar después   ✗ ya salió

Una vez el dato ha salido de la memoria de tu proceso, "borrarlo" es un trámite con un tercero, con su ventana temporal, sus copias de seguridad y su registro. Límpialo antes de que salga.

04 — No es automático
El mismo fallo que el callback, con otro precio
Del troubleshooting de la guía
"Los datos siguen apareciendo en el dashboard → olvidaste llamar a la función de anonimizar antes de pasar los argumentos."

Es el mismo patrón que el CallbackHandler: algo que hay que acordarse de hacer en cada punto de llamada. Aquí el precio de olvidarlo no es una traza que falta, es un dato personal publicado. Así que no lo dejes como una llamada suelta que cada quien recuerda: que sea un único punto de estrangulamiento — una función envoltorio por la que pase todo, o el mecanismo de enmascarado del propio SDK si lo tiene — para que no se pueda olvidar.

05 — Los límites de una regex
Lo que la de la guía deja pasar
re.sub(r'[\w\.-]+@[\w\.-]+', '[EMAIL_REDACTED]', texto)
re.sub(r'\b\d{9}\b',         '[PHONE_REDACTED]', texto)

La segunda solo caza nueve dígitos seguidos. No caza 666 77 78 88, ni +34 666777888, ni 666-777-888, pese a que el comentario del código dice "formatos variados". La primera funciona, pero se lleva por delante el punto final de la frase si el correo va justo antes.

Y lo que ninguna regex caza: nombres propios, direcciones postales, números de historia clínica, fechas de nacimiento en texto libre. Por eso la propia guía remite a librerías especializadas de detección de PII para producción. Ese consejo no es opcional.

Auditoría

La validación está escrita para pasar. La cadena de prueba del ejemplo es "Contacta a Juan en juan@empresa.com o al 666777888.". El teléfono tiene exactamente nueve dígitos seguidos, que es justo lo único que la regex detecta, y la validación consiste en comprobar que el correo se sustituye. Un caso de prueba construido a la medida de la solución no prueba nada: mide si la regex hace lo que ya sabemos que hace, no si protege al usuario. Escribe tú los casos que deberían romperla.

metadata={"compliance": "GDPR_OK"}. La traza "segura" del ejemplo se etiqueta a sí misma como conforme al RGPD. Nadie ha verificado nada: es una cadena de texto que el propio código se autoconcede. Y no es inocuo — una etiqueta así en producción es exactamente lo que aparece en una auditoría, y afirma algo que la regex de al lado no sostiene. Si vas a etiquetar el tratamiento de un dato, que la etiqueta describa lo que hiciste — qué se enmascaró y con qué —, no una conclusión legal que no te corresponde firmar.

06 — Ahora tú
Cuenta cuántas se escapan

Coge las dos expresiones regulares tal cual y pásales esta lista:

666 77 78 88
+34 666777888
666-777-888
Mi correo es ana@empresa.com.
Paciente: María López, nacida el 3 de mayo de 1978

Cuenta cuántas de las cinco líneas dejan escapar un dato personal. Ese número, escrito al lado de la frase "hemos anonimizado los datos", es la diferencia entre una medida de protección y una casilla marcada.