AnpherosAnpheros PlatformDevelopers

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

医療データの正規化方法

チュートリアル:複数のソースからの医療データを比較可能な単一形式に変換する方法:LOINC検索、UCUM単位、ISO日付、基準範囲、リトライ時の重複排除、欧州ラボプロファイルに対する検証を説明します。

医療データを正規化するとは、さまざまな形式で到着する値を、比較可能な一つの形式に変換することです。つまり、同じ検査には同じコード、同じ単位系、一つの形式の日付、参照範囲とソースを持つすべての値、そして重複がない状態にします。 このチュートリアルでは、データがHL7 FHIR R4レコードに到達する前に、LOINCおよびATCコードのルックアップ、UCUM単位の使用、曖昧な日付の拒否、範囲の保持、リトライ時の重複回避、そして欧州ラボプロファイルに対する結果のチェックを行う方法を示します。表示されるすべてのレスポンスは、Anpheros APIからのものです。

なぜ重要なのか

同じHbA1cの結果が、「HbA1c 6.4 %」、「Hemoglobina glicozilata: 6.4」、「Glycated haemoglobin 46 mmol/mol」といった形式や、特定の検査機関のみが理解できる検査コードとして届くことがあります。これらが単一のコードと単一の単位になるまでは、以下の問題が発生します。

正規化は、データがレコードに入力される時点(一度だけ)で行われるべきであり、後でそれを読み取るすべてのアプリケーションで行われるべきではありません。

正規化された値の構成要素

要素 正規化された形式 例
測定対象 標準システムからのコード LOINC 4548-4 (HbA1c)、RxNorm 6809 (メトホルミン)、ICD-10 E11 (2型糖尿病)
値 数値、または結果が数値でない場合のテキストのみ 6.4
単位 UCUM %、mg/dL、mm[Hg]、kg
時刻 ISO 8601 日時、時刻が重要な場合はタイムゾーン付き 2026-10-01T07:30:00Z
基準範囲 低値と高値、同じ単位で 4.0–5.6
ソース 作成者とシステム import from labx
識別子 繰り返しを認識可能にするもの 一意性キーまたはソース識別子

どのコードシステムがどのリソースタイプに対応するかは、FHIR コードシステム に記載されています。

ステップ 1: コードの検索

プラットフォームの用語を、英語またはルーマニア語の名前、あるいは略称で検索します。

curl "https://platform.anpheros.com/v1/terminology/loinc?q=hba1c" -H "Authorization: Bearer $KEY"
curl "https://platform.anpheros.com/v1/terminology/loinc?q=hemoglobina%20glicozilata" -H "Authorization: Bearer $KEY"

どちらの検索でも、同じコンセプトが返されます。

{"data": [{"system": "http://loinc.org", "code": "4548-4", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
           "display_ro": "Hemoglobină glicozilată (HbA1c)", "category": "laboratory", "unit": "%"}], "total": 1}

医薬品については、Anpheros Search で名前またはブランド名で物質を検索し、RxNorm 成分コードと EMA 製品番号を取得できます。

curl "https://platform.anpheros.com/v1/search?q=metformin&type=treatment" -H "Authorization: Bearer $KEY"

unit フィールドは、その検査で LOINC が期待する単位です。これを使用して、受信したものを確認してください。各ソース固有の名前からコードへのマッピングは、ソースごとに一度だけ構築し、統合に保存してください。書き込み時に推測しないでください。名前が曖昧で、ソースのどこにも解決策がない場合は、マッピングせずにソースに問い合わせてください。FHIR レコードへの検査結果のインポート方法 では、マッピングされていない検査マーカーをどのように保持および報告するかを示しています。

ステップ 2: コード、単位、範囲で記述する

curl -X POST "https://platform.anpheros.com/v1/patients/$PID/observations" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/json" -H "Idempotency-Key: lab-77-hba1c" -d '{
  "code": "4548-4", "category": "laboratory",
  "value": 6.4, "unit": "%", "effective_at": "2026-10-01T07:30:00Z",
  "reference_range": {"low": 4.0, "high": 5.6},
  "author_type": "import"
}'
{"id": "3296315c-…", "code": "4548-4", "system": "http://loinc.org", "display": "Hemoglobin A1c/Hemoglobin.total in Blood",
 "category": "laboratory", "effective_at": "2026-10-01T07:30:00Z", "value": 6.4, "unit": "%",
 "reference_range": {"low": 4.0, "high": 5.6}, "status": "final", "fhir": "Observation/3296315c-…"}

コードのみを送信すると、プラットフォームはREST APIおよびFHIR API(/fhir/R4)で標準のLOINC名を補完するため、すべてのアプリケーションが同じdisplayを読み取ります。自分で送信したdisplayはそのまま保持されます。

