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

最後は少し長大なので何回かに分けて解説して見ます。 
採血のオーダーシステムは契約している臨床検査会社によって違いますよね。 私のクリニックは福山臨床検査という会社にお願いしています。 キッチリ検査して結果も戻してくれるのでとても満足しています。 いつもありがとうございます。 
ORCA単独で採血項目の入力をするのは結構大変です。 私の所はファイルメーカーで項目を入力しその採血項目をORCA-APIを使って処方データーなどを入力した中途終了データーに追加登録することで処理しています。 本来はORCAで編集した中途終了データーへORCA-APIを使って中途終了データーへの追加登録は出来ないはずなのですが、少し裏技がありましてそれで登録してます。 今回はそれを紹介することが目的です。
先ずこのスクリプトは今動いている物をそのままスクリーンキャプチャーしてます。 もう少し綺麗に整形して世に出してもよいんですが、整形時にバグ作っちゃっても申し訳ないので、少し汚いコードですがそのまま見てください。 きっともっとよい方法がいくらでもあるはずです。

main_shinryo_blood01small


ざくっと前半を先ずお見せしましょう。



冒頭部のblood_lsは採血オーダーシステムから送られてくる採血コードの一覧です。 この一覧カンマで区切られているのですが一つ一つの項目がシングルクオーテーションで区切られてますね。 これ8年前に書いたコードなので、今思うと普通にクオーテーション無しで送っても良かったんじゃ無いかなと思うんですが、この方法で送るとそのまま無編集で後述のSQL構文の中に投入することが出来ると言う理由です。
7行目からハンドラーmain_shinryo_bloodが始まります。
8行目は初期値で必須の項目, Patient_ID, Perform_Date, bloodを""で設定します。
ファイルメーカーで作製された日付のデーターは一桁の日付は冒頭に0が付いていないので10行目に date関数でフォーマットを調整します。 これ本当は11行目の後に書くべきですね。 そうしないと日付の入力がされない場合にdo shell scriptのエラーでクラッシュして正常にエラーを返してくれませんので。
11行目で必須項目が抜けていたらエラーを返すようにします。
12行目でデーターを送っていますとユーザーに表示。
13行目と14行目は後で使うサブスクリプトをロードしてます。
16行目-17行目はORCA-API /api01rv2/tmedicalgetv2を使うためのRequest XMLを形成してます。 このAPIは条件に合った中途終了データーが存在しているかどうか、そして存在していたらその保険情報データをXMLデーターで返してきます。
18行目でcmd_apiを使ってOCRAにリクエストします。返答されてきたXMLはORCAが正常に動作していたらoXMLにデーターが戻って来ますが、何らかの理由で戻ってこない事もあるのでエラー処理を行っておきます。(19行目)
20行目にXMLスイーツを動作させるためにtell application "System Events"をコール
21行目でXMLデータをoXMLから新規に作成しResXMLに格納します。 
このリクエストした中途終了データーが無ければ23行目 XML element "API_Rsult"が"00"以外を返してきますのでその場合そのエラーメッセージをDisplay dialogして終了します(26行目)。
もしもデーターがあればその後でそのデーターをハンドルするために必要な情報を抜き出しておきます。
28行目では先ほど取り出したMLICと言うエレメント内の"Tmedical_List_Information"内の最初に出現した"Tmedical_List_Information_child"を選択する様にしてます。 実は中途終了データーが当日に複数有る場合も有ります。 その場合に対応していません。 もしも多人数で使用されているようならば、
Set TMLIC to every xml element of MLIC's XML element "Tmedical_List_Information"
if count of TMLIC >1 then
Display dialog "複数の中途データーが存在します。 念のため不要な中途終了データーを削除してから登録してください"
return {Er:"中途データ複数存在"}
end if
といった行を入れてもよいかも知れません。 実は診察前に中途終了データーをあらかじめ作成していた患者が、来院後に保険証の変更があったりした場合に中途終了データーが2個出来る場合があります。 うちの場合先ず受付が保険証を登録した後に診察開始しますのでそういう状況は起こりにくいのです。 
30-31行目でDepartment_Code, Physician_Code, Insuracne_Combination_Numberを取り出し
33行目でSQL内で使用する日付のフォーマットsryymdを作ります。
うちのクリニックでは診察券番号が6桁の方と7桁の方がいらっしゃって、ORCAのpsqlでは冒頭に0を入れて7桁に揃えないとエラーが起こるので
Patient_ID7をレコードqに格納しておきます。 shellのprintf %07dを使ってます。 (34行目)
またこの後のsql文で使用するORCAデータベース内の固有の患者番号ptidをPatient_ID7から計算しておきます。 35行目~36行目

これでこの後SQL文を利用する準備が出来ました。

先ずは現在保存している中途終了データーでこの後上書きする部分を削除しておきます。 このスクリプトは
orca_APIサブスクリプト内のCut_wksryactというハンドラーで行います。 
次回はcut_wksryactの内容について解説して見ます。

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