tecsas3-cli aplica redacción de PHI (Protected Health Information) en logs stderr y en cualquier payload que pueda filtrar a un canal no seguro. La capa de redacción vive en cli/src/tecsas3_cli/redaction.py y se activa por defecto — la única manera de desactivarla es combinar --debug con --redact-phi=false, uso estrictamente reservado a depuración local.
Los criterios de redacción se alinean con HIPAA (Safe Harbor), GDPR (Art. 4 y 32) y la Ley 1581 de 2012 de Colombia (Habeas Data) para datos de salud.
Campos redactados
La redacción opera en dos niveles: por clave (reemplaza el valor cuando la clave es sensible) y por patrón (reemplaza substrings en strings libres como logs).Redacción por clave (PHI_KEYS)
Cualquier dict (incluso anidado) cuyas claves coincidan con la siguiente lista tendrá su valor reemplazado por [REDACTED]. La comparación es case-insensitive.
Redacción por patrón (redact_blob)
Para strings libres (logs, trazas, mensajes de error), tres regex buscan y reemplazan por [REDACTED]:
Configuración y flags
El log stderr sólo se emite cuando
debug=True. Aun así, el body se redacta con redact_blob(...) antes de imprimirse:
API de redacción
Tres funciones públicas entecsas3_cli.redaction:
redact_value sólo aplica a claves listadas en PHI_KEYS y nunca toca valores None o "" (no hay información que filtrar).
Desactivación explícita (sólo depuración)
Buenas prácticas
- No desactivar la redacción para “ver mejor el error” — pedir al backend un
request_idy consultar los logs del servidor, que tienen redacción equivalente. - No loguear
redact_dict(...)a archivos compartidos — la salida ya está redactada, pero los archivos pueden tener permisos laxos. - En CI, fija
TECSAS3_DEBUG=0y, si necesitas trazabilidad, exporta los logs a un sistema central con redacción adicional en el colector. - Audita periódicamente los logs locales con un grep por patrones conocidos (
\b\d{6,12}\b,@) para detectar regresiones.
Verificación rápida
Troubleshooting
Sigo viendo PHI en stderr
Si la regex no capturó el patrón (por ejemplo, una cédula con guiones tipo 52-123-456), reporta el caso. La capa de redacción se actualiza periódicamente. Mientras tanto, no publiques el log.
--redact-phi=false no surte efecto
La desactivación sólo aplica a la impresión en stderr del log de debug. La salida por stdout (--json, --format yaml/csv) sigue pasando por la capa de redacción cuando el recurso la aplica. Verifica con:
Una clave nueva debería ser PHI
Si añades un campo nuevo a un recurso y quieres que se redacte, agrégalo aPHI_KEYS en cli/src/tecsas3_cli/redaction.py. La lista está versionada en git.
pip install -e .) y verifica:
Logs centralizados en ELK / Loki
Si reenvíasstderr a un colector, aplica una segunda capa de redacción allí también (Logstash filter, Promtail pipeline stage). El CLI no garantiza la redacción en la cadena de transporte.
Auditoría periódica
Patrones de uso
Redacción en recursos propios
Si estás escribiendo un recurso nuevo encli/src/tecsas3_cli/resources/, llama a redact_dict antes de pasar el payload al Output:
Redacción en logs de aplicación propios
Si extiendes el CLI con código propio, usaredact_blob para cualquier string libre antes de mandarlo a print(..., file=sys.stderr) o a un logger:
Redacción selectiva por comando
Si necesitas desactivar la redacción para un único comando (sólo en dev), exporta la variable antes de invocar:Combinación con --debug
--debug activa el log stderr; redact_phi aplica a ese log. La combinación por defecto es segura: el log sale redactado. La única forma de “ver” el body crudo es --debug --redact-phi=false, que requiere la firma de un humano y un entorno aislado.
Siguientes pasos
- Aprende la tabla de exit codes para enrutar errores sin filtrar PHI a logs externos.
- Configura correctamente la autenticación y los perfiles por entorno.
- Profundiza en los formatos de salida deterministas para agentes.