ORCA-APIを用いたアップルスクリプトの実例02c

次は採血項目をXML化する方法です。 このパートは主に4つのパートから出来ています。 先ず通常の検査項目のXML化、次は特定薬剤治療管理料の項目設定、 3つめは外来迅速検体検査、 4つめは悪性腫瘍疾患特異物質治療管理料の項目になります。

Set_XML_MedicalInformation_FromBlood2023a
先ず最初は一般の検査項目ですね。このパートのポイントは採血項目はそれぞれ検査区分毎にまとめてヘッダーを付けて登録して行く必要があると言うこと。 そして検査区分の最初に出現した検査項目の所だけMedical_Classを3桁600で、その後の出現時には2桁60と登録することで、ORCA上で検査部分の区切りを一箇所にすることが出来視認性がよくなります(よく説明の意味が解らなければ一度38行目のMedical_Classを60から600に変えて登録して見ると解ると思います。 凄く見にくいと感じるはずです)。

じゃあ初めから説明して見ましょう。
2行目は先ず初期値を設定し、bloodデータが存在しなければこの登録自体必要ありませんので""を返します。
4行目にf60(=first appearance of 600)をtrueで設定しておきます。
7行目は当院で使う検査区分(knsjisgrkbn_ls)を列挙してます。 自院で使われる検査区分をここに記載して下さい。
8行目はこれから組み立てて行くXMLのファイナルレザルトであるLayer0のXML0を""で初期設定しておきます。
9行目から41行目まではrepeat文で上記のknsjisgrkbn_lsの中のアイテムを一つ一つ取り出し、SQLでチェックして行く作業をします。 おそらく検査項目のコードは1字目は大体1固定、次の2-3字目は検査なら60 処方なら22といった具合、4-5字目が検査区分のはずで、bloodから送られてくるデーターをソートして送って置けば、こうやってSQLで確認する必要は無いのだと思うのですが、結構ランダムに配列されているのでSQLでそれぞれの区分で存在を確認して区分毎に処理して行ってます。
11行目から12行目はSelect文を作成しています。 ここでkbn_'s contentsという記載がありますね。 これ以前にも多用していたと思うのですが、通常リストから1項目取り出してRepeat内で利用する場合、取り出したkbn_の中にはitem i of knsjisgrpkbn_lsというリストの中の何番目の項目という情報が格納されています。 これ結構面倒なのでそのリストの項目に設定し直すために、set kbn_ to kbn_'s contentsと定義し直しています。 勝手にストリングに変更してくれる場面もありますが、明示しておかないとエラーが起こることもあるのでアイテム内の情報に変換する癖をつけた方がよいと思います。
13行目でSQLでbloodに格納されたリストに含まれる採血項目が検査区分に含まれる物が返却されてきますが、データーが無ければErrorを返しますのでErrorが無ければ以下のif文内を実行する様に設定します。先ず戻って来た文章はアイテム毎に改行されて戻ってくるのでParagraphに変換してarray_という変数に入力してリスト化します。  その中の一個目のデーターがMedication_codeになります。 Medication_Numberは基本1ですが、IgE等で複数有る場合もあるのでIgEは個別にMedication_numberをbloodデーター内で grep - o | wc -l で数を数えます。 
得られた一つ一つのデーターをXML2にXML形式で挿入し、その情報をXML1に投入追記してきます。 XML1は何回かループさせて情報を列挙したあと、ヘッダーであるMedical_Classを含むXML文でラップします。 そうやってヘッダ構造を付けたXML1文をXML0に追記して行きます。 それをこのループの間やり続けると最終的にXML0に検査項目部分のXML形式の文章が記録される事になります。 
ちなみにfXMLはオンライン資格審査のときとは異なり、データーのclassの定義が必要になりますのでこのようなハンドラーを別に用意しています。
fXML

これだと
ClassのデフォルトはStringに設定しているのでコードが短く出来て視認性がよくなります。下にコメントとして残してあるのは、前後にシングルクオーテーションがある物を取り除くコマンドですが、以前使ってた物で今は使われていないので消してます。 このハンドラーはできるだけコードに記載した時にコードが短くなる様にレコードではなく変数で入力される様にしています。
次は薬剤治療管理料の項目を追記してゆきます。
三好クリニックでの電子カルテ・レセコン