有期契約の更新管理表をClaudeで作る — 無期転換と雇止めに要る情報
契約書PDFから契約期間・更新条項・更新上限を抜き、無期転換の申込権が生じる契約と申込期限を表にする手順を、労働契約法18条・19条と通算契約期間の省令に沿って組み立てます。
有期契約社員の更新管理表で漏れやすいのは、契約期間そのものではありません。「通算でいつ5年を超えるか」と「更新しないとき、後から争われる材料がどれだけ残っているか」です。この2点は契約書の条項と日付に書かれているので、PDFから拾って表にできます。
Claudeに任せるのは、契約書PDFから項目を抜く作業と、抜いた日付を条文のルールで並べる作業です。申込権が生じるかどうかの最終判断と、雇止めの可否は人が決めます。手順は、表の列を決める、PDFから抜く、通算期間を計算する、雇止めの材料を足す、の順です。
更新管理表の列は条文から決まる
列は思いつきで増やさず、無期転換を定める労働契約法18条と、雇止めを定める19条が見る事実から逆算します。18条1項の要件は次のとおりです。
- 同一の使用者との間で、二以上の有期労働契約がある
- 契約期間を通算した期間(通算契約期間)が5年を超える
- 労働者が、現に結んでいる契約の満了日までに、無期労働契約の申込みをする
申込みがあれば、使用者は承諾したものとみなされます。無期になった後の労働条件は、契約期間を除いて現在の有期契約と同じです(別段の定めがある部分を除く)。厚生労働省の無期転換ポータルも、使用者は申込みを断れないと説明しています。
そこで、表には次の列を置きます。
| 列 | 何のために要るか | 根拠 |
|---|---|---|
| 社員番号 | 何のために要るか同一使用者での通算を人単位で追う | 根拠18条1項 |
| 契約の開始日・満了日 | 何のために要るか通算契約期間の計算 | 根拠18条1項 |
| 契約期間(月数) | 何のために要るか空白期間の基準の計算 | 根拠18条2項・省令2条 |
| 更新回数 | 何のために要るか雇止めの材料 | 根拠19条1号 |
| 更新条項の文言 | 何のために要るか更新の期待の材料 | 根拠19条2号 |
| 更新上限の有無と文言 | 何のために要るか雇止めの材料。契約締結時の明示事項にも当たる | 根拠ポータルの注意書き・労基則5条1項1号の2 |
| 通算月数(契約末時点) | 何のために要るか5年超の判定 | 根拠18条1項 |
| 申込権が生じる契約 | 何のために要るか本人への通知の起点 | 根拠18条1項 |
| 申込期限 | 何のために要るかその契約の満了日 | 根拠18条1項 |
| 無期転換の申込機会・転換後の条件の明示日 | 何のために要るか申込権が生じる契約の締結時に書面で示したかの記録 | 根拠労基則5条5項・6項 |
| 申込日・申込方法 | 何のために要るか受け付けた事実の記録 | 根拠18条1項 |
| 特例の適用有無 | 何のために要るか通算から外れる期間の確認 | 根拠特措法8条 |
「申込期限」は、現に結んでいる契約の満了日までという条文の文言をそのまま列にしたものです。申込権が生じる契約の満了日が、そのまま期限になります。
契約書PDFから抜く項目とプロンプト
契約書は、更新のたびに文言が少しずつ違うことがあります。1通ずつ同じ項目を同じ形で抜かせ、原文の該当箇所も一緒に出させると、後で人が照合しやすくなります。
添付は同一の従業員(社員番号 A001)の有期労働契約書です。
契約書ごとに次の項目を抜き、1契約書1行のCSVで出してください。
社員番号,開始日,満了日,更新条項の原文,更新上限の原文,抜き出した頁
- 日付はYYYY-MM-DD。和暦は西暦に直し、直した旨を備考列に書く
- 更新条項・更新上限は要約せず原文のまま。無ければ「記載なし」
- 読み取れない項目は空欄にし、推測で埋めない
- 契約書に氏名があっても出力には含めないポイントは3つあります。
- 氏名を出力に入れない。契約書は個人情報の塊なので、表の突合キーは社員番号に絞ります。
- 要約させない。更新条項の「更新する場合がある」と「原則として更新する」では意味が違います。言い換えさせると、その差が消えます。
- 推測で埋めさせない。開始日が欠けた契約書があれば、空欄のまま人が探します。
社内でPDFの扱いを決める際は、規程を読ませる運用の例として就業規則PDFをClaudeに読ませて副業規定を確認する方法が参考になります。同じ型で、確認する対象を契約書に替えられます。
通算5年と空白期間を計算する
日付を抜いたら、通算契約期間を数えます。ここは文章で答えさせず、手元で動くコードに任せるほうが再現できます。ClaudeにPythonを書かせて実行する環境があればそのまま、なければ次のコードを手元で動かします。
通算には、契約と契約の間の空白期間の扱いがあります。18条2項は、空白期間が6か月以上あれば、それ以前の契約期間は通算に入れないと定めています。ただし直前の契約期間(空白なくつながる複数の契約はその合計)が1年に満たないときは、その2分の1を基礎にした期間が基準になります。端数が1か月に満たなければ1か月に切り上げます。通算契約期間に関する省令の2条が、この計算を定めています。
つまり基準は「6か月、または直前の契約期間の半分(1か月未満の端数は切り上げ)のうち短いほう」です。1年契約なら6か月、6か月契約なら3か月になります。
省令1条は、空白がこの基準に満たないものを、契約が連続していると扱う考え方を定めています。空白が短ければ契約はつながっているとみなされ、通算は途切れません。通算に足されるのは契約期間だけで、空白期間は足しません。
次のコードは、契約が月初に始まり月末に終わることを前提にした簡易版です。
import csv, math, sys
from datetime import date
def ym(d): # 月を通し番号にする
return d.year * 12 + d.month - 1
def check(rows):
"""rows: 同一社員の (開始日, 満了日) を開始日順に。月初開始・月末満了を前提にした簡易計算"""
total = 0 # 空白期間でリセットされない通算月数
prev_end = None
for i, (s, e) in enumerate(rows, 1):
if prev_end is not None:
gap = ym(s) - ym(prev_end) - 1
limit = min(6, math.ceil(total / 2))
if gap >= limit and gap > 0:
print(f" {i}件目の前: 空白{gap}か月 >= 基準{limit}か月 -> 通算リセット")
total = 0
months = ym(e) - ym(s) + 1
total += months
flag = "申込権あり" if total > 60 else ""
print(f" {i}件目 {s}〜{e} {months}か月 通算{total}か月 {flag}")
prev_end = e
if __name__ == "__main__":
by_emp = {}
for r in csv.DictReader(open(sys.argv[1], encoding="utf-8")):
by_emp.setdefault(r["社員番号"], []).append(
(date.fromisoformat(r["開始日"]), date.fromisoformat(r["満了日"])))
for emp, rows in by_emp.items():
print(emp)
check(sorted(rows))入力は、社員番号・開始日・満了日の3列を持つCSVです。1年契約を6回更新した社員、6か月契約で空白を挟んだ社員、空白が短く通算が続く社員を並べたサンプルで動かします。
python3 renewal_check.py sample.csv出力は次のとおりです。
A001
1件目 2020-04-01〜2021-03-31 12か月 通算12か月
...
5件目 2024-04-01〜2025-03-31 12か月 通算60か月
6件目 2025-04-01〜2026-03-31 12か月 通算72か月 申込権あり
B002
1件目 2021-04-01〜2021-09-30 6か月 通算6か月
2件目の前: 空白6か月 >= 基準3か月 -> 通算リセット
2件目 2022-04-01〜2022-09-30 6か月 通算6か月
3件目 2022-10-01〜2023-03-31 6か月 通算12か月
C003
1件目 2019-04-01〜2020-03-31 12か月 通算12か月
2件目 2020-09-01〜2021-08-31 12か月 通算24か月 A001は、5件目の契約末で通算がちょうど60か月です。5年「を超える」のは6件目なので、申込権が生じる契約は6件目、申込期限はその満了日の2026-03-31になります。厚生労働省のポータルも、契約期間が1年なら5回目の更新後の1年間に申込権が生じると説明していて、数え方が合います。
B002は、6か月契約のあとに6か月の空白があります。基準は直前の契約期間6か月の半分で3か月なので、空白がそれ以上あり、通算は0に戻ります。C003は1年契約のあとに5か月の空白です。基準が6か月なので満たず、通算が続きます。
コードの結果は、Claudeに「この出力のB002が途切れる理由を条文に沿って説明して」と聞いて検算できます。説明が上の基準と食い違えば、コードか前提を疑います。
簡易版が扱わないもの
このコードは月単位の簡易計算です。次のものは対象外なので、該当する社員は人が個別に確認します。
- 契約が月の途中で始まる・終わる場合の日数計算
- 空白期間が複数あり、省令1条の2番目以降の無契約期間の基準が絡む場合
- 2013年4月1日より前に初日がある契約。平成24年法律第56号の附則2項は、18条の施行日より前に初日がある契約の期間を通算契約期間に入れないと定めています。その施行日は2013年4月1日です
- 契約の始期がまだ来ていない契約。18条1項のかっこ書きは、始期の到来前のものを通算から除いています。更新予定の契約を先に入力すると、通算が実際より長く出ます
雇止めの判断に要る情報を表に足す
雇止めの可否は19条が定めます。契約期間が満了する日までに労働者が更新を申し込んだ場合、または満了後遅滞なく締結を申し込んだ場合で、使用者の拒絶が「客観的に合理的な理由を欠き、社会通念上相当であると認められない」ときは、従前と同じ条件で申込みを承諾したものとみなされます。
この規定が働く対象は、次のどちらかに当たる有期契約です。
- 過去に反復して更新されていて、更新しないことが、無期契約の労働者を解雇するのと社会通念上同視できる
- 労働者が、契約満了時に更新されると期待することに合理的な理由がある
表の列は、この2つに結びつく事実から作ります。条文が挙げているのは2つの類型だけで、どの事実を拾うかは各社で決めることです。次は、その候補をまとめた私の整理で、公式の列挙ではありません。
| 類型 | 表に残す事実の候補 | 契約書で抜けるか |
|---|---|---|
| 1号(反復更新) | 表に残す事実の候補更新回数、通算期間、更新のたびの手続の形(面談の有無、自動更新か) | 契約書で抜けるか更新回数・期間は抜ける。手続は別資料 |
| 2号(更新の期待) | 表に残す事実の候補更新条項の文言、更新上限の有無、業務が恒常的か | 契約書で抜けるか条項・上限は抜ける。業務内容は別資料 |
契約書に書かれない事実、たとえば上司が更新を示唆した発言や、更新時の面談記録は、契約書PDFには出てきません。表に「別資料の有無」の列を置き、人事の記録を紐づけます。
更新上限(「更新は通算5年まで」などの文言)の扱いには注意が要ります。ポータルは、無期転換ルールを避ける意図で、申込権が生じる前に雇止めや契約期間中の解雇をすることは、18条の趣旨に照らして望ましくないとしています。また、使用者が更新年限や更新回数の上限を一方的に設けても、雇止めが許されない場合があると明記しています。上限の文言が契約書にあることは「あるかどうか」の事実として表に載せ、効力の判断は専門家に回します。
契約書や就業規則の規定を横断して見る型は、同一労働同一賃金の待遇差の説明をClaudeのProjectsで下書きするでも使っています。判断表をProjectsに置いて、案件ごとに回す点が共通です。
特例と、表の外で確認すること
無期転換には特例があります。高度専門職と定年後の再雇用に特例を設ける有期雇用特措法の8条は、2つの場合を定めています。
- 第一種の認定を受けた事業主(高度な専門的知識を持つ人の特定有期業務)では、18条1項の「5年」が、特定有期業務の開始から完了までの期間(10年が上限)に読み替えられる
- 第二種の認定を受けた事業主(定年後引き続き雇用される人)では、定年後引き続き雇用されている期間が通算契約期間に入らない
どちらも、事業主が計画を作って厚生労働大臣の認定を受けて初めて適用されます。表には「特例適用の有無」と「認定の有無」の列を置き、認定が確認できない場合は通常のルールで計算します。特例の対象かどうかをClaudeに判断させる運用はおすすめしません。認定の有無は事実として人事が確認する項目です。
令和6年(2024年)4月1日から、無期転換ルールに関して労働条件明示の項目が追加されています(ポータル)。労働基準法の施行規則5条で見ると、内容は次のとおりです。
- 有期契約を更新する場合の基準に、通算契約期間または更新回数の上限があるときは、その上限を含める(1項1号の2)
- 契約期間中に無期転換の申込みができることになる有期契約を結ぶときは、申込みに関する事項と、申込みで成立する無期契約の労働条件(就業場所・業務、賃金、退職など。更新基準を除く)を明示する(5項)。書面の交付で示す事項の範囲は6項が定める
更新上限の列と、申込権が生じる契約の列は、この明示事項に直接つながります。契約書PDFから「上限の原文」を抜く列があれば、明示した事実の裏づけになります。申込権が生じる契約の締結時に、申込機会と転換後の条件を書面で示したかを、明示日の列で追えます。
申込みの受付については、18条1項は申込みの方式を定めていません。口頭で足りるかの解釈は条文からは決まらないため、申込みを受けたら日付と方法を残す列を置き、書面でも受けられる運用にしておくと、後で事実を再現できます。申込みを受けた後の無期契約の書面作成は、この表の範囲外です。就業規則側の整備は、Claudeで36協定届とモデル就業規則のたたき台を作るの手順が出発点になります。
つまずきやすい点
- 通算するのは「同一の使用者」との契約です。グループ会社や派遣先をまたぐ場合は、使用者が誰かを人が確認します。Claudeには契約書の当事者欄を抜かせて表に載せるところまでです。
- 和暦と契約日は混同しやすい項目です。契約の締結日と開始日は別です。プロンプトで「開始日」と書くと、締結日を拾う契約書があります。抜いた頁を一緒に出させ、人が照合します。
- 推測で穴を埋めると誤りが隠れます。欠損を埋めた表は、見た目が整うぶん誤りに気づきにくくなります。空欄のまま残す指示は外しません。
- 本人に見せる前に確認が要ります。申込権が生じる契約の本人への通知文面は、専門家の確認を経てから使います。
表は、この記事のコードで日付を動かし、条項の原文を並べたところまでが機械的な作業です。申込権の有無の最終確認、更新上限の効力、雇止めの可否は、社会保険労務士や弁護士に相談する前提で、判断に要る事実をそろえる道具として使います。