Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Δεδομένα φαρμακευτικής αγωγής για εφαρμογές και πράκτορες AI
Λίστες φαρμακευτικής αγωγής ασθενών έναντι γνώσης φαρμάκων: πόροι FHIR, RxNorm, ATC, πηγές openFDA και EMA, και ένας δοκιμασμένος συνδυασμός αρχείου FHIR με ετικέτες RxNorm και FDA.
Το λογισμικό υγειονομικής περίθαλψης χρειάζεται δύο διαφορετικά είδη δεδομένων φαρμακευτικής αγωγής: τη λίστα φαρμακευτικής αγωγής του ασθενούς — τι παίρνει αυτό το άτομο, από πότε, σε ποια δόση, ποιος το κατέγραψε — και τη γνώση φαρμάκων — τι περιέχει ένα προϊόν, την επίσημη ετικέτα του, προειδοποιήσεις και αλληλεπιδράσεις. Το πρώτο ανήκει στο αρχείο του ασθενούς· το δεύτερο προέρχεται από έγκυρες βάσεις δεδομένων φαρμάκων. Η ανάμειξή τους είναι ο λόγος που οι παράγοντες τεχνητής νοημοσύνης καταλήγουν να δηλώνουν γεγονότα για φάρμακα από τη μνήμη του μοντέλου. Αυτή η σελίδα εξηγεί και τα δύο, τους πόρους FHIR R4 και τα συστήματα κώδικα που εμπλέκονται, ποιες δημόσιες πηγές υπάρχουν στις ΗΠΑ και την ΕΕ, και ένα λειτουργικό παράδειγμα που συνδέει τη λίστα ενός ασθενούς από ένα έγγραφο FHIR με το RxNorm και την ετικέτα του FDA.
Δύο τύποι δεδομένων φαρμακευτικής αγωγής
| Λίστα φαρμακευτικής αγωγής ασθενούς | Γνώση φαρμάκου | |
|---|---|---|
| Απαντήσεις | Τι παίρνει η Άννα, από πότε, πόσο συχνά; | Τι είναι η μετφορμίνη 500 mg, τι προειδοποιεί η ετικέτα της; |
| Αλλαγές | Όταν ο ασθενής ή ένας κλινικός γιατρός την ενημερώνει | Όταν ένας ρυθμιστικός φορέας ή εκδότης την ενημερώνει |
| Βρίσκεται σε | Το αρχείο του ασθενούς (EHR, PHR, FHIR server) | Βάσεις δεδομένων φαρμάκων και ορολογίες |
| FHIR | MedicationStatement, MedicationRequest, MedicationAdministration, Medication |
Κυρίως εκτός του αρχείου· οι πληροφορίες προϊόντος μπορούν να είναι από μόνες τους FHIR |
| Ποιος μπορεί να το διαβάσει | Μόνο με τη συγκατάθεση του ασθενούς | Δημόσιο ή με άδεια |
Μια εφαρμογή ή ένας πράκτορας που απαντά "μπορώ να πάρω ιβουπροφαίνη με το χάπι μου για την πίεση;" χρειάζεται και τα δύο: τη λίστα του ασθενούς για να γνωρίζει ποιο χάπι, και μια πηγή γνώσης φαρμάκων για να γνωρίζει τι είναι γνωστό για τον συνδυασμό — συν έναν κλινικό γιατρό ή φαρμακοποιό για την απάντηση.
FHIR πόροι για τη λίστα φαρμάκων
- MedicationStatement: το άτομο λαμβάνει, έχει λάβει ή έχει σταματήσει ένα φάρμακο (αναφερόμενο από τον ασθενή ή καταγεγραμμένο από κλινικό ιατρό). Ο συνήθης πόρος για ένα PHR ή μια λίστα συμφιλίωσης.
- MedicationRequest: μια συνταγή ή μια παραγγελία.
- MedicationAdministration: μία δόση που δόθηκε ή λήφθηκε (ή παραλείφθηκε), χρήσιμη για την τήρηση της αγωγής.
- Medication: το ίδιο το προϊόν, όταν απαιτούνται περισσότερες λεπτομέρειες από έναν κωδικό (συστατικά, μορφή, παρτίδα).
Το φάρμακο κωδικοποιείται: στις ΗΠΑ με RxNorm (από την Εθνική Βιβλιοθήκη Ιατρικής) και κωδικούς προϊόντων NDC· διεθνώς με την ταξινόμηση ATC του ΠΟΥ· στην Ευρώπη επίσης με εθνικούς κωδικούς προϊόντων και, όλο και περισσότερο, με τις ηλεκτρονικές πληροφορίες προϊόντων της EMA που βασίζονται σε FHIR. Μια δήλωση μπορεί να φέρει πολλαπλές κωδικοποιήσεις για το ίδιο φάρμακο.
Πηγές γνώσης φαρμάκων
Ηνωμένες Πολιτείες
- RxNorm API (NLM): κανονικοποιημένα ονόματα και αναγνωριστικά (RXCUI) για κλινικά φάρμακα· δωρεάν, και με μία εξαίρεση δεν απαιτείται άδεια.
- openFDA drug label API (FDA): οι δομημένες ετικέτες προϊόντων — ενδείξεις, προειδοποιήσεις σε πλαίσιο, αντενδείξεις, ενότητες αλληλεπιδράσεων φαρμάκων — αναζητήσιμες με RXCUI.
- DailyMed (NLM): οι ίδιες ετικέτες για ανάγνωση από τους χρήστες.
Ευρωπαϊκή Ένωση
- Ο Ευρωπαϊκός Οργανισμός Φαρμάκων δημοσιεύει πληροφορίες προϊόντων για κεντρικά εγκεκριμένα φάρμακα, και οι ηλεκτρονικές πληροφορίες προϊόντων (ePI) του βασίζονται στο FHIR. Εθνικά εγκεκριμένα προϊόντα βρίσκονται σε εθνικά μητρώα.
- Οι κωδικοί ATC και οι καθορισμένες ημερήσιες δόσεις συντηρούνται από το Κέντρο Συνεργασίας του ΠΟΥ για τη Μεθοδολογία Στατιστικών Φαρμάκων.
Οι αλληλεπιδράσεις είναι το δυσκολότερο κομμάτι. Το NLM απέσυρε το API αλληλεπιδράσεων φαρμάκων-φαρμάκων περίπου τον Ιανουάριο του 2024, και ο ολοκληρωμένος έλεγχος αλληλεπιδράσεων σήμερα βασίζεται σε αδειοδοτημένες βάσεις κλινικής γνώσης. Η ενότητα αλληλεπιδράσεων μιας ετικέτας είναι κείμενο γραμμένο για κλινικούς ιατρούς, όχι ένας ελεγκτής.
Σύνδεση του αρχείου με γνώση φαρμάκων
Το παράδειγμα διαβάζει τις ενεργές φαρμακευτικές αγωγές ενός ασθενούς από το Anpheros, επιλύει κάθε όνομα σε μια έννοια RxNorm και ανακτά την ετικέτα FDA. Εκτελέστηκε σε μια τοπική παρουσία της πλατφόρμας και στα ζωντανά APIs RxNorm και 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 }));
}
Έξοδος για έναν ασθενή που ανέφερε μετφορμίνη και εναλαπρίλη:
{"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}}
Τι μάθαμε εκτελώντας το. Με το όνομα γραμμένο ως "Enalapril 10 mg tablet", η κατά προσέγγιση αντιστοίχιση του RxNorm επέστρεψε RXCUI 328290, μια έννοια που το RxNorm δεν περιγράφει πλέον, χωρίς ετικέτα πίσω από αυτήν. Με το πλήρες κλινικό όνομα, "enalapril maleate 10 mg oral tablet", επέστρεψε 858817, ένα τρέχον κλινικό φάρμακο με ετικέτα. Τα ονόματα που πληκτρολογούνται από ανθρώπους είναι κατά προσέγγιση. ελέγξτε σε τι επιλύεται μια αντιστοίχιση, αποθηκεύστε τον κωδικό μόλις επιβεβαιωθεί και δείξτε στο άτομο τι αντιστοιχίστηκε.
Κανόνες για AI agents
- Ποτέ μην επιτρέπετε στο μοντέλο να παρέχει πληροφορίες για φάρμακα από τη μνήμη. Δώστε του τη λίστα του ασθενούς από το αρχείο και το σχετικό κείμενο από μια έγκυρη πηγή, και ζητήστε του να τις παραθέσει.
- Διατηρήστε τις δύο πηγές ορατές. "Παίρνετε μετφορμίνη (το αρχείο σας, καταχωρήθηκε από εσάς στις 3 Μαρτίου)" και "η ετικέτα του FDA προειδοποιεί για γαλακτική οξέωση (ετικέτα 011de1a5…)" είναι διαφορετικοί ισχυρισμοί με διαφορετικούς κατόχους.
- Περιορίστε τα πεδία εφαρμογής. Ένας agent που χρειάζεται μόνο τη λίστα φαρμάκων θα πρέπει να έχει δικαίωμα ανάγνωσης στο
MedicationStatement, όχι ολόκληρο το αρχείο. Με το Anpheros, αυτό είναι ένα πεδίο συναίνεσης (consent scope) ή τα εργαλεία μόνο για ανάγνωση του MCP server. - Μην απαντάτε σε ερωτήσεις που απαιτούν κλινική γνώση. Αλληλεπιδράσεις, αλλαγές δόσης και διακοπή φαρμάκου απευθύνονται σε φαρμακοποιό ή γιατρό. Ο agent μπορεί να προετοιμάσει την ερώτηση.
Πού εντάσσεται το Anpheros
Το Anpheros αποθηκεύει τη λίστα φαρμάκων: MedicationStatement και MedicationAdministration με κωδικούς ATC ή άλλους, ποιος κατέγραψε κάθε στοιχείο, το ιστορικό και τη συγκατάθεση για άλλες εφαρμογές. Το API περιβάλλοντος περιλαμβάνει ενεργά φάρμακα στην περίληψη που προετοιμάζει για ένα μοντέλο, και ο διακομιστής MCP τα εκθέτει στους πράκτορες σε λειτουργία μόνο για ανάγνωση. Περιλαμβάνει ένα μικρό υποσύνολο ATC (περίπου 50 κοινά φάρμακα) για αυτόματη ονομασία κωδικών. οποιοσδήποτε άλλος κωδικός γίνεται αποδεκτός, χωρίς αυτόματη ονομασία.
Δεν είναι βάση δεδομένων φαρμάκων: δεν παρέχει ετικέτες, αλληλεπιδράσεις, δοσολογία ή αντενδείξεις, και δεν υποστηρίζει σήμερα πόρους MedicationRequest ή Medication.
Συχνές Ερωτήσεις
Ποιον πόρο FHIR πρέπει να χρησιμοποιεί μια λίστα φαρμάκων;
MedicationStatement για ό,τι λαμβάνει ή έλαβε ένα άτομο, συμπεριλαμβανομένων των φαρμάκων που αναφέρονται από τον ασθενή. Οι συνταγές είναι MedicationRequest· οι μεμονωμένες δόσεις είναι MedicationAdministration.
Υπάρχει δωρεάν API βάσης δεδομένων φαρμάκων;
Στις ΗΠΑ, το RxNorm (NLM) για αναγνωριστικά και ονόματα φαρμάκων, και το openFDA για επίσημες ετικέτες προϊόντων, είναι δωρεάν. Στην Ευρώπη, ο EMA και οι εθνικοί οργανισμοί δημοσιεύουν πληροφορίες προϊόντων. Ο ολοκληρωμένος έλεγχος αλληλεπιδράσεων γενικά απαιτεί μια αδειοδοτημένη βάση γνώσεων.
Πώς πρέπει ένας πράκτορας AI να λαμβάνει πληροφορίες για φάρμακα;
Από δύο εργαλεία: ένα που διαβάζει τη λίστα φαρμάκων του ασθενούς από το αρχείο του με συναίνεση, και ένα που αναζητά μια αυθεντική πηγή φαρμάκων. Ο πράκτορας πρέπει να παραθέτει και τα δύο και να αφήνει τις κλινικές αποφάσεις σε έναν επαγγελματία.
Ελέγχει η Anpheros τις αλληλεπιδράσεις φαρμάκων;
Όχι. Αποθηκεύει ό,τι λαμβάνει ένα άτομο, με προέλευση και συναίνεση. Ο έλεγχος αλληλεπιδράσεων ανήκει σε μια πηγή γνώσεων φαρμάκων και σε έναν κλινικό ιατρό.
Σχετικά
- AI agents και ιατρικά δεδομένα
- Πώς να δώσετε σε έναν AI agent πρόσβαση σε ιατρικά αρχεία
- FHIR MCP server για AI agents
- FHIR code systems
- FHIR R4 MedicationStatement παράδειγμα
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card