Appearance
年次有給休暇の比例付与(労基法39条3項)
対象: packages/leave/src/statutory.ts / packages/db/src/schema/users.ts / apps/api/src/routes/{leave,members}.ts / apps/api/src/leave-grant-proposals.ts / apps/web/src/components/MembersView.tsx
実装: 2026-08-24(v0.7 の付与フローの上に載せる形で追加)
何を実装したか
週の所定労働日数が少ない労働者には、通常(フルタイム)の付与日数表ではなく 比例付与の日数表が適用される(労働基準法39条3項、労働基準法施行規則24条の3)。 KIZAMI はメンバーごとに「有給付与の区分」を持ち、区分に応じた日数表で
- 法定付与の自動計算(
POST /leave/grants/auto) - 付与の予告スキャン(
runLeaveGrantProposalScan)
の両方を計算する。付与日(基準日)と時効(付与日+2年)は区分に依らず同じで、 変わるのは日数だけ。
日数表
付与の発生順(6ヶ月 → 1年6ヶ月 → … → 6年6ヶ月)で引く。7回目以降は最後の値で頭打ち。
| 区分 | 週所定労働日数 | 6ヶ月 | 1年6ヶ月 | 2年6ヶ月 | 3年6ヶ月 | 4年6ヶ月 | 5年6ヶ月 | 6年6ヶ月以降 |
|---|---|---|---|---|---|---|---|---|
full | 5日以上 | 10 | 11 | 12 | 14 | 16 | 18 | 20 |
days4 | 4日 | 7 | 8 | 9 | 10 | 12 | 13 | 15 |
days3 | 3日 | 5 | 6 | 6 | 8 | 9 | 10 | 11 |
days2 | 2日 | 3 | 4 | 4 | 5 | 6 | 6 | 7 |
days1 | 1日 | 1 | 2 | 2 | 2 | 3 | 3 | 3 |
値の定義は packages/leave/src/statutory.ts の1箇所(LEAVE_GRANT_CLASS_DAYS_TABLE)。
判断点: 週所定を保存して導出するのではなく、区分そのものを持つ
users.leave_grant_class TEXT NOT NULL DEFAULT 'full' という就業規則ベースの区分を 1列で持つ。「週所定労働日数」「週所定労働時間」を保存して条件判定する形は採らない。
理由:
- 法的条件が連言である。比例付与の対象は「週所定労働時間が30時間未満」かつ 「週所定労働日数が4日以下」(週以外の期間で定める場合は年間所定労働日数216日以下)。 両方を正確に持っていなければ判定できない。
- KIZAMI は週所定を持っていない。シフト制では実際の勤務日数が週ごとに変動し、 実績から推定すると閑散期に区分が下がる。固定時間制でも「週の所定休日」を テナント設定として持っていない(
tenant_setting_versionsは法定休日の曜日しか持たない)。 - 誤判定の向きが致命的。導出を誤ると法定より少ない日数しか付与しない方向の事故に なり、これは労基法39条違反そのものである。一方、区分は雇用契約を結んだ管理者が すでに知っている事実であり、選ばせるコストは低い。
したがって区分は管理者が明示的に選ぶ値とし、既定は最も日数の多い full。 DB に想定外の文字列が入っていた場合も full へ倒す(isLeaveGrantClass で検証し、 偽なら full)— 不明なときに少なく付与しないための一貫した方針。
年5日取得義務との関係
年5日取得義務(労基法39条7項)の対象は「10日以上付与された年休」であり、 比例付与かどうかは条件ではない。checkMandatoryFiveDays は grants[].days >= 10 で 判定しているため、比例付与でも自動的に正しく扱われる:
days4の 3年6ヶ月 = 10日 → 義務の対象days4の 2年6ヶ月 = 9日 → 対象外days3以下は 6年6ヶ月以降でも 11日 / 7日 / 3日 なので、days3のみ 3年6ヶ月(8日)より 後で10日を超える回がある
区分を変えたときの扱い
区分の変更は PATCH /members/:id { leaveGrantClass }(権限 member.profile.edit)。 監査ログ member.update に変更前(leaveGrantClassFrom)と変更後の両方を残す。
既に作られた leave_grants の日数は遡って直さない。 付与済みの日数は 「その基準日にその区分だった」という事実の記録であり、後から区分を変えて過去の付与を 書き換えるのは実務上も監査上も誤り(是正が必要なら手動付与で差分を足す)。 区分変更が効くのは以後の自動付与・予告から。
UI
- メンバー管理(
/settings/members)の詳細行に「有給付与の区分」セレクトを置く。 補足文言: 「週所定労働時間30時間未満かつ週所定労働日数が4日以下の場合のみ 比例付与(週4日以下)を選びます(労基法39条3項)」 - 誤って比例付与に落とすと法定より少なく付与されるため、選択と同時にはコミットせず 明示的な保存ボタンで確定する(入社日と同じ流儀)
- 付与の予告一覧では、区分が
full以外の行に「比例付与(週3日)」のチップを出す。 フルタイムの表と日数が違う理由を、承認する管理者がその場で読み取れるようにするため