打刻

勤怠管理システムの自作-打刻種別

勤怠管理システムで打刻する際は、出勤・退勤を選んでから(または既に選ばれた状態で)打刻操作をするのが一般的です。
私は出勤・退勤を選ぶ(またはデフォルト値を確認する)という一瞬の行為さえ面倒だと感じて、何か対策できないか考えました。

結果として、一般的な勤務であれば出勤・退勤を選ぶ必要が無くなりました。

対策

打刻する際に出勤・退勤を選ばずに「ニュートラル」という種別で登録できるようにしました。

出勤・退勤を明示的に選んで打刻する方法と、明示的に選ばずに打刻する方法、どちらの運用にも対応でき、混在した状態で運用することもできます。

打刻種別の一覧

数値意味説明
0ニュートラル打刻種別を指定しなかったことを示します。
1勤務開始勤務開始を明示的に指定して打刻したことを示します。
2勤務終了勤務終了を明示的に指定して打刻したことを示します。
3日付越え終了ニュートラル打刻によって発生する問題を解消するための補完用の値です。内部的には勤務終了と同じ扱いです。
4休憩開始本来の休憩時間とは別のタイミングで休憩した場合、休憩打刻を行うことで実働時間から休憩時間を差し引くことができます。
5休憩終了

判定処理

月報を作る際に、ニュートラルとして登録された打刻データが出勤・退勤どちらにあたるか判定します。処理の流れは下記のとおりです。

  1. 打刻データを計上日ごとに分割(暦日ではなく、日付変更線を境にして分割)。
  2. 計上日内の打刻データを順番にチェック
    1. 先頭に勤務終了、または、日付越え終了が存在する場合、日付越え終了と見なす。
      以降は別グループと見なして処理を続行。次の打刻までの間は休憩時間とする。
    2. 先頭に存在する打刻がニュートラルである場合、勤務開始と見なす。
    3. 末尾に存在する打刻がニュートラルである場合、勤務終了と見なす。
      打刻データが1件しかない場合、日付変更線まで働いたものと見なす。

効果

ニュートラル打刻という仕組みを用意したことで、理論上は下記のような効果があります。

  • ICカード打刻の場合、出勤・退勤を選ぶためのタッチパネルのような装置は不要です
  • 打刻画面のレイアウトがとてもシンプルになります
  • 出勤・退勤を間違えて打刻するというミスは減らせます

打刻画面がシンプルになる例(スマホ打刻用の画面)

問題点1

ニュートラル打刻を実現する場合、どうしても解決できない問題が残ります。
多くの勤怠管理システムで出勤・退勤を明示的に指定するのは、この問題を回避するためなのかもしれません。

このような打刻データがあったとき・・・

image/svg+xml 9:00 ニュートラル

1日目の退勤打刻を忘れて帰り、2日目に通常通り出勤したのか
1日目は徹夜して、2日目の9:00に帰ったのか
判断できません。

この問題を解消するために「日付越え終了」という打刻種別を作りました。
徹夜明けで帰る場合のみ、特殊な操作をして「日付越え終了」打刻をする必要があります。徹夜で仕事をする機会は少ないはずなので、少しぐらい面倒な操作になっても問題ないと考えています。

なお、2日連続徹夜(丸一日打刻されない日がある)というパターンは想定していません。

問題点2

当システムでは、打刻の切り上げ・切り捨て機能を搭載しています。
出勤時の打刻は切り上げ(8:50→9:00)
退勤時の打刻は切り捨て(18:10→18:00)
といった設定をする場合、打刻された時点で出勤・退勤どちらの打刻か判定する必要があります。

ニュートラル打刻された場合、前述の判定処理を行うため処理速度が落ちるという弱点があります。

作ってみた感想

勤怠管理システムの打刻機能を作る場合、出勤・退勤を明示的に選ぶ方式にするのが圧倒的に楽です。
出勤・退勤どちらかをデフォルトで選択しておき、時間帯に応じてデフォルト値を切り替えるようにすれば、ユーザーが毎回明示的に選ぶ手間が無くなります。

タイトルとURLをコピーしました