延長保育料金自動計算仕様
- 現況再確認: 2026-08-11
- 実装状況: 初期実装済み
ExtendedCareFeeRule、ExtendedCareCharge、extended_care_fee_service.py、routers/extended_care_fees.pyにより、日別自動計算、再計算、確定・調整・対象外、月次表示、CSV、料金ルール設定を提供する。請求への月次転送は延長保育料金・請求転送仕様を参照する。
保護者の事由、保育標準時間/保育短時間、区分別の朝夕延長料金への拡張は、一部実装済みの保育認定・保育必要量・延長保育料金連携仕様を参照する。本書の単一区分計算は後方互換のためレガシー仕様として残す。
目的
降園打刻時刻をもとに、延長保育の利用時間と料金を自動計算できるようにする。
初期実装では、請求確定や外部会計連携までは扱わず、日別の自動計算、職員による確認・調整、月次集計の確認までを対象にする。園ごとの細かい料金規程は差が大きいため、まずは一般的な「開始時刻、猶予時間、丸め単位、単価」で表現できる範囲に絞る。
基本方針
- 実際の降園打刻時刻を計算の主データとする。
- 登園打刻がなく、降園打刻だけがある記録は計算対象にできる。
- 降園打刻がない記録は未計算として扱う。
- 料金ルールは日付に対して有効なものを 1 つ選ぶ。
- 自動計算結果は職員が手動調整できる。
- 手動調整した記録は、自動再計算で勝手に上書きしない。
- 初期実装では兄弟割引、月額上限、月極固定料金、複数時間帯単価、給食費・補食費との合算は対象外とする。
用語
| 用語 | 意味 |
|---|---|
| 降園打刻時刻 | AttendanceRecord.check_out_at に記録された実際の降園時刻 |
| 延長開始時刻 | 料金計算を開始する時刻。例: 18:00 |
| 猶予時間 | 延長開始時刻を少し過ぎても請求しない時間。例: 5 分 |
| 課金開始時刻 | 延長開始時刻に猶予時間を加えた時刻 |
| 丸め単位 | 課金対象分数を切り上げる単位。例: 15 分 |
| 単価 | 丸め単位 1 回あたりの金額 |
| 自動計算額 | ルールと降園打刻から算出した金額 |
| 調整額 | 職員が手動で加算または減算した金額 |
| 確定額 | 自動計算額に調整額を加味した表示上の金額 |
| 月次集計額 | 日別延長保育料金の確定額を園児ごとに1か月分合計した金額。月極固定料金とは異なる |
| 月極固定料金 | 利用実績によらず、契約期間中の園児へ毎月一定額を請求する料金方式 |
対象範囲
初期実装対象
| 項目 | 方針 |
|---|---|
| 日別計算 | 降園打刻時刻から延長分数と料金を計算する |
| 月次集計 | 園児ごと、月ごとの延長回数、延長分数、金額を表示する |
| 職員確認 | 自動計算結果を確認済みにできる |
| 手動調整 | 金額、理由、調整者を記録する |
| CSV 出力 | 月次集計を CSV で出力する |
初期実装対象外
| 項目 | 理由 |
|---|---|
| 請求書発行 | 請求全体の仕様と連動するため別段階にする |
| 決済連携 | 外部サービス連携と監査要件が重い |
| 兄弟割引 | 園ごとのルール差が大きい |
| 月額上限 | 上限到達時の按分や表示仕様が必要 |
| 月極固定料金の自動算定 | 施設ごとに契約条件、適用日数、日割り、スポット料金との関係が大きく異なる |
| 時間帯別単価 | まずは単一単価で検証する |
| 補食費・夕食費 | 延長保育料とは別の費目として扱う可能性がある |
月極延長料金に関する製品方針
方針決定
月極固定料金の契約管理および自動算定は、現時点では実装しない。
自治体・施設によって、月極の成立条件、月額、年齢・所得・多子による区分、朝夕の時間帯、日割り、利用実績の要否、スポット料金との併用、月額上限、補食費等の扱いが異なる。これらを延長保育料金機能に直接組み込むと、施設固有の例外を多数持つ料金エンジンとなり、誤請求と保守負担が大きくなるためである。
本機能が自動計算するのは、降園打刻を根拠とする日別の時間従量料金に限定する。月次画面および請求転送で表示する「月額」は、日別確定額の月次集計額であり、月極固定料金を意味しない。
代替運用
月極固定料金を採用する施設は、請求入力で園児ごとに手動明細を登録する。
- 明細名は「月極延長保育料」等、施設が識別できる名称とする。
- 自動転送される従量料金と区別するため、
monthly_childcareの自動転送費目を使用せず、手動請求用の別費目として登録する。 - 月極とスポット従量料金を併用する場合、施設の規程に従って職員が請求内容を確認する。
- 金額変更、免除、日割り、月途中の開始・終了は手動請求側で調整する。
- 運用方法は施設設定または施設内マニュアルに明記する。
将来の再検討
月極延長保育専用の複雑な自動算定より先に、給食費、バス代、教材費等にも利用できる汎用的な「定額請求の繰り返し設定」を検討する。
次のいずれかを満たした場合に、自動化の仕様化を再検討する。
- 複数施設から共通する月極料金方式の要望が確認された。
- 手動入力件数が多く、転記負担または誤請求が継続的に発生している。
- 契約期間、日割り、減免、スポット併用の共通ルールを安全に定義できる。
再検討時も、施設ごとの任意数式を持つ方式ではなく、料金プランを登録し園児へ適用する方式を基本とする。
計算ルール
標準ルール
初期値の例は以下とする。
| 項目 | 初期値 |
|---|---|
| 延長開始時刻 | 18:00 |
| 猶予時間 | 5 分 |
| 丸め単位 | 15 分 |
| 単価 | 100 円 |
| 日別上限 | なし |
この初期値はデモ用であり、実運用では施設の規程に合わせて変更する。
計算式
降園打刻時刻が課金開始時刻以前の場合、延長料金は 0 円とする。
課金開始時刻 = 延長開始時刻 + 猶予時間
超過分数 = 降園打刻時刻 - 課金開始時刻
課金単位数 = ceil(超過分数 / 丸め単位)
自動計算額 = 課金単位数 * 単価
確定額 = 自動計算額 + 調整額
例:
| 延長開始 | 猶予 | 降園打刻 | 丸め単位 | 単価 | 結果 |
|---|---|---|---|---|---|
| 18:00 | 5 分 | 18:04 | 15 分 | 100 円 | 0 円 |
| 18:00 | 5 分 | 18:06 | 15 分 | 100 円 | 100 円 |
| 18:00 | 5 分 | 18:20 | 15 分 | 100 円 | 100 円 |
| 18:00 | 5 分 | 18:21 | 15 分 | 100 円 | 200 円 |
日付をまたぐ場合
初期実装では、降園打刻が対象日の翌日 03:00 までに入っている場合は対象日の延長保育として扱う。それ以降の時刻は異常値として警告を表示する。
欠席・未登園の場合
降園打刻がない場合は計算対象外とする。欠席扱いの園児に降園打刻がある場合は、料金計算は行うが確認画面に警告を表示する。
予定降園時刻との関係
planned_pickup_time は確認用として表示する。初期実装の料金計算では、予定降園時刻ではなく実際の降園打刻時刻を使う。
データモデル案
延長保育料金ルール
extended_care_fee_rules
| カラム | 型 | 内容 |
|---|---|---|
id |
integer | 主キー |
name |
string | ルール名 |
effective_from |
date | 適用開始日 |
effective_to |
date, nullable | 適用終了日 |
start_time |
string | 延長開始時刻。HH:MM |
grace_minutes |
integer | 猶予時間 |
rounding_minutes |
integer | 丸め単位 |
unit_price |
integer | 丸め単位あたりの金額 |
daily_cap_amount |
integer, nullable | 日別上限額 |
is_active |
boolean | 有効フラグ |
created_at |
datetime | 作成日時 |
updated_at |
datetime | 更新日時 |
日別延長保育料金
extended_care_charges
| カラム | 型 | 内容 |
|---|---|---|
id |
integer | 主キー |
attendance_record_id |
integer | 出欠記録 ID |
child_id |
integer | 園児 ID |
target_date |
date | 対象日 |
rule_id |
integer | 適用した料金ルール ID |
charge_start_at |
datetime | 課金開始日時 |
actual_check_out_at |
datetime, nullable | 計算に使用した降園打刻 |
extended_minutes |
integer | 延長分数 |
billable_units |
integer | 課金単位数 |
auto_amount |
integer | 自動計算額 |
adjustment_amount |
integer | 手動調整額 |
final_amount |
integer | 確定額 |
status |
string | draft / confirmed / manual_adjusted / excluded |
adjustment_reason |
string, nullable | 調整理由 |
confirmed_by |
string, nullable | 確認者 |
confirmed_at |
datetime, nullable | 確認日時 |
created_at |
datetime | 作成日時 |
updated_at |
datetime | 更新日時 |
attendance_record_id は一意にする。同じ出欠記録に対して延長料金レコードを複数作らない。
再計算ルール
以下の操作では自動再計算する。
- 降園打刻が新規登録されたとき
- 降園打刻が修正されたとき
- 料金ルールが変更され、対象期間の再計算を職員が実行したとき
以下の記録は自動再計算で上書きしない。
manual_adjustedconfirmedexcluded
ただし、職員が明示的に「確認済みも含めて再計算」を選んだ場合は、再計算対象にできる。この操作は履歴に残す。
画面仕様
日別出欠一覧
既存の出欠一覧に以下を追加する。
| 表示項目 | 内容 |
|---|---|
| 延長分数 | 自動計算された延長分数 |
| 延長料金 | 自動計算額または確定額 |
| 状態 | 未計算、0 円、要確認、確認済み、調整済み |
降園済みで延長料金が発生している行は、職員が見落とさないように強調表示する。
延長保育料金画面
月次確認画面は/extended-care-fees/で提供する。
表示する機能:
- 対象月の選択
- クラス絞り込み
- 園児名検索
- 未確認のみ表示
- 園児ごとの月次合計
- 日別明細の展開
- 確認済みにする操作
- 手動調整
- CSV 出力
料金ルール設定画面
料金ルール設定画面は/extended-care-fees/settingsで提供する。
設定できる項目:
- ルール名
- 適用開始日
- 適用終了日
- 延長開始時刻
- 猶予時間
- 丸め単位
- 単価
- 日別上限額
- 有効フラグ
既存期間と重複する有効ルールは登録できない。
CSV 出力
月次集計 CSV は以下の列を持つ。
| 列名 | 内容 |
|---|---|
| 対象月 | YYYY-MM |
| 園児ID | 園児 ID |
| 園児名 | 園児氏名 |
| 園児名カナ | 園児氏名カナ |
| クラス | クラス名 |
| 延長回数 | 料金が 1 円以上発生した日数 |
| 延長分数合計 | 課金対象の延長分数合計 |
| 自動計算額合計 | 自動計算額の合計 |
| 調整額合計 | 調整額の合計 |
| 確定額合計 | 確定額の合計 |
| 未確認件数 | 未確認の日別明細数 |
ファイル名:
extended-care-fees-{YYYY-MM}.csv
権限
- 閲覧は職員ログイン済みユーザーのみ可能とする。
- 料金確認、調整、再計算、CSV 出力は編集可能な職員のみ可能とする。
- 閲覧専用職員は料金画面を見られるが、調整や確定はできない。
- 保護者画面への表示は初期実装では行わない。
バリデーション
料金ルール
- 延長開始時刻は
HH:MM形式であること。 - 猶予時間は 0 以上 120 以下の整数であること。
- 丸め単位は 1 以上 120 以下の整数であること。
- 単価は 0 以上の整数であること。
- 日別上限額は空欄または 0 以上の整数であること。
- 適用終了日は適用開始日以降であること。
- 有効なルール同士の適用期間が重複しないこと。
日別料金
- 降園打刻がない場合は
draftの延長料金を作らない。 - 調整額を入力する場合は調整理由を必須とする。
- 確定額は 0 円未満にしない。
- 対象日の有効ルールがない場合は未計算として警告する。
API・ルーティング
| メソッド | パス | 用途 |
|---|---|---|
| GET | /extended-care-fees/ |
月次集計画面 |
| GET | /extended-care-fees/export.csv |
月次集計 CSV 出力 |
| POST | /extended-care-fees/recalculate |
対象期間を再計算 |
| POST | /extended-care-fees/{charge_id}/confirm |
日別料金を確認済みにする |
| POST | /extended-care-fees/{charge_id}/adjust |
手動調整する |
| POST | /extended-care-fees/{charge_id}/exclude |
請求対象外にする |
| GET | /extended-care-fees/settings |
料金ルール設定画面 |
| POST | /extended-care-fees/settings |
料金ルールを作成 |
| POST | /extended-care-fees/settings/{rule_id} |
料金ルールを更新 |
実装メモ
- 計算ロジックはルータ内ではなく
extended_care_fee_service.pyに分離する。 - 時刻計算では
datetimeとtimeを直接扱い、文字列比較で判定しない。 - 既存の
AttendanceRecord.check_out_at更新後に、対象レコードだけ再計算する。 - 月次画面は
extended_care_chargesを集計し、未計算の出欠記録があれば警告として表示する。 - migration は既存方針に合わせて加算型で用意する。ただし本番化前には Alembic 等の正式な migration 方針を決める。
受け入れ条件
- 延長開始時刻、猶予時間、丸め単位、単価を設定できる。
- 降園打刻時刻が課金開始時刻以前の場合、延長料金が 0 円になる。
- 降園打刻時刻が課金開始時刻を超える場合、丸め単位で切り上げた金額が表示される。
- 降園打刻時に対象日の延長料金が自動計算される。
- 降園打刻を修正すると、未確認の延長料金が再計算される。
- 手動調整した延長料金は通常の自動再計算で上書きされない。
- 月次画面で園児ごとの延長回数、延長分数、金額を確認できる。
- 未確認の延長料金だけを絞り込める。
- 月次集計を CSV 出力できる。
- 閲覧専用職員は料金の確認・調整・再計算を実行できない。
将来拡張
- 保護者画面で延長保育料金の見込み額を表示する。
- 請求書発行機能と連携する。詳細は 延長保育料金・請求転送仕様 を参照する。
- 兄弟割引、月額上限、時間帯別単価に対応する。
- 補食費や夕食費を別費目として同時集計する。
- 料金変更履歴と再計算履歴を監査ログとして表示する。
- 会計ソフト向け CSV を出力する。
- 給食費、バス代、教材費、月極延長保育料等に共通利用できる定額請求の繰り返し設定を検討する。