工数管理が大変らしい
妻が残業してて大変そうだったので事情を聞いてみるとAKASHIの工数管理を担当することになり、それが大変とのこと(AKASHIに限らず、この手の作業は大変なのでしょう)。
GUIからだと従業員一人ひとり工数管理簿の画面を見ていくしかないらしい。
調べてみるとAKASHIにはAPIがある。
ということで、まとめて勤怠と工数をチェックするChrome拡張を作りました。
その名も AKASHIc Record !!!
はい駄洒落ですね。しかし壮大な名前を付けてしまった。
Chrome拡張である必要は特になかったのですが、AKASHIの画面見ながらサイドパネルに表示できるので便利かなと思ってそうしました。
ストアには公開してないので、開発者モードでインストールしてください(インストール方法などは以下のGitHubページに書いてあります)。
個人でAKASHIの無料トライアルを申請して、通常業務ではありえない入力をしてエッジケースのテストをしては、修正するたび妻のPCにGitHubからコードをダウンロードしてもらってChromeにインストールして動くか確認して……と結構デバッグが大変でした。
ここは技術者の情報共有サイトということで、ソフトウェアの詳細を書いていこうと思います。
ソフトウェアの詳細
処理の流れはこんな感じ
- 従業員(staff)の一覧を取得
- 従業員ごとに勤怠実績(working_reocord)の一覧を取得
- 従業員ごとに工数(manhour)の一覧を取得
- 従業員ごとに以下の内容をCSVで出力
列の名前 | 説明 |
---|---|
ID | 従業員のID。 |
氏名 | 従業員の氏名。 |
労働日 | 休日でない日と勤怠入力のある休日の合計。 |
労働日エラー | 労働日のうち、勤怠入力が間違っている日(開始と終了のどちらか、もしくは両方がない、など)。 |
工数入力 | 工数が入力されている日。 |
工数入力エラー | 工数入力が間違っている日(労働日なのに入力されていない。労働日でない日に入力されている、労働時間と工数が合わない、など)。 |
出勤簿URL | 管理者用の従業員の出勤簿URL |
工数管理URL | 管理者用の従業員の工数管理簿URL |
勤怠入力エラーの定義
勤怠入力のエラーを検出するために、まずはエラーを定義します。
このソフトウェアでは勤怠入力のエラーを以下のように定義することにしました。
平日で開始時間と終了時間のどちらか、もしくは両方が入力されていない日
休日で開始時間と終了時間のどちらかだけが入力されていない日(つまり休日出勤した日。両方入力されていない場合は出勤していないただの休日とみなす)
本当は平日でも休暇申請が承認された日であれば、休日と見なす(つまり開始時間と終了時間が入力されていなくてもエラーとはしない)必要があるのですが、AKASHIのAPIドキュメントから休暇申請に関する情報を取得する方法が見つけられなかったので、ここでは休暇申請は考慮せず平日として扱うことにしました。
また平日と休日出勤した日をあわせて労働日と呼ぶことにしました。
AKASHIの仕様で勤怠実績にはworking_day_categoryという区分があり、設定にもよるのですが多くの場合は以下のようになります。
0=労働日(平日)
1=所定休日(土曜日)
2=法定休日(日曜日)
つまり勤怠入力のエラーは次の2とおりに分類できます。
-
working_day_category = 0
かつ開始時間と終了時間どちらか、もくしは両方が入力されていない日 -
working_day_category != 0
かつ開始時間と終了時間のどちらかしか入力されていない日(両方入力されていない場合は出勤していないただの休日なのでエラーにはしない)
工数入力のエラー検出
勤怠入力の一覧取得とエラー検出できたら、次は工数のエラーを検出します。
AKASHIでは勤怠入力の開始と終了から休憩時間を差し引いた労働時間を、どのプロジェクトに割り当てたかを入力する工数管理という機能があります
工数は労働日ごとに、以下の条件を満たすように入力する必要があります
工数として入力した全てのプロジェクトの合計時間 = 勤怠入力から計算された労働時間
つまり、この条件が満たされていない工数入力はエラーと判定されることになります。
他にも、勤怠入力の結果と工数入力の結果を照らし合わせて、エラーを以下のパターンに分類しました。
勤怠入力がエラーとなっている日(勤怠か正しく入力できていなければ工数入力も完了していないと見なす)
勤怠入力があるのに工数入力がない日(単に工数だけ未入力の状態)
勤怠入力がないのに工数入力がある日(勤怠入力がない=労働時間が0なのに工数だけ入力されているのでおかしい)
勤怠入力から計算される労働時間と工数として入力した時間の合計が一致しない(工数が足りない、もしくは多すぎる)
おわりに
GitHubページのREADMEの利用シーンでも書いたのですが、勤怠や工数の管理、運用のしかたは会社ごとに異なると思うので、このツールの出力結果が、必ずしもユーザーの期待どおりになるとは限らないでしょう。
なので、出力結果はあくまで締め作業の補助的なもので、ある程度エラーが減ってきたら最後はAKASHIの画面を人の目で確認、というかたちで運用するのが現実的だと思います。
このソフトウェアの機能が、AKASHI公式に実装されるといいのにと思いつつも、上記のような理由で公式としての仕様を決定してしまうのは難しいかもしれませんね。