AnpherosAnpheros PlatformDevelopers

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

FHIR R4を使用した医療記録の保存方法

チュートリアル:Patient、血圧のObservation、Conditionを作成し、トランザクション、検索、履歴付き更新、来歴の読み取りを実行します。curlでの各リクエストと実際のレスポンスを無料サンドボックスで示します。

このチュートリアルでは、HL7 FHIR R4 リソースとして少量の医療記録を保存します。具体的には、Patient、血圧 Observation、および診断を Condition として保存し、その後、患者と測定値を 1 つのトランザクションでまとめます。これらのリソースを検索し、以前のバージョンを失うことなく診断を更新し、誰が何を書いたかを読み取ります。すべてのリクエストは、無料の Anpheros サンドボックスに対するプレーンな curl であり、表示されるすべてのレスポンスは API が返すものです。

FHIR が初めての方は、まず FHIR platform で概念を理解してください。このページは実践的な部分です。

レコードの開始によく使われる3つのリソース

リソース 内容 コード体系
Patient レコードの対象者(氏名、生年月日、性別、他のシステムからの識別子) あなたの識別子システム
Observation 測定または報告されたもの(バイタルサイン、検査結果、体重、症状スコアなど) LOINC、UCUM単位
Condition 診断または健康問題、およびその経時的な状態 ICD-10 (ライセンスフラグの背後にあるSNOMED CT)

Medications (MedicationStatement)、allergies (AllergyIntolerance)、immunizations、documentsも同様のパターンに従います。サポートされている26種類のリソースタイプは、Capability Statementの/fhir/R4/metadataに記載されています。

開始する前に

platform.anpheros.com/dashboard で Get a sandbox key をクリックしてサンドボックスキー (sk_test_…) を取得してください。ここで作成するものは実際の患者データではなく、他のプロジェクトから見えることもありません。

export BASE=https://platform.anpheros.com/fhir/R4
export KEY=sk_test_…

ステップ 1: 患者の作成

curl -X POST "$BASE/Patient" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Patient",
  "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
  "name": [{"family": "Marin", "given": ["Ioana"]}],
  "gender": "female",
  "birthDate": "1979-04-12"
}'

サーバーが割り当てたIDとバージョンを持つ201 Created:

{"resourceType": "Patient",
 "identifier": [{"system": "https://clinic.example/mrn", "value": "MRN-10442"}],
 "name": [{"family": "Marin", "given": ["Ioana"]}], "gender": "female", "birthDate": "1979-04-12",
 "id": "d09e3942-ed86-4458-b099-fa674ab21b84",
 "meta": {"versionId": "1", "lastUpdated": "2026-10-12T20:16:51.043Z"}}

独自のIDを、管理しているsystem(ここではクリニックの記録番号)とともにidentifierに保持することで、GET $BASE/Patient?identifier=https://clinic.example/mrn|MRN-10442を使用して常に患者を再度見つけることができます。FHIR idはプラットフォームのIDであり、プロジェクト固有です。別のプロジェクトでは、同じ人物が異なるIDで表示されます。

export PID=d09e3942-ed86-4458-b099-fa674ab21b84

ステップ 2: 測定値を Observation として保存する

血圧は 2 つのコンポーネント(収縮期と拡張期)を持つ Observation の 1 つであり、それぞれに独自の LOINC コードがあります。誰が測定したかを示します。ここでは家庭用デバイスです。

curl -X POST "$BASE/Observation" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: device" -H "Idempotency-Key: bp-2026-10-10-0830" -d '{
  "resourceType": "Observation",
  "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
  "code": {"coding": [{"system": "http://loinc.org", "code": "85354-9", "display": "Blood pressure panel"}]},
  "subject": {"reference": "Patient/'$PID'"},
  "effectiveDateTime": "2026-10-10T08:30:00Z",
  "component": [
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8480-6"}]},
     "valueQuantity": {"value": 138, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}},
    {"code": {"coding": [{"system": "http://loinc.org", "code": "8462-4"}]},
     "valueQuantity": {"value": 88, "unit": "mmHg", "system": "http://unitsofmeasure.org", "code": "mm[Hg]"}}
  ]
}'

レスポンスは、id と meta.versionId: "1" を持つ保存されたリソースです。使用可能なレコードにとって重要な 3 つの詳細があります。

検査結果は、category laboratory、通常は referenceRange を持つ同じリソースです。検査レポート全体を取り込む方法については、FHIR レコードに検査結果をインポートする方法 を参照してください。

ステップ 3: 診断を Condition として記録する

curl -X POST "$BASE/Condition" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H "X-Anpheros-Author-Type: practitioner" -d '{
  "resourceType": "Condition",
  "subject": {"reference": "Patient/'$PID'"},
  "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active"}]},
  "verificationStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-ver-status", "code": "confirmed"}]},
  "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "I10", "display": "Essential (primary) hypertension"}]},
  "onsetDateTime": "2026-03-02"
}'

clinicalStatus (active, resolved, in remission) と verificationStatus (confirmed, provisional) は意図的に分離されています。疑わしい診断は確定診断と同じではなく、解決済みの問題も履歴の一部です。

ステップ 4: 関連リソースを 1 つのトランザクションで作成する

患者と最初の測定値が同時に到着した場合(例: クリニックシステムから)、それらを transaction Bundle として送信します。すべてが保存されるか、何も保存されません。新しいリソース間の参照には一時的な urn:uuid: ID が使用され、サーバーによって置き換えられます。

