EspoCRMで勤怠管理を自作してみた
EspoCRMで勤怠管理を自作してみた(設計・運用・現場で壊れない仕組み)
はじめに
「ちょっとした勤怠管理をしたい」
でも既存の勤怠システムは重すぎる…
そんな背景から、EspoCRM上で勤怠管理を自作しました。
本記事では、実際に運用している設計と思想をまとめます。
全体設計の考え方(ここが一番重要)
まず最初に決めたこと👇
ログ(事実)と集計(結果)を分ける
不整合は許容するが、嘘は作らない
完璧より「壊れない」を優先
👉 この3つでほぼすべて決まります
データ構造(図解)
[AttendanceLog](打刻履歴)
├ 出勤
├ 休憩入
├ 休憩戻
└ 退勤
↓ 集計
[AttendanceRecord](日次集計)
├ 出勤時間
├ 退勤時間
├ 合計休憩時間
└ ステータス
+補助
[UserAttendance](現在状態)
[HolidayEvent](祝日・会社行事)
打刻フロー(図解)
graph TD
A[出勤] --> B[在席]
B --> C[休憩入]
C --> D[休憩戻]
D --> B
B --> E[退勤]
👉 シンプルですが、これを厳密に守るのが重要
実装のポイント
■ 1イベント = 1レコード
出勤 → 1レコード
休憩入 → 1レコード
👉 ログを絶対に歪めない
■ 日次はその場で更新
休憩戻り → 休憩時間を加算
退勤 → 日計に反映
👉 再計算ではなく「確定型」
イレギュラ対応(現場仕様)
■ 打刻忘れ
→ 次の操作から復帰
(例:退勤からスタート)
■ 休憩中に退勤
休憩入 → 退勤
↓
休憩未終了
↓
日計で休憩扱い or 後で修正
👉 安全側に倒す
■ 日跨ぎ
翌日まで修正OK
それ以上は制限
👉 労務リスク回避
なぜ自動補完しないのか
よくある実装👇
打刻なし → 勝手に出勤扱い
👉 これはNG
今回の設計👇
打刻した事実のみ記録
不整合は人が直す
👉 証跡として強い
UI設計
PC版(管理用)
👉 複数日をまとめて確認
スマホ版(現場用)


👉 1日単位モーダル
運用を安定させる工夫
■ 操作制限
出勤中は出勤できない
状態遷移を固定
■ 不整合フラグ
休憩未終了
出勤なし退勤
👉 後でチェックできる
■ 再計算バッチ
ログから日計を再構築
👉 最後の保険
実際の運用感
大きく壊れない
ユーザーが迷わない
修正前提でストレスが少ない
👉 「ちょうどいい勤怠」
まとめ
この設計の本質👇
ログと集計を分離
嘘を作らない
人間のミスを前提にする
おわりに
勤怠システムは「完璧」を目指すと失敗します。
大事なのは👇
👉 壊れないこと
👉 後から直せること
この設計が、同じように悩んでいる方の参考になれば嬉しいです。
こちら にここに至るまでのあれこれをアップしています
どこかでGit-Hubにソースも上げよかともおもってるのだけど、どうなるかな


コメント