2013年頃、Google Apps Scriptにて初めて作成した社内用アプリケーション。当時はjQueryすら使えないSandbox環境でピュアJavaScriptしか使えませんでした。しかし、現在は様々なライブラリやフレームワークを利用出来る為、今回Vue.jsおよびVuetifyにてリメイクしてみました(これをベースに30本ほど当時は作っていました)。
主に医療機関にて、新規に医薬品を利用したい場合に本部薬剤部長宛に病院指定の標準指定医薬品以外を利用したい場合に、申請を出す為のフォームで、ワークフローシステムになっています。申請後承認されれば承認された申請書がPDFで返ってくる仕組みになっており、PCおよびスマートフォンの両方で利用可能です。
今回利用するファイル類
- 医薬品新規申請管理台帳 - プログラム本体
- 医薬品データベース - 医薬品検索用
- 過去ログマスター - 過去ログを格納する場所
- 医薬品新規採用申請Template - 申請の原紙となるファイル
- 理事長報告用テンプレ - 理事長へ報告する様式の原紙
今回のプログラムは上記の5個のファイルで構成されており、プログラム本体には申請側/承認側/共有ライブラリの3つのプロジェクトが入っています。これらをセットアップして利用する事になります。
事前準備
医薬品データベースの準備
医薬品新規申請フォームの「申請側」フォームで医薬品に関する細かい情報を入力する必要があるのですが、これらの入力をアシストする為のデータ群で、検索して使う場合ここのデータから取り出し、入力補完してくれます。
元になるデータは医薬品DBのCD-ROMデータや、MEDIS標準マスター、社会保険診療報酬支払基金の医薬品マスターなど様々な情報を整理して、ここに記載しておく必要があります。JANではなくGS1コードを基準として作っている為、注意が必要です。
図:医薬品のマスターを整備しておけば入力が楽になる
薬効と剤形
前述の医薬品データベースおよびプログラム本体の医薬品新規申請管理台帳には、双方に「薬効」と「剤形」に関するシートがあります。こちらにそれぞれ、このプログラムで利用する薬効と剤形を登録しておく必要があります。登録されてるもの以外は利用できないので、予め用意しておく必要があります。
図:地味な項目ですが選択する項目で必要
格納先フォルダの作成
申請後にTemplateを利用して各種申請書類や理事長報告書等のエクスポートで利用する為の格納フォルダを作成しておきます。通常はプログラム本体のあるフォルダ内に作成しておき、次項のセットアップで利用します。また、申請書類についてはそのフォルダ内に「所属施設毎」のフォルダが自動で生成されて、各病院毎に格納される仕組みになっています。
セットアップ
設定シート
プログラム本体の中に「設定シート」が入っており、以下の内容を登録しておきます。
- 開始年度と終了年度 - Filter関数で利用。2022と2023と1年分の年度を入力しておく(4月始まり3月お終いの設定になっています)
- 担当者一覧とメアド - このプログラムで申請等を行うメンバーの氏名とメアドを登録しておきます。退職時の置き換えでも利用。
- 施設名とソート - 申請時の病院名で利用。利用する全ての施設の名前と適当なソート順(非重複)で登録しておきます。
開始年度と終了年度は、管理者機能の「年度別出力」を実行すると、各項目が1ずつ加算され翌年度の設定に自動で書き換わります。
図:ここは一番最初に設定する場所です
スクリプトエディタでの作業
サイドバーの設定の前にいろいろスクリプトエディタ側で先に行っておかないといけない設定があるので、そちらをまず行います。
PickerのAPI Keyをいれる
アプリの設定に於いて、ファイルやフォルダの指定などを行うGoogle Picker用のAPI Keyを入れておく必要があります。API Keyの取得については、以下のエントリーを参考にGoogle Cloud Consoleで設定が事前に必要です。
取得したAPI Keyは以下の手順で入れておきます。
- スクリプトエディタを開く
- 医薬品新規申請PC用のプロジェクトを開く
- 左サイドバーの「picker.gs」を開く
- 上部にあるapikeyという変数に取得したAPI Keyを入れて保存する
本当はここも管理者設定として作っておくと良いのですが・・・・
共通ライブラリの設定
管理者用設定やフォーム設定等の設定項目を本アプリはスクリプトプロパティには保存していません。設定を保存すると自動的に設定JSONを保存したファイルが生成される仕組みになっており、このファイルへのIDのみをスクリプトプロパティに格納しています。しかし、このプロパティは申請側・承認側両方で利用する為、共通のプロパティとして設定しておく必要があるので、以下の手順でデプロイして、「医薬品新規申請PC用」「薬剤新規申請承認PC用」でライブラリとして追加が必要です。
- スクリプトエディタを開き、共通ライブラリプロジェクトを開く
- 右上のデプロイボタンをクリックして、新しいデプロイをクリック
- 種類の選択では「ライブラリ」を選択して、デプロイをクリック
- デプロイIDが出ますがこれは使いません。左サイドバーのプロジェクトの設定を開く
- スクリプト IDがあるのでこれをコピーしておきます。
図:スクリプトIDが必要になる項目
ウェブアプリのデプロイ
「医薬品新規申請PC用」「薬剤新規申請承認PC用」側では、ウェブアプリを使えるようにすると共に、前述のライブラリの登録が必要です。
- スクリプトエディタを開き、医薬品新規申請PC用プロジェクトをクリック
- 左サイドバーのライブラリから+アイコンをクリック
- 既にsetmanという項目がある場合削除しておく。
- 前述のスクリプトIDを入れて検索をクリック
- バージョンを最新を選んで、IDには「setman」と入力して追加をクリック
- これを薬剤新規申請承認PC用側のプロジェクトでも行って入れておく
図:ライブラリの追加が必要になります
続けて、右上のデプロイをクリックしてウェブアプリケーションとして公開します。
- デプロイをクリック
- 新しいデプロイをクリック
- 種類の選択ではウェブアプリを選択する
- 通常は次のユーザとして実行は自分を選択します。誰がアクセスしても管理者の権限で動かします。
- アクセスできるユーザは、通常は●●内の全員(組織内のユーザのみ)を選択します。
- 次回からはデプロイを管理から作業を行うようにします(でないとURLが変わってしまうので注意)
- デプロイをクリックすると、ウェブアプリのURLが出てきます。これを利用者に通知するか?Google Sites等に貼り付けて利用します。
- 「薬剤新規申請承認PC用」のウェブアプリのURLを取得したら、これは次項の管理者用設定に於ける「管理サイトのURL」として登録が必要なので控えておきます。
図:ウェブアプリとして公開の作業が必要
管理者用設定
サイドバーの設定
スプレッドシートのメニューより「共通設定」⇒「管理者用設定」を開くとサイドバーが開き、各項目を入力する必要があります。この中には設定以外のユーティリティな機能も格納されています。
以下の設定を入れておきます。
- 管理者通知アドレス - 申請があった場合に承認者へと送られるメールアドレスを入れておきます。
- 管理サイトのURL - ここはスクリプトエディタでのデプロイで生成された最後がexecのURLを格納しておくものなので、0とでも入れて取り敢えず保存しておき、URLが分かったら入力しましょう。
- ファイルの保存場所 - 前項で作成した格納先フォルダを指定します。ボタンをクリックでPickerが開かれるのでフォルダを指定するとIDが入ります。理事長報告書や年度別ファイルの切り出し先に利用します。
最後にサイドバー上部の保存ボタンをクリックしないと保存がされないので注意。
ユーティリティな機能としては
- 年度別出力 - 年度末に年度別のファイルとして切り出す機能です。過去ログマスタへ切り出してる場合は利用しなくても良いです。処理済み以外のデータは切り出し後も削除されずに残ります。
- 理事長報告書 - 理事長宛報告書をテンプレートを元に病院別のデータとして整理して出力します。
- トリガー設置 - 毎日8時に未処理となってるレコードのサマリーを管理者あてに通知メールを送る為のスクリプトトリガーを設置します。管理者以外設置しないでください。二重で設置した場合二重で実行されてしまいます。
図:サイドバーからの設定
図:Pickerでフォルダを指定してる様子
処理済みを過去ログへ移動
申請一覧に於いて、ステータスが「処理済み」となっているレコードを過去ログマスターのファイルへ移動し、申請一覧からは削除する機能です。既に処理済みとなってるレコードがたくさんあると動作が遅くなりやすいので、定期的に実行すると良いでしょう。承認側のフォームには処理済みのレコードはフィルタされて表示されませんので、やってもやらなくても変わりませんが、全レコードを取得して作業をしていますので、実行を推奨します。
設定を初期化
各種設定は、プログラム本体のある場所の中に「スプレッドシートのID_管理者メアド」で作成されるJSONファイルに外部出力で保存されるようになっています。スクリプトプロパティにはこのファイルへの参照のみが入っており、設定を外出しで管理しています。
設定を初期化ではこのファイルを削除する機能になっており、このJSONファイルへの参照は共通ライブラリプロジェクト側のスクリプトプロパティにjsonというキー名でファイルへのIDが登録されています。
実行するとファイルが削除されてしまいますので、注意が必要です。
フォーム用設定
スプレッドシートのメニューより「共通設定」⇒「フォーム用設定」を開くとサイドバーが開き、各項目を入力する必要があります。ここはアプリケーションで利用するテンプレや通知先メアドの指定などを行います。
- Fromタイトル - メールのFromのタイトルになります(通常は医薬品新規申請でOK)
- 申請メール送信先の指定 - 送信先つまり承認者のメールアドレスを入れておきます。
- 本部メール送信先の指定 - おもにCCで送信される場合などに必要なメアドです
- 申請書格納先 - 個別の申請書の出力先フォルダを指定します。通常は前述の格納先フォルダを指定します。
- 申請書テンプレ - 医薬品新規採用申請TemplateをPickerから指定してファイルのIDを入れます。
- 過去ログマスター - 過去ログ切り出し先のスプレッドシートをPickerから指定してファイルのIDを入れます。
- 医薬品マスター - 前項で準備した医薬品データベースのスプレッドシートをPickerから指定してファイルのIDを入れます。
- 理事長報告書テンプレ - 理事長報告書テンプレのスプレッドシートをPickerから指定してファイルのIDを入れます。
最後にサイドバー上部の保存ボタンをクリックしないと保存がされないので注意。
図:フォームの設定も全て埋めておきます。
使い方
申請側
申請側はデプロイされたURLにアクセスして、いろいろな情報を入力後にフォーム右上にある送信ボタンを押せば
- 承認者宛に通知が送られ
- スプレッドシートに記録が追加
- 個別の申請書が作成される
仕組みになっています。承認者が承認をするのを待ちます。ただし医薬品の情報を入力するのが結構大変なので、前述の準備をしておいた医薬品データベースを検索して補完入力出来るようになっています。
薬剤名の隣のボタンをクリックし、医薬品名や卸名などで検索するとデータベースに引っかかる項目が出てくるので、選択をすると内容が補完入力されますので、データベースはしっかり準備しておくと良いでしょう。
プルダウンの選択項目はプログラム本体のスプレッドシートの剤形や薬効などをきちんと整備しておく必要があります。
図:20個程度の入力項目があります。
図:医薬品検索画面
承認側
承認側は2つのルートから承認が可能です。通知のメールで送られてくるリンクを踏むと、ダイレクトに承認画面が起動して対象の申請の画面が開くようにロジックが組まれています。このパターンが多いかもしれません。
もう一つは通常通りデプロイされたURLをクリックして開き一覧から承認レコードを選択して内容を確認して処理をします。
承認実行時の内容に応じてプログラム本体の申請一覧のステータスが変更し、承認した場合は「処理済み」となり次回開いた場合には画面に表示されなくなります。また承認を実行すると
- 承認側の追加の情報をスプレッドシートに書き込み
- 個別の申請書類側にも情報を書き込み
- 申請書をPDF化して申請者へと自動で通知と送信
といった一連の作業が実行されます。承認は個別の承認画面を出した後、
- 右上の✔のアイコンをクリック。
- 承認画面が出てくるので、選択していく。
- 通知送信をクリックすると確認ダイアログとコメント欄が出てくるのでコメントを入力
- 送信実行をすると処理が走り、通知が送られて完了となります。
図:承認作業ダイアログ
図:承認の確認ダイアログとコメント
退職者引き継ぎ
申請者側で退職者が出た場合、まだ未承認のものを承認作業してしまうと、存在しないメアドに対して通知を送ることになります。これを防ぐ為に既存の申請者一覧のメアドを一括で引き継ぎ者のメアドに交換する機能がコレです。
あらかじめ設定シートの担当者一覧に引き継ぎ者の担当者名とメアドを入れておく必要があります。置き換え実行をするとメアドと担当者名が置換されるため、この状態ならば承認を実行しても問題なく送信がされるようになります。医療機関は人の出入りが激しいので人事情報を密に連携をしておいてメンテが必要になります。
図:退職者情報を置換しないとエラーになる
動作サンプル
書き込みや送信は出来ませんが、申請側と送信側のフォームのサンプルを用意しました。ただし、アクセスしてきてるユーザのメアドを取得して返すコード(Session.getActiveUser().getEmail())を利用している為、通常のGoogleアカウントの場合は正しく表示されない場合があります。
Google Sitesにページ全体で埋め込み例
2022年5月末、Googleサイトで大きなアップデートがあり、ページ全体に埋め込み機能がリリースされました。結果、これまで高さの面で制限を受けていたGoogle Apps Scriptのアプリがフルサイズで貼り付けられるように成りました。テストで作成したものはこちらのリンクから開く事が可能です。申請と承認の両方を貼り付けてあります。
申請側フォーム
大画面で開く場合にはこちらのリンクをクリック。
承認側フォーム
大画面で開く場合にはこちらのリンクをクリック。