推定のしくみ

Android版・CLI版とも同じ計算です。

1本あたりの日数(通常期間)

イレギュラーでない、使い切った記録のうち 直近3本の平均 を整数日に四捨五入して使います。 「平均より直近の実績のほうが実態に近い」という経験からです。

  • 途中廃棄・紛失・中断などはイレギュラーにして除外できます。 イレギュラーが1つあれば、それより前の実績はたどりません

  • 1日の点眼回数などが変わったときは「点眼パターン変更」(CLI版は pattern)で直近の1本をイレギュラーにし、 変更後の実績だけで推定します

  • 実績が1本・2本しかないときは、その1本・2本の平均を使います。実績が無いときは推定できず、必要本数は「相談」になります

  • 極端に短い記録(中央値の 0.7 倍未満)は自動で除外します

  • 開封後の廃棄期限は推定の上限にはしません。 うっかり使い続けることもあるので、超過したら知らせるだけにしています

必要本数

開封分残日数 = 通常期間 − (来院日 − 開封日)
在庫残日数   = 開封分残日数 + 未開封の本数 × 通常期間
足りない日数 = 次回来院日までの日数 − 在庫残日数
必要本数     = ceil(足りない日数 ÷ 通常期間) + 予備1本   (マイナスは0)
  • 必要本数は、処方をお願いする本数です。0 は処方不要です

  • 来院日の時点で通常期間を超えて使っている1本は、残り0日として数えます。開封中の1本が無いときも0日です

  • 予備を1本見込むので、足りない日数が少しマイナス(余る)でも、1本分(通常期間)以上余らない限り必要本数は1になります

  • 1回の処方で出してもらえる本数の上限は、条件がはっきりしないので設けていません

計算の例

通常期間が26日の目薬を 9/11 に開封し、来院日が 9/25、次回来院日が60日後、未開封が0本の場合:

  • 開封分残日数 = 26 − (9/25 − 9/11 = 14日) = 12日

  • 在庫残日数 = 12 + 0 × 26 = 12日

  • 足りない日数 = 60 − 12 = 48日

  • 必要本数 = 48 ÷ 26 = 1.8… を切り上げて2本、予備1本を足して 3本

定数

予備・次回来院日の既定の期間は、次の定数で変えられます (次回来院日の既定の期間は、Android版の「設定」や CLI版の interval でも変えられます)。

定数

場所

既定値

SPARE_BOTTLES

drugdb/estimate.py

1

DEFAULT_SPAN

drugdb/report.py

60(日。来院日から次回来院日まで)