深夜1時半の仕事は「昨日」の仕事、と決めるまで
深夜1時半に始まった仕事が、キャストのスマホでは「9/10(木)」の枠のいちばん上に入っている。暦の上では9月11日の仕事なのに、明細は9月10日の6件目として数える。 このデリヘル管理アプリは、営業日の変わり目を朝5時に置いている。5時より前の時間帯はすべて前の営業日に属する。 昨日の集計の話で当たり前のように使った区切りだけれど、最初からそうだったわけではない。
最初は0時で切って、深夜1時に集計していた
5月の終わりまで、日次の売上集計は暦日で区切って深夜1時に走っていた。店はだいたい3時ごろまで営業しているから、これは二重に間違っている。 0時を過ぎた仕事は翌日の売上に計上されるし、まだ営業中なのに「今日」の集計が終わってしまう。 気づいた日に、営業日の変わり目を早朝の決まった時刻にして、集計もその時刻のあとに走らせるよう変えた。 3時に店を閉めても、最後の仕事の完了を押すのはそのあとだ。境目は閉店より十分あとに置きたくて、5時にした。 あわせて、売上を「予約を受けた日時」ではなく「サービスを提供する日時」で数えるようにもした。深夜の仕事が前の営業日に入るのはこの2つが揃って初めて成り立つ。
境目は一か所に書く
7月の頭に全ソースを見直したとき、集計とは別の場所で同じ間違いが見つかった。配車計画が「今日の日付」で予約とドライバーの勤務枠を絞っていて、 0時を回った瞬間に前日22時から入っているドライバーと、深夜1時半の予約が計画から消えていた。 直近の予約一覧も暦日で縛っていたので、23時台に翌0時半の予約を受けても一覧に出なかった。 集計は直っていて、配車は直っていない。同じ「営業日」を2か所で別々に計算していたからで、この日に境目の時刻を定数として1か所に置き、 「この時刻を含む営業日の開始と終了」を返す小さな部品を作って、集計も配車もそこから引くようにした。 前日22時開始のシフトと深夜1時半の予約が計画に載ることは、そのままテストになっている。
部品にしてからは使う場所が増えた。給与明細の営業日、ドライバーが経費を申請した瞬間の営業日、売上金を預かった台帳の日付、キャストのスマホで明細をまとめる単位、 ドライバー管理の「今月」の始まり。月の区切りも1日の0時ではなく1日の朝5時にしないと、月初の深夜の仕事だけ前の月からこぼれる。 予約の作成や取り消しで「今日の配車が動くか」を判定してドライバーへ通知を飛ばす仕組みも、暦日で見ていて0時台の通知が抜けていたのを、同じ部品に差し替えて直した。
揃っていないところも書いておく。キャストのカレンダーは暦日のままなので、売上タブとは深夜帯の数字が少しずれることがあると画面に注記してある。 グループ会社のシフト画面は「営業夜」を朝6時起点で扱っていて、5時ではない。境目が2つあるのは気持ち悪いが、シフトは入力の都合、集計は数えの都合で、今のところ実害がないので放してある。
明日は、勤務時間の入力に「25:00」と書けるようにした話。20時から翌2時の勤務どうしの重なりを取りこぼしていた件も一緒に書く。