このページでは、Cloud Healthcare API で FHIR 拡張機能をサポートする方法について説明します。
概要
FHIR では、リソースやデータタイプに対してユーザー定義の拡張子を使用できます。Cloud Healthcare API は、これらの拡張子の保存と取得をサポートしています。
拡張子の値
拡張要素は Key-Value ペアです。url
フィールドに格納されるキーは、拡張子の内容と意味を定義する拡張子定義の正規 URL を示します。value
フィールドは、さまざまな FHIR データ型を含めることができる選択肢要素です。
このメカニズムはすべての FHIR バージョンで同一ですが、以前のバージョンの方が使用可能なデータ型が少ない点が異なります。拡張子で使用可能なデータ型は、FHIR 標準(DSTU2、STU3、R4)で確認できます。
次の例は、ルート要素で 2 つの拡張子(毛の色と市民権)を持つ Patient
リソースを示しています。
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/hair-color",
"valueString": "brown"
},
{
"url": "http://example.com/fhir/StructureDefinition/patient-citizenship",
"valueCodeableConcept": {
"coding" : [{
"system" : "urn:iso:std:iso:3166",
"code" : "US"
}]
}
}
]
}
子フィールドを持つ複雑なデータ型や要素には、拡張子を含めることもできます。たとえば、この Patient
には、複雑なデータ型である identifier
フィールドの拡張子と、他の子フィールドを持つ communication
フィールドの拡張子が含まれています。
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"identifier": [
"system": "MRN",
"value": "AB1234",
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/last-verified",
"valueDateTime": "2021-01-01T00:00:00Z"
}
]
],
"communication": [
{
"language": {
"coding": [{
"system": "urn:iso:std:iso:639",
"code": "EN"
}]
},
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/fluency-level",
"valueInteger": 7
}
]
}
]
}
各拡張子の要素に含めることができる値は、1 つだけです。値の配列を含む拡張子を定義するには、同じ url
を持つ複数の拡張子を定義する必要があります。
次のリソースタイプのルート要素では、拡張子を定義できません。
Binary
Bundle
Parameters
複雑な拡張子
拡張子には、ネスト構造を定義する拡張子を含めることができます。子拡張子の url
名は、外側の拡張子に対する相対名です。各拡張子の要素には、値要素またはネストされた子拡張子のいずれかが必要ですが、両方を含めることはできません。
次の例は、子拡張子 code
と period
を持つ複雑な patient-citizenship
拡張子を含む Patient
リソースを示しています。
{
"resourceType": "Patient",
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/patient-citizenship",
"extension": [
{
"url": "code",
"valueCodeableConcept": {
"coding": [{
"system": "urn:iso:std:iso:3166",
"code": "CA"
}]
}
},
{
"url": "period",
"valuePeriod": {
"start": "2010-01-01"
}
}
]
}
]
}
プリミティブ型の拡張子
FHIR のプリミティブ データ型にも拡張子があります。拡張子を JSON 形式で表すと、FHIR JSON 表現で定義されているように、プリミティブ要素の名前の先頭に _
が追加された JSON プロパティで表現されます。
次の JSON 形式の例は、birthDate
フィールドの拡張子を持つ Patient
リソースを示しています。
{
"resourceType": "Patient",
"active": true,
"gender": "male",
"birthDate": "1970-01-01",
"_birthDate": {
"extension": [
{
"url": "http://example.com/fhir/StructureDefinition/date-type",
"valueString": "A"
}
]
}
}
プリミティブ要素を繰り返す場合、_
を持つプロパティも配列として処理され、対応するプリミティブに拡張子の値をアライメントするための null 値が使用されます。
次の例は、name.given
の 2 番目の値に拡張子があり、最初の値に拡張子がない Patient
リソースを示しています。
{
"resourceType": "Patient",
"name": {
"given": [
"ABC",
"DEF"
],
"_given": [
null,
{
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/display",
"valueString": "XYZ"
}
]
}
]
}
}
StructureDefinition
を使用して拡張子を定義する
相互運用性を目的として、拡張子の名前と意味は StructureDefinition
リソースで定義して公開または配布し、データのコンシューマがそれを解釈できるようにします。これは、Cloud Healthcare API で拡張子を使用する場合は省略可能です。
この定義の ID は「url」フィールドの正規 URL で確認できます。組織間で交換されるデータの場合、データ コンシューマーが参照できる URL を使用して StructureDefinition
を取得することをおすすめします。Cloud Healthcare API では、この URL の検証や解決は行いません。
StructureDefinition
リソースの内容は複雑になる可能性があり、多くの場合、FHIR プロファイルを作成するためのツールを使用して定義されています。
修飾拡張子
修飾拡張子は拡張子と似ていますが、modifierExtension
フィールドに格納されます。修飾拡張子は、それを含んでいる要素の解釈が無効になる可能性があるため、無視できない追加データです。
例えば、修飾拡張子は、患者が特定の病状ではない、または薬剤を処方すべきではないことを示している場合があります。
Cloud Healthcare API は、修飾子の拡張機能を保存および取得しますが、その意味は解釈しません。解釈できない修飾拡張子が見つかった場合は、警告を表示するか、またはリソース全体を拒否するなどして、アプリケーションで適切な措置を講じることをおすすめします。可能であれば、実装者は修飾拡張子を使用しないようにします。