- Investigacion: Anonimizacion de Interacciones Medicamento-Medicamento
- 1. Resumen Ejecutivo
- 2. Tipos de Datos
- 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 de Uso del Enriquecimiento
- 9. Validacion y Auditoria
- 10. Cumplimiento Regulatorio
- 11. Referencias
Investigacion: Anonimizacion de Interacciones Medicamento-Medicamento¶
Identificador: MTS-INV-012 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 interacciones medicamento-medicamento detectadas por uso real de los usuarios, permitiendo enriquecer el catalogo de interacciones (MTS-INT-001) con patrones del mundo real.
1.1. Concepto Clave: Separacion de Identidad¶
PRINCIPIO FUNDAMENTAL: MedTime usaseparacion de identidad, NO generalizacion. - SI se envian: Pares de medicamentos especificos, severidad observada - NO se envian: user_id, diagnostico del usuario, efectos especificos experimentados
1.2. Valor del Enriquecimiento¶
Las interacciones reportadas por usuarios complementan las bases de datos oficiales:
| Fuente | Cobertura | Actualizacion | Valor |
|---|---|---|---|
| DrugBank | Alta | Trimestral | Interacciones conocidas |
| RxNorm | Alta | Mensual | Interacciones USA |
| Usuarios MedTime | Complementaria | Tiempo real | Patrones de uso real |
2. Tipos de Datos¶
2.1. Interacciones Detectadas por Sistema¶
El motor de interacciones (MTS-INT-001) detecta automaticamente combinaciones:
interface InteraccionDetectada {
medicamento_a: string; // "Metformina"
medicamento_b: string; // "Enalapril"
severidad_catalogo: string; // "MENOR" | "MODERADO" | "SERIO" | "CONTRAINDICADO"
accion_usuario: string; // "CONTINUO" | "OMITIO" | "CONSULTO_MEDICO"
}
2.2. Interacciones Reportadas Manualmente¶
Usuarios pueden reportar efectos de combinaciones no catalogadas:
interface InteraccionReportada {
medicamento_a: string;
medicamento_b: string;
descripcion_efecto: string; // Texto libre (NO se envia)
severidad_percibida: string; // "LEVE" | "MODERADA" | "SEVERA"
}
3. Datos que SI se Envian (Anonimizados)¶
3.1. Estructura de Datos¶
interface InteraccionAnonima {
// Token efimero
session_token: string; // 32 bytes, nuevo cada sesion
// Par de medicamentos (SI se envian especificos)
medicamento_a: string; // "Metformina" (nombre generico)
medicamento_b: string; // "Enalapril" (nombre generico)
// Contexto (generalizado)
severidad_observada: string; // "LEVE-MODERADA" (agrupado)
accion_tomada: string; // "CONTINUO" | "MODIFICO"
// Metadata minima
region: string; // "Mexico" (pais)
periodo: string; // "2025-Q4" (trimestre)
duracion_uso: string; // "< 1 mes" | "1-6 meses" | "> 6 meses"
}
3.2. Reglas de Normalizacion¶
| Dato Original | Dato Anonimizado |
|---|---|
| "Glucophage 850mg" | "Metformina" (generico) |
| "Lisinopril 20mg" | "Enalapril" (clase IECA) |
| Severidad "MENOR" | "LEVE-MODERADA" |
| Severidad "SERIO" | "SERIO-CONTRAINDICADO" |
| "Consulte a mi medico" | "CONSULTO" |
| "Lo segui tomando" | "CONTINUO" |
4. Datos que NUNCA se Envian¶
| Dato | Razon |
|---|---|
| user_id, email, device_id, IP | Identificadores directos |
| Descripcion libre del efecto | Puede contener PHI |
| Diagnostico del usuario | PHI directo |
| Nombre del medico | PHI de tercero |
| Dosis exactas | Puede ser identificable |
| Timestamp exacto | Permite correlacion |
| Region especifica | Reduce anonimato |
| Medicamentos marca (cuando generico disponible) | Reduce ambiguedad |
5. Tecnicas de Anonimizacion¶
5.1. Normalizacion a Generico¶
# PSEUDOCODIGO - Normalizacion de nombres
MARCAS_A_GENERICOS = {
"Glucophage": "Metformina",
"Lipitor": "Atorvastatina",
"Norvasc": "Amlodipino",
# ... (mapeo completo de RxNorm)
}
def normalizar_medicamento(nombre: str) -> str:
# Primero intentar mapeo directo
if nombre in MARCAS_A_GENERICOS:
return MARCAS_A_GENERICOS[nombre]
# Si ya es generico, retornar
return nombre
5.2. Supresion por Rareza¶
Pares de medicamentos raros no se reportan:
UMBRAL_PAR = 500 # Minimo 500 usuarios con el mismo par
def debe_reportar_par(med_a: str, med_b: str) -> bool:
# Ordenar para consistencia
par = tuple(sorted([med_a, med_b]))
freq = obtener_frecuencia_par(par)
return freq >= UMBRAL_PAR
5.3. Agrupacion de Severidad¶
AGRUPACION_SEVERIDAD = {
"MENOR": "LEVE-MODERADA",
"MODERADO": "LEVE-MODERADA",
"SERIO": "SERIO-CONTRAINDICADO",
"CONTRAINDICADO": "SERIO-CONTRAINDICADO",
}
def agrupar_severidad(severidad: str) -> str:
return AGRUPACION_SEVERIDAD.get(severidad, "DESCONOCIDA")
6. Umbrales de Seguridad¶
6.1. K-Anonymity por Par¶
| Tipo de Par | Umbral k | Accion si k < umbral |
|---|---|---|
| Medicamentos comunes | >= 500 | Reportar |
| Medicamentos especializados | >= 1000 | Reportar si >= 1000 |
| Medicamentos sensibles (VIH, cancer) | INFINITO | NUNCA reportar |
6.2. Medicamentos Sensibles¶
Pares que incluyan estos medicamentos NUNCA se reportan:
| Categoria | Ejemplos | Razon |
|---|---|---|
| Antirretrovirales | Tenofovir, Efavirenz | Revela VIH |
| Quimioterapicos | Imatinib, Trastuzumab | Revela cancer |
| Psiquiatricos especificos | Clozapina, Litio | Revela condicion mental severa |
| Inmunosupresores | Ciclosporina, Tacrolimus | Revela transplante |
7. Flujo de Anonimizacion¶
DISPOSITIVO SERVIDOR
+---------------------------+ +---------------------------+
| Sistema detecta par: | | |
| Metformina + Enalapril | | |
| Severidad: MODERADO | | |
| Usuario: Continuo | | |
+------------+--------------+ | |
| | |
v | |
+---------------------------+ | |
| ANONIMIZADOR LOCAL | | |
| | | |
| 1. Normalizar a genericos | | |
| (ya son genericos) | | |
| | | |
| 2. Verificar sensibilidad | | |
| ¿Algun med sensible? | | |
| NO → Continuar | | |
| | | |
| 3. Verificar k-anonymity | | |
| ¿Par >= 500 usuarios? | | |
| SI → Continuar | | |
| | | |
| 4. Agrupar severidad | | |
| MODERADO → LEVE-MOD | | |
| | | |
| 5. Generalizar metadata | | |
| Region → Mexico | | |
| Periodo → 2025-Q4 | | |
+------------+--------------+ | |
| | |
v v |
+---------------------------+ +---------------------------+ |
| PAQUETE ANONIMO |---->| SERVIDOR RECIBE | |
| | | | |
| session_token: abc123... | | Puede agregar: | |
| med_a: "Metformina" | | "500+ usuarios usan | |
| med_b: "Enalapril" | | Metformina + Enalapril | |
| severidad: "LEVE-MOD" | | sin problemas severos" | |
| accion: "CONTINUO" | | | |
| region: "Mexico" | | NO sabe: | |
| periodo: "2025-Q4" | | - Usuarios especificos | |
+---------------------------+ | - Efectos exactos | |
| - Dosis | |
+---------------------------+ |
8. Casos de Uso del Enriquecimiento¶
8.1. Descubrir Interacciones Nuevas¶
ESCENARIO: Par no catalogado
1. Sistema detecta par "Medicamento A + Medicamento B"
2. No hay interaccion en catalogo
3. 1000+ usuarios reportan efectos similares
4. Sistema sugiere nueva interaccion para validacion
5. Equipo medico revisa y agrega a catalogo
8.2. Validar Severidad Real¶
ESCENARIO: Severidad en catalogo vs realidad
Catalogo dice: Metformina + Alcohol = SERIO
Usuarios reportan: 80% continuan sin problema
→ Enriquecimiento sugiere revisar severidad
8.3. Patrones Regionales¶
ESCENARIO: Diferencias por region
Mexico: Combinacion X usada por 5000 usuarios
Brasil: Combinacion X usada por 200 usuarios
→ Identificar diferencias en practicas de prescripcion
9. Validacion y Auditoria¶
9.1. Pruebas de Re-identificacion¶
def test_reidentificacion_interacciones(datos, conocimiento_auxiliar):
"""
Umbral: < 0.1% tasa de exito
"""
tasa = calcular_tasa_exito(datos, conocimiento_auxiliar)
assert tasa < 0.001
9.2. Auditorias¶
| Tipo | Frecuencia | Foco |
|---|---|---|
| Automatizada | Diaria | Verificar umbrales k |
| Interna | Mensual | Revisar pares reportados |
| Externa | Trimestral | Validacion de anonimizacion |
10. Cumplimiento Regulatorio¶
10.1. Mapeo a Regulaciones¶
| Regulacion | Requisito | Cumplimiento |
|---|---|---|
| LFPDPPP | Disociacion | Normalizacion + supresion |
| HIPAA | De-identification | Eliminacion identificadores |
| LGPD | Anonimizacao | Datos no vinculables |
11. Referencias¶
11.1. Documentos MedTime¶
- INV-009: Consentimiento Datos de Salud
- INV-010: Anonimizacion de Medicamentos
- MTS-INT-001: Motor de Interacciones
11.2. Fuentes de Interacciones¶
- DrugBank API
- RxNorm Interactions
- COFEPRIS Base de Interacciones
Documento generado por SpecQueen - "Tus interacciones seran anonimizadas... par por par."