# 04_01_02_case_data_structure.md # 案件データ構造 版:v2.4(承認待ち) 実装の状況は `work_order_db_migration.md`(作業書)を見る ## 1. 概要 本仕様書は、案件の保存のしかた(DBのテーブルと、案件のフォルダ)と、案件の項目を定義する。 - 案件の内容は **DB** に保存する。テーブルは `schema_cases.sql`(`case_approaches`、`cases`、`case_investigators`、`case_files`、`case_sections`)。 - 写真・報告書・請求書PDFなどの**実ファイル**は、案件のフォルダに置く(14節)。DBには、ファイルの名前と場所だけを記録する。 - 案件番号が主キー(`cases.case_id`)。個人事業(SPS)と法人(SCSPS)は、`cases.company_code` で分ける。 - 文字コードは UTF-8。日付は ISO 形式(YYYY-MM-DD)で保存する。 - 案件を保存する処理は、トランザクションで行う(番号を決める、`cases` に追加、担当調査員を追加、フォルダを作る、ファイルを置く。途中で失敗したら、すべて取り消す)。保存の流れは `04_01_04_case_input_screens.md` 4.9節。 --- ## 2. テーブルの構成 | テーブル | 主キー | 内容 | |---|---|---| | `cases` | `case_id` | 案件レベルの項目と、基本情報(3、4節) | | `case_investigators` | `case_id`+`sps_id` | 担当調査員(主担当・副担当。4.2節) | | `case_files` | `file_id` | 案件の資料の名前と場所(14節) | | `case_pricing` / `case_reward_lines` / `case_work_breakdown` | `case_id` / `line_id` / `case_id`+`item_code` | 確定した価格、報酬の内訳、業務内訳の実施記録(`04_03_01` 6節) | | `case_branch_history` | `history_id` | 案件管理拠点の変更の履歴(4.5節) | | `case_assignment_history` | `history_id` | 担当(営業・管理担当者・主担当・副担当)の変更の履歴(4.6節) | | `case_change_reasons` | `reason_code` | 担当変更の理由のマスタ(`04_01_03` 3.4節) | | `case_members` | `case_id`+`sps_id` | 案件ごとの追加の権限者(指導指名・特例アクセス。`04_01_08` 6節) | | `case_reviews` | `review_id` | 金額まわりの確認と差し戻し(`04_01_08` 7節) | | `case_edit_history` | `edit_id` | 案件の内容を修正した履歴(指導指名・特例アクセスの人の修正は必ず。`04_01_08` 6節) | | `case_access_requests` | `request_id` | 特例アクセスの申請(`04_01_08` 6.1節) | | `notifications` | `notice_id` | アプリ内のお知らせ(差し戻し、申請・許可など)。案件の中身は書かない | | `case_contact_logs` | `log_id` | 問い合わせ対応の連絡メモ(13節) | | `position_case_access` / `employee_case_access` | `position_code` / `sps_id` | 職務ポジション・個人ごとの、案件を見られる範囲(`04_01_08` 4節) | | `case_sections` | `case_id`+`section` | 聴取内容・分析・近隣確認・証拠資料・経費・請求・経過・成果物チェックリスト(5〜12節)。各タブの設計が決まるまでは JSON のまま保存する | | `case_approaches` | `approach_code` | 着手対応のマスタ(`04_01_03` 3節) | | `case_client_refs` | `ref_id` | 依頼先の番号(事故受付番号・貴社管理番号・事件番号など。種類つきで複数。呼び名を行ごとに上書きできる。検索の対象) | | `case_ref_types` | `ref_type` | 依頼先の番号の種類のマスタ(増やせる。請求書に載せるかの設定を持つ) | | `client_type_ref_defaults` | `client_type`+`ref_type` | 顧客区分ごとに、案件入力で最初に出す番号の欄 | | `case_types` | `case_type_code` | 案件種別のマスタ(`04_01_03` 2節) | `case_sections.section` の値は、`hearing`、`analysis`、`nearby_confirmations`、`evidence`、`expenses`、`invoices`、`progress`、`readiness_checklist`。`content_json` には、5〜12節の JSON の中身(外側のキーを除いたもの)を入れる。 外部キー:`cases.client_id`/`insurer_client_id` → `clients`、`person_id` → `persons`、`contact_id` → `client_contacts`、`client_branch_id` → `client_branches`、`branch_code` → `branches`、`case_type` → `case_types`、`approach_code` → `case_approaches`、`sales_person_id`/`manager_id`/`case_investigators.sps_id` → `employees`。 --- ## 3. 案件レベルの項目(`cases`) | 列 | 型 | 必須 | 説明 | |---|---|---|---| | case_id | VARCHAR(20) | ✅ | 案件番号(例 L01R0709001A)。決め方は 4.3節 | | company_code | VARCHAR(10) | ✅ | SPS / SCSPS | | branch_code | VARCHAR(10) | ✅ | **現在の**案件管理拠点(K01)。新規案件入力の一番上で選ぶ。見積書・請求書などの書類番号に使う。途中で変えられる(4.5節)。案件番号の拠点部分は `case_id` に含まれ、変えない | | status | VARCHAR(20) | ✅ | 受託 / 調査中 / 報告書完了 / 請求書発行 / 入金待ち / 入金完了。新規は「受託」 | | case_type | VARCHAR(10) | ✅ | 案件種別コード(`case_types`) | | case_closed | TINYINT(1) | ✅ | 案件終了フラグ(1:終了)。既定は 0。status が「入金完了」のときだけ、管理者が 1 にできる。一時締めに対応するため status とは別の列にする | | locked | TINYINT(1) | ✅ | ロック状態(1:ロック済) | | locked_by | VARCHAR(20) | | ロックした従事者ID | | locked_at | DATETIME | | ロック日時 | | created_from | VARCHAR(10) | ✅ | `sales`(営業管理から)/ `cases`(案件管理から) | | created_by | VARCHAR(20) | ✅ | 入力した人の従事者ID | | created_at | DATETIME | ✅ | 作成日時 | | updated_at | DATETIME | ✅ | 更新日時(自動) | --- ## 4. 案件の基本情報(`cases` の続きの列と `case_investigators`) ### 4.1 `cases` の列 顧客に関する列は、入力した時点の内容を控えとして持つ(あとで顧客マスタが変わっても、案件の記録は変わらない)。「控え」と書いた列がそれにあたる。 | 列 | 必須 | 説明 | |---|---|---| | client_id | ✅ | 依頼元の顧客ID(例 L101)。`clients` を参照 | | client_type | ✅ | 顧客区分(DBは2文字。CL など)。控え | | client_name | ✅ | 依頼元名。控え | | client_branch_id / client_branch | | 依頼元の拠点・支店(ID/名称の控え) | | department_name | | 部署・課名。控え | | person_id / contact_id | | 担当者(人物ID/所属ID)。「新規入力」でその場で登録した場合は、登録後のIDを入れる | | contact_name / contact_role | | 担当者名・役職。控え | | contact_phone | ✅ | 依頼先連絡先(担当者の電話番号を自動で入れる。直す場合は直した値。控え) | | contact_email | | 担当者のメールアドレス。控え | | contact_meishi_id | | 使った名刺ID | | client_case_ref | | 依頼先事案のメモ(自由入力)。番号は `case_client_refs` に入れる | | approach_code | 条件付き | 着手対応(`case_approaches`。弁護士特約/弁護士依頼(通常)/弁護士依頼(高難易度)/依頼者直接)。顧客区分が弁護士のときだけ入る。それ以外は空 | | price_class | ✅ | 価格区分(`price_classes` のコード。一般、弁護士A・B、弁特、損保社用など)。顧客の設定(弁護士なら着手対応)から決まる(`04_03_01` 2.4節)。`04_03_01` で価格表を引く | | discount_name、discount_rate | - | 基本料金の値引き(顧客の値引き設定から入る。案件ごとに変更・削除できる。`04_03_01` 2.6節) | | billing_to | ✅ | 請求先。`client`(依頼元)/ `requester`(依頼者本人)。着手対応から決まる | | insurer_client_id | 条件付き | 契約保険会社(損害保険会社の顧客ID)。着手対応が弁護士特約のとき必須 | | billing_name / billing_address / billing_phone | | 請求書の宛先。`billing_to` が `client` なら依頼元の情報、`requester` なら依頼者の情報を入れる(控え) | | requester_name / requester_phone / requester_address | | 依頼者。`billing_to` が `requester` のとき、名前と住所は必須 | | target_name / target_phone | | 対象者 | | accident_date | ✅ | 事故日 | | accident_location | ✅ | 発生場所 | | survey_item | ✅ | 調査種目コード(`survey_items`。ACCIDENT_CAUSE など。`04_03_01` 2.1節) | | difficulty_rank | | 難易度ランクのコード(`difficulty_ranks`。S/D/H)。ランクのない専門項目(工学鑑定)は空 | | sales_person_id | | 営業担当(`mode=sales` のときは入力した人) | | manager_id | ✅ | 管理担当者(受託した案件の責任者)。ふだんは営業担当。上位職が営業なしで受託したときは、その人。案件管理拠点の管轄の人から選ぶ | | department | | 実施部署 | | investigation_targets_json | | 調査先の一覧(JSON)。新規入力の画面では扱わず、案件詳細の編集で入れる | | quote_date1〜quote_date_final、mid_report_date、report_delivery_date、invoice_date、payment_due_date、payment_date | | 書類・入金の日付(案件詳細の編集で入れる) | ### 4.2 担当調査員(`case_investigators`) | 列 | 説明 | |---|---| | case_id、sps_id | 主キー。1人の調査員は、1つの案件に1回だけ | | role | `primary`(主担当)/ `secondary`(副担当) | | sort_order | 表示順(主担当が 1、副担当は追加順) | | added_at | 追加日時 | - 主担当は案件ごとに**ちょうど1人**(API で確認する)。副担当は 0 人以上(人数の上限は設けない。通常は 0〜1 人)。 - 主担当は、案件の持ち主で、現場の担当。報酬の支払先は、主担当(と副担当)で決まる。案件番号の拠点と書類の発行拠点は、主担当ではなく、案件管理拠点(`branch_code`)で決まる。 - 副担当は、案件の**調査内容・聴取内容を見られる**。金額に関する項目(見積・請求・入金・経費の承認など)は見られない。範囲の決め方は `04_01_08_case_permission.md` 5節(要確認:副担当は閲覧のみか、入力もできるか。作業書 F-07)。 - 主担当、副担当とも、その人の「案件管理」の一覧に、保存と同時に出る(担当調査員の表から引く)。 ### 4.3 案件番号 `[顧客区分の2文字目][拠点2桁][和暦R+2桁][月2桁][月間連番3桁][着手回数]` 例:`L01R0709001A` | 部分 | 決め方 | |---|---| | 顧客区分 | 依頼元の顧客区分(DBの2文字)の**2文字目**(CL → L)。`01_09`/`01_10` | | 拠点2桁 | **案件管理拠点**(`branch_code`)の `id_part`(`01_11` 5節)。新規案件入力の一番上で選ぶ。基本は受託した拠点だが、受託した拠点と管理する拠点が違う場合(例:本社で受託し、大阪が管理する)は、管理する拠点(大阪)の案件になる。事務が代行で入力しても、入力した人の拠点ではなく、選んだ拠点で決める。請求書の発行拠点と同じ | | 和暦・月 | 保存した日の令和年(R07)と月(09) | | 月間連番 | 月ごとに 001 から。会社・拠点・顧客区分に関係なく、全体で1本。`id_counters` の `CASE-YYYYMM`(例 `CASE-202609`)で採番し、`SELECT ... FOR UPDATE` で取得して +1 する。欠番は埋めない | | 着手回数 | 新規は `A`。再着手は B、C…(J まで) | - 番号は、**保存の処理の中**(トランザクション内)で決める。画面には、拠点の部分だけを仮に出し、連番は保存したときに確定する。 - 一度決めた案件番号は、あとで担当者や管轄、案件管理拠点が変わっても変えない。 - 同じ番号のフォルダがすでにあれば、保存を失敗させる(二重採番の最後の防止策)。 ### 4.4 着手対応と請求先・価格区分 | 着手対応 | 請求先(billing_to) | 価格区分 | 契約保険会社 | |---|---|---|---| | 弁護士特約 | 弁護士(依頼元)= `client` | 弁特(tokuyaku) | 必須 | | 弁護士依頼(通常) | 弁護士(依頼元)= `client` | 弁護士料金A(lawyer_a) | なし | | 弁護士依頼(高難易度) | 弁護士(依頼元)= `client` | 弁護士料金B(lawyer_b) | なし | | 依頼者直接 | 依頼者本人 = `requester` | 一般(general) | なし | - 着手対応は、顧客区分が弁護士のときだけ聞く。ほかの顧客区分では空で、価格区分は顧客から決まる。 - 弁護士特約で、保険会社が弁護士に支払わず、調査会社に振り込むことがまれにある。この場合も請求先は弁護士のままにし、入金の登録のときに、入金元として保険会社を記録する(`04_01_09_case_accounting_link.md`)。 - 一覧の値は `case_approaches` のデータで決まる(`04_01_03` 3節)。コードに直接書かない。 ### 4.5 案件管理拠点の変更 案件管理拠点は、案件の途中で変えられる(まれな場合)。 - 変えても**案件番号は変えない**(フォルダの場所も変わらない)。変えたあとに発行する見積書・請求書などの書類の番号は、変更後の管理拠点で付ける。発行済みの書類の番号は変えない(`01_11` 5節)。 - 変更の処理(`change_case_branch.php`)は、1つのトランザクションで行う:`cases.branch_code`(と、必要なら `manager_id`)を更新し、`case_branch_history` に1行追加し、操作の記録(`audit_logs`)を残す。 - 変更後の管理拠点の管轄でない人が管理担当者になっているときは、同時に管理担当者を選び直す(選び直さないと保存できない)。 - 変更できる人:その案件の修正権限者(営業担当、責任者、上位ポジション。`04_01_08` 5節)。 - 変更後は、案件を見られる範囲の判定が、新しい管理拠点で行われる(`04_01_08` 3節)。 ### 4.6 担当の変更 営業担当、管理担当者、主担当、副担当は、案件の途中で変えられる。理由は、営業も調査員も同じ(`case_change_reasons`)。 | 項目 | 説明 | |---|---| | 変える担当 | 営業担当(`sales_person_id`)/管理担当者(`manager_id`)/主担当・副担当(`case_investigators`) | | 前任者・後任者 | 前任者を、後任者に入れ替える。副担当は、後任者なしで外すこともできる | | 理由 | 必須。先方クレーム(ペナルティーあり)/先方クレーム(ペナルティーなし)/担当者都合/会社都合 | | 前任者への報酬 | 必須。あり/なし。理由ごとの初期値は `04_01_03` 3.4節(先方クレーム・ペナルティーありは「なし」) | | メモ | 任意 | - 変更の処理(`change_case_assignee.php`)は、1つのトランザクションで行う:`cases`(営業・管理担当者)または `case_investigators`(主担当・副担当)を更新し、`case_assignment_history` に1行追加し、操作の記録(`audit_logs`)を残す。 - `case_investigators` と `cases` は、**現在の担当だけ**を持つ。前任者の記録と報酬の有無は、`case_assignment_history` に残る。 - **前任者への報酬**:報酬の計算(`04_03`)は、`case_assignment_history.pays_reward` を読む。「なし」なら、その前任者には報酬を出さない。「あり」のときの金額(全額か、進み具合に応じるか)は、`04_03` で決める(作業書 F-15)。 - **経費**:報酬が「なし」でも、前任者の承認済みの経費・立替は、精算する。 - 管理担当者を変えるとき、後任者が案件管理拠点の管轄でなければ、先に案件管理拠点を変える(4.5節)か、管轄の人を選ぶ。 - 前任者の、この案件の閲覧は、変更の時点で終わる(要確認:作業書 F-16)。 - 変更できる人:その案件の修正権限者(`04_01_08` 5節)。 --- ## 5. 聴取内容(hearing) ```json { "hearing": { "format": "qanda", "persons": [ { "person_id": "p001", "name": "松本 悠", "interview_date": "2025-10-02", "interview_time": "17:30", "interview_method": "電話", "questions": [ { "question": "事故発生日の状況を教えてください。", "answer": "事故当日は非番で、大原野にある友人宅へ私用で向かう途中でした。" }, { "question": "走行速度と現場周辺の確認状況はどうでしたか。", "answer": "およそ時速30kmで走行していました。" } ] } ], "raw_memo": "松本さん 10/2 17:30 電話\n非番で友人宅へ(大原野)\n速度30km/hくらい..." } } ``` ### 5.1 フィールド定義 | フィールド | 型 | 必須 | 説明 | |-----------|-----|------|------| | format | string | ✅ | "qanda" または "12items" | | persons | array | ✅ | 聴取対象者リスト | | raw_memo | string | | 変換前の調査メモ | ### 5.2 persons オブジェクト | フィールド | 型 | 必須 | 説明 | |-----------|-----|------|------| | person_id | string | ✅ | 対象者ID(自動採番) | | name | string | ✅ | 氏名 | | interview_date | date | | 確認日 | | interview_time | string | | 確認時間 | | interview_method | string | | 確認方法(電話/面談/訪問) | | questions | array | | Q&A形式の場合の質問リスト | --- ## 6. 調査分析(analysis) ```json { "analysis": { "physical_evidence": { "own_vehicle_damage": "左側面後部に接触痕", "other_vehicle_damage": "右側面後部に5時方向から10時方向への入力痕", "skid_marks": "平井車左前輪横にスリップ痕あり", "analysis_result": "黒瀬車が平井車と接触後、平井車の左前角を支点に急旋回し、黒瀬車の左後方が中村車の右側面後部に接触した" }, "scientific_analysis": { "speed": 60, "reaction_distance": 12.5, "braking_distance": 31.5, "total_stopping_distance": 44.0, "actual_stopping_distance": 28.0, "avoidance_possible": false, "analysis_result": "物理的に停止可能な距離よりも短い距離で停止していることから、最大限の制動操作を行っていた" }, "contradiction_analysis": { "other_party_claim": "右側の第4車線への進路変更中に右後方から走行してきた黒瀬車に接触された", "objective_facts": "中村車の損傷は右側面後部に5時→10時方向の入力痕", "analysis_result": "追突ではなく側面からの接触である" }, "conclusion": "本件は、優先性の高い接続道路を直進していた松本車に対し、交差する生活道路を北進していた田中車が、安全確認を十分に行わないまま左折進入したことで接触した結果発生した事故であると思料します。" } } ``` --- ## 7. 近隣確認(nearby_confirmations) ```json { "nearby_confirmations": { "raw_inputs": [ { "resident": "住民A", "content": "役所から都市計画道路の説明を受けており、新築時には道路幅を確保して建築した。" } ], "summary": [ "役所からの都市計画道路に関する説明を受けており、新築時には道路幅を確保して建築している。", "拡幅計画が存在するため、役場の指導によりセットバックして建てた。" ] } } ``` --- ## 8. 証拠資料(evidence) ```json { "evidence": { "photos": [ { "id": "photo_001", "filename": "現場写真_001.jpg", "title": "松本車の京都府道124号へ右折進入時の視界", "description": "", "shooting_date": "2025-10-19", "photographer": "調査員A", "location": "京都市伏見区三栖町3丁目819番地", "order": 1 } ], "driving_recorder": [ { "id": "dr_001", "filename": "ドラレコ_001.jpg", "title": "松本車、京都府道124号三栖向納所線を西進", "description": "", "timestamp": "2024-10-18 16:45:17", "speed": 11.5, "order": 1 } ], "site_diagram": { "filename": "現場図.pdf", "uploaded_at": "2025-12-10T10:00:00+09:00", "version": "1" } } } ``` --- ## 9. 経費(expenses) ```json { "expenses": [ { "id": "exp_001", "date": "2025-10-19", "type": "高速料金", "amount": 800, "description": "京都→大阪", "receipt_path": "/data/receipts/SCSPS/2025/10/exp_001.jpg", "approved": true, "approved_by": "00004", "approved_at": "2025-10-20T09:00:00+09:00", "reimbursement_requested": true, "reimbursement_request_date": "2025-10-21", "reimbursement_invoice_no": "INV-20251021-001", "payment_status": "支払済", "payment_date": "2025-10-25", "payment_amount": 800, "paid_to_employee_id": "00002", "paid_to_employee_name": "調査員A", "accounting_transferred": true, "accounting_transferred_at": "2025-10-25T14:00:00+09:00", "journal_id": "1734567890123.456" } ], "expense_summary": { "total_approved": 800, "total_requested": 800, "total_paid": 800, "total_unpaid": 0 } } ``` ### 9.1 フィールド定義(追加分) | フィールド | 型 | 必須 | 説明 | |-----------|-----|------|------| | reimbursement_requested | boolean | | 精算請求済みか | | reimbursement_request_date | date | | 精算請求日 | | reimbursement_invoice_no | string | | 精算請求書番号 | | payment_status | string | ✅ | 未申請 / 申請中 / 承認済 / 精算請求中 / 支払済 | | payment_date | date | | 支払日 | | payment_amount | number | | 支払金額 | | paid_to_employee_id | string | | 支払先従事者ID | | paid_to_employee_name | string | | 支払先従事者名 | | accounting_transferred | boolean | | 会計転記済みか | | accounting_transferred_at | datetime | | 会計転記日時 | | journal_id | string | | 会計システム仕訳ID | --- ## 10. 請求(invoices) ```json { "invoices": [ { "id": "inv_001", "invoice_no": "L01R0709001A", "issue_date": "2025-12-10", "amount": 55000, "tax": 5500, "total": 60500, "adjustment": -20000, "final_total": 40500, "payment_due_date": "2026-01-15", "payment_date": "", "status": "未入金", "pdf_path": "/data/cases/corporate/L01R0709001A/invoices/L01R0709001A.pdf" } ], "total_billed": 40500, "total_paid": 0 } ``` --- ## 11. 調査経過(progress) ```json { "progress": [ { "id": "prog_001", "date": "2025-10-02", "contact": "松本 悠", "method": "電話", "content": "事故状況の聴取", "result": "松本車は時速30kmで走行中、交差点通過時に左後方から接触", "hours": 1.5 } ], "total_hours": 1.5 } ``` --- ## 12. 成果物チェックリスト(readiness_checklist) ```json { "readiness_checklist": { "basic_info_complete": true, "hearing_complete": true, "report_generatable": true, "photos_complete": true, "site_diagram_complete": true, "expenses_complete": true, "manager_confirmed": true, "manager_confirmed_by": "00004", "manager_confirmed_at": "2025-12-10T10:00:00+09:00", "all_complete": true, "ready_for_invoice": true } } ``` --- ## 13. 問い合わせ対応の連絡メモ(`case_contact_logs`) 受電対応の担当が書く連絡メモ。専用のテーブル `case_contact_logs` に保存する(`case_sections` には入れない)。入力の画面は `04_01_04` 12節、権限は `04_01_08` 9.2節。 | 列 | 必須 | 説明 | |---|---|---| | log_id | ✅ | 自動採番 | | case_id | ✅ | 案件番号 | | from_whom | | 誰からの連絡か(名前) | | from_phone | | 連絡してきた人の電話番号 | | inquiry | ✅ | 問い合わせ内容 | | response_type | ✅ | 対応:`received_only`(連絡があったのみ)/ `call_back`(架電して)/ `mail`(メールで送って)/ `other` | | response_note | | 対応の中身(例:メールで〇〇を送る) | | to_sps_id | ✅ | 連絡先の担当者(従事者ID) | | to_email | | 送信先のメールアドレス | | mail_status | ✅ | `sent`/`failed` | | created_by | ✅ | 受電者(メモを作った人)。自動 | | created_at | ✅ | 作成日時 | - 送信すると、担当者にメールが届き、案件にこのメモが残る。 - 問い合わせ対応の画面では、聴取内容・分析・金額などは見せない(`04_01_08` 9.2節)。 --- ## 14. ファイル保存先 実ファイルは、案件のフォルダに置く。DBの `case_files.stored_path` には、案件フォルダからの相対パスを記録する。 | 種別 | 保存先(法人 SCSPS) | 保存先(個人事業 SPS) | |---|---|---| | 案件フォルダ(案件番号を決めたときに作る) | `/backoffice/data/cases/corporate/[案件番号]/` | `/backoffice/data/cases/private/[案件番号]/` | | 資料・写真(新規入力のアップロードもここ) | `files/` | `files/` | | 現場図 | `site_diagram.pdf` | `site_diagram.pdf` | | 報告書 | `reports/` | `reports/` | | 請求書PDF | `invoices/` | `invoices/` | | 精算請求書 | `reimbursement/` | `reimbursement/` | `case.json` は使わない(案件の内容はDB)。フォルダは、Webから直接開けない場所に置き、ダウンロードは、権限を確認する API を通す(`00_08_security_operations.md`)。 --- ## 15. 日付表示 - 画面表示時の日付は `03_ui_design/03_01_design_guideline.md` の日付表記ルールに準拠する - DBの日付は ISO 形式(YYYY-MM-DD)で保存する --- ## 16. 関連仕様書 | # | 仕様書 | 内容 | |---|---|---| | 1 | `04_01_01_case_management.md` | 案件管理全体設計 | | 3 | `04_01_03_case_type_master.md` | 案件種別・着手対応のマスタ | | 4 | `04_01_04_case_input_screens.md` | 入力画面設計 | | 7 | `04_01_07_case_document_generate.md` | 報告書自動生成設計 | | 8 | `04_01_08_case_permission.md` | 権限設計 | | 9 | `04_01_09_case_accounting_link.md` | 会計連動設計 | | 11 | `04_01_11_case_mail.md` | メール送信機能仕様 | | — | `01_code_definition/01_11_branches.md` | 拠点・管轄拠点・案件番号の拠点の決め方 | | — | `00_overview/00_07_database.md` | DBの全体設計 | --- ## 17. 改訂履歴 | 日付 | 版 | 担当 | 内容 | 理由・影響範囲 | |------|----|------|------|--------------| | 2026-03-24 | 1.0 | 案件管理担当 | 初版作成 | | | 2026-03-24 | 1.1 | 案件管理担当 | 経費精算関連フィールド、成果物チェックリストを追加 | | | 2026-03-26 | 1.2 | 案件管理担当 | `contact_logs` 配列、`locked` 関連フィールド、`requester_name` 等を追加 | | | 2026-03-26 | 1.3 | 案件管理担当 | 日付表示を共通仕様参照に修正 | | | 2026-04-04 | 1.4 | 案件管理担当(初代) | 1節・14節のファイル保存先をcorporate/private分離構造に変更。10節のpdf_pathサンプルを修正 | 個人事業と法人の完全分離原則に基づきフォルダ構造を明確化。会計データのprivate/corporate分離と統一。save_case.php・load_case.phpの実装に先立ち確定 | | 2026-10-04 | 1.5 | 全体管理者(12代目) | 2節・3節に案件レベルフィールド`case_closed`(boolean)を新設 | `04_01_01_case_management.md`(v1.8)で新設した案件終了フラグのデータ構造定義。影響範囲:`save_case.php`(新規case作成時のデフォルト値false設定)、案件一覧画面の電話対応担当向けフィルタ実装 | | 2026-10-08 | 1.6 | 全体管理者(12代目) | ファイル名規則を「フォルダ番号+ファイル番号」形式に変更したことに伴い、参照名と保存先表記を機械的に置換(内容の変更なし) | ファイル名規則変更(2026-10-08)。影響範囲:他設計書への参照名・保存先表記のみ | | 2026-10-24 | 1.7 | 全体管理者(12代目) | 4節 `basic_info` のデータ構造を大幅に拡張。①顧客情報のスナップショット(`client_type`, `client_branch`, `client_department`, `client_contact_name`, `client_contact_role`, `client_contact_phone`, `client_contact_email`)を追加。②依頼者情報に `requester_address` を追加。③請求先の分離(`billing_type`, `billing_name`, `billing_address`, `billing_phone`)を追加 | 顧客マスタ仕様の確定および福利厚生などの多様な請求形態への対応に伴い、登録時点の顧客・担当者情報の保持と請求先の柔軟な設定が必要となったため | | 2026-10-24 | 1.8 | 全体管理者(12代目) | 4節 `basic_info` を4マスタ構造に合わせて更新。`branch_id`, `person_id`, `contact_id`, `client_contact_meishi_id` を追加し、担当者情報を人物・所属マスタと連携するよう修正 | 顧客マスタの4マスタ分離(`02_02_client_table.md` v2.5)および名刺管理機能導入に伴い、案件側でも人物と所属・名刺を正確に紐付ける必要が生じたため | | 2026-10-30 | 2.0 | 全体管理者(14代目) | 案件番号の拠点を、新規案件入力で最初に選ぶ案件管理拠点(`branch_code`)で決めるルールにした。案件管理拠点は途中で変えられる(案件番号は変えない。4.5節、`case_branch_history`)。営業・管理担当者・主担当・副担当の変更(理由と前任者への報酬の有無。4.6節、`case_assignment_history`、`case_change_reasons`)を追加。DB前提に書き直し。保存先を `case.json` から DB(`cases`、`case_investigators`、`case_files`、`case_sections`)に変更。担当調査員を主担当・副担当の表に分離。着手対応(`approach_code`)、価格区分、請求先、契約保険会社、依頼先連絡先、依頼先事案を追加(`client_case_no` を `client_case_ref` に変更、`insurance_company`・`billing_type` を廃止)。案件番号の決め方(4.3節)と着手対応の対応表(4.4節)を追加。14節はフォルダのみに。5〜13節の人名・電話番号などをテスト用の値に | 仕様書をDB前提に統一(作業書 F-02 ほか)。新規案件入力の画面(`04_01_04` v2.0)の承認に伴う。影響範囲:`save_case.php`、`load_case.php`、案件番号の採番(`case_number.php`) | | 2026-10-31 | 2.0 | 全体管理者(14代目) | 案件ごとの権限者・確認と差し戻し・連絡メモのテーブルを追加(2節)。13節を、連絡メモ(`case_contact_logs`)の定義に置き換え、`case_sections` から連絡履歴を除いた。担当変更・管理拠点変更ができる人を、案件の修正権限者に変更 | 真柴さんの指示(案件の中身は権限者だけが見る。`04_01_08` v2.0) | | 2026-10-31 | 2.1 | 全体管理者(14代目) | 修正の履歴(`case_edit_history`)、特例アクセスの申請(`case_access_requests`)、アプリ内のお知らせ(`notifications`)のテーブルを2節に追加 | 真柴さんの回答(`04_01_08` v2.1) | | 2026-10-31 | 2.2 | 全体管理者(14代目) | 調査種目・難易度ランクをマスタ(`survey_items`、`difficulty_ranks`)のコードに。価格・報酬の固定値のテーブル(`case_pricing`、`case_reward_lines`、`case_work_breakdown`)を2節に追加 | 料金・報酬の仕様書(`04_03_01` v1.0)に伴う | | 2026-11-02 | 2.3 | 全体管理者(14代目) | 着手対応を弁護士のときだけにした(`approach_code` は条件付き)。弁護士依頼を通常と高難易度に分けた。基本料金の値引き(`discount_name`、`discount_rate`)を追加 | 真柴さんの指示。影響範囲:`schema_cases.sql`、`04_01_03`、`04_01_04` | | 2026-11-04 | 2.4 | 全体管理者(14代目) | 依頼先の番号(`case_client_refs`、`case_ref_types`、`client_type_ref_defaults`)を追加。`client_case_ref` はメモに | 真柴さんの指示。影響範囲:`schema_cases.sql`、`04_01_04` |