El CLI 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]:
Los logs que el CLI emite a stderr (método, URL, status, hasta 500 bytes del body de respuesta) se redactan siempre, incluso sin --debug. La redacción por clave y por patrón se aplica en cadena. Si en algún caso ves un valor crudo en stderr, repórtalo como incidente de seguridad con un request_id reproducible.

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 en tecsas3_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)

--redact-phi=false debe combinarse únicamente con --debug en entornos de desarrollo aislados. Su uso en producción, staging o pipelines compartidos es una violación de las políticas de protección de datos y debe activar alertas en el SIEM.

Buenas prácticas

  • No desactivar la redacción para “ver mejor el error” — pedir al backend un request_id y 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=0 y, 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 a PHI_KEYS en cli/src/tecsas3_cli/redaction.py. La lista está versionada en git.
Después de modificar, reinstala el paquete (pip install -e .) y verifica:

Logs centralizados en ELK / Loki

Si reenvías stderr 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 en cli/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, usa redact_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