- Investigacion: Anonimizacion de Estudios y Tratamientos para Enriquecimiento de Catalogos
- 1. Resumen Ejecutivo
- 2. Tipos de Datos Cubiertos
- 3. Datos que SI se Envian (Anonimizados)
- 4. Datos que NUNCA se Envian
- 5. Tecnicas de Anonimizacion
- 6. Umbrales de Seguridad
- 7. Flujo de Anonimizacion
- 8. Casos Especiales
- 9. Validacion y Auditoria
- 10. Cumplimiento Regulatorio
- 11. Implementacion
- 12. Referencias
Investigacion: Anonimizacion de Estudios y Tratamientos para Enriquecimiento de Catalogos¶
Identificador: MTS-INV-011 Version: 1.0.0 Fecha: 2025-12-07 Autor: SpecQueen Solicitado por: Director del Proyecto Estado: Completado
1. Resumen Ejecutivo¶
Esta investigacion define el proceso de anonimizacion para datos de estudios clinicos y tratamientos que los usuarios ingresan en MedTime, permitiendo enriquecer el catalogo publico de estudios (MTS-EST-001) sin comprometer la privacidad del usuario.
1.1. Concepto Clave: Separacion de Identidad¶
PRINCIPIO FUNDAMENTAL: MedTime usaseparacion de identidad, NO generalizacion a categorias. - SI se envian: Nombres especificos de estudios, resultados en rangos (bucketing), tratamientos - NO se envian: user_id, email, device_id, IP, timestamps exactos, valores exactos de resultados
1.2. Consentimiento Obligatorio¶
IMPORTANTE: Para usuarios CON cuenta, el consentimiento para el tratamiento de datos anonimizados es OBLIGATORIO y requisito para usar la aplicacion (no es opt-in).
- Usuario SIN cuenta: Puede usar app localmente sin consentimiento
- Usuario CON cuenta: DEBE consentir el tratamiento de datos anonimizados
2. Tipos de Datos Cubiertos¶
2.1. Estudios de Laboratorio¶
| Categoria | Ejemplos | Sensibilidad |
|---|---|---|
| Hematologia | BHC, hemoglobina, plaquetas, VSG | PHI Indirecto |
| Quimica Clinica | Glucosa, perfil lipidico, creatinina, PFH | PHI Indirecto |
| Inmunologia | ANA, PCR, VIH, Hepatitis | PHI Directo (Alto) |
| Perfil Hormonal | TSH, T3, T4, cortisol, testosterona | PHI Indirecto |
| Coagulacion | TP/INR, TTP, fibrinogeno | PHI Indirecto |
| Uroananalisis | EGO, urocultivo, proteinas 24h | PHI Indirecto |
2.2. Estudios de Imagen¶
| Categoria | Ejemplos | Sensibilidad |
|---|---|---|
| Radiografia | Torax, columna, mamografia | PHI Indirecto |
| Ultrasonido | Abdominal, pelvico, obstetrico | PHI Directo (si obstetrico) |
| Tomografia | Craneo, torax, abdomen | PHI Indirecto |
| Resonancia | Cerebral, columna, articulaciones | PHI Indirecto |
| Medicina Nuclear | PET-CT, gammagrama | PHI Indirecto |
2.3. Tratamientos¶
| Categoria | Ejemplos | Sensibilidad |
|---|---|---|
| Dialisis | Hemodialisis, dialisis peritoneal | PHI Directo |
| Oncologicos | Quimioterapia, radioterapia | PHI Directo |
| Infusiones | Hierro IV, biologicos | PHI Indirecto |
| Fisioterapia | Rehabilitacion, hidroterapia | PHI Bajo |
| Salud Mental | Psicoterapia, TMS | PHI Directo |
3. Datos que SI se Envian (Anonimizados)¶
3.1. Estudios de Laboratorio¶
interface EstudioLaboratorioAnonimo {
// Identificador de sesion efimero
session_token: string; // 32 bytes aleatorios, nuevo cada sesion
// Datos del estudio (SI se envian)
nombre_estudio: string; // "Glucosa en ayunas" (especifico)
codigo_loinc: string; // "2345-7" (estandar)
// Resultado en RANGO (bucketing)
resultado_rango: string; // "140-150 mg/dL" (NO valor exacto)
unidad: string; // "mg/dL"
interpretacion: string; // "ELEVADO" | "NORMAL" | "BAJO"
// Metadata generalizada
region: string; // "Centro Mexico" (NO ciudad exacta)
periodo: string; // "2025-12" (solo mes/año)
rango_edad: string; // "40-50" (NO edad exacta)
sexo: string; // "M" | "F" (si relevante para interpretacion)
}
3.2. Tratamientos¶
interface TratamientoAnonimo {
session_token: string;
// Datos del tratamiento (SI se envian)
nombre_tratamiento: string; // "Hemodialisis" (especifico)
codigo_icd10pcs: string; // Codigo estandar
frecuencia: string; // "3 veces/semana"
// Metadata generalizada
region: string;
periodo: string;
rango_edad: string;
}
3.3. Reglas de Bucketing para Resultados¶
| Parametro | Buckets | Ejemplo |
|---|---|---|
| Glucosa | 10 mg/dL | 145 → "140-150" |
| Colesterol Total | 20 mg/dL | 215 → "200-220" |
| Hemoglobina | 0.5 g/dL | 12.3 → "12.0-12.5" |
| TSH | 0.5 mUI/L | 2.8 → "2.5-3.0" |
| Creatinina | 0.2 mg/dL | 1.3 → "1.2-1.4" |
4. Datos que NUNCA se Envian¶
| Dato | Razon |
|---|---|
| user_id | Identificador directo |
| Identificador directo | |
| device_id | Identificador de dispositivo |
| IP | Identificador de red |
| Timestamp exacto | Permite correlacion temporal |
| Valor exacto de resultado | Puede ser unico/identificable |
| Nombre del laboratorio | Puede reducir anonimato |
| Nombre del medico | PHI de tercero |
| Diagnostico asociado | PHI directo |
| Notas/comentarios del usuario | Texto libre puede contener PHI |
5. Tecnicas de Anonimizacion¶
5.1. Bucketing de Valores Numericos¶
El bucketing convierte valores exactos en rangos, reduciendo la precision pero manteniendo utilidad estadistica.
# PSEUDOCODIGO - Bucketing de resultados
def bucketizar_resultado(valor: float, parametro: str) -> str:
"""
Convierte valor exacto a rango.
"""
BUCKETS = {
"glucosa": 10, # Buckets de 10 mg/dL
"colesterol": 20, # Buckets de 20 mg/dL
"hemoglobina": 0.5, # Buckets de 0.5 g/dL
"tsh": 0.5, # Buckets de 0.5 mUI/L
"creatinina": 0.2, # Buckets de 0.2 mg/dL
}
bucket_size = BUCKETS.get(parametro, 10) # Default 10
lower = (valor // bucket_size) * bucket_size
upper = lower + bucket_size
return f"{lower}-{upper}" # "140-150"
5.2. Supresion por Rareza¶
Estudios raros (< 1000 usuarios globales) NO se reportan para evitar re-identificacion.
# PSEUDOCODIGO - Supresion de estudios raros
FRECUENCIAS_GLOBALES = cargar_frecuencias()
K_MINIMO = 1000
def debe_reportar(nombre_estudio: str) -> bool:
freq = FRECUENCIAS_GLOBALES.get(nombre_estudio, 0)
return freq >= K_MINIMO
5.3. Generalizacion Temporal¶
Los timestamps exactos se generalizan a periodo (mes/año).
# "2025-12-07T10:30:00Z" → "2025-12"
def generalizar_timestamp(ts: datetime) -> str:
return ts.strftime("%Y-%m")
5.4. Generalizacion Geografica¶
La ubicacion exacta se generaliza a region.
REGIONES = {
"CDMX": "Centro Mexico",
"Estado de Mexico": "Centro Mexico",
"Monterrey": "Norte Mexico",
"Guadalajara": "Occidente Mexico",
# ...
}
def generalizar_region(ciudad: str) -> str:
return REGIONES.get(ciudad, "Mexico")
6. Umbrales de Seguridad¶
6.1. K-Anonymity¶
| Parametro | Umbral | Descripcion |
|---|---|---|
| k-anonymity minimo | 1000 | Cada combinacion debe tener >= 1000 usuarios |
| Estudio raro | < 1000 usuarios | NO reportar |
| Combinacion rara | < 500 usuarios | Generalizar o suprimir |
6.2. Rangos de Edad¶
| Rango | Descripcion |
|---|---|
| 0-18 | Pediatrico |
| 19-30 | Adulto joven |
| 31-40 | Adulto |
| 41-50 | Adulto medio |
| 51-60 | Adulto mayor |
| 61-70 | Tercera edad |
| 71+ | Anciano |
7. Flujo de Anonimizacion¶
DISPOSITIVO (Usuario) SERVIDOR (MedTime)
+---------------------------+ +---------------------------+
| Usuario ingresa resultado | | |
| Glucosa: 147 mg/dL | | |
| Fecha: 2025-12-07 10:30 | | |
| Ciudad: CDMX | | |
+------------+--------------+ | |
| | |
v | |
+---------------------------+ | |
| ANONIMIZADOR LOCAL | | |
| | | |
| 1. Bucketizar: 140-150 | | |
| 2. Generalizar fecha: | | |
| 2025-12 | | |
| 3. Generalizar region: | | |
| Centro Mexico | | |
| 4. Verificar k >= 1000 | | |
| 5. Generar session_token | | |
| (efimero, no vinculado)| | |
+------------+--------------+ | |
| | |
| Datos anonimizados | |
v v |
+---------------------------+ +---------------------------+ |
| PAQUETE ANONIMO |---->| SERVIDOR RECIBE | |
| | | | |
| session_token: a7f2... | | Procesa SIN saber: | |
| estudio: "Glucosa ayunas" | | - Quien es el usuario | |
| resultado: "140-150" | | - Valor exacto (147) | |
| region: "Centro Mexico" | | - Fecha exacta | |
| periodo: "2025-12" | | - Ciudad exacta | |
+---------------------------+ +---------------------------+ |
| |
v |
+---------------------------+ |
| CATALOGO ENRIQUECIDO | |
| | |
| "Glucosa 140-150 reportada| |
| en Centro Mexico, | |
| Dic 2025, adultos 40-50" | |
+---------------------------+ |
8. Casos Especiales¶
8.1. Estudios de Alto Riesgo (PHI Directo)¶
Para estudios que revelan condiciones sensibles (VIH, enfermedades mentales, oncologia):
| Estudio | Tratamiento Especial |
|---|---|
| VIH/SIDA | NO reportar resultado, solo existencia con k >= 5000 |
| Enfermedades ETS | NO reportar, solo estadisticas nacionales |
| Psiquiatricos | Generalizar a "Salud Mental" |
| Oncologicos | Generalizar tipo de cancer a "Oncologico" |
| Geneticos | NO reportar nunca |
8.2. Tratamientos de Alto Riesgo¶
| Tratamiento | Tratamiento Especial |
|---|---|
| Quimioterapia | Generalizar a "Tratamiento oncologico" |
| Dialisis | Reportar solo si k >= 2000 |
| Psicoterapia | Generalizar a "Salud mental" |
| Tratamiento VIH | NO reportar nunca |
8.3. Embarazo y Fertilidad¶
Estudios obstetricos y de fertilidad requieren tratamiento especial:
- Generalizar a categoria "Salud reproductiva"
- NO reportar resultados especificos
- Solo estadisticas agregadas con k >= 5000
9. Validacion y Auditoria¶
9.1. Pruebas de Re-identificacion¶
# PSEUDOCODIGO - Prueba de re-identificacion
def test_reidentificacion(datos_anonimizados, conocimiento_auxiliar):
"""
Umbral: < 0.1% tasa de exito
"""
exitos = 0
for registro in datos_anonimizados:
candidatos = buscar_match(registro, conocimiento_auxiliar)
if len(candidatos) == 1:
exitos += 1
tasa = exitos / len(datos_anonimizados)
assert tasa < 0.001, f"Tasa muy alta: {tasa}"
9.2. Auditorias Periodicas¶
| Tipo | Frecuencia | Responsable |
|---|---|---|
| Automatizada | Continua | Sistema |
| Interna | Mensual | Equipo Seguridad |
| Externa | Trimestral | Auditor independiente |
| Regulatoria | Anual | Autoridad (INAI sucesor) |
10. Cumplimiento Regulatorio¶
10.1. Mapeo a Regulaciones¶
| Regulacion | Requisito | Cumplimiento |
|---|---|---|
| LFPDPPP | Disociacion de datos | Bucketing + supresion identificadores |
| LGPD | Anonimizacao | Separacion de identidad |
| HIPAA | De-identification | Eliminacion 18 identificadores + bucketing |
| GDPR | Anonymisation | Datos no vinculables a persona |
10.2. Documentacion Requerida¶
- Privacy Impact Assessment (PIA): Anual
- Registro de consentimientos: Continuo
- Logs de anonimizacion: 90 dias
- Auditorias: Archivo 7 años
11. Implementacion¶
11.1. Checklist¶
FASE 1: INFRAESTRUCTURA
[ ] Implementar bucketizador para cada parametro de laboratorio
[ ] Configurar tablas de frecuencias globales
[ ] Implementar generador de session_token efimero
[ ] Crear generalizador de region y timestamp
FASE 2: INTEGRACION
[ ] Integrar anonimizador en MTS-ANA-001 (Analisis Clinicos)
[ ] Integrar en MTS-EST-001 (Estudios y Tratamientos)
[ ] Configurar batch processing para envios
FASE 3: VALIDACION
[ ] Ejecutar pruebas k-anonymity
[ ] Pruebas de re-identificacion
[ ] Auditoria de codigo
FASE 4: OPERACION
[ ] Monitoreo continuo
[ ] Actualizacion periodica de frecuencias
[ ] Auditorias trimestrales
12. Referencias¶
12.1. Documentos MedTime Relacionados¶
- INV-009: Consentimiento Datos de Salud
- INV-010: Anonimizacion de Medicamentos
- MTS-EST-001: Catalogo de Estudios
- MTS-ANA-001: Analisis Clinicos
12.2. Estandares Tecnicos¶
- LOINC (Logical Observation Identifiers Names and Codes)
- ICD-10-PCS (Procedure Coding System)
- HL7 FHIR (formato de intercambio)
Documento generado por SpecQueen - "Tus estudios seran anonimizados... matematicamente."