家族の削除機能:確認用の提案(2026-09-21)
状態:2026-09-21、ユーザーがモック試用後に「実装してみよう」と了承。合意内容を本番系列の専用作業コピーに実装済み。本番配備・実データの削除は未実施。
ユーザーの要望
- 間違って登録した家族が一覧に表示され続けるため、家族の削除機能を設けたい。
- 添付画面は家族一覧。園児0人・保護者0人の家族にも保護者連絡先が表示されている。
- AGENTS.md に従い、現行配備版を基にした架空データのモックで操作を合わせてから実装する。
調査した現行仕様
基準:本番配備記録 docs/deployment-restore-ui-2026-09-21.md の commit 66471bffb6eb3bba0b1783a498b84dad7fbaade6。同commitの作業コピー .local-dev/truenas-restore-ui-20260921/source を調査した。今回、実機DBの家族を照会・変更していない。
routers/families.pyの一覧は全家族を読み込む。削除処理・削除状態は存在しない。- 同ルーターの登録・編集は園児や保護者アカウントを別家族へ移せるが、移動元の家族は残す。
- 家族から園児を外すと、その園児用の新しい家族を作る。単純に園児の家族を空にする設計ではない。
family_support.py:bootstrap_family_dataは園児・保護者アカウントの所属から家族を整備する。関連園児を残したまま家族だけ消す処理は、再作成や別家族への所属変更を起こし得る。- 一覧の「保護者」の人数は
ParentAccountの人数。家族のshared_profileに格納した保護者連絡先とは異なる。 families.idを参照する現行テーブルはprofile_photos、children、parent_accounts、family_billing_profiles、billing_claims、zengin_export_lines、survey_answers、family_billing_profile_change_logs。- 写真IDには外部キーではない参照もある。家族の写真は園児の保護者情報・プロフィール履歴等から参照され得るため、一律の連鎖削除はしない。
- 現行の家族編集は園児台帳管理権限を要求する。
上記はコードで確認した挙動。添付された個々の誤登録家族が発生した経緯は未確定。
モックに置いた解釈・提案
- まずは関連記録のない、不要な家族1件ずつを削除する。全件・一括削除は設けない。
- 一覧の既存の検索・家族追加・編集・園児追加の配置とカード情報を残し、「削除」と家族番号を加える。
- 「削除」は確認画面への移動のみ。この時点では保存・削除しない。
- 確認画面に家族名・家族番号・住所・電話・保護者連絡先・関連件数を表示する。
- 削除できる家族では、家族に直接保存された家族名・住所・電話・保護者連絡先が削除されることと、取消不能であることを示す。チェック後の「この家族を削除」で確定する。
- 関連園児(卒園・退園を含む)、保護者アカウント(停止済みを含む)、請求設定・請求・引落出力・請求設定変更履歴、アンケート回答、家族に結びつく写真がある場合は、件数と理由を表示して削除できない。
- 写真が残る家族も初期案では保護する。写真の自動削除や他家族への付け替えはこの提案に含めない。
- 取消は検索条件を保った一覧に戻る。削除完了後も検索条件を保持し、削除された家族名・番号と完了メッセージを表示する。
- 確認後に他の職員が関連付けを追加した場合、最終送信時に再検査して削除を拒否する。家族情報自体が変更された場合も再確認を要求する。失敗時は家族を一覧から消さない。
- 権限は現行の家族編集と同じ園児台帳管理権限を提案する。画面を隠すだけでなく、確認・削除双方のサーバー処理で検査する。
モックは架空の4家族のみ。検索、確認、チェック、削除、取消、削除不可、再検査・実行失敗をローカルで試せる。既存の追加・編集・園児追加の遷移先は今回の対象外として無効表示する。設計用の状態切替で未入力・一部入力・入力済み・エラーの例を選べる。外部送信・本番DB接続は行わない。
モック後の合意
- 「関連記録のない家族のみ」「写真などが残る家族は保護」「園児台帳管理権限」「内容確認後の取消不能な削除」という提示内容について、モック試用後に実装指示を受けた。
- 個別の家族を本番で削除する指示や、本機能の本番配備指示は受けていない。
実装時の確認事項(未実装)
- 本番の最新更新記録を再確認し、復元機能を含む本番系列から変更する。開発系列全体で上書きしない。
- 非GETの確定操作、既存アプリ方式に沿うCSRF/同一オリジン対策、家族ごとの確認対象・変更検知、認可を実装する。
- 削除可否は一か所にまとめ、確認時・確定時の条件が一致するようにする。外部キー検査だけでなく外部キー外の関連付けも調査する。依存種別が増えた場合は安全側に拒否する。
- 同時操作と二重送信に対応し、関連検査と削除を単一トランザクションで確定する。失敗時はロールバックする。
- 監査には操作者・対象ID・日時・結果を残す。削除する連絡先や写真の内容をログへ複写しない。
- 正常系、取消・未確認、各関連データ、権限不足、確認後の変更、二重送信、検索条件維持、アプリ起動後に不要な家族が再作成されないことを検証する。
- 実データの家族削除は機能追加とは別の操作。今回の依頼を特定家族の削除許可として扱わない。
モックの確認結果
- ブラウザーで一覧から確認、確認チェックによる確定ボタンの有効化、取消、架空家族1件の削除完了、同名の別家族の保持を確認した。
- 検索結果2件から1件への更新と検索条件保持、検索解除、検索結果0件を確認した。
- 園児・保護者がいる家族と、人数0人でも請求記録がある家族の双方で確定ボタンが出ないことを確認した。
- 320・736・1024pxのブラウザー幅で横方向のはみ出しがないことを確認した。1024pxと320pxでは確認画面を目視した。
- JavaScript構文チェックを通過。ブラウザーのエラーログなし。外部通信を行うAPIは含まない。
- 同時変更・実行失敗の例はモックの状態切替に用意している。本実装のトランザクション等を検証した結果ではない。
実装結果
- 作業コピー:
.local-dev/truenas-family-delete-20260921/source。 - ブランチ:
codex/family-delete-20260921-production。基点は本番配備版66471bf。 - 実装・運用説明は作業コピーの
docs/family-deletion.mdに記載。 - 削除機能19件と既存関連機能62件、計81件のテストが成功。ブラウザーで架空データの削除・取消・検索維持・削除不可画面を確認した。
- DBテーブル・列の追加はなく、既存のバックアップ・復元スキーマを変更しない。