社労士事務所の勤怠データ突合を自動化するAIエージェントの作り方
社労士事務所の勤怠チェック業務とは:毎月発生する「突合地獄」の実態
社会保険労務士事務所の勤怠・給与担当スタッフにとって、毎月の締め日前後は緊張が続く時期です。顧問先から届く勤怠データの突合確認は、正確さが求められる一方で、時間的なプレッシャーも大きい業務です。
一般的な社労士事務所では、顧問先10社から30社程度の勤怠データを毎月処理します。届くデータの形式も顧問先ごとに異なり、CSV形式の勤怠データ、紙のタイムカードをスキャンした画像、手書きの有休申請書など、さまざまです。
これらのデータを受け取ったあと、担当スタッフは以下のような手順で突合確認を進めます。
現状の業務フロー(一般的な社労士事務所を想定):
- 顧問先から勤怠CSV・タイムカード画像・有休申請書をメールで受領する
- 顧問先ごとの就業規則を参照し、所定労働時間・残業上限・有休付与ルールを確認する
- CSVをExcelに取り込み、各従業員の出勤日数・残業時間・有休取得日数を集計する
- タイムカード画像の打刻時刻とCSVデータを目視で照合し、打刻漏れや不整合を特定する
- 法定時間外労働が36協定の上限に近い、または超過している従業員をリストアップする
- 有休残日数と有休取得実績を突合し、残日数不足がないか確認する
- 遅刻・早退の回数と時間を集計し、給与控除対象を特定する
- アラート事項をまとめ、顧問先への確認事項リストを作成する
顧問先の数や従業員規模にもよりますが、この一連の作業に丸1日から2日程度かかるケースは珍しくありません。締め日が集中する月末前後は、他の業務を後回しにせざるを得ない状況が生まれがちです。
なぜ手作業の突合でミスが起きるのか:よくある3つの落とし穴
勤怠データの突合確認で見落としが発生する背景には、いくつかの構造的な要因があります。ここでは、現場でよく聞かれる3つの問題を整理します。
落とし穴1:顧問先ごとにデータ形式が異なる
顧問先が使用している勤怠管理の仕組みは会社ごとに違います。ある会社はクラウド勤怠システムからCSVをエクスポートし、別の会社はExcelの手入力シートを送ってきます。さらに別の会社はタイムカードの写真をメールに添付してくるかもしれません。
このデータ形式のばらつきは、「前の会社のCSVの列順を記憶したまま次の会社のCSVを開く」といった取り違えを生みやすい環境をつくります。
落とし穴2:36協定の上限管理と残業の定義が複雑
36協定(労働基準法第36条に基づく労使協定)で定める時間外労働の上限は、月単位・年単位の両方で管理する必要があります。原則として月45時間・年360時間が上限ですが、特別条項付き協定の場合は月60時間・年720時間まで延長できるケースがあります。
さらに重要なのは、「所定労働時間を超えた残業(法定内残業)」と「法定労働時間(1日8時間・週40時間)を超えた残業(法定時間外労働)」の区別です。36協定の対象となるのは後者の法定時間外労働のみですが、手計算ではこの区別が曖昧になりがちです。
落とし穴3:チェック疲れによる見落とし
100名規模の顧問先であれば、1社だけで100名分の出退勤データを1行ずつ確認することになります。これを複数社分繰り返すと、集中力の維持が難しくなります。
特に問題なのは、「ほぼ正しいデータの中にまれに存在する異常値」を見つける作業です。人間はパターンが繰り返される中での例外検出が苦手であり、チェック対象が増えるほど見落としのリスクは高まります。
AIエージェントによる勤怠突合の処理フロー
ここで紹介するAIエージェントは、勤怠CSVデータを読み込み、あらかじめ設定した就業規則パラメータに基づいてアラートリストを出力する仕組みです。ChatGPTやClaude等の汎用LLM(大規模言語モデル)上で動作します。
このエージェントが担う役割は、「人間の目視チェックを代替する」のではなく、「確認すべきポイントを事前にリストアップして、有資格者のチェックを効率化する」ことです。最終的な判断は必ず人間が行います。
エージェントの処理フロー:
入力:勤怠CSVデータ(テキスト貼り付け) + 就業規則パラメータ + 有休残日数データ ↓Step 1:CSVデータの構造を解析し、項目(社員番号・日付・出退勤時刻・休憩時間・勤怠区分)を正規化する ↓Step 2:各従業員の日別の実労働時間を算出する(退勤時刻 - 出勤時刻 - 休憩時間) ↓Step 3:実労働時間から「法定内残業」と「法定時間外労働」を区別して算出し、月間合計を集計する ↓Step 4:月間の法定時間外労働を36協定の月間上限値と比較し、超過・警告ライン到達を検出する ↓Step 5:有休取得日数と有休残日数を突合し、残日数不足や未消化アラートを検出する ↓Step 6:打刻漏れ(出勤日なのに打刻データなし)を検出する ↓Step 7:遅刻・早退を検出し、回数と時間を集計する ↓Step 8:全アラートを優先度(高・中・低)付きで一覧出力する ↓出力:アラートリスト(Markdown表形式)+ 集計サマリー
このフローにおいて、AIエージェントが行うのはデータの計算・比較・パターン検出です。法的な解釈や最終的な判断はフローに含まれていません。あくまでも「チェック作業の下準備を自動化する」位置づけです。
Before/After 業務フロー比較:締め日前後のタイムラインがどう変わるか
| 項目 | Before(導入前) | After(導入後) |
|---|---|---|
| データ受領後の初動 | Excelに取り込み、手作業で集計開始 | CSVデータをLLMに貼り付け、パラメータを設定して実行 |
| 残業時間の集計 | 1名ずつExcelで計算、目視で上限確認 | エージェントが法定内・法定外を区別して一括算出し、超過者をリスト化 |
| 36協定の超過チェック | 就業規則を都度参照しながら手動で比較 | プロンプトにパラメータとして組み込み済み、自動比較 |
| 有休残日数の突合 | 有休管理台帳と勤怠データを手動で照合 | 有休残日数データを入力に含め、エージェントが突合 |
| 打刻漏れの検出 | 1日ずつ目視で確認 | 出勤日かつ打刻なしの行をエージェントが自動抽出 |
| アラート事項のまとめ | 確認メモを手書きまたはExcelで整理 | エージェントが優先度付きアラートリストを生成 |
| 有資格者の確認 | 全データを一から確認するケースもある | アラートリストを起点に、該当箇所を重点的に確認 |
| 工数(目安) | 顧問先15社で丸1〜2日程度(条件による) | データ準備と確認作業を中心に、条件によっては工数の短縮が見込める |
注記:上記の比較は、顧問先15社・各社従業員20〜50名程度の社労士事務所を一般的な例として想定しています。実際の効果は、データの形式・品質、就業規則の複雑さ、担当者のスキルなどによって異なります。
Before/Afterで最も変化が大きいのは、「全件を目視で確認する」から「アラートが出た箇所を重点的に確認する」への切り替えです。これにより、有資格者が本来注力すべき判断業務に時間を充てやすくなることが期待できます。
実装プロンプト完全公開:勤怠突合チェックエージェント
以下のプロンプトをそのままコピーして、ChatGPTやClaude等の汎用LLMに貼り付けて使用できます。[変数名]の部分を自社・顧問先の情報に置き換えてください。
なお、勤怠データには従業員の個人情報が含まれます。LLMに入力する際は、氏名を社員番号に置き換える等の匿名化処理を行うことを強くお勧めします。社内のセキュリティポリシーやLLMサービスの利用規約も事前にご確認ください。
# 役割定義(Role)あなたは社会保険労務士事務所の勤怠データ突合チェックに特化した検証エージェントです。顧問先から届いた勤怠CSVデータを就業規則パラメータに基づいて検証し、確認が必要な項目をアラートリストとして出力する役割を担います。法的な解釈や最終判断は行いません。あくまでもデータの計算・比較・パターン検出を担当します。# 入力仕様(Input)以下の3種類の情報を受け取ります:1. 勤怠CSVデータ(テキスト貼り付け)※必須 - 含まれる列:社員番号, 日付, 出勤時刻, 退勤時刻, 休憩時間(分), 勤怠区分 - 勤怠区分の例:出勤, 有休, 半休, 欠勤, 休日, 遅刻, 早退 - ヘッダー行ありを前提とする2. 就業規則パラメータ ※必須 - 顧問先名:[顧問先名] - 所定労働時間:[所定労働時間](例:8時間) - 法定労働時間:1日8時間・週40時間(固定) - 所定出勤時刻:[所定出勤時刻](例:09:00) - 所定退勤時刻:[所定退勤時刻](例:18:00) - 休憩時間:[休憩時間](例:60分) - 36協定 月間上限:[36協定月間上限時間](例:45時間) - 36協定 年間上限:[36協定年間上限時間](例:360時間)※参考値として記録 - 対象月:[対象月](例:2026年4月)3. 有休残日数データ(テキスト貼り付け)※任意 - 含まれる列:社員番号, 有休残日数 - 提供がない場合は有休関連チェックをスキップし、その旨を出力に記載する# 処理手順(Process)以下のステップで順番に処理を行ってください:Step 1:CSVデータの構造確認 - ヘッダー行を読み取り、列の対応を確認する - 想定される列(社員番号, 日付, 出勤時刻, 退勤時刻, 休憩時間, 勤怠区分)が 存在するか確認する - 列名が異なる場合は、最も近いと思われる列を対応付けし、 「列名の対応について確認が必要です」と注記するStep 2:日別の実労働時間を算出 - 各行について「退勤時刻 - 出勤時刻 - 休憩時間(分を時間に変換)」を計算する - 勤怠区分が「有休」「欠勤」「休日」の場合は計算対象外とする - 出勤時刻または退勤時刻が空欄の場合は「打刻漏れ候補」としてフラグを立てるStep 3:残業時間の算出(法定内残業と法定時間外労働の区別) - 実労働時間が[所定労働時間]を超え、8時間以内の部分を「法定内残業」とする - 実労働時間が8時間を超えた部分を「法定時間外労働」とする - ※週40時間の判定は複雑なため、本エージェントでは1日8時間超過分のみをカウントするStep 4:月間残業時間の集計と36協定月間チェック - 社員番号ごとに月間の「法定時間外労働」を合計する - 月間法定時間外労働が[36協定月間上限時間]の80%以上の場合 → 「警告」アラート(優先度:中) - 月間法定時間外労働が[36協定月間上限時間]以上の場合 → 「超過」アラート(優先度:高) - 年間累計の確認は本エージェントの対象外です。「確認が必要です:年間累計法定時間外労働」と出力に記載してくださいStep 5:有休残日数の突合(有休残日数データが提供された場合のみ) - 勤怠CSVから勤怠区分が「有休」の日数を社員番号ごとに集計する - 勤怠区分が「半休」の行は0.5日としてカウントする - 有休残日数データの残日数から取得日数を引き、マイナスになる場合は 「有休残日数不足」アラートを出す(優先度:高)Step 6:打刻漏れの検出 - 勤怠区分が「出勤」であるにもかかわらず、出勤時刻または退勤時刻が 空欄・未入力の行を検出する(優先度:中)Step 7:遅刻・早退の検出と集計 - 出勤時刻が[所定出勤時刻]より遅い場合を「遅刻」として検出する - 退勤時刻が[所定退勤時刻]より早い場合(かつ勤怠区分が「早退」の行)を 「早退」として検出する - 社員番号ごとに遅刻・早退の回数と合計時間を集計する(優先度:低)Step 8:アラートリストの生成 - 全アラートを優先度(高→中→低)の順に並べ替える - 同一優先度内では社員番号の昇順で並べる# 出力形式(Output)以下の3つのセクションに分けて出力してください:## セクション1:アラートリスト| 優先度 | 社員番号 | アラート種別 | 詳細 | 推奨アクション ||---|---|---|---|---|| 高 | (番号) | (種別) | (具体的な内容) | (確認すべき事項) |アラート種別は以下のいずれか:- 36協定超過(月間)- 36協定警告(月間80%以上)- 有休残日数不足- 打刻漏れ- 遅刻- 早退## セクション2:集計サマリー- 対象顧問先:[顧問先名]- 対象月:[対象月]- 対象従業員数:○名- チェック対象行数:○行- アラート件数:高○件 / 中○件 / 低○件- 月間平均法定時間外労働:○時間- 有休チェック:実施 / スキップ(データ未提供)- 年間累計法定時間外労働:確認が必要です(本エージェントは月次チェックのみ対応)## セクション3:確認が必要な事項CSVの列名の不一致や想定外のデータ形式があった場合に、ここに記載します。# 品質基準(Quality)出力前に以下を自己チェックしてください:□ すべての社員番号について法定時間外労働の計算が完了しているか□ 36協定の月間上限値との比較が正しく行われているか□ 法定内残業と法定時間外労働が正しく区別されているか□ 有休残日数データが提供された場合、全社員の突合が完了しているか□ 打刻漏れの検出条件が正しく適用されているか□ アラートリストが優先度順に並んでいるか□ 集計サマリーの数値が個別データの合計と一致しているか□ 法的な判断・解釈に踏み込んだ表現がないか# 制約事項(Constraints)- 法的な判断・解釈は一切行わないこと(「違法です」「問題ありません」等の表現は禁止)- アラートの推奨アクションは「確認してください」「有資格者に相談してください」等の 確認促進にとどめること- 入力データに含まれていない情報は推測で補わず、「確認が必要です:[項目名]」と記載すること- 36協定の上限値は入力されたパラメータのみを使用し、法定の上限値を独自に適用しないこと- 従業員の氏名が含まれていた場合でも、出力では社員番号のみを使用すること- 最終出力は必ず人間(有資格者)が確認・承認してから業務に適用すること# カスタマイズ変数以下の変数を、顧問先の就業規則に合わせて置き換えてください:[顧問先名]:顧問先の会社名(例:株式会社サンプル商事)[所定労働時間]:1日の所定労働時間(例:8時間)[所定出勤時刻]:始業時刻(例:09:00)[所定退勤時刻]:終業時刻(例:18:00)[休憩時間]:休憩時間の長さ(例:60分)[36協定月間上限時間]:36協定で定めた月間の法定時間外労働上限(例:45時間)[36協定年間上限時間]:36協定で定めた年間の法定時間外労働上限(例:360時間)※参考値として記録[対象月]:チェック対象の年月(例:2026年4月)# 使用例(Example)## 入力例就業規則パラメータ:- 顧問先名:株式会社サンプル商事- 所定労働時間:8時間- 所定出勤時刻:09:00- 所定退勤時刻:18:00- 休憩時間:60分- 36協定月間上限:45時間- 36協定年間上限:360時間- 対象月:2026年4月勤怠CSVデータ:社員番号,日付,出勤時刻,退勤時刻,休憩時間(分),勤怠区分A001,2026/04/01,09:00,21:00,60,出勤A001,2026/04/02,09:15,18:00,60,出勤A001,2026/04/03,,,0,有休A002,2026/04/01,09:00,18:00,60,出勤A002,2026/04/02,09:00,,60,出勤A002,2026/04/03,09:00,17:00,60,早退有休残日数データ:社員番号,有休残日数A001,0.5A002,10## 期待される出力例### セクション1:アラートリスト| 優先度 | 社員番号 | アラート種別 | 詳細 | 推奨アクション ||---|---|---|---|---|| 高 | A001 | 有休残日数不足 | 有休取得1日に対し残日数0.5日(不足0.5日) | 有休残日数を確認してください || 中 | A002 | 打刻漏れ | 4/2 退勤時刻が未入力 | 本人に退勤時刻を確認してください || 低 | A001 | 遅刻 | 4/2 出勤時刻09:15(15分遅刻) | 遅刻理由を確認してください || 低 | A002 | 早退 | 4/3 退勤時刻17:00(1時間早退) | 早退理由を確認してください |### セクション2:集計サマリー- 対象顧問先:株式会社サンプル商事- 対象月:2026年4月- 対象従業員数:2名- チェック対象行数:6行- アラート件数:高1件 / 中1件 / 低2件- A001 月間法定時間外労働:3時間(上限45時間の6.7%) ※4/1:実労働11時間(法定時間外労働3時間)、4/2:実労働7時間45分(法定時間外労働0時間)- A002 月間法定時間外労働:0時間(4/2は打刻漏れのため計算対象外)- 有休チェック:実施- 年間累計法定時間外労働:確認が必要です(本エージェントは月次チェックのみ対応)### セクション3:確認が必要な事項- A002の4/2退勤時刻が未入力のため、当日の法定時間外労働を算出できていません。退勤時刻を確認のうえ、再計算してください。(この出力は参考例です。実際の出力は入力内容やLLMの環境により異なります)
プロンプトの使い方:
- プロンプト冒頭の
[変数名]部分を、対象となる顧問先の就業規則に合わせて書き換えます - 顧問先から届いた勤怠CSVデータを、プロンプトの後にテキストとして貼り付けます
- 有休残日数データがあれば、同じく貼り付けます
- LLMに送信すると、アラートリストと集計サマリーが出力されます
- 出力されたアラートリストを有資格者(社労士)が確認し、最終判断を行います
CSVデータのサイズが大きい場合は、LLMの入力トークン上限に注意が必要です。1回の入力に収まらない場合は、部署単位や社員番号の範囲で分割して処理することを検討してください。
カスタマイズガイド:顧問先ごとの就業規則パターンへの対応方法
社労士事務所が複数の顧問先を担当する場合、就業規則のパラメータは顧問先ごとに異なります。このプロンプトを効率的に運用するためのカスタマイズ方法を紹介します。
顧問先別パラメータシートの作成:
まず、顧問先ごとの就業規則パラメータを一覧化したシートを用意しておくと便利です。
| 顧問先名 | 所定労働時間 | 出勤時刻 | 退勤時刻 | 休憩 | 36協定月間 | 36協定年間 | 備考 |
|---|---|---|---|---|---|---|---|
| A社 | 8時間 | 09:00 | 18:00 | 60分 | 45時間 | 360時間 | 特別条項なし |
| B社 | 7.5時間 | 08:30 | 17:00 | 60分 | 45時間 | 360時間 | フレックスなし |
| C社 | 8時間 | 10:00 | 19:00 | 60分 | 60時間 | 720時間 | 特別条項あり |
このシートがあれば、プロンプトの[変数名]部分を素早く置き換えられます。
シフト制・フレックスタイム制への対応:
所定出勤時刻と退勤時刻が固定でない場合(シフト制やフレックスタイム制)は、プロンプトの遅刻・早退検出ロジックをカスタマイズする必要があります。
シフト制の場合は、CSVデータに「予定出勤時刻」「予定退勤時刻」の列を追加し、プロンプトのStep 7を「予定時刻との比較」に変更します。フレックスタイム制の場合は、コアタイムの開始・終了時刻をパラメータとして追加し、コアタイム内の出退勤のみをチェック対象とする方法が考えられます。
ただし、変形労働時間制やフレックスタイム制の残業計算は、通常の固定時間制とは算出ロジックが異なります。これらの制度に対応する場合は、プロンプトの処理手順を制度に合わせて修正する必要があり、その際は有資格者の監修を受けることをお勧めします。
複数の勤怠区分への対応:
顧問先によっては、「出勤」「有休」「欠勤」以外にも「特別休暇」「代休」「振替休日」「在宅勤務」など、多様な勤怠区分を使用している場合があります。
プロンプトのStep 2に、自社で使用する勤怠区分の一覧とそれぞれの扱い(労働時間計算の対象かどうか、有休としてカウントするか等)を追記することで対応できます。
導入時の注意点と限界:36協定の解釈や法改正への追従は人間が担う
AIエージェントを勤怠突合業務に活用する際には、いくつかの重要な注意点があります。このセクションでは、導入前に把握しておくべき限界とリスクを正直に整理します。
注意点1:個人情報の取り扱い
勤怠データには従業員の氏名・出退勤時刻・休暇取得状況など、個人情報やセンシティブな情報が含まれます。外部のLLMサービスにデータを入力する場合は、以下の点に注意してください。
- 氏名を社員番号に置き換える等の匿名化を行うことをお勧めします
- 利用するLLMサービスのプライバシーポリシー・データ取り扱い規約を確認してください
- 入力データが学習に使用されないプラン・設定を選択することを検討してください
- 社内のセキュリティポリシーに照らして利用可否を判断してください
注意点2:法的判断はAIに委ねない
36協定の上限管理や有休の付与・取得に関する判断には、労働基準法をはじめとする法令の解釈が伴います。このプロンプトのエージェントは「数値の計算と比較」のみを行い、法的な判断は一切行いません。
アラートリストに「36協定超過(月間)」と表示されたとしても、それが法令違反に該当するかどうかの最終判断は有資格者が行ってください。特別条項の適用、適用除外の有無、割増賃金の算定基準など、法令解釈に関わる部分は社労士の専門領域です。
注意点3:年間累計の管理は別途行う必要がある
本エージェントは月次データを対象としており、年間累計の法定時間外労働チェックは自動化されていません。36協定の年間上限(原則360時間、特別条項あり720時間)への適合確認は、月次チェックとは別に、累積データを用いて有資格者が確認してください。
注意点4:法改正への追従は手動で行う
労働関連法令は定期的に改正されます。プロンプトに設定したパラメータ(36協定の上限値等)は、法改正があった場合に手動で更新する必要があります。AIエージェントが自動的に法改正を反映することはありません。
よくある失敗パターン:
| 失敗パターン | 原因 | 対処法 |
|---|---|---|
| CSVの列順が想定と違い、誤った計算結果が出る | 顧問先ごとにCSVフォーマットが異なる | ヘッダー行を必ず含め、プロンプトが列名で判別するようにする |
| LLMの入力上限を超えてデータが途中で切れる | 大量の行データを一度に貼り付けた | 部署単位・社員番号範囲で分割して処理する |
| 法定内残業も36協定の対象としてカウントしてしまう | 残業の法的定義が不正確 | 法定時間外労働のみを36協定の比較対象とする |
| アラートが出なかったので問題なしと判断した | エージェントの検出範囲外の問題が存在した | アラートなし=問題なしではないことを前提に、有資格者が最終確認する |
向いているケース:
- 固定時間制で就業規則がシンプルな顧問先の勤怠チェック
- CSVデータが整った形式で提供される場合
- 毎月同じフォーマットのデータが届く、定型的な突合作業
- まず「ざっと全体を見渡して異常値を拾い出す」初期スクリーニング
向いていないケース:
- 変形労働時間制やフレックスタイム制の残業計算:算出ロジックが複雑なため、標準のプロンプトでは対応が難しい場合があります
- タイムカード画像の読み取り:本プロンプトはCSVテキストデータを前提としており、画像からのOCR(光学文字認識)処理は含まれていません
- 法令解釈が必要な判断:36協定の特別条項の適用可否、割増賃金の計算基礎など、法的知識が必要な領域はAIエージェントの対象外です
- 100名を超える大規模データの一括処理:LLMの入力トークン上限により、大量データを1回で処理できない場合があります
まとめと次のステップ:まず1社分で試してみる
本記事では、社労士事務所における勤怠データの突合確認業務を取り上げ、AIエージェントを活用してアラートリストを自動生成する方法を紹介しました。
ポイントを整理します。
- 勤怠突合チェックは、データの計算・比較・パターン検出というAIエージェントが得意とする処理が中心です
- ただし、36協定の解釈や有休付与の判断など、法令知識が必要な領域は有資格者が担います
- 本エージェントは月次チェックに対応しており、年間累計の確認は別途行う必要があります
- 法定内残業と法定時間外労働の区別が重要で、36協定の対象は後者のみです
- AIエージェントの役割は「チェックすべきポイントを事前にリストアップする」こと。最終判断は必ず人間が行います
- 勤怠データを外部LLMに入力する際は、個人情報の匿名化やセキュリティポリシーの確認が必要です
今すぐできること:
- 記事内の実装プロンプトをコピーし、
[変数名]を1つの顧問先の就業規則に合わせて書き換える - その顧問先の過去月の勤怠CSVデータ(匿名化済み)を使って、テスト実行してみる
- 出力されたアラートリストと、従来の手作業チェック結果を比較し、精度を確認する
- 問題がなければ、翌月の実務で「手作業チェックの前段階」として組み込んでみる
最初から全顧問先に展開する必要はありません。まず1社分のデータで試し、プロンプトの出力内容が自社の業務に合っているかを確認するところから始めてみてください。
本記事で紹介したプロンプトの出力は参考情報です。実際の業務適用前に、自環境での動作確認と内容の適切性確認を必ず行ってください。労働基準法・36協定に関わる判断は、社会保険労務士等の専門家にご相談ください。
コメントを残す