Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card
FHIRによる個人健康記録 (PHR) アプリ
チュートリアル:FHIR R4上のコネクテッドPHRのバックエンド — 個人、検査結果、書類、デバイスからのデータ、タイムライン、共有用IPS、同意。テスト済みコード。
個人健康記録 (PHR) アプリは、個人の健康情報 — 結果、測定値、診断、投薬、文書 — を、1つの病院からではなく、本人が管理する記録に保持します。 難しいのは画面ではなく、検査機関、クリニック、デバイスからデータを使いやすい形式で取り込み、各項目の出所を追跡し、本人が管理を失うことなく記録を共有できるようにすることです。このチュートリアルでは、Anpheros TypeScript SDK を使用して HL7 FHIR R4 上の PHR のバックエンドを構築します。以下のコードは、サンドボックスキーを使用してローカルのプラットフォームインスタンスに対して実行されました。
接続型、非接続型、および連携型 PHR
| 種類 | データ保存場所 | 制限事項 |
|---|---|---|
| 接続型 (病院の患者ポータル) | プロバイダーの EHR | そのプロバイダーのデータのみを表示。担当医が変わると変更される |
| 非接続型 (スタンドアロンアプリまたはノートブック) | アプリ独自のデータベース | すべて手入力。データはアプリからほとんど出ない |
| 連携型 | 患者の同意を得て、アプリ、ラボ、クリニックが読み書きする標準化された記録 | 標準、同意、およびプロベナンスが必要 |
連携型 PHR は、今日構築する価値のあるものです。また、ポリシーもそちらに向かっています。米国では、認定 EHR は患者にデータへの FHIR ベースの API アクセス (US Core) を提供しなければなりません。欧州連合では、European Health Data Space は、人々が自身の電子健康データにアクセスし、選択したプロバイダーと共有する権利を与えています (2029 年から段階的に導入)。
PHRデータの出所
- 本人: 自宅での測定値、症状、服用中の薬、自身が認識している病状。これらは患者報告としてマークします。
- 検査レポート: ほとんどの人はPDFで受け取りますが、一部の検査機関はHL7 v2またはCSVで送信できます。各結果はコード化されたObservation (Lab results API) になります。
- 文書: 退院サマリー、画像診断レポート、処方箋。構造化データと並べて、元のファイルを変更せずに保持します。
- デバイスおよびウェアラブル: Apple HealthまたはHealth Connectからの毎日の歩数、心拍数、睡眠、血圧 (wearable data in FHIR)。
- 医療提供者: 米国では、病院や保険会社の患者アクセスFHIR API(SMART on FHIRでアクセス)、それ以外の地域では、主に文書やInternational Patient Summaryのようなサマリー。
各ソースは同じレコードに書き込みます。信頼性を保つのは、各項目が誰がそれを書き込んだか、そしてどのシステムから来たかを記録していることです (medical data provenance)。
アーキテクチャ
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
バックエンドはプロジェクトキーを保持します(サンドボックスではsk_test_…、アプリ内では決して保持しません)。アプリは独自の認証でユーザーをサインインさせ、バックエンドと通信します。バックエンドは各ユーザーを1つの患者レコードにマッピングします。
ステップバイステップ
SDK (npm install @anpheros/sdk) をインストールし、ダッシュボード から無料のサンドボックスキーを取得してください。このサンプルでは、2つの結果を持つ HL7 v2 リピッドパネル (lipid-panel.hl7) と任意の 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);
その実行から印刷されたもの:
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
上記すべては FHIR R4 — Patient, Observation, Condition, MedicationStatement, DocumentReference — として保存されるため、同じレコードは任意の FHIR クライアント (GET /fhir/R4/Patient/{id}/$everything) で読み取ることができ、そのまま別の場所に移動できます。SDK 内の /v1 呼び出しは、同じリソースのよりシンプルなビューです。Medical data API にそれらがリストされています。
管理を失わずに共有する
PHRは、本人の意思に基づいて共有されるものです。
- 医師との共有: 国際患者サマリー(
$summary)は、臨床医向けに作成されたFHIRドキュメントです。問題、薬剤、アレルギー、検査結果などが含まれており、アプリで表示、印刷、送信できます。FHIRプラットフォームでは、$summaryと$everythingについて説明しています。 - 他のアプリとの共有: 他のアプリは、OAuth 2.1およびSMART on FHIRを通じて同意を求めます。本人は、どのデータ(例: 検査結果のみ)を、どのくらいの期間共有するかを選択でき、いつでも取り消すことができます。SMART on FHIRで患者同意を実装する方法で手順を説明しています。
- AIアシスタントとの共有:
POST /v1/contextは、モデルのために予算化され、ソースラベルが付与されたレコードのサマリーを構築します。読み取りはアクセスログに表示されます(AIヘルスケアアプリの構築方法)。 - 透明性: どのアプリケーションによる読み取りおよび書き込みも、アプリケーションごとにログに記録され、本人はログとアクティブな付与を確認できます。
ファミリー
多くのPHRは、子供、配偶者、高齢の親など、複数の家族のために一人の人物によって管理されています。全員のデータを一つに混ぜるのではなく、各個人に独自のレコードを作成し、保護者とリンクさせてください。同意はレコードごとに与えられます。患者の医療記録でモデルについて説明しています。
自分で構築するもの、構築しないもの
ユーザー体験(オンボーディング、結果の説明方法、リマインダー、チャート、ユーザーが読む言語など)は、お客様が構築します。Anpheros は、レコード、標準フォーマット、同意、来歴、アクセスログ、およびラボ、ドキュメント、サマリーの操作を提供します。
現在、PHR において Anpheros が行わないこと:Anpheros は、ユーザーの代わりに病院の患者ポータルや米国の患者アクセス API にログインしません(お客様のアプリは、SMART on FHIR クライアントを使用してこれを行い、受信したものを書き込むことができます)。API を介して PDF レポートを読み取ることも、医療アドバイスを提供することもありません。Anpheros 自身の PHR アプリである Anpheros Daily は、この同じ API 上に構築されています。
よくある質問
個人健康記録(PHR)とは何ですか?
個人の健康情報のうち、本人が管理・保持する記録のことです。単一の医療機関が保持するのではなく、本人による入力、検査機関、クリニック、デバイスなど、複数のソースから収集されます。
PHRとEHRの違いは何ですか?
EHRは医療機関が保持し、その医療機関の提供者が記録した内容を網羅します。PHRは本人が保持し、すべての医療機関やデバイスからのデータを統合できます。テザードPHRは単一の医療機関のEHRへの窓口であり、コネクテッドPHRは標準規格を使用して複数のソースを統合します。
PHRはFHIRを使用すべきですか?
データが医師、他のアプリ、またはAIアシスタントと共有される可能性がある場合は、はい、FHIR R4は、他のシステムが既に理解しているコード化されバージョン管理されたリソースを提供します。これは、米国の患者アクセスAPIおよび欧州の患者サマリーの形式です。
PHRアプリはどのようにして病院からデータを取得しますか?
米国では、認定されたEHRや多くの保険会社が公開しているFHIR患者アクセスAPIを通じて、SMART on FHIRを使用して、本人がアプリを承認できるようにします。それ以外の地域では、ほとんどの場合、ドキュメントやサマリーが構造化データと並べてインポート・保存されます。
PHRアプリはAPIキーをどこに保管すべきですか?
ご自身のサーバーに保管してください。プロジェクトキーは、プロジェクトが作成したすべてのレコードを読み取ることができるため、モバイルアプリやWebアプリ内に含めることは絶対にできません。アプリはバックエンドと通信し、他の人のアプリは本人の同意を得てOAuthを使用します。
関連情報
- 医療アプリの構築: 一般的なウォークスルー
- 患者の診療記録: 記録の内容とアクセス権限
- デジタル診療記録インフラストラクチャ
- FHIRにおけるウェアラブルデータ: Apple Health, Health Connect, Samsung Health
- 検査結果API
- SDK
Try it free in the sandbox · first FHIR call in 5 minutesFree · 30 synthetic patients · no card