curl -X POST "$BASE" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Bundle", "type": "transaction",
  "entry": [
    {"fullUrl": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001",
     "resource": {"resourceType": "Patient", "name": [{"family": "Stan", "given": ["Mihai"]}], "gender": "male", "birthDate": "1990-02-01"},
     "request": {"method": "POST", "url": "Patient"}},
    {"resource": {"resourceType": "Observation", "status": "final",
       "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "vital-signs"}]}],
       "code": {"coding": [{"system": "http://loinc.org", "code": "29463-7", "display": "Body weight"}]},
       "subject": {"reference": "urn:uuid:9f1c0d1e-0000-4000-8000-000000000001"},
       "effectiveDateTime": "2026-10-10",
       "valueQuantity": {"value": 82.4, "unit": "kg", "system": "http://unitsofmeasure.org", "code": "kg"}},
     "request": {"method": "POST", "url": "Observation"}}
  ]
}'

transaction-response にはリソースごとに 1 つのエントリがあり、"status": "201 Created"、その location、および保存されたリソースが含まれます。Observation の subject は、実際の Patient/fad3665a-… を指すようになります。

ステップ 5: 検索

curl "$BASE/Observation?patient=$PID&code=http://loinc.org|85354-9&date=ge2026-10-01&_sort=-date" \
     -H "Authorization: Bearer $KEY"

マッチしたリソースと total を含む searchset の Bundle が、新しい順に返されます。その他、よく使用する検索には、Condition?patient=$PID&clinical-status=active、Observation?patient=$PID&category=laboratory、そしてレコード全体を取得する Patient/$PID/$everything があります。

ステップ 6: 履歴を失わずに更新する

高血圧が解消されました。ステータスを変更し、終了日を追加します。他の誰かの変更を上書きしないように、読み取ったバージョンであるIf-Matchを使用します。

curl -X PUT "$BASE/Condition/$CID" -H "Authorization: Bearer $KEY" -H "Content-Type: application/fhir+json" \
     -H 'If-Match: W/"1"' -d '{ …the same Condition…, "clinicalStatus": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "resolved"}]}, "abatementDateTime": "2026-10-11" }'

200 OKとETag: W/"2"を使用します。他の書き込みが先に実行された場合、412を受け取り、再度読み取ります。以前のバージョンはそのまま残っています。

curl "$BASE/Condition/$CID/_history" -H "Authorization: Bearer $KEY"

両方のバージョンを返します。versionId 2 (resolved) と 1 (active) です。GET $BASE/Condition/$CID/_history/1は古いものを読み取ります。レコード内の何もサイレントに上書きされることはありません。

ステップ 7: 誰が何を書いたかを確認する

すべての書き込みは、Provenance リソースを作成します。血圧測定値の場合:

curl "$BASE/Provenance?target=Observation/$OBS" -H "Authorization: Bearer $KEY"
{"resourceType": "Provenance",
 "target": [{"reference": "Observation/d83d9075-…/_history/1"}],
 "recorded": "2026-10-12T20:16:51.056000Z",
 "activity": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-DataOperation", "code": "CREATE"}]},
 "agent": [{"type": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/provenance-participant-type", "code": "author"}]},
            "who": {"identifier": {"system": "https://anpheros.com/fhir/CodeSystem/author-type", "value": "device"}, "display": "proj_…"},
            "onBehalfOf": {"identifier": {"system": "https://anpheros.com/fhir/sid/organization", "value": "org_…"}, "display": "…"}}]}

送信した著者のタイプ (device) は、プロジェクトと組織とともに記録されます。書き込みの背後にある臨床医を特定するには、X-Anpheros-Author-Ref: Practitioner/<id> を送信してください。

ステップ 8: レコードの要約

curl "$BASE/Patient/$PID/\$summary" -H "Authorization: Bearer $KEY"

国際患者サマリー(International Patient Summary)を返します。これは、document Bundle であり、Composition で始まり、Problems、Medications、Allergies、Vital signs などのセクションを持ち、上記のリソースから構築されます。これは、別のシステムに渡したり、医師のために印刷したりするための形式です(FHIR platform)。

FHIRなしのJSONを優先しますか?

同じデータは、よりシンプルなRESTビュー、/v1 からも利用可能で、IDも同じです。POST /v1/patients/{id}/observations は{"code": "85354-9", "category": "vital-signs", "effective_at": "…", "components": […]} を取得し、同じFHIR Observationを保存します。コードに合わせて使いやすい方を選択してください。詳細はMedical data APIおよびSDKsを参照してください。

よくある質問

医療記録を保存する最善の方法は何ですか?

コード化され、バージョン管理されたリソースとして、誰がそれぞれを作成したかの記録とともに保存します。HL7 FHIR R4 は、構造(Patient、Observation、Condition など)、LOINC や ICD-10 などの標準コードシステム、履歴を提供します。FHIR バックエンドは、検索、同意、および来歴(provenance)をその上に加えます。

FHIR を使用するために FHIR サーバーが必要ですか?

FHIR リソースを保存し、検索し、誰がそれらを読み取れるかを強制する場所が必要です。オープンソースの FHIR サーバーを自分で実行するか、Anpheros のようなマネージドサービスを使用できます。Anpheros と他の FHIR サーバーの比較方法 でオプションを比較し、FHIR 対カスタム医療データベース では独自のスキーマを構築することについて説明しています。

FHIR で血圧をどのように保存しますか?

コード LOINC 85354-9 を持つ 1 つの Observation と、収縮期 8480-6 および拡張期 8462-4 の 2 つの component エントリとして保存します。それぞれに valueQuantity が mm[Hg] に含まれます。

保存されたリソースを変更できますか?

はい、PUT と If-Match を使用して変更できます。変更ごとに新しいバージョンが作成されます。以前のバージョンは _history を通じて読み取り可能であり、Provenance レコードは各変更を行った人物を記録します。削除はソフト削除であり、履歴は保持されます。

関連情報

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