# Datos de medicación para aplicaciones y agentes de IA

> Listas de medicación del paciente vs. conocimiento de fármacos: recursos FHIR, RxNorm, ATC, fuentes openFDA y EMA, y una unión probada de un registro FHIR con RxNorm y etiquetas de la FDA.

Source: https://developers.anpheros.com/es/guides/medication-data-ai-agents

El **software sanitario necesita dos tipos diferentes de datos de medicación: la lista de medicación del paciente —lo que toma esta persona, desde cuándo, a qué dosis, quién lo registró— y el conocimiento de fármacos —lo que contiene un producto, su etiqueta oficial, advertencias e interacciones.** El primero pertenece al registro del paciente; el segundo proviene de bases de datos autorizadas de fármacos. Mezclarlos es la razón por la que los agentes de IA terminan afirmando hechos sobre fármacos extraídos de la memoria del modelo. Esta página explica ambos, los recursos y sistemas de códigos FHIR R4 involucrados, qué fuentes públicas existen en EE. UU. y la UE, y un ejemplo funcional que une la lista de un paciente de un registro FHIR con RxNorm y la etiqueta de la FDA.

## Dos tipos de datos de medicación

| | Lista de medicación del paciente | Conocimiento del fármaco |
|---|---|---|
| Respuestas | ¿Qué toma Ana, desde cuándo, con qué frecuencia? | ¿Qué es la metformina 500 mg, qué advierte su etiqueta? |
| Cambios | Cuando el paciente o un clínico lo actualiza | Cuando un regulador o editor lo actualiza |
| Reside en | El registro del paciente (EHR, PHR, servidor FHIR) | Bases de datos y terminologías de fármacos |
| FHIR | `MedicationStatement`, `MedicationRequest`, `MedicationAdministration`, `Medication` | Mayormente fuera del registro; la información del producto puede ser FHIR en sí misma |
| Quién puede leerlo | Solo con el consentimiento del paciente | Público o con licencia |

Una aplicación o agente que responde "¿puedo tomar ibuprofeno con mi pastilla para la presión arterial?" necesita ambos: la lista del paciente para saber qué pastilla, y una fuente de conocimiento de fármacos para saber qué se conoce sobre la combinación, además de un clínico o farmacéutico para la respuesta.

## Recursos FHIR para la lista de medicamentos

- **MedicationStatement:** la persona está tomando, ha tomado o ha dejado de tomar un medicamento (reportado por el paciente o registrado por un clínico). El recurso habitual para un PHR o una lista de conciliación.
- **MedicationRequest:** una prescripción u orden.
- **MedicationAdministration:** una dosis administrada o tomada (o omitida), útil para la adherencia.
- **Medication:** el producto en sí, cuando se necesita más detalle que un código (ingredientes, forma, lote).

El medicamento se codifica: en EE. UU. con **RxNorm** (de la National Library of Medicine) y códigos de producto NDC; internacionalmente con la clasificación **ATC** de la OMS; en Europa también con códigos de producto nacionales y, cada vez más, la información electrónica de productos basada en FHIR de la EMA. Una declaración puede llevar varias codificaciones para el mismo medicamento.

## Fuentes de conocimiento de medicamentos

**Estados Unidos**

