ふと思い立ち、クリニックの番号呼び出しシステムをつくろうと思いました。
つくりましたが、実際には採用されていません。
『ふと思い立ち』の経緯は以下のような感じ。
経緯
親戚がクリニックを開院することになって、Webサイト作成を依頼された。
この出来事があって、じゃあ番号呼び出しシステムが必要になるかな?と思い、つくった次第です。
でも、小規模かつ完全予約制のため、そういうシステムがなくても運営に支障がないということで採用はされませんでした。
まあ、実際に運用されるとなると、多少ネットワークを経由するシステムということがネックとなり、他者の構築したネットワークへの適用に四苦八苦することになったろうと予想されます。
ですから、むしろ採用されなくて一安心というところもあります。
基本的に、勉強の題材としてつくったということです。
でも、つくっただけではもったいないため、このシステムについてのあれこれを記事にして、わたしの備忘録を兼ねたいと思います。
完成形
では、まずはどんなシステムができあがったかを掲載しておきます。
番号呼び出しディスプレイ
こちらが番号呼び出しのディスプレイ画面側です。
普段は「診療中です」と表示されており、管理画面で呼び出しをすると、上記の画面になります。
ぴんぽーんって間の抜けた音も鳴ります。
ご覧いただけるとわかりますが、システムとかディスプレイとかかっこつけて表現していますが、単なるWebページです。
ただ、ブラウザのフルスクリーン機能を使用することで、ツールバーを削除したフルスクリーンにすることができるため、それっぽい見た目にはなります。
クリニックの待合室には、なんらかのパソコン、モニター、スピーカーを設置して、この画面を表示しておくというわけです。
管理画面
管理画面もWebページです。
診察室にいる医師は、こちらのページから番号呼び出しを行います。
上記二種類のWebページを使うことで、クリニックにおける番号呼び出しを実現します。
仕組み
このシステムはWebページのシステムということで、フロントエンドとサーバーサイドを組み合わせて構築しています。
フロントエンド
フロントエンドはJS、CDNのVue.js、axiosを用いて、サーバーサイドと通信をしています。
Webページは、
- 管理ページ
- 番号呼び出しのディスプレイページ
- ログページ
の三つのページを作成しました。
各ページは独立しています。
ページ間の通信は行わず、あくまでサーバーサイドを経由してデータをやりとりします。
サーバーサイド
サーバーサイドはPython、Flask、SQLAlchemyを用いています。
Flaskを用いることで、サーバーを立ててAPIのエンドポイントも準備できました。
データはSQLAlchemyにより、SQLiteデータベースに保存するシンプルなつくりです。
最低限保持すべきデータは「待ち状態にある番号」で、サーバーを再起動してもデータを保持する必要があるため、データベースを準備しました。
このような構成でシステムを実現しています。
気をつけたこと
ちなみに、このシステムを構築する上で気をつけたことは、『個人情報を保持しないこと』です。
名前も診察番号も、このシステムでは管理しません。
あくまで、その日限りで有効な受付番号だけ、を保持し、セキュリティ事故が起こるリスクを限りなく下げたつもりです。
電子カルテシステム等と接続するシステムであれば、要求されるセキュリティレベルは高いと思います。
ですが、入門者レベルの私の知識ではじゅうぶんなセキュリティ対策は不可能なため、最初からリスクのあるものは取り扱わないことにしました。
おかげで、システムはシンプルになってつくりやすかったです。
終わりに
こんなシステムを途中までつくりました。
完成はしていませんが、基本的な番号呼び出し機能は動作する状態です。
完成していないというのは、あれこれ考えながら継ぎ足していったため、ソースコードが散らかっている点や、データ構造がふわふわな点、バグ出しをしていない点から、完成していないと評価している状態です。
さらに欲を言えば、もっと細かい機能を付け足したいなとも思っています。
いつかいい感じに仕上がったら、リリースできたらいいな、とも思っています。
使う状況をクリニックに限定するのではなく、何かしらの順番待ちの状況で使えるような形が目標です。
実際にリリースする可能性はほぼないですが、現実的な題材は勉強にちょうどよいため、引き続き開発して、かつ、技術メモのような形のアウトプットもしていきたいと思います。
いろいろ夢は膨らみながら、まもなく年末。
アドベントカレンダーのさぼった分を必死に追っている師走です。
ここまで、読んでくださってありがとうございました。