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

私のクリニックで運用しているアップルスクリプトは、小さなスクリプトは無数に有りますが、私のクリニックでメインに作業しているスクリプトは2個です。 一つは会計後の処方情報の回収・請求金額・病名登録といった情報を診察終了時にORCAデーターをファイルメーカーに取り込むハンドラーと、もう一つは採血のオーダーをORCAの中途終了データーに挿入するハンドラーになります。

まずデーターをORCAから取り出して整形してカルテに取り込むという点に絞って、前者のスクリプトの中のサブルーティンハンドラーを一つ紹介してみます。 このハンドラーはORCA内の処方情報の回収を担当しています。
このハンドラーは別のメインフレームから呼び出されるのですが、ファイルメーカーへの入力はメインフレーム上行い。 サブルーティンハンドラー内ではできるだけアップルスクリプト単体で動作確認が出来る様にしています。 その方がテストしやすいと言うのもあります。
最初の3行は私がバグ取りのときに使った変数と、テスト用のreturn Shoho_FromORca_ToFMP2023が記載されています。 今は完成しているので行頭—を入れてInactiveにしています。
5行目は引数qに対して、デフォルト値をいくつか設定しています。 このハンドラーはPatient_ID、Perform_Date、当日何回目の診察かを示すSequential_Numberの入力が必須となります。 6行目で入力されていなければ一応エラーを返して実行停止する様に設定しています。

8行目にconvert_kana,scpt内の半角を全角に変更するためのハンドラー hanToZenをコールするため、一度関数をロードしています。
10行目から12行目はORCA-APIにリクエストするためのXML書式を用意しています。 reqXMLという変数に格納しています。
ORCA-APIのRequestのためのXMLはその要素がなくても空白データーが格納されたXMLタグがあっても良いのでこのように記載してます。 if文を使って記載して行くのは視認性が悪いので単純に記載することが重要です。
14行目で、以前紹介したハンドラー/cmd_apiを使ってORCAヘ問い合わせを行い、その返信を変数oXMLに入れてます。 
得られたXMLデータは
オンライン資格確認Phase04bで紹介した様にSystem Events内のXMLスイーツを用いて項目毎に解析してゆく事になります。
ORCAから戻ってくるXMLデーターは1階層目はxmlio2ですが、2階層目は使われるURLによって異なっています。 しかしその下位の階層では比較的定型的な形をしているため、2階層目のXML elementは特に名前で定義せず番号で定義しています。 このデーター取り込みで出来れば診療情報のInvoice_Number(18行目)とInsurance_Conbination_Number(19行目)をこちらで取り出してレコードqに格納しておきたいのでそれらをqに格納します。 qを&で結合していますが、左辺が優先されますので左辺におく事で5行目で設定したDefault値を上書きしてくれます。
次は5階層目のXML element Medical_Informationのデーターを変数Medical_Informationに格納します。 Medical_Information内には多数のMedical_Information_Childと呼ばれるXML elementが存在します。その中のXML element "Medical_Class"という項目内にそのデーターが診療情報のどういうカテゴリーかと言う事が記載されています。 例えば11ではじまれば診察、13ではじまれば医学管理料、21ではじまれば内服、22ではじまれば頓服、23ではじまれば外用、60ではじまれば検査と行った具合になっています。 なのでここでは診療単位毎にXML element "Medical_information_Child"の要素をevery elementで取り出してます。 つまり

Set MLIchild130L to every XML element of Medical_Information whose XML element "Medical_Class"'s value is "130"
と言った具合ですね。 これを後でrepeat with構文で取り出して整形するわけです。(22~24行目)
この先はORCA内のデーター構造の解析になりますので、ご自身で一度ORCA-APIのページを確認してみて下さい。

このハンドラーでは38行目にstr_pad_2bitというconvert_kana内の関数がコールされています。 これはphpで使われるstr_padと同じで、表示のために文字の長さを一定にするコマンドですが、日本語の様な2bit文字だと上手く動作してくれない事があったので、2ビット文字を上手く全長さを合わせてくれるように作ったハンドラーです。 昔作ったハンドラーなのであまりビューティフルではないですが、開示しておきましょう。
str_pad_2bit
こう言った情報を変数 Rpに連結して最終的にレコードq{Drug_:Rp}という項目で結合して返却しています。
色々とエラー処理が甘い部分が多いですが、一応普通に動いているのでまあ良しとして下さい。 気になられたらご自身のスクリプトで改善してみて下さい。

こうやってORCA-APIで得られたXMLデーターを自分の電子カルテに必要な形にしてファイルメーカーへ挿入して行くという作業になります。 

おわりに



処方入力も全てをファイルメーカーでされておられる先生もおられるとおもうのですが、ORCAの構造は特殊ですし、レセプト申請の際に必要になりそうな追記情報を常にORCAが提示してくれますし、それは将来にわたってどんどん変更されて行くと思います。 それを一つ一つ自分で設定して行くのはドクターの活動をしながらやるには少々重すぎます。 折角ORCAを作っておられるスタッフが入力サポート機能を付けてくださっているのですから、それを利用しない手はないのじゃないかなと思います。 実際ORCAでの処方入力はそれほど大変な作業じゃありませんので、やっていくうちにすぐ覚えてしまいますし、ファイルメーカーの入力よりもレイアウトが軽くて使いやすいと思います。

三好クリニックでの電子カルテ・レセコン