La página de privacidad orientada al usuario para Transforma mi rol. Qué leemos, qué descartamos, qué contiene una fila de auditoría, por qué un ID de sesión anónima es pseudonímico, y cómo funcionan guardar y borrar la cuenta.
Por sesión se escribe una única fila sin contenido en la tabla transform_ingestions. Su propósito es operacional: nos permite responder "¿cuántas sesiones se completaron exitosamente hoy, en qué jurisdicciones, en qué locales?" sin registrar jamás una descripción de empleo.
Esa es la lista completa. La migración que crea esta tabla tiene cero columnas que pudieran cargar contenido de descripción de empleo. Una prueba de integración enumera una lista de columnas prohibidas y falla el CI si alguna columna nueva se parece a contenido de JD.
Cada sesión de Transforma mi rol genera un UUID aleatorio — el ID de sesión. El ID es pseudonímico: se genera por sesión, nunca se vincula a una huella digital, nunca se deriva de un identificador, y nunca se reutiliza entre sesiones. Una sesión nueva produce un UUID nuevo.
Cuando inicias sesión a mitad de la sesión o guardas el plan, tu user_id se registra en la fila de auditoría y en cualquier plan guardado; antes del inicio de sesión, la sesión es totalmente anónima. El ID de sesión no es por sí mismo identificador — es un handle interno para el almacén de sesión en memoria.
Persistencia cero. El texto cruza por la extracción y se descarta inmediatamente. Ningún archivo temporal, ninguna entrada de log, ninguna fila de base contiene el texto.
Tope estricto de 60 minutos. Los bytes pasan por un camino de procesamiento efímero en memoria; si llega a usarse un fallback de archivo temporal, una barrida aplica el límite de 60 minutos. Después de 60 minutos los bytes se garantizan eliminados, independientemente del estado del pipeline.
Guardar es solo para registrados. La acción de guardar persiste las características estructuradas — el sobre de candidatos extraídos, la resolución del mapeo, la salida de síntesis de brecha, el paquete del plan — en la tabla saved_transform_plans, indexada por tu ID de usuario. No persiste la descripción del empleo, la URL, los bytes subidos, el nombre del archivo ni ningún otro campo con forma de contenido.
Un refinamiento zod defensivo rechaza cualquier payload que cargue claves con forma de contenido al momento de escribir, independientemente de cómo se haya construido la llamada. Si un futuro camino de código intentara colar un campo 'jdText' o 'pasteContent' por el endpoint de guardado, la escritura fallaría con un error de contrato de privacidad.
Si suscribes un plan guardado a notificaciones de cambio, el resumen diario se envía al correo de tu cuenta. El correo lista los títulos de tus propios planes guardados que cambiaron — se entrega solo a ti, el dueño del plan. Nunca registramos el correo del destinatario ni el contenido de ningún plan guardado; un envío que falla se registra solo con el identificador de la suscripción y el tipo de error. Cada resumen tiene un enlace de cancelación con un solo clic, y cancelar la suscripción elimina el registro de la suscripción por completo.
Los modos pegar-texto y subida están protegidos por un tickbox explícito de reconocimiento de derechos. El tickbox afirma que tienes los derechos para compartir el contenido — típicamente porque lo redactaste, fue publicado para distribución general o tu empleador lo permite. El modo obtención de URL no está protegido por tickbox porque la obtención ocurre contra la web pública respetando robots.txt. El tickbox en sí no se persiste como contenido; solo se registra mode='upload' o mode='text-paste' en la fila de auditoría.
Los planes guardados y las suscripciones a avisos de cambio cascadean al eliminar el usuario (ON DELETE CASCADE). Si borras tu cuenta, cada fila que referencia tu user_id en saved_transform_plans y transform_plan_subscriptions se elimina con la cuenta.
Las filas de auditoría se comportan distinto: user_id es nullable con ON DELETE SET NULL. La fila operacional se preserva (para que el análisis agregado por jurisdicción siga funcionando), pero su vínculo con tu identidad se pierde — la fila se anonimiza, no se elimina. Si necesitas que la fila de auditoría también se elimine, contacta a soporte.
El panel del agente curado en la vista del plan responde preguntas a partir de un contexto pre-construido solo con los candidatos estructurados. El contexto del agente nunca carga la descripción del empleo, la URL ni los bytes subidos — esto se verifica en las 30 conversaciones de muestra curadas que vienen con la superficie (10 cada una en EN / pt-BR / FR). El panel renderiza un indicador "Esta conversación no se guarda"; si inicias sesión y guardas el plan, el indicador cambia a "Guardado en tu cuenta; la descripción del empleo no se conserva".
Un scrubber de logs compatible con Pino quita cualquier nombre de campo que parezca contenido (jdText, jdUrl, jdMarkdown, uploadBytes, rawJd, sourceUrl, extractedText, uploadFilename, más 9 formas de sustantivo agregadas durante la revisión de privacidad/legal) y redacta cadenas con forma de URL en campos de texto libre antes de que los logs salgan de la solicitud. Es opt-in para la superficie de Transforma mi rol — el scrubber no enmascara campos de URL legítimos en otras partes del código.