AnpherosAnpheros PlatformDevelopers

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Dane o lekach dla aplikacji i agentów AI

Listy leków pacjentów a wiedza o lekach: zasoby FHIR, RxNorm, ATC, źródła openFDA i EMA oraz przetestowane połączenie rekordu FHIR z etykietami RxNorm i FDA.

Oprogramowanie medyczne potrzebuje dwóch różnych rodzajów danych dotyczących leków: listy leków pacjenta — co dana osoba przyjmuje, od kiedy, w jakiej dawce, kto to odnotował — oraz wiedzy o lekach — co zawiera produkt, jego oficjalna etykieta, ostrzeżenia i interakcje. Pierwsze należy do dokumentacji pacjenta; drugie pochodzi z autorytatywnych baz danych leków. Pomylenie ich jest przyczyną, dla której agenci AI podają fakty dotyczące leków z pamięci modelu. Ta strona wyjaśnia oba rodzaje danych, zaangażowane zasoby FHIR R4 i systemy kodowania, jakie publiczne źródła istnieją w USA i UE, oraz działający przykład, który łączy listę pacjenta z rekordu FHIR z RxNorm i etykietą FDA.

Dwa rodzaje danych dotyczących leków

Lista leków pacjenta Wiedza o lekach
Odpowiedzi Co Ana przyjmuje, od kiedy, jak często? Czym jest metformina 500 mg, jakie są ostrzeżenia na etykiecie?
Zmiany Kiedy pacjent lub lekarz ją aktualizuje Kiedy aktualizuje ją organ regulacyjny lub wydawca
Znajduje się w Rekordzie pacjenta (EHR, PHR, serwer FHIR) Bazy danych leków i terminologie
FHIR MedicationStatement, MedicationRequest, MedicationAdministration, Medication Głównie poza rekordem; informacje o produkcie mogą być same w sobie FHIR
Kto może to odczytać Tylko za zgodą pacjenta Publicznie lub na licencji

Aplikacja lub agent odpowiadający na pytanie „czy mogę wziąć ibuprofen z moim lekiem na ciśnienie?” potrzebuje obu: listy pacjenta, aby wiedzieć, o jaki lek chodzi, oraz źródła wiedzy o lekach, aby dowiedzieć się, co wiadomo o tej kombinacji — plus lekarza lub farmaceuty, aby uzyskać odpowiedź.

Zasoby FHIR dla listy leków

Lek jest kodowany: w USA za pomocą RxNorm (z National Library of Medicine) i kodów produktów NDC; międzynarodowo za pomocą klasyfikacji ATC WHO; w Europie również za pomocą krajowych kodów produktów i, coraz częściej, elektronicznych informacji o produktach EMA opartych na FHIR. Oświadczenie może zawierać kilka kodowań tego samego leku.

Źródła wiedzy o lekach

Stany Zjednoczone

Unia Europejska

Interakcje są najtrudniejszą częścią. NLM wycofało swoje API dotyczące interakcji leków z lekami około stycznia 2024 r., a kompleksowe sprawdzanie interakcji opiera się dziś na licencjonowanych bazach wiedzy klinicznej. Sekcja interakcji w etykiecie to tekst napisany dla klinicystów, a nie narzędzie do sprawdzania.

Łączenie rekordu z wiedzą o lekach

Przykład odczytuje aktywne leki pacjenta z Anpheros, rozwiązuje każdą nazwę do koncepcji RxNorm i pobiera etykietę FDA. Został uruchomiony na lokalnej instancji platformy oraz na żywych API RxNorm i openFDA.

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 }));
}

Wynik dla pacjenta, który zgłosił metforminę i 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}}

Czego nauczyliśmy się podczas jego uruchamiania. Przy nazwie zapisanej jako "Enalapril 10 mg tablet", przybliżone dopasowanie RxNorm zwróciło RXCUI 328290, koncepcję, której RxNorm już nie opisuje, bez powiązanej etykiety. Przy pełnej nazwie klinicznej, "enalapril maleate 10 mg oral tablet", zwrócono 858817, aktualny lek kliniczny z etykietą. Nazwy wpisywane przez ludzi są przybliżone; sprawdź, do czego dopasowanie się rozwiązuje, przechowuj kod po jego potwierdzeniu i pokaż osobie, co zostało dopasowane.

Zasady dla agentów AI

  1. Nigdy nie pozwól modelowi dostarczać informacji o lekach z pamięci. Podaj mu listę pacjenta z dokumentacji i odpowiedni tekst z autorytatywnego źródła, a następnie poproś o podanie cytatów.
  2. Zachowaj oba źródła widoczne. "Przyjmujesz metforminę (Twoje dane, wprowadzone przez Ciebie 3 marca)" i "etykieta FDA ostrzega przed kwasicą mleczanową (etykieta ustawiona 011de1a5…)" to różne twierdzenia z różnymi właścicielami.
  3. Zawężaj zakresy. Agent, który potrzebuje tylko listy leków, powinien uzyskać dostęp do odczytu MedicationStatement, a nie do całego rekordu. W przypadku Anpheros jest to zakres zgody lub narzędzia tylko do odczytu serwera MCP.
  4. Nie odpowiadaj na pytania wymagające lekarza. Interakcje, zmiany dawkowania i zaprzestanie przyjmowania leku powinny być kierowane do farmaceuty lub lekarza; agent może przygotować pytanie.

Gdzie Anpheros pasuje

Anpheros przechowuje listę leków: MedicationStatement i MedicationAdministration z kodami ATC lub innymi, kto zarejestrował każdy wpis, historię i zgodę dla innych aplikacji; API kontekstu zawiera aktywne leki w podsumowaniu, które przygotowuje dla modelu, a serwer MCP udostępnia je agentom tylko do odczytu. Zawiera niewielki podzbiór ATC (około 50 popularnych leków), aby automatycznie nazywać kody; każdy inny kod jest akceptowany, bez automatycznej nazwy.

Nie jest to baza danych leków: nie udostępnia etykiet, interakcji, dawkowania ani przeciwwskazań i obecnie nie obsługuje zasobów MedicationRequest ani Medication.

Często zadawane pytania

Którego zasobu FHIR należy użyć do listy leków?

MedicationStatement dla tego, co pacjent przyjmuje lub przyjmował, w tym leków zgłoszonych przez pacjenta. Recepty to MedicationRequest; pojedyncze dawki to MedicationAdministration.

Czy istnieje darmowe API bazy danych leków?

W USA RxNorm (NLM) dla identyfikatorów i nazw leków oraz openFDA dla oficjalnych etykiet produktów są bezpłatne. W Europie EMA i agencje krajowe publikują informacje o produktach. Kompleksowe sprawdzanie interakcji zazwyczaj wymaga licencjonowanej bazy wiedzy.

Jak agent AI powinien uzyskać informacje o lekach?

Z dwóch narzędzi: jednego, które odczytuje listę leków pacjenta z jego dokumentacji za zgodą, i jednego, które wyszukuje autorytatywne źródło leków. Agent powinien powoływać się na oba i pozostawić decyzje kliniczne profesjonaliście.

Czy Anpheros sprawdza interakcje leków?

Nie. Przechowuje informacje o tym, co dana osoba przyjmuje, wraz z pochodzeniem i zgodą. Sprawdzanie interakcji należy do źródła wiedzy o lekach i lekarza.

Powiązane

Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card

Product updates by email

New features, guides and the end of the beta. One email a month at most.

Send me occasional Anpheros Platform updates by email (new features, API changes, guides). I'll confirm by email and can unsubscribe in one click from any email. Privacy