SDA ドキュメント
SDA 形式に含まれる情報は、HS.SDA3.PatientOpens in a new tab、HS.SDA3.EncounterOpens in a new tab などのクラスのインスタンスで構成されるオブジェクトによって表されます。これらのクラスは XML 対応です。
この章では、以下について説明します。
SDA のカスタマイズおよび拡張に使用できるオプションは、別の章 “SDA のカスタマイズ” で説明します。
Note:
このドキュメントでは、SDA は HS.SDA3 クラスを指します。HS.SDA クラスはインスタンスにも存在しますが、これらは後方互換性のためだけに提供されています。
SDA ドキュメントの基本的な XML 構造
SDA ドキュメントの主要セクションは以下のようになっています。
<Container>
<Patient/>
<Encounters/>
<AdvanceDirectives/>
<Alerts/>
<Allergies/>
<Appointments/>
<Problems/>
<Diagnoses/>
<Documents/>
<LabOrders/>
<RadOrders/>
<OtherOrders/>
<Medications/>
<Vaccinations/>
<Observations/>
<PhysicalExams/>
<Procedures/>
<FamilyHistories/>
<IllnessHistories/>
<SocialHistories/>
<CustomObjects/>
<Referrals/>
<ClinicalRelationships/>
<ProgramMemberships/>
<MemberEnrollments/>
<MedicalClaims/>
<GenomicsOrders/>
<CarePlans/>
<HealthConcerns/>
<Goals/>
<SocialDeterminants/>
</Container>
SDA ドキュメントには以下の規則が適用されます。
-
<Patient> は 1 つだけです。
-
<Patient> は必須で、最初に記述するセクションである必要があります (<Action>、<EventDescription>、<SendingFacility> などの <Container> のプロパティの後に記述します。具体的な詳細は、クラス・リファレンスを参照してください)。
-
<Patient> 以外のセクションはすべてオプションです。
-
<Patient> 以外のすべてのセクションには、複数のエントリを含めることができます。以下に例を示します。
<Procedures>
<Procedure>
...
</Procedure>
<Procedure>
...
</Procedure>
</Procedures>
-
<Encounters> セクション (存在する場合) は、<Patient> セクションの直後に記述する必要があります。
-
その他のセクションはすべて任意の順番で記述できます。
-
いずれのエントリも、オプションで Encounter 番号を参照できます。この場合、<Encounters> を含め、そこに <Encounter> とその <EncounterNumber> を含める必要があります。
-
一部のセクションでは、<ActionCode> または <ActionScope> を含めて、永続性に関して何らかのアクションを実行するよう指定することもできます。HealthShare Unified Care Record では、これらの要素によって、SDA の保存時にアクションを実行するようシステムに指示しますが、InterSystems IRIS for Health では、永続化された SDA に対してアクションを実行するようユーザが指示できます。例えば、<ActionCode> の D は、Unified Care Record から、一致するエントリを削除します。SDA の各セクションに関する具体的な詳細は、クラスリファレンスを参照してください。
SDA の Patient
HS.SDA3.PatientOpens in a new tab クラスは、患者を表します。このクラスには、以下のような情報を格納するプロパティが含まれます。
以下の表は、HS.SDA3.PatientOpens in a new tab のプロパティを示しています。これらのプロパティには、単純なもの (文字列など) もあれば、自身のプロパティを含む複合オブジェクトもあります。また、複合オブジェクトのリストもあります。
HS.SDA3.Patient のプロパティ
単純なプロパティ |
複合オブジェクト |
複合オブジェクトのリスト |
ActionCode* |
BirthGender |
Addresses |
BirthOrder |
BirthPlace |
Aliases |
BirthTime |
Citizenship |
Organizations |
BlankNameReason |
ContactInfo |
OtherLanguages |
Comments |
CreatedBy |
PatientNumbers |
CommunicationPreference |
DeathDeclaredBy |
PriorPatientNumbers |
CreatedOn |
EnteredAt |
Providers |
DeathLocation |
EnteredBy |
Races |
DeathTime |
EthnicGroup |
SupportContacts |
EnteredOn |
Extension |
(CustomPairs) |
ImmunizationRegistryStatus |
FamilyDoctor |
|
ImmunizationRegistryStatusEffectiveDate |
Gender |
|
InactiveMRNs |
MaritalStatus |
|
IsDead |
MothersFullName |
|
IsProtected |
Name |
|
MothersMaidenName |
Occupation |
|
MPIID |
PrimaryLanguage |
|
ProtectedEffectiveDate |
PublicityCode |
|
PublicityEffectiveDate |
Race |
|
UpdatedOn |
Religion |
|
*<Patient> SDA セクションには、<ActionCode> を含めることができます。<ActionCode> の D は、HealthShare Unified Care Record に、MRN が一致する患者の削除を指示します。<ActionCode> の R は、Unified Care Record に、MRN に基づいて既存の患者をこの患者に置換するよう指示します。具体的な詳細は、クラス・リファレンスを参照してください。
SDA の Encounter
Encounter には、特定の医療インシデントに関連する医療情報すべてが含まれます。HS.SDA3.EncounterOpens in a new tab クラスは、1 人の患者の受診を表します。オーダー、手順、検査などを表す SDA の他のセクションは Encounter 番号を参照できるため、まとめて関連付けることができます。
以下の表は、HS.SDA3.EncounterOpens in a new tab のプロパティを示しています。これらのプロパティには、単純なもの (文字列など) もあれば、複合オブジェクト (自身のプロパティを含む) もあります。また、複合オブジェクトのリストもあります。
HS.SDA3.Encounter のプロパティ
単純なプロパティ |
複合オブジェクト |
複合オブジェクトのリスト |
ActionCode* |
AdmissionSource |
AttendingClinicians |
AccountNumber |
AdmissionType |
ConsultingClinicians |
AssignedBed |
AdmitReason |
Guarantors |
AssignedRoom |
AdmittingClinician |
HealthFunds |
AssignedWard |
DiagnosisRelatedGroup |
RecommendationsProvided |
EmergencyAdmitDateTime |
DischargeLocation |
Specialties |
EncounterMRN |
EncounterCodedType |
(CustomPairs) |
EncounterMRNAA |
Extension |
|
EncounterNumber |
HealthCareFacility |
|
EncounterType |
EnteredAt |
|
EndTime |
EnteredBy |
|
EnteredOn |
Priority |
|
ExpectedAdmitTime |
PublicityCode |
|
ExpectedDischargeTime |
ReferringClinician |
|
ExpectedLOAReturnTime |
SeparationMode |
|
ExternalId |
|
|
FromTime |
|
|
PreAdmissionNumber |
|
|
PriorBed |
|
|
PriorRoom |
|
|
PriorWard |
|
|
PriorVisitNumber |
|
|
ToTime |
|
|
TransferredFromED |
|
|
UpdatedOn |
|
|
VisitDescription |
|
|
*Encounter には、HealthShare Unified Care Record にアクションの実行を指示する <ActionCode> を含めることもできます。可能な値には以下が含まれます。
-
D = 削除
-
E = 空の場合は削除
-
C = すべてクリア
-
R = 置換
Encounter の <ActionCode> の具体的な詳細は、クラス・リファレンスを参照してください。
SDA オブジェクトからの SDA ストリームの作成
Note:
ここでは、あらゆるサイズの SDA に対応した手法について説明します。患者レコード全体を 1 つの SDA オブジェクト (HealthShare Unified Care Record のコンテキストでは数千もの Encounter が含まれる可能性があります) としてインスタンス化するのではなく、ここで説明する手法では、個々のセクションのみをインスタンス化して、SDA ストリームを手動で構築します。SDA が小さいことが確実である場合は、SDA 全体を 1 つのオブジェクトとしてインスタンス化して、ストリームを直接記述することができます。
複数の SDA オブジェクトがあり、それらをまとめて 1 つの SDA ストリームを生成する場合は、以下の手法を使用します。
-
新規ストリームをインスタンス化します。
-
<Container> 開始タグをストリームに記述します。
-
Patient オブジェクトは最初に記述する必要があり、SDA オブジェクトの ToQuickXML()Opens in a new tab メソッドを使用して、XML としてストリームに記述します。
-
以降のオブジェクトはタイプ別 (Encounter、LabOrder など) にグループにする必要があり、SDA オブジェクトの StartXMLList()Opens in a new tab メソッドを使用して、そのコレクションの開始タグを記述します。例 : <Encounters>。<Encounters> を含める場合、<Patient> の直後に配置する必要があることに注意してください。
-
ToQuickXML()Opens in a new tab メソッドを使用して、そのタイプの各オブジェクトをストリームに記述します。
-
特定のタイプのコレクションの記述が完了したら、EndXMLList()Opens in a new tab メソッドを使用して、コレクションの終了タグを記述します。
-
その他のコレクションに対して上記の手順を繰り返します。
-
完了したら、</Container> 終了タグを記述します。
ストリームレット・マッチング
各ストリームレット・クラスには、そのクラスの MATCHINGS パラメータで定義された、それぞれ異なる一致条件があります。このパラメータは HS.SDA3.Streamlet.Abstract から継承されます。ストリームレット・マッチング・ロジックにより、HealthShare はストリームレットが新規なのか、既存データの更新なのかを判断できます。2 つのストリームレットを比較してマッチングと重複除去を行うかどうかは、EncounterNumber プロパティによって決まります。
-
2 つのストリームレットの EncounterNumber が異なる場合や、一方のストリームレットには EncounterNumber の値があるのに他方にはない場合、ストリームレットは比較の対象になりません。
-
両方のストリームレットの EncounterNumber が同じ場合、ストリームレットは比較の対象になります。
-
いずれのストリームレットにも EncounterNumber の値がない場合、ストリームレットは比較の対象になります。
適切なストリームレットがある場合、マッチング・プロセスは 3 つのフェーズで実行されます。
-
まず、Edge Gateway でストリームレットが取り込まれると、そのデータが同じ MRN を持つ同じタイプのストリームレットと比較されます。複数の Edge Gateway が存在するシステムでは、比較は Access Gateway の集約キャッシュによって処理されます。このプロセスの詳細は、HS.SDA3.Streamlet.Abstract.Aggregate() メソッドのクラス・リファレンスを参照してください。
-
ストリームレットに外部 ID が含まれる場合は、この外部 ID を使用して、その ID を持つ同じタイプの他のストリームレットと照合します。
-
上記のどのチェックでも一致が見つからない場合、HealthShare は各ストリームレット固有の MATCHINGS のキーと値のペアを、同じストリームレット・タイプの他のレコードと照合します。
どのチェックでも一致が見つからない場合、ストリームレットは新規と認識されます。いずれかのチェックで一致が見つかった場合、ストリームレットは既存のストリームレットの更新と認識され、既存のストリームレットと共に集約されます。これを重複除去と呼びます。後述する “SDA のカスタマイズ” に示すように、MATCHINGS パラメータは変更できます。
MATCHINGS パラメータは、MatchList1 || MatchList2 という形式を取ります。各 MatchList 項目は MatchType/MatchProp1,MatchProp2,.../NullProp1,NullProp2,... という形式を取ります。
これらの要素は、以下のように定義されます。
-
MatchType は、マッチングするタイプの任意の名前です。
-
MatchProp は、マッチングに使用する SDA ストリームレット・クラスのプロパティの名前です。複雑なケースでは、一時プロパティまたは計算プロパティにすることができます。MatchProp 要素が 2 つ以上ある場合は、そのすべてに対してマッチングを実行する必要があります。
-
NullProp はマッチングに使用するプロパティの名前です (オプション)。空の NullProp は、すべてにマッチングすると見なされます。NullProp 要素が 2 つ以上ある場合は、そのすべての組み合わせに対してマッチングが実行されます。
-
MatchProp または NullProp の後のアスタリスクは、その要素が、Code および SDACodingStandard に対してマッチングされる CodeTableDetail であることを示します。
架空のカスタム Allergy ストリームレットの以下のコードを考えてみましょう。
Parameter MATCHINGS = "ALG/Allergy*/FromTime,AllergyCategory* ||
ZATC/ATCCode*/FromTime";
この場合、Unified Care Record は、以下の条件に従って順番にマッチングを試みます。
-
Allergy に対してマッチングします。これは CodeTableDetail です。オプションで、FromTime または AllergyCategory に対してマッチングします。いずれかが存在する場合、これも CodeTableDetail です。
-
ATCCode に対してマッチングします。これは CodeTableDetail です。オプションで、FromTime が存在する場合は、これに対してマッチングします。