元の表現も維持してください。検査レポートの場合、FHIR Observationのcode.textには、LOINCコーディングの横に検査機関の名前(「Hemoglobina glicozilata (HbA1c)」)が保持されます。患者は引き続き紙のレポートを認識でき、マッピングが疑問視された場合でも何も失われません。

ステップ 3: 単位

UCUM コードを使用します: mg/dL, mmol/L, %, mm[Hg], kg, cm, /min, Cel。ほとんどのエラーを防ぐ 2 つのルールがあります。

Anpheros は単位を自動的に変換しません。送信された単位をそのまま保存します。

ステップ 4: 日付

書き込む前に、ソースの既知の形式を使用して、日付を ISO 8601 に変換します。01.10.2026 はルーマニアや多くのヨーロッパ諸国では 10 月 1 日ですが、10/01/2026 は米国では 10 月 1 日です。API は推測するのではなく、ISO 形式でないものは拒否します。

{"error": {"type": "invalid", "message": "Input should be a valid datetime or date, invalid character in year (at effective_at)", "field": "effective_at"}}

ラボコネクタは例外です。ヨーロッパのレポートを読み取っていることを認識しているため、DD.MM.YYYY および DD/MM/YYYY を受け入れます。

一日の時間が重要な測定値(血圧、グルコース、投薬量)については、タイムゾーンとともに時間を送信してください。ブカレストの 23:30 の測定値は UTC では前日になりますが、患者は測定した日の日付を期待しています。

ステップ 5: 重複の排除

重複は、リトライ、同じレポートの複数回送信、および複数の経路から同じ値が到着することによって発生します。

ステップ 6: プロファイルとの照合

検査結果については、リソースがHL7 Europe 検査レポートプロファイルにどの程度適合するかをプラットフォームに問い合わせてから、そのリソースを信頼してください。

curl -X POST "https://platform.anpheros.com/fhir/R4/Observation/\$validate?profile=eu-lab" -H "Authorization: Bearer $KEY" \
     -H "Content-Type: application/fhir+json" -d '{
  "resourceType": "Observation", "status": "final",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory"}]}],
  "code": {"text": "HbA1c"}, "subject": {"reference": "Patient/'$PID'"},
  "valueQuantity": {"value": 6.4, "unit": "%"}
}'

この正規化されていない結果は、正確なリストを取得します。

{"resourceType": "OperationOutcome", "issue": [
  {"severity": "error", "code": "invalid", "diagnostics": "Observation.code must carry a LOINC coding.", "expression": ["Observation.code"]},
  {"severity": "error", "code": "required", "diagnostics": "Observation.effective[x] is required.", "expression": ["Observation.effective"]},
  {"severity": "warning", "code": "business-rule", "diagnostics": "valueQuantity should carry a UCUM system and code.", "expression": ["Observation.valueQuantity"]},
  {"severity": "warning", "code": "informational", "diagnostics": "No referenceRange: interpretation will need the laboratory's ranges.", "expression": ["Observation.referenceRange"]},
  {"severity": "information", "code": "informational", "diagnostics": "No performer (laboratory) recorded.", "expression": ["Observation.performer"]},
  {"severity": "information", "code": "informational", "diagnostics": "No issued time (when the laboratory released the result).", "expression": ["Observation.issued"]}]}

各問題は上記のステップのいずれかに対応します。各ソースからの実際のサンプルを使用して、統合テストで$validateを実行してください。

ステップ 7: ソースの保持

正規化は値の書き方を変えることはありますが、その出所を変えることはありません。書き込み時には常にauthor_type(device、import、practitioner、patient)とX-Anpheros-Source-Systemを送信してください。これにより、医師、監査担当者、またはAIモデルが、自宅で入力された値と検査室の結果を区別できるようになります。Medical data provenance explained を参照してください。

チェックリスト

よくある質問

医療データの正規化とは何ですか?

異なるソースからの健康データを1つの標準形式に変換することです。共有コード(検査および測定にはLOINC、診断にはICD-10、薬剤にはATC)、UCUM単位、ISO日付、参照範囲、および記録されたソースを含めることで、異なるシステムからの値を比較、結合、および交換できるようになります。

すべての値を1つの単位に変換する必要がありますか?

ソースが測定した単位を、それがコードに一致する有効なUCUM単位である限り、保存し、表示または分析時に変換します。これにより、保存されたすべての値が元のレポートにトレーサブルになります。

正規化は完全に自動化できますか?

ほとんどの場合可能です。ソース内のコード、既知の名前、および適切にフォーマットされた単位は自動的にマッピングできます。曖昧な名前と未知のローカルコードは、ソースごとに1回人間の判断が必要ですが、その後はマッピングが自動化されます。

関連情報

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