Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Dados de medicação para aplicações e agentes de IA
Listas de medicação do paciente vs. conhecimento de medicamentos: recursos FHIR, RxNorm, ATC, fontes openFDA e EMA, e uma junção testada de um registo FHIR com rótulos RxNorm e FDA.
O software de saúde necessita de dois tipos diferentes de dados de medicação: a lista de medicação do paciente — o que essa pessoa toma, desde quando, a que dose, quem o registou — e o conhecimento sobre medicamentos — o que um produto contém, o seu rótulo oficial, avisos e interações. O primeiro pertence ao registo do paciente; o segundo provém de bases de dados autorizadas de medicamentos. Misturá-los é a razão pela qual os agentes de IA acabam por afirmar factos sobre medicamentos a partir da memória do modelo. Esta página explica ambos, os recursos FHIR R4 e os sistemas de código envolvidos, que fontes públicas existem nos EUA e na UE, e um exemplo funcional que junta a lista de um paciente de um registo FHIR com RxNorm e o rótulo da FDA.
Dois tipos de dados de medicação
| Lista de medicação do paciente | Conhecimento sobre o medicamento | |
|---|---|---|
| Respostas | O que a Ana toma, desde quando, com que frequência? | O que é metformina 500 mg, quais são os avisos no rótulo? |
| Alterações | Quando o paciente ou um clínico a atualiza | Quando um regulador ou editor a atualiza |
| Reside em | O registo do paciente (EHR, PHR, servidor FHIR) | Bases de dados de medicamentos e terminologias |
| FHIR | MedicationStatement, MedicationRequest, MedicationAdministration, Medication |
Principalmente fora do registo; a informação do produto pode ser ela própria FHIR |
| Quem pode ler | Apenas com o consentimento do paciente | Público ou licenciado |
Uma aplicação ou agente que responda "posso tomar ibuprofeno com o meu comprimido para a tensão arterial?" necessita de ambos: a lista do paciente para saber qual o comprimido, e uma fonte de conhecimento sobre medicamentos para saber o que é conhecido sobre a combinação — mais um clínico ou farmacêutico para a resposta.
Recursos FHIR para a lista de medicação
- MedicationStatement: a pessoa está a tomar, tomou ou deixou de tomar um medicamento (relatado pelo paciente ou registado por um clínico). O recurso usual para um PHR ou uma lista de reconciliação.
- MedicationRequest: uma prescrição ou ordem.
- MedicationAdministration: uma dose administrada ou tomada (ou omitida), útil para adesão.
- Medication: o produto em si, quando é necessário mais detalhe do que um código (ingredientes, forma, lote).
O medicamento é codificado: nos EUA com RxNorm (da National Library of Medicine) e códigos de produto NDC; internacionalmente com a classificação ATC da OMS; na Europa também com códigos de produto nacionais e, cada vez mais, com a informação eletrónica de produto baseada em FHIR da EMA. Uma declaração pode conter várias codificações para o mesmo medicamento.
Fontes de conhecimento sobre medicamentos
Estados Unidos
- RxNorm API (NLM): nomes e identificadores normalizados (RXCUI) para medicamentos clínicos; gratuito e, com uma exceção, não é necessária licença.
- openFDA drug label API (FDA): os rótulos de produtos estruturados — indicações, avisos em caixa, contraindicações, secções de interações medicamentosas — pesquisáveis por RXCUI.
- DailyMed (NLM): os mesmos rótulos para leitura.
União Europeia
- A Agência Europeia de Medicamentos publica informações sobre produtos para medicamentos autorizados centralmente, e as suas informações eletrónicas sobre o produto (ePI) são baseadas em FHIR. Produtos autorizados a nível nacional encontram-se em registos nacionais.
- Os códigos ATC e as doses diárias definidas são mantidos pelo Centro Colaborador da OMS para a Metodologia de Estatísticas de Medicamentos.
Interações são a parte mais difícil. A NLM desativou a sua API de interações medicamentosas por volta de janeiro de 2024, e a verificação abrangente de interações depende hoje de bases de conhecimento clínicas licenciadas. A secção de interações de um rótulo é texto escrito para clínicos, não um verificador.
Juntando o registo com conhecimento de medicamentos
O exemplo lê os medicamentos ativos de um paciente do Anpheros, resolve cada nome para um conceito RxNorm e obtém o rótulo da FDA. Foi executado contra uma instância local da plataforma e as APIs RxNorm e openFDA em tempo real.
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 }));
}
Saída para um paciente que relatou metformina e 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}}
O que aprendemos ao executá-lo. Com o nome escrito como "Enalapril 10 mg tablet", a correspondência aproximada do RxNorm retornou RXCUI 328290, um conceito que o RxNorm já não descreve, sem rótulo associado. Com o nome clínico completo, "enalapril maleate 10 mg oral tablet", retornou 858817, um medicamento clínico atual com um rótulo. Os nomes digitados por pessoas são aproximados; verifique a que uma correspondência se resolve, armazene o código assim que for confirmado e mostre à pessoa o que foi correspondido.
Regras para agentes de IA
- Nunca permita que o modelo forneça factos sobre medicamentos a partir da memória. Forneça-lhe a lista do paciente do registo e o texto relevante de uma fonte autorizada, e peça-lhe para citá-los.
- Mantenha as duas fontes visíveis. "Toma metformina (o seu registo, introduzido por si em 3 de março)" e "o rótulo da FDA adverte sobre acidose láctica (rótulo definido 011de1a5…)" são alegações diferentes com proprietários diferentes.
- Restrinja os âmbitos. Um agente que necessite apenas da lista de medicamentos deve obter acesso de leitura a
MedicationStatement, não ao registo completo. Com Anpheros, isso é um âmbito de consentimento ou as ferramentas de apenas leitura do servidor MCP. - Não responda ao que necessita de um clínico. Interações, alterações de dose e interrupção de um medicamento devem ser encaminhados para um farmacêutico ou médico; o agente pode preparar a questão.
Onde o Anpheros se encaixa
O Anpheros armazena a lista de medicação: MedicationStatement e MedicationAdministration com códigos ATC ou outros, quem registou cada item, histórico e consentimento para outras aplicações; a API de contexto inclui medicação ativa no resumo que prepara para um modelo, e o servidor MCP expõe-nas aos agentes em modo de apenas leitura. Inclui um pequeno subconjunto ATC (cerca de 50 medicamentos comuns) para nomear códigos automaticamente; qualquer outro código é aceite, sem nome automático.
Não é uma base de dados de medicamentos: não fornece rótulos, interações, dosagem ou contraindicações, e não suporta recursos MedicationRequest ou Medication atualmente.
Perguntas Frequentes
Qual recurso FHIR deve ser usado para uma lista de medicação?
MedicationStatement para o que uma pessoa toma ou tomou, incluindo medicamentos reportados pelo paciente. Prescrições são MedicationRequest; doses individuais são MedicationAdministration.
Existe uma API gratuita de base de dados de medicamentos?
Nos EUA, RxNorm (NLM) para identificadores e nomes de medicamentos, e openFDA para rótulos oficiais de produtos, são gratuitos. Na Europa, a EMA e agências nacionais publicam informações de produtos. A verificação abrangente de interações geralmente necessita de uma base de conhecimento licenciada.
Como um agente de IA deve obter informações sobre medicação?
A partir de duas ferramentas: uma que lê a lista de medicação do paciente do seu registo com consentimento, e outra que consulta uma fonte de medicamentos autoritativa. O agente deve citar ambas e deixar as decisões clínicas para um profissional.
O Anpheros verifica interações medicamentosas?
Não. Armazena o que uma pessoa toma, com proveniência e consentimento. A verificação de interações pertence a uma fonte de conhecimento de medicamentos e a um clínico.
Relacionado
- Agentes de IA e dados médicos
- Como conceder a um agente de IA acesso a registos médicos
- Servidor FHIR MCP para agentes de IA
- Sistemas de código FHIR
- Exemplo de FHIR R4 MedicationStatement
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card