
checklist_results (プロジェクト別選択結果)
※課題:保存は全件DELETE → INSERT の洗い替え方式
| カラム | 型 | 役割 |
| project_id | FK | 現場 |
| regulation_id | FK | 法規制 |
| is_checked | boolean | 適用/非適用 |
custom_regulations (現場固有のその他規制)
regulations とほぼ同列構成project_id+is_checked
is_checked が直接カラムにあり、checklist_results とは別管理
法規制のコードを見直しを始めた・・・まずは現状分析
1.現在のテーブル構成
regulations`(法規制マスタ)
※課題:ai_description1列に「キーワード」と「制御フラグ」を混在させている
| カラム | 型 | 役割 |
| id | PK | — |
| parent_id | FK(self) | 親=null、子=親ID(2段構造) |
| group_code | string | 法律名(主に親) |
| ref_law | string | 関係条文(主に子) |
| action_conten | text | 実施すべき内容 |
| full_law_text | text | 原文(展開表示用) |
| ai_description | text | AI判定用キーワード(【選択必須】/【選択しない】制御フラグも兼用) |
| explanation_image | string | 解説画像 |
2.現在の処理フロー
“`
[工事管理ページ]
│
▼ 法規制編集ボタン
[edit_Laws_Regulations.blade.php](編集画面)
│
├─ ✨AI法規制判定ボタン(タブ単位)
│ │
│ ▼ POST /projects/{id}/ai_recommend(Ajax)
│ AiRecommendationService::recommend()
│ – regulations 全件取得
│ – project->overview(工事概要テキスト)を入力
│ – Claude API に問い合わせ → ID配列を返却
│ – session(‘ai_suggestions’) に保存
│ – ページリロード → チェック状態に反映
│
├─ 手動チェック(親・子チェックボックス)
│
└─ 登録/更新ボタン → POST /projects/{id}/checklist/save
– checklist_results を全削除 → 再挿入
– custom_regulations の is_checked を更新
[index.blade.php](閲覧画面)
– checklist_results に is_checked=true のもののみ表示
– session(‘ai_suggestions’) があれば合体してハイライト
3.現在の問題点
| # | 問題 | 影響 |
|---|---|---|
| 1 | AI判定の入力が project->overview(自由記述テキスト)のみ | AI精度が工事概要の書き方に大きく依存 |
| 2 | ai_descriptionに制御フラグ(【選択必須】)を埋め込み | 検索/条件判定とフラグが分離できていない |
| 3 | 「全件DELETE→INSERT」の洗い替え保存 | 複数ブラウザ同時操作や途中エラー時にデータ消失リスク |
| 4 | タブメニューがヘッダーの nav_extraスロットに注入 | レイアウト上の柔軟性が低い |
| 5 | AI判定がセッションベース(ai_suggestions) | ページ遷移・ログアウトで消える、DB永続化されない |
| 6 | インライン onclick=””が混在(index.blade.php) | CSPの unsafe-inline削除方針と矛盾 |

