「年に1回印刷する」場合の仕様(病院でのヒアリング)

病院のシステム開発をしているときに「処方箋は、入院日から毎年1回印刷するようにして。それから、印刷する日が近づいたらなにかメッセージを表示して」と依頼されました。
「何日前からメッセージを表示しましょうか?」と質問するのは当然ですが、それだけではプログラミングできませんよね。(※1)
実際の運用を想像しながら、いろんなケースを考えてみます。



■帳票に印刷する日付はシステム日付でよい?
「あ、昨日印刷し忘れた」とか、「明日はおやすみだから、今日印刷しとかないと」といった場合。
こういうケースは”例外”ではなく、必ず発生します。
印刷した帳票をなくしたり汚したりで後日出力し直し、なんてこともありますから。

そう考えると、「帳票に印刷する日付=システム日付ではない」場合がほとんどです。
・DBに「発行日」項目を作る
・処方箋登録画面で「発行日」を入力できるようにする
・新規に登録する時、画面の「発行日」のデフォルトは最後に印刷した日の1年後
だいたい、こんな感じになります。

■うるう年の場合は?
上記処理で、「最後に印刷した日の1年後」を求めることが必要になりました。
2/29に入院した患者さんの場合、翌年は2/28に印刷するの?それとも3/1?
この辺はクライアントによるので、決めてもらいましょう。
単純に言語で用意されている関数(VBならDateAdd)で処理すると、「あれ?」ということになります。

■休日の場合は?
「印刷するのを忘れそうだから、システムにログインした直後の画面で、今日以降1週間分の印刷対象者を表示させて」とのこと。
患者さんごとに次回の印刷予定日を計算することになりました。(※2)
その結果、次回印刷予定日は日曜日でした。日曜日に処方箋発行するかなあ?
そう。ここでもうひとつ詰めておく点があります。
「1週間前は、カレンダー上での7日前でいいのか。それとも7営業日前なのか」

・カレンダー上の7日前の場合:
ゴールデンウィーク前など、7日前に警告しても意味がないことがあります。
この点をクライアントに了承していただきます。

・7営業日前の場合:
システムで日祝(または土日祝日)から計算させることもできます。(※3)
しかし、会社によって年末年始休暇(学校の場合は運動会の振替休日など)はまちまちなので、クライアントをきちんと説得して、自動計算はやめましょう。
具体的には、休日設定画面を作ってクライアントに未来1年分の休日を入力させておく、などの仕様にします。
画面サンプル:日付をクリックして営業日・休日を切り替えるようにしています。

「処方箋発行日」というたった1つの項目なのに、ここまで考えないといけないとは。

設計屋さんの仕事は、クライアントの仕様をコンピュータがわかるように訳すことです。
相手が人間なら”いい感じ”に動いてくれますが、コンピュータが相手だとここまで指示しなければきちんと動いてくれないんですね。
この辺が簡単になれば、もっと楽できるのになぁ・・・(仕事がなくなっちゃいそうですが)



※1
「1週間前からメッセージを表示して」というクライアントでも、「発行日を含めて7日」と思ってる場合があるので注意です。
また、発行日で時刻まで必要な場合はもう少しややこしくなるかもしれません。そんなときには「7×24時間前にしますね」と、こちらで仕様を決めてしまいましょう。

※2
画面を開くたびに全患者の次回印刷予定日を計算するのは処理速度で問題になることがあります。
この場合、DBを逆正規化してデータを二重持ちします。
具体的には、患者テーブルに「次回印刷予定日」という項目を作り、なんらかのタイミングでその値をセットし直します。(今回の場合、最後に印刷したタイミングと、入院日が修正されたタイミングでよさそうです)

※3
春分の日、秋分の日は年によって違う場合があるので注意が必要です。
また、ときどき祝日が変わるので、そのたびにシステムのアップデートが必要になります。
(そのたびにシステム改善費をいただく、という考え方も・・・)
やはり休日テーブルを作っておいて、納品時に未来○年分の休日を登録しておく、というのが現実的かもしれません。

  • Spread The Love
  • Digg This Post
  • Tweet This Post
  • Stumble This Post
  • Submit This Post To Delicious
  • Submit This Post To Reddit
  • Submit This Post To Mixx

0 Response to “「年に1回印刷する」場合の仕様(病院でのヒアリング)”

Leave a Reply