OceanMini -訪問診療-

訪問診療機能は Ver 1.0.0 からメニューには入れておいたのだが、まるっきり実装していなかった。1.0.5 からデモ患者を配置し、専用のエディタに飛べるように修正した。
v1.1.3 から、実際に orca に診療行為が送信できるように改変した。

orca での設定

訪問診療といえども保険的な取り扱いは診療所外来患者と変わらないので、orca で患者受付をする際、「診療内容」で通常の外来なのか訪問なのかを区別するようにする。このため、診療内容に「08 訪問」という項目を追加する。(もちろん、デモ患者でルーティングテーブルを試すだけなら、この設定は不要です)

最終的に受付患者が以下のような表示になっていればよい。

この項目を設定するためには、マスタ登録→システム管理マスタ→1012 診療内容情報と進み、08 を新設する

新設が成功すると表示設定の画面に遷移するので適宜設定。

以上の設定で、ORCA で患者受付する際、08 項目が選べるようになる。

ORCA での設定は以上です。

ルーティングテーブルの使い方

経路表示などに有料の google map api を使っているので、この機能を使いたい人は予め google map api key を取得しておく。有料といっても常識的な使い方をしている限り無料枠に収まるはずです。
key が取得できたら、コントロールパネルの Gmap API Key にコピペする。

施設の LatLng が出発地点/最終到着地点になるので、施設の緯度経度情報を 緯度, 経度 の形式で入力しておく。(Google Map で簡単に取得できます)

ここまでが準備で、ここからが本番。

カルテメニューバーから「訪問診療」を選ぶと初期画面に遷移する。

ルーティングを決定したい日付と担当医師を選び、「ルーティング編集」を押す。

するとルーティング編集画面がモーダルで立ち上がるので、訪問したい患者を「患者検索」から選ぶ。
初期状態では、患者居宅の位置情報は入っていないか適当な値(初期デモ患者の場合)なので、「地図で登録」で登録する。

地図上でクリックすると赤マーカーが表示されるので、それでよければ「保存」で。

試しに、今回は

出発地点/最終到着地点 調布青木病院
事例 二 西調布駅北口
事例 一 ミニストップ調布多摩川1丁目店
事例 三 西調布駅南口

を登録し、訪問順序もこの順とした。
ルートの保存が終了すると「訪問ルート」タグ下にこの経路が地図表示される。

もちろん、この経路は走行距離的にみて非効率なので、再度ルーティング編集画面で手動で並べ替えるか、「経路最適化」ボタンを押して自動で最適化をはかる。

自動で最適化をはかった結果が上の図で(走行距離が最小になる経路は)

ミニストップ→調布駅北口→調布駅南口

となるようです。正しいでしょう。

最適化は greedy 法→ 2-opt 法という手法を独自実装しています。(したがってこの部分は無料)
greedy 法は、直感的にもわかりやすく「ある地点にいた時、距離が最小となる地点を次の目標地点とする」アルゴリズムです。上の例では、これだけで解けているはずです。北口(南口)にいるのに南口(北口)を目指さない人はいないと思いますが、計算機にやらせようとするとこういったアルゴリズムで定式化する必要があるわけです。
なんでこんな面倒な手法をとっているか不思議に思った人は『巡回セールスマン問題』あたりを調べてください。

なお、ルーティングテーブルには、同一患者を複数回選んでも構いません。

この場合は ORCA での受付を2回する必要があります。
ORCA での受付が済んでいないと「予定」状態のままでカルテエディタには遷移できません。

ルーティングテーブル-ORCA連携

本当は、ルーティングテーブルが完成したら、一括で ORCA 受付に登録させる機能があればいいのでしょうが、「ORCA でできることは可能な限り ORCA に任せる」という設計方針のため、そこまではしていません。
面倒でしょうが、ORCA 受付画面で(診療内容を「訪問」にして)患者を一人一人受け付けてください。