ほとんどの場合、システムを経由するデータはすべて SDA 構造で十分処理できます。しかし、さらにデータを取得する必要がある場合は、簡単に SDA を拡張できます。
これらの制限事項があるため、名前と値のペアの使用はお勧めできません。この方法がご自身の状況に適していると思われる場合は、このガイドの “名前と値のペアを使用した SDA の拡張” を確認し、必要に応じてインターシステムズのサポート窓口にお問い合わせください。
拡張クラスを使用した SDA のカスタマイズ
各 SDA データ・クラス (以下に説明している例外はあります) には、対応する拡張クラスとそれを参照するプロパティがあります。例えば、クラス HS.SDA3.AllergyOpens in a new tab には、タイプが HS.Local.SDA3.AllergyExtensionOpens in a new tab のプロパティ Extension があります。既定では、これらの拡張クラスにプロパティは指定されていません。これらのクラスにプロパティを追加することで SDA をカスタマイズできます。
すべての拡張クラスは、インストール時またはアップグレード時に自動的に作成された HSCUSTOM データベースに配置されています。
拡張クラスを使用するには、以下の操作を行います。
-
必要に応じて拡張クラスにプロパティを追加します。
-
クラスをリコンパイルします。
-
拡張プロパティにデータを入力します。
HealthShare Unified Care Record を実行している場合は、SDA 拡張クラスに関連付けられたストリームレット・クラスをカスタマイズすることもできます。
拡張クラスにプロパティを追加した後は、それらのプロパティをコードで使用したり、Unified Care Record では Clinical Viewer で表示したりできます。
Important:
Health Insight を分析に使用している場合は、SDA 拡張を Health Insight に伝播して、Health Insight で HSAA.Local.<SDAType>Extension クラスを変更する必要もあります。"Health Insight Installation and Configuration Guide" の “SDA Extensions and Health Insight” を参照してください。
拡張クラスに関する一般的な注意事項
すべてのコード・テーブル拡張クラスは HS.SDA3.CodeTableExtensionOpens in a new tab を拡張します。その他の拡張クラスはすべて HS.SDA3.DataTypeOpens in a new tab を拡張します。
以下のクラスには、拡張クラスが関連付けられていません。
Patient クラスは、すべての患者データの主な親クラスであるため、特に重要です。Patient SDA オブジェクトには、対応するレジストリ・クラス HS.Registry.PatientOpens in a new tab および関連付けられているメッセージ・クラスがあります。これらのクラスそれぞれに、HS.Local.SDA3.PatientExtensionOpens in a new tab クラスへの参照である、Extension と呼ばれるプロパティが含まれています。このため、作成する拡張プロパティはすべて、これらの関連付けられたクラスおよび Patient クラス自体で使用可能になります。
Extension クラスへのプロパティの追加
SDA をカスタマイズするには、HSCUSTOM ネームスペースの HS.Local パッケージ内の拡張クラスにプロパティを追加します。
IDE で、該当するネームスペースに切り替えて、目的の拡張クラスを開きます。必要に応じて、新規プロパティを追加します。
以下のタイプのプロパティを追加できます。
-
%StringOpens in a new tab
-
任意の HS.SDA3.<DataType> (Boolean や Numeric など)。
-
任意の既存の HS.SDA3 シリアル・クラス。
-
作成した任意のカスタム・シリアル・クラス (HS.SDA3.DataTypeOpens in a new tab を拡張する必要があります)。HS.Local や HS.SDA3 など、すぐに使用可能な HealthShare パッケージにカスタム・シリアル・クラスを定義しないでください。これにより、クラス名が SDA3 の将来の標準クラス名と競合しないようにします。例えば、カスタム・シリアル・クラスには、HS.SDA3.MySDASection ではなく ZUser.HS.MySDASection のような名前を付ける必要があります。HSCUSTOM にカスタム・パッケージ・マッピングを追加できます。
-
新規作成した任意のコード・テーブル (HS.SDA3.CodeTableTranslatedOpens in a new tab を拡張する必要があります)。以下のコード・テーブルは変換できません。
変換から除外されるコード・テーブル
HealthCareFacility |
CareProviderType |
Country |
Organization |
City |
County |
User |
State |
Trust |
CareProvider |
Zip |
|
以下の例では、Sneeziness プロパティおよび FlowerType プロパティが HS.Local.SDA3.AllergyExtensionOpens in a new tab クラスに追加されています。Sneeziness は文字列で、FlowerType はカスタム・タイプです。
Class HS.Local.SDA3.AllergyExtension Extends HS.SDA3.DataType
{
Parameter STREAMLETCLASS = "HS.SDA3.Streamlet.Allergy";
Property Sneeziness As %String;
Property FlowerType As My.Local.Type.FT;
}
クラスのリコンパイル
変更を加えた後、関連するクラスをリコンパイルする必要があります。効率性を最大限にするために、HS.SDA3 パッケージ全体をコンパイルすることをお勧めします。
追加のインスタンスがある場合は、新規のコード (関連付けられたマッピングを含む) が必ず各インスタンスに配置されるようにします。
Note:
ミラーに配置する場合は、以下の操作を行います。
-
HSCUSTOM で行ったコード変更を最初にバックアップ・メンバに適用します。
-
フェイルオーバーを実行します。
-
変更を新しいバックアップ・メンバに適用します。
拡張プロパティへのデータの入力
これで拡張プロパティの準備が整ったので、次はソース・システムからの受信データがそれらの拡張プロパティに入力されるようにする必要があります。
これは、ニーズとシステム設定に応じて複数の方法で実行できます。
-
HealthShare Unified Care Record を実行している場合は、パイプラインを作成できます。詳細は、"Configuring Unified Care Record for Data Feeds" の “Creating Pipelines and Inbound Processes” の章を参照してください。
-
InterSystems IRIS for Health または Health Connect を実行している場合は、DTL 変換を作成できます。詳細は、"DTL 変換の開発" を参照してください。DTL を作成する場合に目的の拡張プロパティが必ず使用可能になるようにするには、HSCUSTOM から XML スキーマをエクスポートして、それを目的のネームスペースにインポートする必要があります。
-
ターミナルから、HSCUSTOM ネームスペースで以下を実行します。
do ##class(HS.SDA3.Container).ExportXMLSchema()
エクスポート・ファイルに使用する目的のファイル名を入力するよう求められます。必要に応じて、フル・パスとファイル名を .xsd 拡張子を付けて指定します。
-
管理ポータルから、DTL を作成しようとしているネームスペースで、[Interoperability]→[相互運用]→[XML]→[XML スキーマ構造] の順に選択します。
-
[インポート] ボタンを選択して、エクスポート・ファイルに移動します。エクスポートされたスキーマが目的のネームスペースにインポートされます。
-
これで、新しい DTL 変換を開いて拡張プロパティを使用できるようになりました。拡張クラスのプロパティが 1 つの場合、そのカスタム・プロパティは DTL ダイアグラムの拡張プロパティの下には表示されません。例えば、拡張クラスに BloodType と Sneeziness という 2 つのプロパティがある場合は、DTL ダイアグラムの拡張プロパティを展開して 2 つのカスタム・プロパティを表示できます。ただし、拡張クラスに BloodType という 1 つのプロパティしかない場合、DTL ダイアグラムの拡張プロパティの下に BloodType は表示されません。BloodType プロパティは親拡張プロパティに "ロールアップ" されます。
-
任意の製品を実行していて、HL7 メッセージを SDA に変換するために HS.Gateway.HL7.HL7ToSDA3Opens in a new tab クラスを使用している場合は、以下の操作を行います。
-
HS.Gateway.HL7.HL7ToSDA3Opens in a new tab を拡張する新規クラスを作成します。
-
新規クラスで、追加した SDA 拡張を処理するためのコールバック・メソッドを実装します。このコールバック・メソッドには、On<StreamletName>() という形式 (例えば、OnAllergy()) で名前が付けられます。
-
HS.Gateway.HL7.InboundProcess オペレーションを編集して、その HL7ToSDA3Class プロパティを、新規クラスを参照するように変更します。
以下に、SDA 拡張にデータを入力する具体的なケースと考慮事項を示します。
HL7™ FHIR® DSTU2 とカスタマイズされた SDA との間の変換
新しい拡張を FHIR DSTU2 で使用するために、拡張を作成した SDA クラスごとに、対応する DTL のカスタム・コピーを作成する必要があります。FHIR/SDA DSTU2 DTL をカスタマイズする方法の詳細は、"インターシステムズ製品における FHIR のサポート" を参照してください。
認識できない SDA 拡張
異なる拡張のセットによって環境間で共有される未加工の SDA に対応するには、すべての SDA3 クラスで XML 処理指示文 XMLIGNOREINVALIDTAG = 1 を使用します。認識できない Extension プロパティを持つ SDA ストリームをシステムがオブジェクトに読み込もうとした場合、認識できないプロパティは無視されます。TraceOperations が有効になっている場合、これが発生すると警告トレースがログに記録されます。
Patient 拡張
HS.Local.SDA3.PatientExtensionOpens in a new tab に格納されたデータを使用可能にし、HealthShare 導入環境全体で一貫して使用されるようにするために、HS.Types.PatientInfoOpens in a new tab クラスでは、タイプが HS.Local.SDA3.PatientExtensionOpens in a new tab の Extension という名前のプロパティがサポートされます。これにより、HS.Types.PatientInfoOpens in a new tab のすべてのサブクラスでも拡張が継承されます。これらのクラスを以下の表に示します。また、HS.Registry.PatientOpens in a new tab には、タイプが HS.Local.SDA3.PatientExtension Opens in a new tab の Extension プロパティが関連付けられており、HS.Hub.MPI.Manager の AddUpdateHub() メソッドのコードによって Patient の拡張クラスが処理されて HS_Registry.Patient テーブルに格納されます。
HS.Types.PatientInfo から継承する、または HS.Types.PatientInfo を使用して継承するクラス
HS.Audit.Criteria |
HS.Message.PatientSearchRequest |
HS.Gateway.Access.QueryProcess |
HS.Message.QueueForFetchRequest |
HS.Hub.HSWS.WebServices.Containers.Patient |
HS.Message.RemovePatientRequest |
HS.Hub.MPI.FetchStreamlet |
HS.MPI.Initiate.Operations |
HS.Hub.MPI.Manager |
HS.MPI.Native.PatientRecord |
HS.Message.AddPatientRequest |
HS.MPI.SecondaryMPI |
HS.Message.AddUpdateHubRequest |
HS.MPI.SureScripts.Operations |
HS.Message.FindAutoLinkMatchRequest |
HS.Types.PatientInfo |
HS.Message.GetCompositeRecordResponse |
HS.Types.PatientSerial |
HS.Message.MedicationHistoryRequest |
HS.UI.ClinicianPortal |
HS.Message.PatientBatchFetchRequestAsync |
HS.UI.PatientSearch |
HS.Message.PatientMPIMatch |
HS.UI.PatientSearchUtil |
HS.Message.PatientSearchMatch |
|
ストリームレット・クラスのカスタマイズ
Important:
このセクションは、HealthShare Unified Care Record にのみ適用されます。
ストリームレット・クラスのカスタマイズは、高度なタスクです。ここに示された制限事項を注意深く確認し、必要に応じてインターシステムズのカスタマ・サポート窓口にお問い合わせください。
前のセクションで説明したように、SDA オブジェクトにプロパティを追加できることに加えて、関連付けられたストリームレット・クラスの動作の一部をカスタマイズすることもできます。このセクションでは、そのプロセスと、留意する必要のある重要な制限事項について説明します。
以下の場合に、ストリームレット・クラスのカスタマイズを選択できます。
-
関連付けられている SDA クラスの照合ロジックを変更する場合
-
関連付けられている SDA クラスの検証ロジックを変更する場合
-
変換済みコードとして扱われるフィールドと、そのように扱われないフィールドを変更する場合
-
コールバック・メソッドの動作をオーバーライドする場合
手順
一般的な手順は以下のとおりです。
-
HSCUSTOM ネームスペースで、目的の SDA オブジェクトに対応するストリームレット・クラスを拡張します。クラス・パッケージ名または独自に作成したサブパッケージ名を使用する必要があります。カスタム・クラスを HS.Local に保存する場合は、先頭が Z になっているサブパッケージ名 (HS.Local.ZMyPackage など) を使用する必要があります。HSCUSTOM にカスタム・パッケージ・マッピングを追加できます。
-
SDA 拡張クラスの STREAMLETCLASS パラメータを適切に調整します。例えば、HS.Local.SDA3.AllergyExtensionOpens in a new tab には以下が指定されます。
Parameter STREAMLETCLASS = "HS.SDA3.Streamlet.Allergy";
このストリームレット・クラスを拡張してクラス MyPackage.SDA3.Streamlet.ZAllergy を新規作成する場合、このパラメータを以下のように変更できます。
Parameter STREAMLETCLASS = "MyPackage.SDA3.Streamlet.ZAllergy";
-
必要に応じて、コールバック・メソッドをカスタマイズするか、メソッドを新たに追加するか、または一時プロパティを新たに追加します。操作を開始する前に、以下に示している制限事項を確認してください。
以下の例では、新規の Sneeziness プロパティに対するカスタムの照合および検証が含まれる新しい Allergy ストリームレットを定義しています。
Class ZHS.SDA3.Streamlet.ZAllergy Extends HS.SDA3.Streamlet.Allergy
{
/// Adding a fallback match
/// Previously, it matched based on the Allergy code table,
/// with nullable matches on FromTime and AllergyCategory code table
/// If that doesn't match, we want it to also try using the ATCCode code table
/// (with nullable match on FromTime)
Parameter MATCHINGS = "ALG/Allergy*/FromTime,AllergyCategory*|| ZATC/ATCCode*/FromTime";
/// Adding some validation for our extension property
Method OnValidate() As %Status
{
// We use IsDefined to avoid instantiating (swizzling) a null serial property, such as Extension
// If we know that we'll always have data under Extension, this isn't needed
If ..SDA.IsDefined("Extension") {
Set tSneez=..SDA.Extension.Sneeziness
If tSneez'?1.N1" Tissue".E, tSneez'?1.N1" Hankie".E {
Quit $$$ERROR($$$GeneralError, "Sneeziness must be in terms of Tissues or Hankies.")
}
}
Quit ##super()
}
}
制限事項
ストリームレット・クラスをカスタマイズする際には、以下の制限事項に留意してください。
-
名前の先頭が “HS” のパッケージに、カスタマイズされたストリームレット・クラスを作成することはできません。ただし、名前の先頭が Z になっている HS.Local のサブパッケージの場合 (HS.Local.ZMyPackage など) はこの限りではありません。
-
ストリームレットのカスタマイズは、メモリ内でのみ適用され、そのストリームレットの格納には影響しません。ストリームレットを格納する場合、格納時にそのタイプは常に HS.SDA3.Streamlet.<type> になります。
-
カスタム・ストリームレット・クラスで拡張できるメソッドは、以下に示したイベント・コールバック・メソッドだけです。その他のイベント・ハンドラはすべてスーパークラス内で FINAL とマークされるため、変更することはできません。
-
OnInactivate()
-
OnMatchActionScope()
-
OnBeforeMatch()
-
OnValidate()
-
OnBeforeSave()
-
OnAfterSave()
-
OnDeleteSQL コールバック・メソッドおよび OnDeleteHandler コールバック・メソッドをカスタマイズすることはできません。コールバック以外のメソッドもカスタマイズすることはできません。
-
その他のコールバック・メソッド (OnXXX) をカスタマイズする際には、必ず ##super を呼び出す必要があります。
-
将来、競合が発生しないように、新規に作成するメソッドやプロパティの先頭を文字 Z にすることをお勧めします。
-
カスタマイズできるのは、DATEPROPERTY、MATCHINGS、TRANSLATIONS、および ACTIONSCOPES の各パラメータだけです。これら以外のパラメータをカスタマイズすることはできません。
-
MATCHINGS パラメータを変更する場合、新規作成する照合タイプはすべて、先頭を文字 Z にする必要があります。既存の照合タイプを変更することはできません。既存の照合タイプを削除することはできます。
-
Extension.<property> を指定することによって、DATEPROPERTY パラメータおよび MATCHINGS パラメータから拡張クラスのプロパティにアクセスできるようになります。
-
MATCHINGS パラメータを変更する場合、以下の "照合の再計算" で説明している追加手順を実行する必要があります。
-
以下のストリームレット・メタデータは、追加することも変更することもできません。
-
Patient ストリームレットには、OnAggregateExtensionImpl() と呼ばれるコールバック・メソッドが含まれています。これは、拡張クラス内の患者データを集約する方法を制御します。既定では、このメソッドは、集約対象の患者レコードの中で最適と判断された患者レコードから拡張データを取得します。必要に応じて、カスタマイズした集約動作を提供するようこのメソッドをオーバーライドできます。
-
ストリームレット・クラスで使用可能な Stash という名前の一時多次元プロパティがあります。これを使用して、OnBeforeSave() メソッドから OnAfterSave() メソッドにデータを渡すことができます。
ストリームレット・クラスをカスタマイズした後は、前述したように HS.SDA3 パッケージを再コンパイルする必要があります。
照合の再計算
カスタム・ストリームレットに合わせて MATCHINGS パラメータを変更した場合、データを再評価して新規の照合を確認し、必要な場合はそれらの照合を調整する必要があります。以下で説明するように、これを実行できるように 3 つのユーティリティが用意されています。
これらの各ユーティリティは、ストリームレット・タイプを引数として取ります。標準ストリームレットまたは標準ストリームレットの拡張の場合、これは Allergy などの標準タイプです。カスタム・ストリームレットの場合は、HSCustom.SDA3.Streamlet.ZAllergy のような完全クラス名を使用する必要があります。
-
まず、RecalculateMatches を使用して既存の照合を再計算します。例えば、以下のようになります。
Do ##class(HS.SDA3.Streamlet.Utility.RecalculateMatches).Start("HSCustom.SDA3.Streamlet.ZAllergy")
-
次に、FindMatches を使用して照合の重複をすべて特定します。例えば、以下のようになります。
Do ##class(HS.SDA3.Streamlet.Utility.FindMatches).Start("HSCustom.SDA3.Streamlet.ZAllergy")
^HS.SDA3.Streamlet.MatchGroups グローバルのコンテンツを表示して、このユーティリティが重複を検出したかどうかを確認できます。
-
FindMatches で照合の重複を特定した場合は、ReconcileMatches ユーティリティを実行して、このような照合をすべて調整できます。
Do ##class(HS.SDA3.Streamlet.Utility.ReconcileMatches).ReconcileMatches("HSCustom.SDA3.Streamlet.ZAllergy")
ReconcileMatches() メソッドは、最新のストリームレットを受け取り、それに一致するその他すべてを削除済みとマークすることで、これを実行します。一致のグループから受け取るストリームレットの判別に別の条件を適用する場合は、ReconcileMatches() メソッドを拡張するか、これを目的とした独自のカスタム・メソッドを作成できます。
FindMatches および RecalculateMatches はオプションで 2 つ目のパラメータを取ることができます。このパラメータはブーリアン値であり、処理をメソッドの前回の実行から再開するか、最初からやり直すかを指定します。例えば、以下のような場合です。
Do ##class(HS.SDA3.Streamlet.Utility.FindMatches).Start("HSCustom.SDA3.Streamlet.ZAllergy", 1)
このパラメータが 0 に設定されているか省略されている場合、メソッドは指定されたタイプのすべてのストリームレット ID を処理します。このパラメータが 1 に設定されている場合、メソッドは、前回正常に処理されたストリームレット ID から再開します。この ID はグローバル ^ISC.HS.Streamlet.Loader("Last") に格納されています。
カスタム SDA プロパティの使用
ObjectScript コードでカスタム・プロパティを使用できるようになりました。カスタム拡張クラスおよびそのプロパティは、他のクラスと同じように動作します。
例えば、Sneeziness プロパティを新たに Allergy 拡張クラスに追加した場合、これを以下のように使用できます。
Set tAllergy=##class(HS.SDA3.Allergy).%New()
Set tAllergy.Extension.Sneeziness="3 Tissues"
Clinical Viewer で新規のプロパティを表示することもできます。詳細な手順は、"Customizing the Clinical User Interfaces" ガイドの "Adding SDA Fields to the Clinical Viewer" を参照してください。
カスタム SDA 拡張は、HealthShare Patient Index と Health Insight からアクセスして使用できます。詳細および追加の構成については、製品のドキュメントを参照してください。
カスタム SDA コンテナの作成による SDA のカスタマイズ
Important:
この機能は、HealthShare Unified Care Record でのみ使用できます。
カスタム SDA コンテナを使用すると、複合プロパティおよび照合キーを格納するカスタム SDA セクションを作成できます。カスタム SDA コンテナを作成するには、以下の手順を正しい順序で実行する必要があります。
-
カスタム SDA セクションごとに、カスタム SDA データ・クラスを定義します。
-
カスタム SDA データ・クラスごとに、データを格納するための SDA ストリームレット・クラスを定義します。
-
カスタム・セクションそれぞれをプロパティとして格納するカスタム SDA コンテナ・クラスを定義します。
-
構成レジストリにカスタム SDA コンテナを登録します。
これらの手順を完了したら、SDA 処理でカスタム SDA コンテナが受け取られ、格納され、集約されるようになります。カスタム SDA データは、集約キャッシュで使用可能になり、Clinical Viewer でカスタム表示に使用したり、カスタム・レポートに含めたりすることができます。
カスタム SDA データ・クラスの作成
カスタム SDA コンテナを作成する最初の手順では、カスタム SDA セクションごとにカスタム SDA データ・クラスを定義します。
-
HS.SDA3.SuperClassOpens in a new tab を拡張するクラスを新規作成します。
いずれかのカスタム SDA セクションにカスタム SDA データ・クラスを定義して、Health Insight でデータを解釈して保存できるようにする場合は、先に進む前に次のセクションを確認してください。
-
クラスに User.ZMySection のような名前を付けます。将来の標準 SDA3 クラス名と競合しないように、短いクラス名に接頭語 “Z” を付けることをお勧めします。
クラスは SDA プロパティの標準セットを継承します。
ActionCode |
EncounterNumber |
EnteredOn |
ToTime |
ActionScope |
EnteredAt |
ExternalId |
UpdatedOn |
CustomPairs |
EnteredBy |
FromTime |
|
-
独自の SDA プロパティを追加できます。文字列以外のデータ型を使用する場合は、Blob、Boolean、Numeric、TimeStamp などの既存の SDA3 データ型クラスを使用します。これにより、二重引用符のペアが削除をトリガする削除メカニズムに対応できるようになります。
二重引用符の削除は、コレクション内の要素には適用されません。そのような要素を削除するには、問題のストリームレットに ActionCode = 'R' を割り当てて、ストリームレットの置換をトリガし、既存のすべてのコレクションをクリアする必要があります。
以下のタイプのプロパティを追加できます。
-
%StringOpens in a new tab
-
任意の HS.SDA3.<DataType> (Boolean や Numeric など)。
-
任意の既存の HS.SDA3 シリアル・クラス。
-
作成した任意のカスタム・シリアル・クラス (HS.SDA3.DataTypeOpens in a new tab を拡張する必要があります)。HS.Local や HS.SDA3 など、すぐに使用可能な HealthShare パッケージにカスタム・シリアル・クラスを定義しないでください。これにより、クラス名が SDA3 の将来の標準クラス名と競合しないようにします。例えば、カスタム・シリアル・クラスには、HS.SDA3.MySDASection ではなく ZUser.HS.MySDASection のような名前を付ける必要があります。
-
新規作成した任意のコード・テーブル (HS.SDA3.CodeTableTranslatedOpens in a new tab を拡張する必要があります)。以下のコード・テーブルは変換できません。
変換から除外されるコード・テーブル
HealthCareFacility |
CareProviderType |
Country |
Organization |
City |
County |
User |
State |
Trust |
CareProvider |
Zip |
|
-
SDA クラスの標準の命名規則は、“Medication” のような単数形です。この場合、コンテナには、以下の XML に示すように “Medications” のような標準の複数形のリストが格納されます。
<Medications>
<Medication>
</Medication>
<Medication>
</Medication>
</Medications>
カスタム・セクションの末尾に “s” を追加しても (Diagnosis/Diagnoses など) 機能しない場合は、SDA データ・クラスに StartXMLList()Opens in a new tab メソッドおよび EndXMLList()Opens in a new tab メソッドを実装し、コンテナで開始および終了のコレクション・タグを出力します。
ClassMethod StartXMLList()
{
Quit "<Diagnoses>"
}
ClassMethod EndXMLList()
{
Quit "</Diagnoses>"
}
-
クラスをコンパイルします。
Note:
<PROTECT> エラーが発生する場合、HSLIB データベースを一時的に書き込み可能にし、クラスを再コンパイルしてから、HSLIB を読み取り専用に戻します。
以下の例は、移植手術に関する情報のカスタム・データ・クラスを示しています。
Class User.ZTransplant Extends HS.SDA3.SuperClass
{
Property OrganType As %String;
Property TransplantPhysician As HS.SDA3.CodeTableDetail.CareProvider;
Storage Default
{
<Data name="SuperClassState">
<Subscript>"SuperClass"</Subscript>
<Value name="1"><Value>ActionCode</Value></Value>
<Value name="2"><Value>ActionScope</Value></Value>
<Value name="3"><Value>EnteredBy</Value></Value>
<Value name="4"><Value>EnteredAt</Value></Value>
<Value name="5"><Value>EnteredOn</Value></Value>
<Value name="6"><Value>ExternalId</Value></Value>
<Value name="7"><Value>EncounterNumber</Value></Value>
<Value name="8"><Value>FromTime</Value></Value>
<Value name="9"><Value>ToTime</Value></Value>
<Value name="10"><Value>Deleted</Value></Value>
<Value name="11"><Value>UpdatedOn</Value></Value>
<Value name="12"><Value>CustomPairs</Value></Value>
<Value name="13"><Value>OrganType</Value></Value>
<Value name="14"><Value>TransplantPhysician</Value></Value>
</Data>
<SequenceNumber>5</SequenceNumber>
<Type>%Library.SerialState</Type>
}
}
Health Insight での類似のカスタム・データ・クラスの作成
いずれかのカスタム SDA セクションにカスタム SDA データ・クラスを定義して、Health Insight でデータを解釈して保存できるようにする場合は、Health Insight で類似のカスタム・データ・クラスを作成する必要があります。
この場合、カスタム SDA ストリームレット・クラスとカスタム SDA データ・クラスの両方が HSCUSTOM ネームスペースに存在し、アナリティクス・ネームスペースにパッケージ・マッピングされる必要があります。これらのクラスは、アナリティクス・ネームスペースでコンパイルする必要もあります。
Health Insight でカスタム SDA データ・クラスを作成するには、以下の操作を実行します。
-
HSAA.IndexCommonData を拡張したクラスを新規作成します。クラス名に HSAA パッケージの名前を使用しないようにしてください。
-
クラスに User.ZMyHISection のような名前を付けます。将来の標準 SDA3 クラス名と競合しないように、短いクラス名に接頭語 “Z” を付けることをお勧めします。Health Insight のカスタム・データ・クラスがカスタム SDA データ・クラスと同じ名前でないことを確認します。
クラスは SDA プロパティの標準セットを継承します。
ActionCode |
EncounterNumber |
EnteredOn |
ToTime |
ActionScope |
EnteredAt |
ExternalId |
UpdatedOn |
CustomPairs |
EnteredBy |
FromTime |
|
-
独自の SDA プロパティを追加できます。文字列以外のデータタイプを使用する場合は、既存の HSAA.Internal.Boolean、HSAA.Internal.Numeric、または HSAA.TimeStamp のデータタイプ・クラスを使用します。
以下のタイプのプロパティを追加できます。
-
%String。
-
任意の HSAA.Internal<DataType> (Boolean や Numeric など)。
-
任意の既存の HSAA シリアル・クラス。
-
作成した任意のカスタム・シリアル・クラス (HSAA.Internal.DataType を拡張する必要があります)。HSAA など、すぐに使用可能な Health Insight パッケージにカスタム・シリアル・クラスを定義しないでください。これにより、クラス名が Health Insight の将来の標準クラス名と競合しないようにします。例えば、カスタム・シリアル・クラスには、HSAA.MySDASection ではなく ZUser.HSAA.MySDASection のような名前を付ける必要があります。
-
新規作成した任意のコード・テーブル (HSAA.Internal.Interface.CodeTableTranslated を拡張する必要があります)。以下のコード・テーブルは変換できません。
変換から除外されるコード・テーブル
HealthCareFacility |
CareProviderType |
Country |
Organization |
City |
County |
User |
State |
Trust |
CareProvider |
Zip |
|
-
SDA カスタム・データ・クラスが HS.SDA3.CodeTableDetailOpens in a new tab クラスを使用する場合は、類似の HSAA.Interface.CodeTableDetail クラスを使用します。これが存在しない場合は、類似の HSAA.Internal.Interface.CodeTableDetail クラスを使用します。
-
Health Insight でタグや他のフィールドを使用する場合は、他の HSAA クラスを拡張するのではなく、そのタグやフィールドをクラスに追加します。
-
クラスをコンパイルします。
カスタム Health Insight データ・クラスをコンパイルしたら、登録します。カスタム Health Insight データ・クラスの登録方法については、"Health Insight インストールおよび設定ガイド" の “カスタム・コンテナ・クラスの登録” を参照してください。そのセクションで説明する手順に従います。ただし、[SDA ソース・クラス] フィールドにはカスタム SDA データ・クラス名を入力し、[Health Insight クラス名] フィールドには類似の Health Insight カスタム・データ・クラスを入力します。
カスタム SDA ストリームレット・クラスの作成
カスタム SDA コンテナ作成の 2 つ目の手順では、カスタム・データ・クラスごとに、データを格納するためのカスタム SDA ストリームレット・クラスを定義します。
-
HS.SDA3.Streamlet.Abstract と %PersistentOpens in a new tab の両方を拡張するクラスを新規作成します。
-
クラスに User.Streamlet.ZMySection のような名前を付けます。将来の標準 SDA3 クラス名と競合しないように、短いクラス名に接頭語 “Z” を付けることをお勧めします。
前述のクラス名は、<PackageName>.streamlet.<SDADataClassname> というストリームレット・クラスの標準の命名規則を示しています。この命名規則に従わない場合は、SDA データ・クラスの HS.SDA3.SuperClassOpens in a new tab の GetStreamletClass() メソッドを実装して、ストリームレット・クラスの名前を出力する必要があります。既定のコードは次のとおりです。
// for a standard SDA class, we get the streamlet class from the extension class,
// to let the extension override it. Classes that don't allow extension
// can override this method
If pType'["." Quit $Parameter("HS.Local.SDA3."_pType_"Extension","STREAMLETCLASS")
// For custom ones, if we have a parameter, use it
If $Parameter(,"STREAMLETCLASS")'="" Quit $Parameter(,"STREAMLETCLASS")
//The code below is for backwards compatibility - it predates the parameter
//and can be overridden if need be, but really one should just use the parameter
Quit $P(pType,".",1,$L(pType,".")-1)_".Streamlet."_$P(pType,".",$L(pType,"."))
-
以下のパラメータの値を入力します。
パラメータ |
説明 |
必須かどうか |
INFOTYPE |
事前定義の情報タイプまたはカスタムの情報タイプ。 |
必須 |
SDACLASS |
SDA データ・クラスの名前。 |
必須 |
DATEPROPERTY |
日付でのフィルタ処理に使用するプロパティの名前。指定されていない場合、既定値の ToTime に設定されます。 |
オプション |
MATCHINGS |
HealthShare Unified Care Record で対象のセクションに対する照合を実行する方法を指定します。Health Connect には適用されません。
照合の詳細は、HS.SDA3.Streamlet.Abstract のクラス・リファレンスを参照してください。
例については、いずれかの SDA3 ストリームレット・クラスのクラス・リファレンスを参照してください。 |
必須 |
ACTIONSCOPES |
このストリームレット・クラスに、限定された一連の有効な ACTIONSCOPES 値が設定されている場合、このパラメータはそれらの値のコンマ区切りリスト (先頭と末尾にもコンマあり) である必要があります。HealthShare Unified Care Record 専用で、Health Connect には適用されません。 |
オプション |
-
オプションで、HealthShare Unified Care Record に実装するコールバックの以下のコードを入力します (Health Connect および InterSystems IRIS for Health には適用されません)。
-
クラスをコンパイルします。
以下の例は、移植手術に関する情報のカスタム・ストリームレット・クラスを示しています。
Class User.Streamlet.ZTransplant Extends (HS.SDA3.Streamlet.Abstract, %Persistent)
{
Parameter INFOTYPE = "PRC";
Parameter SDACLASS = "User.ZTransplant";
Parameter DATEPROPERTY = "EnteredOn";
Parameter MATCHINGS = "PRC/EnteredOn";
Storage Default
{
<ExtentSize>100000</ExtentSize>
<SequenceNumber>5</SequenceNumber>
<Type>%Library.Storage</Type>
}
}
カスタム SDA コンテナ・クラスの作成
カスタム SDA コンテナ作成の 3 つ目の手順では、カスタム SDA セクションを格納するカスタム SDA コンテナ・クラスを定義します。
-
HS.SDA3.ContainerOpens in a new tab を拡張するクラスを新規作成します。
-
コンテナ・クラスに User.ZMyContainer のような名前を付けます。将来の標準 SDA3 クラス名と競合しないように、短いクラス名に接頭語 “Z” を付けることをお勧めします。
-
新規の SDA データ・セクションごとにプロパティを追加します。プロパティに ZMySections (複数形) という名前を付けるか、またはデータ・クラスに StartXMLList()Opens in a new tab メソッドおよび EndXMLList()Opens in a new tab メソッドを実装している場合はその値をプロパティ名として使用します。プロパティは、User.ZMySection (単数形) のリストである必要があります。
-
クラスをコンパイルします。
Note:
<PROTECT> エラーが発生する場合、HSLIB データベースを一時的に書き込み可能にし、クラスを再コンパイルしてから、HSLIB を読み取り専用に戻します。
以下の例は、移植手術に関するセクションを格納するカスタム・コンテナ・クラスを示しています。
Class User.ZMyContainer Extends HS.SDA3.Container
{
Parameter XMLNAME = "Container";
Property ZTransplants As list Of User.ZTransplant;
}
構成レジストリへのカスタム SDA コンテナの登録
カスタム SDA コンテナ作成の最後の手順では、構成レジストリにカスタム・コンテナを登録します。
-
構成レジストリに、以下のようなエントリを作成します。
名前と値のペアを使用した SDA の拡張
以下のいずれかの方法を使用して、SDA を拡張できます。
カスタムの SDA の名前と値のペアの作成
SDA の各セクションには、<CustomPairs> 要素が含まれています。既存の SDA セクションに、追加データ項目を取得する名前と値のペアを追加するには、該当するセクションに <CustomPairs> 要素が含まれる SDA ドキュメントを登録するだけです。名前と値の各ペアは、<NVPair> 要素に記述されます。<CustomPairs><NVPair><Name> プロパティにデータの説明を入力し、<CustomPairs><NVPair><Value> プロパティにデータを格納します。
以下の例は、SDA のアレルギーに関するセクションに一連の治療を追加する方法を示しています。
<Container>
...
<Allergies>
<Allergy>
...
<CustomPairs>
<NVPair>
<Name>Treatment</Name>
<Value>Oral Corticosteroids</Value>
</NVPair>
<NVPair>
<Name>Treatment</Name>
<Value>Injected Steroids</Value>
</NVPair>
</CustomPairs>
</Allergy>
</Allergies>
...
</Container>
カスタム SDA オブジェクトの作成
SDA には、他の SDA セクションに関連しないデータの格納に使用できる <CustomObjects> セクションを設定できます。このセクションは、1 つ以上の <CustomObject> 要素で構成されます。
各 <CustomObject> 要素に、以下の要素を 1 つ以上含める必要があります。
各 <CustomObject> には以下の要素を含めることもできます。
-
<ActionCode><ActionScope> — 実行するアクションを示した、HealthShare Unified Care Record 製品に対する指示。具体的な詳細は、クラス・リファレンスを参照してください。
-
<CustomMatchKey> — データベースに既に存在するオブジェクトと、対象タイプのエントリとを照合する方法を示した、HealthShare Unified Care Record 製品に対する指示。通常は、カスタム・ペア・エントリを連結したものになります (例 : <NVPair3>|<NVPair1>)。各値は照合で必須になり、指定された順序で評価されます。
-
<ExternalID> — 外部システムに対して意味を持つ可能性がある識別子。指定されている場合、プライマリ照合キーとして使用されます。
-
<EnteredOn>、<EnteredAt>、<EnteredBy> — ソースの詳細。
-
<FromTime>、<ToTime> — データが有効な期間に関する詳細。
詳細は、HS.SDA3.CustomObjectOpens in a new tab のクラス・リファレンスを参照してください。
以下の例では、2 件の理学療法の訪問ケアに関するデータが格納されています。
<Container>
...
<Patient>
...
</Patient>
...
<CustomObjects>
<CustomObject>
<CustomType>HomeCareEvent</CustomType>
<EnteredOn>2012-02-05T13:00:00Z</EnteredOn>
<CustomPairs>
<NVPair>
<Name>EventType</Name>
<Value>Physiotherapy</Value>
</NVPair>
<NVPair>
<Name>Comment</Name>
<Value>Minimal progress. Assistance required for many tasks.</Value>
</NVPair>
</CustomPairs>
</CustomObject>
<CustomObject>
<CustomType>HomeCareEvent</CustomType>
<EnteredOn>2012-02-01T12:55:00Z</EnteredOn>
<CustomPairs>
<NVPair>
<Name>EventType</Name>
<Value>Physiotherapy</Value>
</NVPair>
<NVPair>
<Name>Comment</Name>
<Value>Home evaluation. Bathroom rails and detachable shower head required.</Value>
</NVPair>
</CustomPairs>
</CustomObject>
</CustomObjects>
...
</Container>