保育認定・保育必要量・延長保育料金連携仕様
- 文書バージョン: 0.1
- 作成日: 2026-08-23
- ステータス: 一部実装
- 関連仕様: 延長保育料金自動計算、延長保育料金・請求転送
園児別・期間別の保育認定、保護者事由、施設専用画面、区分別の朝夕料金ルール、計算モード切替、月次表示・CSV、未計算時の請求転送停止、デモデータまで実装済みである。認定期間の直接訂正画面、差額プレビュー付き一括再計算、認定専用CSVインポートは後続実装とする。
1. 目的
施設職員が、園児の保育認定として次を登録できるようにする。
- 各保護者の「保育を必要とする事由」
- 園児の「保育必要量」(保育標準時間/保育短時間)
- 認定の適用期間
延長保育料金は、打刻日の保育必要量と施設の区分別料金ルールを使って計算する。保護者による登録・変更申請の対象にはしない。
2. 今回の仕様決定
- 画面上の名称は、制度上の表現に合わせて「保護者の要件」ではなく「保育を必要とする事由」、「保育標準・短時間」ではなく「保育必要量」とする。
- 認定情報は家庭や保護者アカウントの属性ではなく、園児ごとの期間付き保育認定として保存する。
- 保護者の事由も当該園児の認定時点のスナップショットとして保存する。同じ家庭の兄弟姉妹へ自動反映しない。
- 施設職員専用データとし、保護者ポータル、保護者変更申請、保護者向け通知本文には表示・送信しない。
- 延長料金は、保育標準時間/保育短時間ごとに通常保育の開始・終了時刻と朝夕の課金条件を設定する。
- 認定または対応する料金ルールがない日は0円とみなさず「未計算」とする。請求転送も止める。
- 既存の確定済み、手動調整済み、対象外、請求転送済み料金は、認定やルールを変更しても自動更新しない。
- 既存運用からは切替日を設定して段階移行する。切替日前は現行計算、切替日以降は認定区分別計算を使う。
3. 制度上の前提
こども家庭庁の案内では、保育認定において「保育を必要とする事由」と「保育必要量」が考慮される。保育必要量は、保育標準時間が最長11時間、保育短時間が最長8時間である。ただし、どの時刻からでも11時間または8時間を追加料金なしで使える意味ではなく、施設が定める通常保育時間帯を超えた利用は延長保育となる。
本システムは認定そのものを決定せず、市町村等が決定した内容を施設が転記・管理する。認定可否や就労時間の判定は行わない。
参考:
4. 現行実装の調査結果
4.1 保護者・園児情報
Childに保育必要量または認定期間の項目はない。GuardianとFamily.shared_profile.guardiansに氏名、続柄、電話、勤務先はあるが、保育を必要とする事由はない。- 家庭共有プロフィールが保護者表示情報の実質的な正データで、
Guardianは園児ごとに削除・再作成される。 - 園児・家庭編集は
require_child_record_manager()で保護されている。 - 保護者ポータルから住所、保護者氏名、勤務先等の変更申請が可能で、承認時に家庭共有プロフィールを置き換える。
この構造へ施設専用項目を単純追加すると、保護者申請の承認や家庭同期で消失・上書きされる可能性がある。そのため、保育認定は Family.shared_profile および Guardian へ保存しない。
4.2 延長保育料金
ExtendedCareFeeRuleは日付に対して施設全体で1件だけ有効となる。- 現行ルールは夕方の
start_time、猶予、丸め単位、単価、日額上限だけを持つ。 extended_care_fee_service.calculate_charge()は降園打刻だけを使い、保育必要量と登園時刻を参照しない。- 料金は出欠1日につき
ExtendedCareCharge1件で、確認、手動調整、対象外、請求転送の状態を持つ。 - 通常再計算は確認済み等を保護し、請求転送済み料金は再計算しない。
- 月次請求転送は正の未確認料金を検知するが、料金レコード自体が作られていない出欠を転送ブロッカーとして扱わない。
ExtensionFeeRuleという別の未使用モデルもあるが、現行料金機能はExtendedCareFeeRuleを正としている。本対応でも未使用モデルへ切り替えない。
5. 対象範囲
5.1 含めるもの
- 園児ごとの保育認定の新規登録、訂正、期間終了、履歴表示
- 保護者ごとの保育を必要とする事由
- 保育標準時間/保育短時間の登録
- 施設職員専用の表示・編集権限
- 区分別・期間別の通常保育時間帯と延長料金ルール
- 朝延長、夕延長、日額上限の自動計算
- 月次確認、CSV、請求転送への認定区分と未計算チェックの反映
- 既存データからの段階移行、切替前検証、差額プレビュー
- 自動テストとデモデータ
5.2 含めないもの
- 市町村への認定申請、電子申請、認定審査
- 就労時間から保育必要量を自動判定する機能
- 保護者自身による認定情報の入力・変更申請
- 認定証画像や診断書等の添付管理
- 月極延長料金、兄弟割引、所得区分、減免の自動算定
- 自治体ごとの任意数式
- 1号認定等、保育標準時間/保育短時間以外の認定区分
6. コード値
6.1 保育を必要とする事由
保存値は英字コード、画面表示は次の日本語とする。
| 保存値 | 表示 |
|---|---|
employment |
就労 |
pregnancy_childbirth |
妊娠・出産 |
illness_disability |
保護者の疾病・負傷・障害 |
family_care_nursing |
同居または長期入院等している親族の介護・看護 |
disaster_recovery |
災害復旧 |
job_search_startup |
求職活動・起業準備 |
education_training |
就学・職業訓練 |
abuse_dv |
虐待・DVのおそれ |
childcare_leave_continuation |
育児休業取得時の継続利用 |
other_municipal |
その他、市町村が認める事由 |
1人の保護者について、認定証等で主として扱われる事由を1件登録する。複数事由が併記されている場合は主事由を選び、施設内メモへ補足する。other_municipal の場合は具体名を必須とする。
6.2 保育必要量
| 保存値 | 表示 |
|---|---|
standard |
保育標準時間 |
short |
保育短時間 |
未登録はコード値として保存せず、該当日の有効な保育認定が存在しない状態として扱う。
7. データモデル
7.1 ChildCareCertification(新規)
園児に対する期間付きの保育認定を表す。
| カラム | 型 | 内容 |
|---|---|---|
id |
integer | 主キー |
child_id |
integer FK | 園児 |
care_time_category |
enum | standard / short |
effective_from |
date | 適用開始日 |
effective_to |
date, nullable | 適用終了日。無期限はNULL |
internal_note |
string, nullable | 施設内メモ。最大500文字 |
created_at |
datetime | 作成日時 |
created_by_user_id |
UUID, nullable | 作成者 |
created_by_name |
string | 作成者名スナップショット |
updated_at |
datetime | 更新日時 |
updated_by_user_id |
UUID, nullable | 更新者 |
updated_by_name |
string | 更新者名スナップショット |
制約:
- 同じ園児の認定期間を重複させない。
effective_to >= effective_from。- 物理削除しない。誤登録は監査履歴を残して無効化または期間訂正する。
- 兄弟姉妹へ自動複製しない。
7.2 ChildCareNeedReason(新規)
認定時点の保護者と事由を保持する。
| カラム | 型 | 内容 |
|---|---|---|
id |
integer | 主キー |
certification_id |
integer FK | 保育認定 |
guardian_order |
integer | 家庭プロフィール上の保護者順 |
guardian_name_snapshot |
string | 登録時の表示名 |
relationship_snapshot |
string | 登録時の続柄 |
reason |
enum | 6.1のコード |
other_reason_detail |
string, nullable | その他の具体名。最大200文字 |
certification_id + guardian_order を一意とする。現在の保護者氏名を後から変更しても、過去の認定に保存した氏名・続柄は変更しない。
7.3 ChildCareCertificationAuditLog(新規)
作成、訂正、期間終了、無効化について、変更前後のスナップショット、操作種別、理由、実行者、実行日時を保存する。病名、障害名、DVの具体的事情等をログ本文へ自動展開しない。
7.4 ExtendedCareCalculationSetting(新規シングルトン)
| カラム | 型 | 内容 |
|---|---|---|
mode |
enum | legacy / category_aware |
category_aware_from |
date, nullable | 区分別計算の開始日 |
updated_at |
datetime | 更新日時 |
updated_by_* |
nullable | 更新者 |
初期値は legacy。区分別計算への切替は管理者が事前検証後に明示実行する。
7.5 ExtendedCareFeeRule(拡張)
新ルールでは次を追加する。既存列は切替日前の互換計算用に残す。
| カラム | 内容 |
|---|---|
care_time_category |
standard / short。既存ルールはNULLのレガシー扱い |
normal_start_time |
追加料金なしの通常保育開始時刻 |
normal_end_time |
追加料金なしの通常保育終了時刻 |
morning_enabled |
朝延長を計算するか |
morning_grace_minutes |
朝延長の猶予 |
morning_rounding_minutes |
朝延長の丸め単位 |
morning_unit_price |
朝延長の単価 |
evening_enabled |
夕延長を計算するか |
evening_grace_minutes |
夕延長の猶予 |
evening_rounding_minutes |
夕延長の丸め単位 |
evening_unit_price |
夕延長の単価 |
daily_cap_amount は朝夕の合計額へ適用する。有効期間の重複禁止は「同じ保育必要量の中」で判定し、標準時間ルールと短時間ルールは同じ期間に1件ずつ存在できる。
11時間・8時間は制度上の最大利用可能時間であり、時刻をコードへ固定しない。施設が実際に定めた通常保育時間帯を設定する。
7.6 ExtendedCareCharge(拡張)
現在の1出欠1料金を維持し、朝夕を1日分として集約する。
| 追加カラム | 内容 |
|---|---|
certification_id |
計算に使用した保育認定 |
care_time_category_snapshot |
計算時の保育必要量 |
calculation_version |
legacy_v1 / category_v1 |
actual_check_in_at |
計算に使用した登園打刻 |
normal_start_at |
計算時の通常保育開始日時 |
normal_end_at |
計算時の通常保育終了日時 |
morning_extended_minutes |
朝の課金対象分数(丸め後) |
morning_billable_units |
朝の課金単位数 |
morning_amount |
朝の自動計算額 |
evening_extended_minutes |
夕の課金対象分数(丸め後) |
evening_billable_units |
夕の課金単位数 |
evening_amount |
夕の自動計算額 |
既存の extended_minutes、billable_units、auto_amount は朝夕合計として維持し、請求転送との互換性を保つ。既存の charge_start_at と actual_check_out_at も互換表示用に残す。
8. 施設向け画面
8.1 園児詳細
/children/{child_id} に「保育認定(施設管理)」を追加する。
- 現在有効な保育必要量
- 適用期間
- 保護者名、続柄、保育を必要とする事由
- 施設内メモの有無
- 過去・将来の認定履歴
- 新規登録、訂正、期間終了への導線
一般の家庭共有情報と視覚的に分離し、「保護者ポータルには表示されません」と明記する。
8.2 園児登録・編集
- 園児新規登録では、任意の「初回保育認定」セクションを表示する。
- 既存園児の認定変更は、通常の園児編集フォームで現在値を直接上書きせず、認定履歴画面から新しい適用期間を登録する。
- 保護者候補は家庭共有プロフィールから表示し、氏名・続柄を認定へスナップショット保存する。
- 家庭編集画面では認定を変更しない。兄弟ごとの差異を誤って上書きしないためである。
8.3 園児一覧
選択表示列と絞り込みに「保育必要量」を追加する。基準日は当日とし、認定がなければ「未登録」と表示する。
8.4 保護者ポータル
- 認定情報と事由をHTML、フォーム、変更申請payload、通知、CSVへ含めない。
- 保護者から同名の追加フォーム値が送られても無視する。
- 保護者変更申請を承認しても認定テーブルを更新しない。
9. 権限と機微情報
| 操作 | 権限 |
|---|---|
| 職員画面での認定表示 | 当該園児を閲覧できる職員 |
| 認定の登録・訂正・期間終了 | require_child_record_manager() |
| 区分別料金ルールの閲覧 | 職員ログイン |
| 区分別料金ルールの編集 | 現行どおり編集可能職員 |
| 区分別計算への切替 | 管理者 |
| 保護者ポータル | 表示・編集不可 |
疾病・障害、虐待・DV等は機微性が高い。月次料金画面や通常の園児一覧には事由を表示せず、必要な場面では保育必要量だけを表示する。自由記述は最小限とし、アクセスログやエラー文へ内容を出さない。
10. 区分別延長料金の計算
10.1 ルール選択
対象日ごとに次の順で解決する。
category_aware_fromより前なら現行のレガシールールを使う。- 切替日以降は、対象日を含む園児の保育認定を1件取得する。
- 認定の
care_time_categoryと対象日を含む有効な料金ルールを1件取得する。 - 認定またはルールが0件なら未計算、複数件ならデータ不整合とする。0円にしない。
10.2 朝延長
朝の無料境界 = 通常保育開始時刻 - 朝猶予時間
朝超過分数 = max(0, 朝の無料境界 - 登園打刻時刻)
朝課金単位数 = ceil(朝超過分数 / 朝丸め単位)
朝料金 = 朝課金単位数 * 朝単価
朝延長が無効なルールでは朝料金を計算しない。朝延長が有効で登園打刻がない場合は未計算とする。
10.3 夕延長
夕の無料境界 = 通常保育終了時刻 + 夕猶予時間
夕超過分数 = max(0, 降園打刻時刻 - 夕の無料境界)
夕課金単位数 = ceil(夕超過分数 / 夕丸め単位)
夕料金 = 夕課金単位数 * 夕単価
夕延長が無効なルールでは夕料金を計算しない。夕延長が有効で降園打刻がない場合は未計算とする。
10.4 日額
自動計算額 = min(朝料金 + 夕料金, 日額上限) # 上限未設定時は単純合計
確定額 = max(0, 自動計算額 + 調整額)
朝夕は別々に丸めてから合計する。日額上限により減額された場合も、朝夕の計算前金額と上限適用後の合計を画面に表示する。
10.5 日付またぎ・異常値
- 現行どおり翌日03:00までの降園を対象日の夕延長として扱う。
- 翌日03:00超、降園が登園以前、通常保育開始・終了時刻が逆転する設定は警告または登録エラーとする。
- 打刻の欠落で必要な方向を計算できない日は未計算とし、確定・請求転送できない。
11. 再計算・確定・請求転送
11.1 自動再計算
- 登園打刻、降園打刻またはその訂正時に対象日を再計算する。
- 未確認の既存料金だけを通常再計算で更新する。
- 認定または料金ルールの期間を変更した場合、影響日、対象園児、変更前後の金額をプレビューしてから未確認料金を一括再計算する。
11.2 ロック
confirmed、manual_adjusted、excludedは通常再計算で変更しない。- 職員が「確認済みも含めて再計算」を明示した場合だけ再計算でき、操作ログを残す。
- 請求転送済み料金は、転送解除前には一切再計算しない。
- 過去の認定訂正によってロック済み料金と新計算に差が出る場合は警告し、自動修正しない。
11.3 請求転送ブロッカー
対象月に次が1件でもあれば転送を禁止する。
- 切替日以降の出欠に有効な保育認定がない。
- 認定区分に対応する料金ルールがない。
- 必要な打刻が欠け、料金を完全に計算できない。
- 完了した出欠に料金レコードがない。
- 正の金額を持つ未確認料金がある。
現行の final_amount の園児別合計と請求明細の構造は維持する。
12. 月次画面とCSV
月次画面の日別明細へ次を追加する。
- 保育必要量
- 通常保育時間帯
- 朝延長分数・金額
- 夕延長分数・金額
- 日額上限適用の有無
- 未登録/ルール不足/打刻不足の警告
月次CSVは既存列を維持したうえで、末尾へ次を追加する。
- 保育標準時間の日数
- 保育短時間の日数
- 朝延長分数合計
- 朝延長金額合計
- 夕延長分数合計
- 夕延長金額合計
- 未計算件数
月途中に認定区分が変わるため、園児の月次行へ単一の認定区分を固定表示しない。日数を区分別に集計する。
13. 移行とリリース手順
13.1 原則
- 既存園児へ保育標準時間を自動設定しない。
- 既存のグローバル料金ルールを短時間ルールへ自動複製しない。
- 既存の料金レコードと請求明細を一括書換えしない。
- 既存ルールは
care_time_category = NULLのレガシールールとして保持する。
13.2 段階移行
- 新テーブル・列・画面を追加し、計算モードは
legacyのままにする。 - 在園児の認定を施設職員が登録する。
- 保育標準時間・保育短時間それぞれの料金ルールを登録する。
- 切替候補日について、未登録園児、ルールの期間穴、重複、既存計算との差額をプレビューする。
- 未登録・期間穴・重複が0件であることを確認する。
- 管理者が
category_aware_fromを指定して切り替える。 - 切替日以降の未確認料金を再計算し、差額を二者確認する。
- 月次請求転送のプレビューで未計算が0件であることを確認する。
切替日は原則として未請求月の月初とする。請求済み月への遡及切替は行わない。
14. インポート・エクスポート
初期リリースは画面入力を必須範囲とする。大量移行が必要な場合は、既存の園児CSVへ現在値だけを追加せず、1園児に複数期間を持てる独立データセット child_care_certifications を追加する。
最低限の列:
- 園児内部IDまたは移行元園児ID
- 適用開始日、適用終了日
- 保育必要量
- 保護者順、保護者名スナップショット、続柄スナップショット
- 保育を必要とする事由、その他具体名
インポートは期間重複をエラーにし、事前検証と確定を分ける。事由は通常の家庭・園児CSVへ出力しない。
15. 主な実装影響範囲
| 領域 | 主な対象 |
|---|---|
| モデル・マイグレーション | models.py、database.py |
| 認定管理 | 新規サービス、新規ルータ、園児詳細・登録テンプレート |
| 保護者データ保護 | family_support.py、child_profile_changes.py、routers/parent_portal.py の非干渉テスト |
| 料金計算 | extended_care_fee_service.py、routers/attendance.py、routers/guardian.py |
| 料金設定・月次表示 | routers/extended_care_fees.py、templates/extended_care_fees/* |
| 請求転送 | extended_care_billing_transfer_service.py |
| 履歴・一覧 | child_profile_history.py または専用監査画面、templates/children/* |
| データ移行 | data_transfer_service.py(後続フェーズ) |
| デモ・テスト | demo_data_generation.py、scripts/seed_demo_100.py、関連テスト |
16. 受け入れ条件
16.1 認定入力
- 園児台帳管理権限を持つ職員が、各保護者の事由、保育必要量、適用期間を登録できる。
- 同一園児の認定期間は重複登録できない。
- 月途中の標準時間から短時間への変更を別期間として登録できる。
- 兄弟姉妹で異なる認定を保持できる。
- その他の事由では具体名が必須となる。
- 認定の変更履歴と実行者を確認できる。
16.2 保護者からの隔離
- 保護者ポータルの画面と変更申請payloadに認定・事由が含まれない。
- 保護者変更申請の承認後も認定情報が変化しない。
- 保護者が追加フィールドを直接POSTしても認定情報を変更できない。
16.3 料金計算
- 同一の降園打刻でも、標準時間と短時間で設定した終了時刻に応じて料金が変わる。
- 朝延長が有効な場合、登園打刻から朝料金を計算できる。
- 朝夕を別々に丸め、合計後に日額上限を適用する。
- 認定切替日を境に正しい区分のルールを使う。
- 認定またはルールがない日を0円にせず、未計算として表示する。
- 手動調整済み、確認済み、対象外、請求転送済み料金を通常再計算で上書きしない。
16.4 請求安全性
- 未計算日がある月は請求転送できない。
- 未計算理由と対象園児・日付をプレビューで確認できる。
- 既存の確定額集計、転送・再転送・解除、全銀作成後ロックが維持される。
16.5 後方互換
- 区分別計算を有効にするまでは既存料金計算の結果が変わらない。
- 既存DBへマイグレーションを適用しても認定や区分別ルールを勝手に作らない。
- 切替日前の料金レコードと請求明細が変化しない。
17. 施設が実装前に決める運用値
次はコードへ固定せず、施設設定として実装前または導入時に決める。
- 保育標準時間の通常保育開始・終了時刻
- 保育短時間の通常保育開始・終了時刻
- 各区分の朝延長・夕延長の有効/無効
- 朝夕それぞれの猶予、丸め単位、単価
- 日額上限
- 区分別計算への切替日
- 認定内容の確認元となる施設内帳票と、訂正時の承認手順
これらの値が未決でも機能実装は可能だが、本番切替はできない。切替前検証で設定不足をエラーとして扱う。