Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
Aplikácia osobného zdravotného záznamu (PHR) s FHIR
Návod: backend pre prepojený PHR na FHIR R4 — údaje od ľudí, laboratórií, dokumentov a zariadení, časová os, IPS na zdieľanie, súhlas. Otestovaný kód.
Aplikácia osobnej zdravotnej karty (PHR) uchováva zdravotné informácie jednej osoby — výsledky, merania, diagnózy, lieky, dokumenty — v zázname, ktorý osoba ovláda, zhromaždené z viacerých zdrojov namiesto z jednej nemocnice. Náročné nie sú obrazovky: náročné je získať dáta z laboratórií, kliník a zariadení v použiteľnej forme, sledovať, odkiaľ každá položka pochádza, a umožniť osobe zdieľať záznam bez straty kontroly nad ním. Tento tutoriál buduje backend PHR na HL7 FHIR R4 s Anpheros TypeScript SDK; kód nižšie bol spustený proti lokálnej inštancii platformy s sandbox kľúčom.
Prepojené, samostatné a pripojené PHR
| Typ | Kde sa údaje nachádzajú | Obmedzenie |
|---|---|---|
| Prepojené (portál pacienta nemocnice) | EHR poskytovateľa | Zobrazuje iba údaje daného poskytovateľa; mení sa, keď osoba zmení lekára |
| Samostatné (samostatná aplikácia alebo poznámkový blok) | Vlastná databáza aplikácie | Osoba zadáva všetko manuálne; údaje z aplikácie zriedka vychádzajú |
| Pripojené | Štandardný záznam, do ktorého aplikácie, laboratóriá a kliniky čítajú a zapisujú s povolením osoby | Vyžaduje štandardy, súhlas a pôvod pod ním |
Pripojené PHR je to, čo sa dnes oplatí budovať. Je to tiež smer, ktorým sa uberá politika: v Spojených štátoch musia certifikované EHR ponúkať pacientom prístup k ich údajom prostredníctvom API založeného na FHIR (US Core) a v Európskej únii Európsky priestor pre zdravotné údaje dáva ľuďom právo na prístup k ich elektronickým zdravotným údajom a na ich zdieľanie s poskytovateľmi podľa ich výberu, pričom sa bude zavádzať postupne od roku 2029.
Odkiaľ pochádzajú dáta PHR
- Osoba: domáce merania, symptómy, užívané lieky, známe zdravotné problémy. Označte ich ako hlásené pacientom.
- Laboratórne správy: väčšina ľudí dostáva PDF; niektoré laboratóriá môžu posielať HL7 v2 alebo CSV. Každý výsledok by sa mal stať kódovaným pozorovateľom (Lab results API).
- Dokumenty: prepúšťacie správy, rádiologické správy, lekárske predpisy. Ponechajte pôvodný súbor, nezmenený, vedľa štruktúrovaných údajov.
- Zariadenia a nositeľné zariadenia: denné kroky, srdcový tep, spánok, krvný tlak z Apple Health alebo Health Connect (wearable data in FHIR).
- Poskytovatelia: v USA, prístupové FHIR API nemocníc a poisťovateľov pre pacientov, dosiahnuteľné pomocou SMART on FHIR; inde, prevažne dokumenty a súhrny ako International Patient Summary.
Každý zdroj zapisuje do rovnakého záznamu. Dôveryhodnosť zabezpečuje to, že každá položka zaznamenáva, kto ju zapísal a z akého systému (medical data provenance).
Architektúra
person ──► your PHR app (mobile / web) ──► your backend ──► Anpheros: one FHIR R4 record per person
│ ├─ Observations, Conditions, Medications, Documents…
lab report, PDF, device data ───────────────┘ ├─ Provenance on every write
├─ access log the person can see
other apps, doctors, AI assistants ◄── consent (OAuth) ───────┴─ $summary (IPS) to share
Váš backend uchováva kľúč projektu (sk_test_… v sandboxe, nikdy v aplikácii). Vaša aplikácia prihlasuje používateľov pomocou vlastnej autentizácie a komunikuje s vaším backendom; backend mapuje každého používateľa na jeden záznam pacienta.
Kroky
Nainštalujte SDK (npm install @anpheros/sdk) a získajte bezplatný kľúč do sandboxu z dashboardu. Vzor používa HL7 v2 lipidový panel s dvoma výsledkami (lipid-panel.hl7) a ľubovoľné PDF (report.pdf).
import { readFile } from 'node:fs/promises';
import { Anpheros, apiKey } from '@anpheros/sdk';
const anpheros = new Anpheros({ auth: apiKey(process.env.ANPHEROS_KEY!) });
// 1. One record per person who signs up in your PHR app
const jane = await anpheros.patients.create({ given: 'Jane', family: 'Doe', birth_date: '1984-07-19', gender: 'female' });
// 2. Something the person measured at home
await anpheros.observations.create(jane.id, {
code: '85354-9', category: 'vital-signs', effective_at: '2026-10-01T08:30:00-05:00', author_type: 'patient',
components: [{ code: '8480-6', value: 128, unit: 'mm[Hg]' }, { code: '8462-4', value: 82, unit: 'mm[Hg]' }],
});
// 3. A diagnosis and a medication the person reports
await anpheros.conditions.create(jane.id, { code: 'E11.9', system: 'http://hl7.org/fhir/sid/icd-10',
display: 'Type 2 diabetes mellitus without complications', clinical_status: 'active', onset: '2021-03-15', author_type: 'patient' });
await anpheros.medications.create(jane.id, { code: 'A10BA02', display: 'Metformin 500 mg', status: 'active',
dosage: '500 mg twice a day', start: '2021-03-20', author_type: 'patient' });
// 4. A lab report the person received, as the lab sent it (HL7 v2)
const lab = await anpheros.labs.importHl7(jane.id, await readFile('lipid-panel.hl7', 'utf8'), { sourceSystem: 'springfield-lis' });
// 5. A PDF they want to keep with the record
const doc = await anpheros.documents.upload(jane.id,
{ title: 'Chest X-ray report', kind: 'imaging_report', content_type: 'application/pdf', date: '2026-10-03' },
await readFile('report.pdf'));
// 6. One timeline for the home screen
const timeline = await anpheros.timeline.list(jane.id, { limit: 10 });
// 7. A summary to share with a new doctor: the International Patient Summary
const ips = await anpheros.fhir.summary(jane.id);
// 8. Who else can read this record (empty until the person consents to another app)
const grants = await anpheros.grants.of(jane.id);
Vytlačené z tohto spustenia:
lab: created 2, unmapped []
document: final
timeline: 2026-10-03 document Chest X-ray report
2026-10-02 observation Cholesterol in HDL [Mass/volume] in Serum or Plasma
2026-10-02 observation Cholesterol [Mass/volume] in Serum or Plasma
2026-10-01 observation Blood pressure panel
2021-03-20 medication Metformin 500 mg
2021-03-15 condition Type 2 diabetes mellitus without complications
IPS: Allergies, Medications, Problems, Results, Vital signs
grants: 0
Všetko vyššie uvedené je uložené ako FHIR R4 — Patient, Observation, Condition, MedicationStatement, DocumentReference — takže ten istý záznam je možné prečítať pomocou ľubovoľného FHIR klienta (GET /fhir/R4/Patient/{id}/$everything) a presunúť ho inam v nezmenenom stave. Volania /v1 v SDK sú zjednodušeným pohľadom na tie isté zdroje; Medical data API ich uvádza.
Zdieľanie bez straty kontroly
PHR existuje na zdieľanie, podľa podmienok osoby:
- S lekárom: International Patient Summary (
$summary) je FHIR dokument vytvorený pre klinických lekárov — problémy, lieky, alergie, výsledky — ktorý vaša aplikácia môže zobraziť, vytlačiť alebo odoslať. FHIR platform popisuje$summarya$everything. - S inou aplikáciou: druhá aplikácia si vyžiada súhlas prostredníctvom OAuth 2.1 a SMART on FHIR; osoba si vyberie, ktoré údaje (napríklad iba laboratórne výsledky) a na ako dlho, a môže ho kedykoľvek odvolať. How to implement patient consent with SMART on FHIR vás prevedie týmto procesom.
- S AI asistentom:
POST /v1/contextvytvára rozpočtovaný, označený súhrn záznamu pre model a čítanie sa zobrazí v denníku prístupu (How to build an AI healthcare app). - Transparentnosť: každé čítanie a zápis, akoukoľvek aplikáciou, je zaznamenané podľa aplikácie a osoba si môže pozrieť denník a aktívne udelené povolenia.
Rodiny
Mnohé PHR (Personal Health Records) sú spravované jednou osobou pre viacerých členov rodiny: deti, partnera, staršieho rodiča. Každá osoba by mala mať vlastný záznam a byť prepojená s opatrovníkom, namiesto miešania údajov všetkých v jednom zázname. Súhlas sa potom udeľuje pre každý záznam zvlášť. Model je popísaný v časti Lekársky záznam pacienta.
Čo si postaviť sami a čo nie
Vy budujete používateľskú skúsenosť: onboarding, spôsob vysvetlenia výsledkov, pripomienky, grafy, jazyk, ktorému osoba číta. Anpheros poskytuje záznam, štandardné formáty, súhlas, pôvod, denník prístupu a operácie pre laboratórne výsledky, dokumenty a súhrny.
Čo Anpheros dnes nerobí pre PHR: neprihlasuje sa do nemocničných pacientskych portálov ani do amerických API pre prístup pacienta v mene osoby (vaša aplikácia to dokáže pomocou klienta SMART on FHIR a zapísať to, čo prijme), nečíta PDF správy prostredníctvom API a neposkytuje lekárske rady. Vlastná PHR aplikácia Anpheros, Anpheros Daily, je postavená na tomto istom API.
Často kladené otázky
Čo je osobný zdravotný záznam (PHR)?
Záznam o zdravotných informáciách osoby, ktorý si osoba vedie a kontroluje, zhromaždený z viacerých zdrojov — vlastných záznamov, laboratórií, kliník, zariadení — namiesto toho, aby bol vedený jedným poskytovateľom.
Aký je rozdiel medzi PHR a EHR?
EHR vedie zdravotnícka organizácia a pokrýva to, čo zaznamenali jej poskytovatelia. PHR vedie osoba a môže kombinovať údaje od všetkých svojich poskytovateľov a zariadení. Pripojený PHR je okno do EHR jedného poskytovateľa; prepojený PHR používa štandardy na spojenie viacerých zdrojov.
Mal by PHR používať FHIR?
Ak sa údaje majú niekedy zdieľať s lekárom, inou aplikáciou alebo asistentom AI, áno: FHIR R4 poskytuje kódované, verzované zdroje, ktorým iné systémy už rozumejú, a je to formát API pre prístup pacienta v USA a európskeho súhrnu pacienta.
Ako získa aplikácia PHR údaje z nemocníc?
V USA prostredníctvom API pre prístup pacienta FHIR, ktoré exponujú certifikované EHR a mnohí poisťovatelia, pomocou SMART on FHIR, aby osoba autorizovala aplikáciu. Inde sú to prevažne dokumenty a súhrny, importované a uložené vedľa štruktúrovaných údajov.
Kde by mala aplikácia PHR uchovávať API kľúče?
Na vašom serveri. Kľúč projektu môže čítať každý záznam, ktorý váš projekt vytvoril, takže nikdy nesmie byť dodaný v mobilnej alebo webovej aplikácii; aplikácia komunikuje s vaším backendom a aplikácie iných ľudí používajú OAuth so súhlasom osoby.
Súvisiace
- Vytvorenie zdravotníckej aplikácie: všeobecný návod
- Lekársky záznam pacienta: čo záznam obsahuje a kto k nemu má prístup
- Infraštruktúra digitálnych lekárskych záznamov
- Údaje z nositeľných zariadení vo formáte FHIR: Apple Health, Health Connect a Samsung Health
- API pre laboratórne výsledky
- SDK
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card