団体保険の加入者名簿と人事の異動データを毎月突き合わせ、加入・脱退・変更の届け漏れを洗い出す
保険会社から毎月届く団体保険の加入者名簿と、人事システムの異動データを社員ごとにつなぎ、届け出が済んでいない加入・脱退・変更を洗い出します。人事の担当者は、差異の一覧だけを見て届け出を出します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Python
- 対象業界
- 保険/小売/物流/製造
- 対象部門
- 人事
- 対象業務
- 内容確認・チェック/台帳・マスタ管理
- 主な課題
- 属人化している/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 判定
- 主な効果
- 入力漏れ削減/属人化解消/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 保険会社・代理店から、契約ごとの加入者名簿がExcelで届く
- 人事システムから、前月の異動データを書き出す
- 前月の名簿と今月の名簿を並べ、増えた人・減った人・変わった人に印を付ける
- 異動データの1行ずつについて、名簿に載っているべきか、載っていないべきかを考える
- 名簿で氏名のカナと生年月日を検索し、載っているかを確かめる
- 備考欄に「在籍出向」「休職」とあれば、その契約での扱いを前任者のメモで確かめる
- 届け出が要るものを、契約ごとの届け出用の一覧に書き出す
- 保険会社の様式に写し、代理店へ送る
- 人届いた名簿を、契約ごとの受け取りフォルダに保存する
- 自動月に一度の実行で、Python が名簿・人事システムの異動データ・在籍者の一覧・届け出の記録を読む
- 自動氏名のカナと生年月日の表記をそろえ、社員番号と被保険者の番号の対応表で名簿の行に社員番号を付ける
- 自動対応表で付かなかった行は、氏名のカナと生年月日で候補を探し、候補が1人なら仮に付け、2人以上か0人なら人へ回す
- 自動異動データの備考の自由記述を、Claude API が異動の種類に分ける
- 自動契約ごとの加入資格の表と照らし、社員ごとに「名簿に載っているべきか」を決める
- 自動名簿の実際と照らし、`add_missing`(加入の漏れ)/`remove_missing`(脱退の漏れ)/`change_missing`(変更の漏れ)/`pending`(届け出済みで反映待ち)/`needs_human` を付ける
- 自動届け出が要るものを、契約ごとの届け出用の一覧の下書きにする
- 人担当者が差異の一覧を見て、届け出るものを決める
- 人保険会社の様式に写して代理店へ送り、送った記録を届け出の記録に足す
各工程の詳しい説明を読む
- 保険会社・代理店から、契約ごとの加入者名簿がExcelで届く
- 人事システムから、前月の異動データを書き出す
- 前月の名簿と今月の名簿を並べ、増えた人・減った人・変わった人に印を付ける
- 異動データの1行ずつについて、名簿に載っているべきか、載っていないべきかを考える
- 名簿で氏名のカナと生年月日を検索し、載っているかを確かめる
- 備考欄に「在籍出向」「休職」とあれば、その契約での扱いを前任者のメモで確かめる
- 届け出が要るものを、契約ごとの届け出用の一覧に書き出す
- 保険会社の様式に写し、代理店へ送る
(a)見比べる鍵が無い。 社員番号が名簿に無いため、5番目は氏名と生年月日での検索になります。半角のカナと全角のカナ、旧字体と新字体、結婚による改姓で、同じ人が見つかりません。見つからなかった人を「名簿に無い」と判断すると、加入済みの人の加入の届け出を、もう一度出すことになります。
(b)脱退の届け出が漏れる。 入社は本人の手続きがあるので気づきますが、退職は人事の手続きが終わると、そこで意識から外れます。 退職した人が名簿に何か月も残り、保険料を払い続けていた、という形で後から見つかります。
(c)休職と出向の扱いが人に頼っている。 私傷病の休職、育児休業、在籍出向、転籍で、名簿の扱いが契約ごとに違います。取り決めは契約書や事務の手引きに書かれていますが、毎月それを開く人はいません。 前任者のメモに頼るので、担当が替わると扱いが変わります。
(d)届け出たものと漏れたものが区別できない。 先月届け出た脱退が、今月の名簿にはまだ反映されていないことがあります。届け出の控えは共有フォルダにPDFで置かれているだけで、名簿と並べて見る仕組みがありません。 二重の届け出も、漏れも、同じところから生まれています。
- 【人】 届いた名簿を、契約ごとの受け取りフォルダに保存する
- 【自動】 月に一度の実行で、Python が名簿・人事システムの異動データ・在籍者の一覧・届け出の記録を読む
- 【自動】 氏名のカナと生年月日の表記をそろえ、社員番号と被保険者の番号の対応表で名簿の行に社員番号を付ける
- 【自動】 対応表で付かなかった行は、氏名のカナと生年月日で候補を探し、候補が1人なら仮に付け、2人以上か0人なら人へ回す
- 【自動】 異動データの備考の自由記述を、Claude API が異動の種類に分ける
- 【自動】 契約ごとの加入資格の表と照らし、社員ごとに「名簿に載っているべきか」を決める
- 【自動】 名簿の実際と照らし、
add_missing(加入の漏れ)/remove_missing(脱退の漏れ)/change_missing(変更の漏れ)/pending(届け出済みで反映待ち)/needs_humanを付ける - 【自動】 届け出が要るものを、契約ごとの届け出用の一覧の下書きにする
- 【人】 担当者が差異の一覧を見て、届け出るものを決める
- 【人】 保険会社の様式に写して代理店へ送り、送った記録を届け出の記録に足す
9番目が、この設計の分かれ目です。人が見るのは360行ではありません。 名簿と人事データが合っている行は一覧に出ず、差異のあった行と、つなげなかった行だけを見ます。 全行を人が見直す設計にすると、30.0時間はほとんど減りません。
7番目で pending を分けているのも、意図してのことです。 届け出の記録に同じ人・同じ種類の届け出があり、まだ名簿に反映されていないだけなら、届け出の漏れには数えません。 二重の届け出を防ぐのは、この区別です。
02今回想定するシステム構成
加入者名簿(契約ごと・Excel) 人事システム(異動データ・在籍者・CSV) 届け出の記録 │ │ │ ▼【トリガー】毎月の名簿の到着後、担当者が実行(または毎月10日 7:00) Python(pandas) ├──▶ 表記をそろえる(NFKC・カナ・生年月日) ├──▶ 社員番号と被保険者の番号の対応表で、名簿の行に社員番号を付ける ▼ Claude API ── 異動の備考の自由記述を、異動の種類に分ける ▼ 加入資格の表(契約ごと)── 社員ごとに「載っているべきか」を決める ▼ pandas merge(outer・indicator・validate)── 載っているべき人と、名簿の実際を突き合わせる ▼ 判定 ── add_missing / remove_missing / change_missing / pending / needs_human ▼ 差異の一覧と、契約ごとの届け出の下書き ▼ 【担当者が差異だけを確かめ、届け出を出す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Python(pandas) | R |
| 処理 | Python(表記の正規化と、規則による判定) | 表計算ソフトの関数 |
| 生成AI | Claude API(異動の備考の分類) | OpenAI API、Gemini API |
| データの取得元 | 人事システムのCSVと、保険会社・代理店から届く名簿 | 人事システムのAPI |
| 結果の出力先 | 人事部の共有フォルダの差異の一覧と届け出の下書き | 人事部の作業管理の表 |
人事システムには書き込みません。 異動データと在籍者の一覧を読むだけで、届け出の結果を人事システムへ戻すこともしません。 書き込む先は差異の一覧と、届け出の記録だけです。
突き合わせの中心は、pandas の merge です。 how="outer" は両方の表のキーの和集合を使う結合で、indicator=True を付けると、行ごとに左だけにある(left_only)、右だけにある(right_only)、両方にある(both)を示す _merge の列が足されます。「載っているべきなのに名簿に無い」は left_only、「名簿にあるのに載っているべきでない」は right_only で、漏れの種類がそのまま列の値になります。
同じ人が二重に載っていないかも、同じ merge で確かめます。 validate="one_to_one" を付けると、キーが両方の表で一意であるかを確かめます。 名簿に同じ社員番号が2行あれば、突き合わせの前に止まります。
表記の揺れは、Python の標準の unicodedata.normalize でそろえます。 NFKC は互換の文字を同じ文字に置き換えてから合成する正規化で、半角のカナと全角のカナ、全角の英数字と半角の英数字が同じ文字になります。 比べる前に両方にかけます。
生成AIは、備考の分類にしか使いません。 名簿と人事データをつなぐのも、届け出が要るかを決めるのも Python の規則です。Claude API の出力は JSON の形を指定して受け取ります。 output_config.format に type: "json_schema" とスキーマを渡すと、スキーマに合った JSON が返る機能で、一般提供されています。
03どうやって実装するのか
処理の起点を決める
保険会社・代理店から、その月の名簿が届いたことを起点にします。 名簿の届く日は契約ごとに違うので、3つの契約の名簿がそろった時点で、担当者が実行します。 毎月10日の朝に自動で動かし、そろっていない契約があればその契約だけを「名簿未着」として飛ばす形でも構いません。
人事システムの異動データは、その月の給与の締めの後に書き出します。 締めの前は、月末の退職や翌月1日付の入社がまだ入っていないことがあります。名簿と異動データの「いつ時点か」がずれると、正しい行まで差異として出ます。 実行の記録に、名簿の作成日と異動データの書き出し日を残します。
届け出の締切が近い月は、締切の5営業日前にもう一度動かします。 1回目で出た差異のうち、まだ届け出ていないものだけを洗い直すためです。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 加入者名簿 | 被保険者の番号、氏名のカナ、生年月日、性別、加入日、保険金額の区分、状態(休職など) | 保険会社・代理店から届くExcel |
| 在籍者の一覧 | 社員番号、氏名、氏名のカナ、生年月日、雇用区分、入社日、在籍の状態 | 人事システムのCSV |
| 異動データ | 社員番号、異動の種類(入社・退職・休職・復職・出向・氏名変更など)、発令日、備考の自由記述 | 人事システムのCSV |
| 届け出の記録 | 契約、社員番号、届け出の種類、届け出た日、名簿への反映を確かめた日 | 人事部で持つ表 |
| 対応表 | 社員番号と、契約ごとの被保険者の番号 | 人事部で持つ表(最初に作る) |
| 加入資格の表 | 契約ごとに、どの雇用区分・どの状態なら被保険者か | 契約書と事務の手引きから作る |
質を決めるのは、下の3つです。 名簿と人事データは届いたものを読むだけですが、届け出の記録が無ければ pending が判定できず、対応表が無ければ毎月氏名で探し、加入資格の表が無ければ「載っているべきか」が決まりません。
加入資格の表は、契約書と事務の手引きを開いて人が作ります。 私傷病の休職の間も被保険者のままか、在籍出向の人はどちらの会社の契約に載るか、任意加入の保険は退職後も続けられるか。これらは契約ごとの取り決めで、AIに推測させるものではありません。 分からない項目は、代理店に問い合わせて埋めます。
データの取得方法を決める
名簿は、契約ごとの受け取りフォルダから読みます。シートの名前と列の並びが、保険会社によって違います。 契約ごとに「どの列が氏名のカナか」を書いた設定を持ち、読むときに列の名前をそろえます。列の並びが変わった月は、設定と合わずに止まるようにします。 黙って別の列を読むよりは、止まったほうが安全です。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 今月の名簿 | 受け取りフォルダのExcel | 名簿の実際 |
| 前月の名簿 | 前月の実行で保存した写し | 名簿の側で増えた行・減った行・変わった行の把握 |
| 在籍者の一覧 | 人事システムのCSV | 「載っているべき人」の土台 |
| 前月の異動データ | 人事システムのCSV | 異動の種類と発令日、備考 |
| 届け出の記録 | 人事部の表 | pending の判定 |
在籍者の一覧は、異動データとは別に取ります。 異動データだけを見ると、異動の無かった人の名簿の誤りに気づけません。何年も前の退職者が名簿に残っている、という型は、在籍者の一覧と名簿を全件で突き合わせて初めて出ます。
AIへ渡す前に整形する
- 表記をそろえる … 名簿と人事データの氏名のカナに
unicodedata.normalize("NFKC", ...)をかけ、空白を取り除きます。半角のカナが全角になります - 小書きの文字と長音をそろえる … 「ァ」と「ア」、「ー」と「-」の扱いを、比べるときだけ同じにします。元の値は残します
- 生年月日をそろえる … 和暦・西暦・区切りの記号の違いを、日付の型に直します。直せない値は空にせず、そのまま
needs_humanに回します - 社員番号を付ける … 対応表で、名簿の行に社員番号を付けます
- 対応表で付かない行の候補を探す … 正規化した氏名のカナと生年月日が一致する在籍者・退職者を探します。1人なら仮に付けて印を残し、2人以上か0人なら人へ回します
- 旧姓を足す … 氏名変更の異動がある人は、変更前の氏名のカナでも探します。改姓の届け出が済んでいない名簿は、旧姓のままです
- 重複を確かめる … 名簿の中に同じ社員番号が2行ないかを、
mergeのvalidate="one_to_one"で確かめます
5番目で、氏名だけで付けないでください。 同姓同名で生年月日まで同じ人は少ないものの、2,400名と退職者を合わせると、氏名のカナだけで一致する人は必ずいます。 生年月日まで合わせ、それでも複数なら人が決めます。仮に付けたものは、担当者が一度確かめたら対応表に足し、翌月からは対応表で付くようにします。
AIに処理させる
させるのは、異動データの備考の自由記述を、決まった異動の種類に分けることだけです。 人事システムの異動の種類は「休職」「出向」のような大きな区分しかなく、私傷病の休職か、育児休業か、介護休業かは備考に書かれています。 団体保険の扱いが分かれるのは、この細かい区分です。
| 異動の種類 | 備考の例 | 判断できないときの扱い |
|---|---|---|
leave_childcare(育児休業) | 「産後休業に続けて育児休業」 | 産休か育休かが書かれていなければ unknown |
leave_family_care(介護休業) | 「父の介護のため」 | 理由が書かれていなければ unknown |
leave_sick(私傷病の休職) | 「療養のため休職」 | 業務上か私傷病かが分からなければ unknown |
secondment_keep(在籍出向) | 「関連会社へ在籍出向」 | 在籍か転籍かが書かれていなければ unknown |
transfer_out(転籍) | 「転籍、同日付で退職」 | 同上 |
employment_change(雇用区分の変更) | 「期間従業員から正社員へ登用」 | 変更後の区分が無ければ unknown |
name_change(氏名の変更) | 「婚姻により改姓」 | 変更後の氏名が無ければ unknown |
other | 上のどれでもない | そのまま人へ |
右端の列が、この構成でいちばん大事な区別です。 種類が決まれば、届け出が要るかは加入資格の表で機械的に決まります。決まらないものを近い種類に寄せると、その瞬間に誤った届け出の下書きが出ます。
| させないこと | 理由 |
|---|---|
| 被保険者であるべきかの判断 | 契約ごとの取り決め。加入資格の表で決める |
| 名簿と人事データの人のつなぎ | 対応表と、氏名のカナ・生年月日の一致で決める |
| 届け出の締切の計算 | 契約ごとの締切の表から決める |
| 書かれていない理由の補完 | 「休職」とだけあれば、理由は unknown のまま |
| 従業員への説明文の作成 | 保険の内容の説明は、代理店の資料で行う |
4行目がいちばん起きやすい失敗です。 「休職」とだけ書かれた備考を渡すと、休職の大半が私傷病であることから leave_sick を選びがちです。指示で禁じ、理由が書かれていないものは unknown にします。
指示内容を固定する
あなたは人事部で、異動データの備考を読み、異動の種類を分ける立場です。
備考に書かれていることだけを根拠にしてください。推測で埋めないでください。
【分ける種類】
- leave_childcare ..... 育児休業(産前産後休業を含む場合はその旨を note に)
- leave_family_care ... 介護休業
- leave_sick .......... 私傷病による休職
- secondment_keep ..... 在籍したままの出向
- transfer_out ........ 転籍(元の会社を退職する出向)
- employment_change ... 雇用区分の変更(変更前と変更後を note に)
- name_change ......... 氏名の変更(変更後の氏名を new_name に)
- other ............... 上のどれでもない
- unknown ............. 種類を決める材料が備考に無い
【厳守事項】
- 備考に理由が書かれていなければ unknown にしてください。
「休職」とだけあるとき、私傷病と決めないでください。
- 出向は、在籍か転籍かが書かれていなければ unknown にしてください。
- 1つの備考に2つの異動が書かれていれば、2件に分けてください。
- evidence には、判断の根拠にした備考の文字列をそのまま写してください。
- 団体保険に加入すべきか、届け出が要るかは書かないでください。
- 氏名・社員番号・生年月日は、渡されていても出力に書かないでください。
- 日付が書かれていれば、書かれたとおりに effective_date に写してください。
書かれていなければ空にしてください。発令日から推測しないでください。
【異動の種類(人事システムの区分)】{change_type}
【発令日】{effective_on}
【備考】{remarks}
「加入すべきか、届け出が要るかは書かない」を明記しないと、親切に結論まで書きます。 結論が書かれていると、担当者はそれを読んで判断を終えてしまいます。届け出の要否は、加入資格の表から出た値だけを見せます。
生成AIに渡すのは、備考と区分と発令日だけです。 氏名や社員番号は渡さず、行の番号で結果を元の行に戻します。 指示に「書かないで」とあるのは、誤って渡したときの守りです。
出力形式を固定する
生成AIからは、次の形のJSONで受け取ります。
{
"row_id": "",
"events": [
{ "event_type": "leave_childcare | leave_family_care | leave_sick | secondment_keep | transfer_out | employment_change | name_change | other | unknown",
"effective_date": "", "new_name": "", "note": "", "evidence": "" }
]
}
Python の判定の結果は、次の表で差異の一覧に書き出します。
| 列 | 中身 |
|---|---|
contract | 契約(団体定期/GLTD/団体医療) |
employee_id | 社員番号(名簿の側は対応表で付けたもの) |
should_be_insured | 加入資格の表から決めた「載っているべきか」 |
on_roster | _merge の値(both/left_only/right_only) |
diff_items | 両方にある人の、氏名・状態・保険金額の区分の食い違い |
verdict | add_missing/remove_missing/change_missing/pending/needs_human |
filed_ref | pending のときの届け出の記録の番号 |
deadline | 契約ごとの締切の表から出した届け出の締切 |
1つ目の理由は、AIの出力と判定を別の層に置けることです。 events はAIが埋め、verdict は Python が規則で決めます。加入資格の取り決めが変わっても、直すのは加入資格の表だけです。
2つ目は、verdict の決め方を表で見せられることです。
| 条件 | verdict |
|---|---|
載っているべき・名簿に無い(left_only)・届け出の記録が無い | add_missing |
載っているべきでない・名簿にある(right_only)・届け出の記録が無い | remove_missing |
| 両方にあり、状態か氏名か保険金額の区分が食い違う | change_missing |
| 上のいずれかで、届け出の記録に同じ人・同じ種類のものがある | pending |
社員番号が付かない、event_type が unknown、加入資格の表に該当が無い | needs_human |
要は、unknown を規則の側で必ず人へ回すことです。 種類が決まらないものを add_missing や remove_missing に入れないので、AIが迷った行が、そのまま届け出の下書きになることはありません。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 名簿の受け取りフォルダ | ファイルの読み取り | 契約ごとの名簿のExcel |
| 人事システム | CSVの書き出し(担当者が実行) | 在籍者の一覧と前月の異動データ |
| Claude API | API呼び出し | 備考の分類 |
| 届け出の記録 | 表の読み取りと追記 | pending の判定と、送った届け出の記録 |
| 人事部の共有フォルダ | ファイルの書き出し | 差異の一覧と契約ごとの届け出の下書き |
保険会社・代理店へは、この構成からは送りません。 届け出の下書きを作るところまでで、様式への転記と送付は人が行います。 送った後に届け出の記録へ1行足すのも人の作業で、これを忘れると翌月の pending が判定できません。届け出の下書きの最後の列に「送った日」を空けておき、そこを埋めると記録に移る形にすると、忘れにくくなります。
人が確認する
人が見るのは、差異の一覧に出た行だけです。 名簿と人事データが合っている行は一覧に出ません。全行を開く設計にすると、第10章の6.0時間には収まりません。
needs_humanを先に見る … 社員番号が付かなかった行、異動の種類がunknownの行です。多くは、対応表への追加か、人事システムの備考の書き足しで片付きますremove_missingを確かめる … 退職した人が名簿に残っている行です。退職日と、契約の取り決めで脱退がいつ付けになるかを確かめますadd_missingを確かめる … 加入の資格があるのに名簿に無い行です。任意加入の保険では、本人が申し込んでいないだけのことがありますchange_missingを確かめる … 休職・復職、改姓、保険金額の区分の食い違いですpendingを流し見る … 届け出から日が経っても反映されていないものは、代理店に問い合わせます- 判定を覆したら記録する … どの行を、どの判定に変えたかを残します
3番目を急がないでください。 任意加入の団体医療保険で「資格はあるが入っていない」のは、本人の選択であることがほとんどです。加入資格の表で、任意加入の契約には「申込の記録がある人だけを載っているべきとする」と書いておきます。
目標は、360行をならして1行1分です。 差異の一覧に出るのは全体の一部という想定で、それより多い月は、対応表か加入資格の表に抜けがあります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 名簿の列の並びが変わった | 設定と合わないので止める。設定を直してから実行し直す |
| 名簿の同じ社員番号が2行ある | validate="one_to_one" で止まる。どちらかが古い行か、対応表の誤りかを確かめる |
| 氏名のカナと生年月日で候補が2人以上 | 仮に付けず needs_human |
| 生年月日が日付に直せない | 空にせず needs_human |
| 備考が空で、区分が「休職」だけ | AIに渡さず unknown として needs_human |
| Claude API が応答しない・形の合わないJSON | その行を needs_human にし、他の行の判定は続ける |
| 異動データの書き出しが給与の締めより前 | 書き出し日を見て警告を出し、締めの後に取り直す |
| 契約の名簿が未着 | その契約だけを飛ばし、「名簿未着」として一覧に残す |
| 届け出の記録に同じ人の届け出が2件 | 新しいほうを見て pending。古いほうが取り消し済みかを確かめる |
上から3行目までが大半を占めます。 どれもAIの問題ではなく、名簿と人事データをつなぐ鍵の問題です。 対応表を育てるほど、毎月の needs_human は減っていきます。
記録を残す
- 実行ごとに、読み込んだ名簿・在籍者の一覧・異動データのファイル名と作成日・書き出し日
- 前月の名簿の写し(翌月の差分のため)
- Claude API に渡した備考と返ってきたJSON(氏名・社員番号は含めない)
- 判定の結果(
should_be_insured、on_roster、verdict)と、そのとき使った加入資格の表の版 - 人が判定を覆した記録 … どの行を、どちらに変えたか
- 届け出の記録(送った日、名簿への反映を確かめた日)
判定の結果に「加入資格の表の版」を残すのは、取り決めが後から変わるためです。 契約の更新で休職者の扱いが変わると、過去の判定の意味が変わります。当時の表が残っていないと、どの月の届け出をやり直すべきかが決まりません。
覆した記録は、加入資格の表を直す材料になります。 同じ種類の行で毎月同じ方向に覆しているなら、表の書き方が取り決めと合っていません。
04実装レベルの3段階
最小構成で見つかるのは、名簿にいる・いないだけです。 状態の食い違いと届け出の記録との照合は、半自動化から入ります。 半自動化で、1行5分が1分程度になります。 本記事の想定はこの段階です。差が大きいのは、同じ人を探す時間と、契約ごとの扱いを探す時間が、どちらも表に置き換わるからです。 本格構成では、人事システムの書き出しと届け出の記録の追記も自動になりますが、人事システムがAPIを持っているかで、できることが決まります。 段階を飛ばさないでください。 半自動化を数か月回すと、対応表の抜けと加入資格の表の抜けが先に埋まります。needs_human が月に数件まで減ってから、本格構成に進むほうが、誤った届け出が出ません。
05工数削減シミュレーション
導入後 360件 × 1分 ÷ 60 = 6 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 従業員が千人を超え、総合福祉団体定期保険・団体長期障害所得補償保険・任意加入の団体医療保険など複数の団体保険を人事部で管理している企業。保険会社や代理店から毎月の加入者名簿がExcelやCSVで届き、人事システムの異動データと目で見比べている場合。退職者の脱退の届け出が翌月以降に回る、休職者の扱いが担当者ごとに違う、といったことが起きている場合。人事システムから社員番号つきの異動データをCSVで書き出せる場合。
- 従業員が数十人で、名簿を1枚見れば足りる場合。団体保険の加入・脱退を保険会社の画面で人事システムと自動でつないでおり、名簿の差分がもともと出ない場合。名簿が紙でしか届かず、データで受け取れない場合(まずデータでの受け取りを相談する)。なお、加入資格の解釈、保険金の請求、従業員への説明は、この構成では代替できません。
07最小構成で試す方法
- 先月の3つの契約の名簿と、人事システムの在籍者の一覧を書き出す
- 表計算ソフトで、氏名のカナを関数で全角にそろえ、生年月日と合わせた列を両方に作る
- その列で、在籍者の一覧から名簿を探す列と、名簿から在籍者の一覧を探す列を作る
- 見つからなかった行と、退職日が入っている行だけを抜き出す
- 異動データの備考のうち「休職」「出向」を含むものを20件選び、手元のAIサービスに貼って「育児休業・介護休業・私傷病の休職・在籍出向・転籍のどれかに分け、書かれていなければ不明としてください」と指示する
最初に確かめるのは、4番目で何行出るかです。 何年も前の退職者が名簿に残っている、という行がここで見つかることは珍しくありません。その行が見つかった時点で、この突き合わせを毎月回す意味が分かります。
| 出てきた内容 | 判断 |
|---|---|
| 退職者の残りや、加入の漏れが見つかった | Python での突き合わせに進む |
| 同じ人が見つからない行がたくさん出た | 対応表を先に作る。 鍵の問題 |
| AIが「休職」だけの備考を私傷病と決めた | 指示の書き方で直る。構成は有効 |
2行目が出ても失敗ではありません。 見つからなかった人の被保険者の番号を名簿から写し、対応表の最初の版にします。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
同じ人が見つからず add_missing が大量に出る | 表記をそろえてから比べる。 NFKC と、小書きの文字・長音の扱い |
| 改姓した人が名簿の旧姓で見つからない | 氏名変更の異動から旧姓を足して探す |
| 同姓同名の別人をつないでしまう | 生年月日まで合わせ、複数なら人へ。 氏名だけで付けない |
| 届け出済みのものを漏れとして出す | 届け出の記録を入力にし、pending を分ける |
| 「休職」だけの備考を私傷病と決める | 指示で禁じ、unknown を規則で人へ回す |
| 任意加入の未加入者を漏れとして出す | 加入資格の表で、申込の記録がある人だけを対象にする |
| 異動データが給与の締めの前の書き出し | 書き出し日を記録し、締めの前なら警告する |
| 名簿の列の並びが変わって別の列を読む | 設定と合わなければ止める |
| 名簿に同じ人が2行ある | validate="one_to_one" で止める |
| 加入資格の表を人事だけで決めてしまう | 代理店に確かめ、取り決めの出どころを表に書く |
| 届け出を送った記録を足し忘れる | 下書きの「送った日」を埋めると記録に移る形にする |
上の3行が、この構成の失敗のほとんどです。 どれも「同じ人かどうか」という鍵の問題から出ています。突き合わせの精度を決めるのは、AIではなく、表記をそろえる手順と対応表です。
下の2行も早く効いてきます。 表の各行に、契約書のどの条項か、代理店にいつ確かめたかを書いておきます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 全従業員の氏名・生年月日・雇用区分・在籍の状態、休職の理由(育児・介護・療養)、団体保険の加入状況と保険金額の区分です。
- 生成AIに渡すのは備考だけにする … 氏名・社員番号・生年月日は渡さず、行の番号で戻します。療養のための休職という情報は、健康に関わる情報です。 備考の文面そのものも、必要な範囲に限ります
- 休職の理由を、差異の一覧に広げない … 一覧を見るのは福利厚生の担当者に限ります。「leave_sick」という値が、他の部署の目に触れる場所に置かれないようにします
- 届け出を自動で送らない … 出すのは下書きまでです。誤った脱退の届け出は、その人が保障を受けられない期間を作ります
- この構成は加入資格の解釈を代替しません … 休職者や出向者を被保険者として扱うかは、契約の取り決めと、保険会社・代理店の回答で決まります。 この構成が出すのは、表に照らした結果だけです
- 名簿のファイルの置き場所を限る … 保険会社から届く名簿は、全従業員の生年月日がまとまった一覧です。受け取りフォルダと前月の写しは、福利厚生の担当者だけが開ける場所に置きます
- 生成AIの利用の設定を確かめる … 利用する前に、入力が学習に使われない設定か、保存の期間はどうかを、自社の取り決めに照らして確かめます
誤りが起きた場合のリスクは、届け出が漏れて保障や保険料がずれることと、誤った届け出で保障が切れることの2つです。 前者は鍵の不一致を pending や合っている行に混ぜると起き、後者は unknown を種類に寄せると起きます。どちらも、迷ったものを人へ回す規則で守ります。
10まず何から始めるか
1週目:最小構成で退職者の残りを探す
先月の名簿と在籍者の一覧を表計算ソフトで照らし、名簿にいるのに在籍していない人を抜き出します。見つかった人数が、この突き合わせを始める理由になります。
2週目:対応表の最初の版を作る
1週目で照らせた人について、社員番号と被保険者の番号を対応表に写します。照らせなかった人は、1人ずつ確かめて足します。 ここで作った表が、翌月からの突き合わせの鍵になります。
3週目:加入資格の表を作る
3つの契約の契約書と事務の手引きを開き、雇用区分・休職の種類・出向の種類ごとに、被保険者として扱うかを表にします。 分からない行は代理店に問い合わせ、回答の日付を表に書きます。
4週目:Python で突き合わせる
pandas で表記をそろえ、merge の indicator と validate で突き合わせ、差異の一覧を出すところまで作ります。この時点では備考の分類は人が行い、verdict の規則が合っているかを見ます。
2か月目: Claude API での備考の分類と、届け出の記録による pending の判定を足します。needs_human の件数を毎月数えます。3か月目以降: 届け出の下書きを足し、1行5分が何分になったかを実測します。needs_human が月に数件まで減り、退職者の残りが翌月のうちに見つかるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
merge の how="outer" が両方のキーの和集合を使う結合であること。indicator=True で _merge の列が足され、値が left_only・right_only・both であること。validate で one_to_one(1:1)などのキーの一意性を確かめられること(pandas 3.0.6 の文書) | pandas: pandas.merge | 2026-10-08 |
unicodedata.normalize が NFC・NFKC・NFD・NFKD の正規化を返すこと。NFKC が互換分解の後に正準合成を行うこと。比べる前に正規化することで、見た目が同じ文字列の不一致を避けられること(Python 3.14 の文書) | Python: unicodedata | 2026-10-08 |
Claude API で output_config.format に type: "json_schema" とスキーマを渡すと、スキーマに合った JSON が返ること。一般提供であること。数値の範囲や文字列の長さの制約など、使えないスキーマの機能があること | Claude API Docs: Structured outputs | 2026-10-08 |
団体保険の加入資格、休職者・出向者の扱い、届け出の締切は、契約の取り決めと保険会社・代理店の回答に従ってください。 本記事は製品の公開ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1093)についてのご相談はこちらから。
