2021年9月10日金曜日

応答無の判定条件を変更

【経緯】

これまで、スピーカーが「お薬飲んで」と督促しても利用者から5回応答がなかったらカレンダーを「応答無」にして赤色から黄色に変更していた。にもかかわらず服薬イベントの終了時刻に達するまで5分おきに督促し続けていた。
そのため、6回目以降のスピーカーの督促に反応して「お薬飲んだ」と利用者が応答すると、スピーカーは「お薬カレンダーに記録しておきます」と言っておきながら、実際は応答無(黄色)を済(青色)に変更していなかった。

【原因】

この原因は、応答無の判定条件が終了時刻とは無関係に「5回目の督促」にしていたためである。そこで、今回応答無の判定条件を「現在時刻が終了時刻よりも超えていたら」に修正した。

【プログラムの修正】

修正対象のプログラムは「服薬管理システムA3(平松)」で、Googleドライブの「薬シェア」フォルダ内の「服薬管理」フォルダ内にある。
プログラムの修正箇所は、getEventsById関数内の応答無かどうかを判定するロジックである。従来は次のように督促回数(変数:num_reminder)が5回であるとしていた。
// 未服用でかつ催促の回数が5回になったらタイトルに「(応答無)」に変更し、色を黄色に変える
if(response.taiking_status == '0' && num_reminder == 5){
  result = event.getTitle().indexOf("(");  
  //"("以降の文字を切り取る。
  results = event.getTitle().substr(0,result);
  //タイトルを○○の薬(応答無)に変更する。  
  event.setTitle(results+'(応答無)');    
  //色を黄に変更する。
  event.setColor(CalendarApp.EventColor.YELLOW); 
  // LINEにメッセージを送る
  Drug_LINE_notify('お薬を飲むように' + num_reminder + '回催促しましたが応答がありません。');
}

今回、2行目のif文を次のように変更した。

if(response.taiking_status == '0' && isNoResponse(event)){

ここで、関数isNoResponseは応答無を判定する関数で、次のような関数である。

/**
 * 2021.9.10 応答無の判定条件
 * 従来は「num_reminder == 5」だったが、これを
 * 「event.getEndTime() < current_time」
 * にする(current_time = new Date())。
 */
function isNoResponse(event) {
  var current_time = new Date();
  var result = (event.getEndTime() < current_time) ? true : false;
  return result;
}

この関数は現在時刻が終了時刻event.getEndTime()を過ぎていたらtrueを返す。

0 件のコメント:

コメントを投稿