- [RxNorm API](https://lhncbc.nlm.nih.gov/RxNav/APIs/RxNormAPIs.html) (NLM): nombres e identificadores normalizados (RXCUI) para medicamentos clínicos; gratuito y, con una excepción, no se necesita licencia.
- [openFDA drug label API](https://open.fda.gov/apis/drug/label/) (FDA): las etiquetas de producto estructuradas —indicaciones, advertencias destacadas, contraindicaciones, secciones de interacciones medicamentosas— buscables por RXCUI.
- DailyMed (NLM): las mismas etiquetas para que las personas las lean.

**Unión Europea**

- La Agencia Europea de Medicamentos publica información de productos para medicamentos autorizados centralmente, y su información electrónica de producto (ePI) se basa en FHIR. Los productos autorizados a nivel nacional se encuentran en registros nacionales.
- Los códigos ATC y las dosis diarias definidas son mantenidos por el Centro Colaborador de la OMS para la Metodología de Estadísticas de Medicamentos.

Las **interacciones** son la parte más difícil. NLM retiró su API de interacciones medicamentosas alrededor de enero de 2024, y la verificación integral de interacciones hoy en día depende de bases de conocimiento clínicas con licencia. La sección de interacciones de una etiqueta es texto escrito para clínicos, no un verificador.

## Uniendo el registro con conocimiento de medicamentos

El ejemplo lee los medicamentos activos de un paciente desde Anpheros, resuelve cada nombre a un concepto RxNorm y obtiene la etiqueta de la FDA. Se ejecutó contra una instancia local de la plataforma y las APIs en vivo de RxNorm y openFDA.

```ts
import { Anpheros, apiKey } from '@anpheros/sdk';

const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });

// 1. What the person takes: from their record (ATC codes, names as they were entered)
const { data: meds } = await anpheros.medications.list(patientId, { status: 'active' });

// 2. What each medicine is: RxNorm (US National Library of Medicine), free, no key
async function rxcui(name: string): Promise<string | null> {
  const r = await fetch(`https://rxnav.nlm.nih.gov/REST/approximateTerm.json?term=${encodeURIComponent(name)}&maxEntries=1`);
  const j: any = await r.json();
  const id = j.approximateGroup?.candidate?.[0]?.rxcui;
  if (!id) return null;
  // An approximate match can be an outdated concept: keep it only if RxNorm still describes it as a drug
  const props: any = await (await fetch(`https://rxnav.nlm.nih.gov/REST/rxcui/${id}/properties.json`)).json();
  return ['SCD', 'SBD', 'GPCK', 'BPCK'].includes(props.properties?.tty) ? id : null;
}

// 3. What the official label says: openFDA drug label API (US FDA), free
async function label(id: string) {
  const r = await fetch(`https://api.fda.gov/drug/label.json?search=openfda.rxcui:%22${id}%22&limit=1`);
  if (!r.ok) return null;
  const doc: any = (await r.json()).results?.[0];
  return doc && { set_id: doc.set_id, boxed_warning: doc.boxed_warning?.[0]?.slice(0, 120), has_interactions_section: !!doc.drug_interactions };
}

for (const m of meds) {
  const id = await rxcui(m.display);
  console.log(JSON.stringify({ record: { display: m.display, atc: m.code, dosage: m.dosage }, rxnorm: id, fda_label: id ? await label(id) : null }));
}
```

Salida para un paciente que reportó metformina y enalapril:

```
{"record":{"display":"Metformin 500 mg tablet","atc":"A10BA02","dosage":"500 mg twice a day"},"rxnorm":"861007",
 "fda_label":{"set_id":"011de1a5-…","boxed_warning":"BOXED WARNING WARNING: LACTIC ACIDOSIS …","has_interactions_section":true}}
{"record":{"display":"Enalapril maleate 10 mg oral tablet","atc":"C09AA02","dosage":"10 mg once a day"},"rxnorm":"858817",
 "fda_label":{"set_id":"074fe718-…","boxed_warning":"WARNING: FETAL TOXICITY …","has_interactions_section":true}}
```

**Lo que aprendimos al ejecutarlo.** Con el nombre escrito como "Enalapril 10 mg tablet", la coincidencia aproximada de RxNorm devolvió RXCUI 328290, un concepto que RxNorm ya no describe, sin ninguna etiqueta asociada. Con el nombre clínico completo, "enalapril maleate 10 mg oral tablet", devolvió 858817, un medicamento clínico actual con una etiqueta. Los nombres escritos por las personas son aproximados; verifique a qué se resuelve una coincidencia, almacene el código una vez que se confirme y muestre a la persona lo que se ha emparejado.

## Reglas para agentes de IA

1. **Nunca permita que el modelo proporcione datos de medicamentos de memoria.** Entréguele la lista del paciente del registro y el texto relevante de una fuente autorizada, y pídale que los cite.
2. **Mantenga las dos fuentes visibles.** "Usted toma metformina (su registro, ingresado por usted el 3 de marzo)" y "la etiqueta de la FDA advierte sobre la acidosis láctica (etiqueta establecida 011de1a5…)" son afirmaciones diferentes con propietarios diferentes.
3. **Acote los alcances.** Un agente que solo necesita la lista de medicamentos debe obtener acceso de lectura a `MedicationStatement`, no a todo el registro. Con Anpheros, eso es un alcance de consentimiento o las herramientas de solo lectura del servidor MCP.
4. **No responda lo que necesita un clínico.** Las interacciones, los cambios de dosis y la interrupción de un medicamento deben dirigirse a un farmacéutico o médico; el agente puede preparar la pregunta.

## Dónde encaja Anpheros

Anpheros almacena la lista de medicamentos: `MedicationStatement` y `MedicationAdministration` con códigos ATC u otros, quién registró cada elemento, historial y consentimiento para otras aplicaciones; la [API de contexto](https://developers.anpheros.com/es/guides/ai-healthcare) incluye medicamentos activos en el resumen que prepara para un modelo, y el [servidor MCP](https://developers.anpheros.com/es/guides/mcp) los expone a los agentes en modo de solo lectura. Incluye un pequeño subconjunto de ATC (aproximadamente 50 medicamentos comunes) para nombrar códigos automáticamente; se acepta cualquier otro código, sin nombre automático.

No es una base de datos de medicamentos: no proporciona etiquetas, interacciones, dosificación o contraindicaciones, y hoy en día no admite recursos `MedicationRequest` ni `Medication`.

## Preguntas frecuentes

### ¿Qué recurso FHIR debe usar una lista de medicamentos?
`MedicationStatement` para lo que una persona toma o ha tomado, incluyendo medicamentos reportados por el paciente. Las prescripciones son `MedicationRequest`; las dosis individuales son `MedicationAdministration`.

### ¿Existe una API de base de datos de medicamentos gratuita?
En EE. UU., RxNorm (NLM) para identificadores y nombres de medicamentos, y openFDA para etiquetas de productos oficiales, son gratuitos. En Europa, la EMA y las agencias nacionales publican información de productos. La verificación integral de interacciones generalmente requiere una base de conocimiento con licencia.

### ¿Cómo debe un agente de IA obtener información sobre medicamentos?
De dos herramientas: una que lee la lista de medicamentos del paciente de su registro con consentimiento, y otra que consulta una fuente de medicamentos autorizada. El agente debe citar ambas y dejar las decisiones clínicas a un profesional.

### ¿Anpheros verifica las interacciones farmacológicas?
No. Almacena lo que una persona toma, con procedencia y consentimiento. La verificación de interacciones pertenece a una fuente de conocimiento de medicamentos y a un clínico.

## Relacionado

- [Agentes de IA y datos médicos](https://developers.anpheros.com/es/guides/ai-agents-medical-data)
- [Cómo dar acceso a un agente de IA a historiales médicos](https://developers.anpheros.com/es/guides/ai-agent-access-medical-records)
- [Servidor FHIR MCP para agentes de IA](https://developers.anpheros.com/es/guides/mcp)
- [Sistemas de códigos FHIR](https://developers.anpheros.com/es/guides/fhir-code-systems)
- [Ejemplo de FHIR R4 MedicationStatement](https://developers.anpheros.com/tools/fhir-examples/medication-statement)
