## 02_data_definition/01_employee_table.md # Employee Table Definition (従事者マスタ) ## テーブル概要 従事者(調査員・営業・経理・管理者)の基本情報を管理するマスタデータ。 個人事業(SPS)と法人(SCSPS)の従事者を一元管理する。 ## 保存ファイル `/master/employees.json` ## データ構造 ```json { "employees": [ { "SPS_ID": "SPS01-00001", "氏名": "真柴 直也", "氏名カナ": "マシバ ナオヤ", "所属": ["SPS", "SCSPS"], "primary_company": "SPS", "生年月日": "1969-07-12", "郵便番号": "614-8366", "住所都道府県": "京都府", "住所町名番地": "八幡市男山泉", "建物名": "", "電話": "075-950-1726", "携帯": "090-xxxx-xxxx", "メール": "mashiba@scsps.jp", "最終学歴": "大学卒", "卒業校名": "○○大学", "前職": "○○株式会社", "資格": "簿記2級, FP技能士", "探偵業罰則": false, "罰則内容": "", "採用時確認書類": true, "確認書類内容": "身分証明書, 履歴書", "採用年月日": "2019-04-01", "採用拠点CD": "K01", "現在契約CD": "C01", "業務委託契約": { "契約コード": "C06", "歩合率": 55 }, "現在拠点CD": "K01", "部署CD": "D00", "職務CD": "P001", "従事する探偵業務": "調査全般", "稼働状況": "常勤", "終了区分": null, "終了日": null, "社会保険情報": { }, "権限": { "company_access_sps": true, "permission_assign": true }, "その他": "" } ] } ``` ## フィールド説明 | フィールド名 | 型 | 必須 | 説明 | |-------------|-----|------|------| | SPS_ID | string | ✅ | 従事者ID | | 氏名 | string | ✅ | 氏名(全角) | | 氏名カナ | string | ✅ | ヨミガナ(半角カナ推奨) | | 所属 | array | ✅ | 従事者が所属する会社コードの配列(SPS/SCSPS)。兼任者の場合は両方を指定 | | primary_company | string | ✅ | 主たる所属会社。デフォルト表示や給与計算の基準となる | | 生年月日 | date | ✅ | YYYY-MM-DD形式 | | 郵便番号 | string | | ハイフンあり | | 住所都道府県 | string | ✅ | 都道府県 | | 住所町名番地 | string | ✅ | 市区町村以下 | | 建物名 | string | | マンション名など | | 電話 | string | | 固定電話 | | 携帯 | string | ✅ | 携帯番号 | | メール | string | ✅ | メールアドレス | | 最終学歴 | string | | 中学校卒/高校卒/専門学校卒/大学卒など | | 卒業校名 | string | | 学校名 | | 前職 | string | | 前職の会社名・職種 | | 資格 | string | | 簿記2級、FP技能士など(カンマ区切り) | | 探偵業罰則 | boolean | | true=有/false=無 | | 罰則内容 | string | | 「有」の場合の内容 | | 採用時確認書類 | boolean | | true=有/false=無 | | 確認書類内容 | string | | 確認した書類 | | 採用年月日 | date | ✅ | 入社日 | | 採用拠点CD | string | ✅ | 採用時の拠点コード | | 現在契約CD | string | ✅ | 現在の契約コード | | 業務委託契約 | object | | 副次的な契約がある場合に指定 | | 現在拠点CD | string | ✅ | 現在の拠点コード | | 部署CD | string | ✅ | 部署コード | | 職務CD | string | ✅ | 職務コード | | 従事する探偵業務 | string | | 担当業務 | | **稼働状況** | string | ✅ | 下記「稼働状況一覧」参照 | | **終了区分** | string | | 稼働状況が退職/契約終了等の場合の詳細 | | **終了日** | date | | 退職・解雇・契約解除の日付 | | 社会保険情報 | object | | 社会保険関連情報(将来拡張) | | 権限 | object | | 個人単位の権限(employees.jsonで直接管理) | | その他 | string | | 備考 | ### 稼働状況一覧 | 稼働状況 | ログイン | 備考 | |---------|---------|------| | 常勤 | 許可 | | | 非常勤 | 許可 | | | 在籍 | 許可 | | | 休職 | 許可 | | | 休業中 | 許可 | | | **臨時** | **許可** | **退職者等へのテンポラリ付与用。作業完了後は退職等に戻す** | | 退職 | 拒否 | 恒久的措置 | | 契約終了 | 拒否 | 恒久的措置 | | 契約解除 | 拒否 | 恒久的措置 | | 解雇 | 拒否 | 恒久的措置 | | **緊急ロック** | **拒否** | **一時的措置・解除可能** | ### 権限自動クリアルール `save_employee.php` で稼働状況を変更した際、以下のルールに従って `権限` フィールドを制御する。 | 稼働状況への変更 | 権限の扱い | 理由 | |----------------|----------|------| | 退職 | `{}` に自動クリア | 恒久的離脱のため全権限を失効させる | | 契約終了 | `{}` に自動クリア | 同上 | | 契約解除 | `{}` に自動クリア | 同上 | | 解雇 | `{}` に自動クリア | 同上 | | 緊急ロック | クリアしない | 一時的措置のため。解除時に権限がそのまま復元される | | 臨時 | クリアしない | テンポラリ付与して使用する用途のため | **重要**:権限はIDに紐づく個人単位の設定であり、稼働状況・職務ポジションとは独立している。 退職時の権限クリアは `save_employee.php` が自動で行う。手動での確認・修正は不要。 ### 終了区分一覧 | 区分 | 説明 | 該当契約 | |------|------|---------| | 自己都合 | 従事者側の意思による終了 | 全契約 | | 定年退職 | 定年到達による終了 | 雇用契約 | | 会社都合 | 会社側の意思による解雇 | 雇用契約 | | 懲戒解雇 | 重大な非違行為による解雇 | 雇用契約 | | 契約解除 | 会社側の意思による契約終了 | 有期契約/業務委託 | --- ## 従事者一覧画面の表示設計 ### 表示レベル(3段階) | レベル | 対象 | 表示内容 | |--------|------|---------| | 全員一覧 | ログイン済み全員 | 管理権限者が設定した項目のみ表示 | | 人事管理一覧 | profile_view_all 保有者 | 管理権限者が設定した項目のみ表示(全員一覧より広い) | | 個人詳細 | 権限に応じて閲覧・編集可否が変わる | 全項目表示 | ### 一覧表示項目の設定 - 「全員一覧」「人事管理一覧」それぞれで表示する列を `permission_assign` 保有者がチェックボックスで設定 - 設定変更は即時反映。システム修正不要 - 設定保存先:`/data/user_data/employees_display_settings.json` ```json { "all_view": ["氏名", "現在拠点CD", "稼働状況"], "hr_view": ["氏名", "現在拠点CD", "稼働状況", "携帯", "メール", "職務CD", "現在契約CD"] } ``` ### 表示タブ | タブ | 表示対象 | 表示に必要な権限 | |------|---------|----------------| | 稼働中 | 常勤/非常勤/在籍/休職/休業中/臨時 | ログイン済み全員 | | 緊急ロック中 | 緊急ロック | permission_assign | | 退職者 | 退職/解雇/契約終了/契約解除(7年以内) | permission_assign | | 全件 | 全従事者 | permission_assign | --- ## 個人詳細のアクセス制限 ### 稼働中の従事者 | 操作者 | 閲覧 | 編集 | |--------|------|------| | 本人 | 全項目 | 全項目(一部制限あり) | | profile_edit_all 保有者 | 全項目 | 全項目 | | その他 | 一覧表示項目のみ | 不可 | ### 緊急ロック中・退職者 | 操作者 | 閲覧 | 編集 | 備考 | |--------|------|------|------| | isAdmin: true | 全項目 | 全項目 | アクセスログに記録 | | その他 | 不可 | 不可 | | --- ## 管理者アクセスログ `isAdmin: true` のユーザーが他人の個人詳細を開いた場合、以下のログを記録する。 **保存先**:`/data/logs/access_log.json` ```json { "timestamp": "2026-04-04 10:30:00", "operator": "SPS01-00001", "target": "SPS01-00003", "action": "profile_view", "target_status": "緊急ロック" } ``` --- ## 社会保険情報(将来拡張) ### データ構造 ```json { "社会保険情報": { "健康保険": { "加入状況": "加入/未加入/適用除外", "被保険者番号": "文字列", "資格取得日": "YYYY-MM-DD", "資格喪失日": "YYYY-MM-DD or null", "標準報酬月額": 数値 }, "厚生年金": { "加入状況": "加入/未加入/適用除外", "被保険者番号": "文字列", "基礎年金番号": "文字列", "資格取得日": "YYYY-MM-DD", "資格喪失日": "YYYY-MM-DD or null", "標準報酬月額": 数値 }, "雇用保険": { "加入状況": "加入/未加入", "被保険者番号": "文字列", "資格取得日": "YYYY-MM-DD", "資格喪失日": "YYYY-MM-DD or null" }, "被扶養者": [ { "氏名": "文字列", "続柄": "文字列", "生年月日": "YYYY-MM-DD", "続柄コード": "1=配偶者,2=子,3=父母等" } ], "適用除外該当": false, "適用除外理由": "文字列" } } ``` --- ## 兼任者・複数契約の扱い - 1人の従事者が複数の会社に所属し、異なる契約形態を持つことができる - 例:法人では正規雇用(C02)、個人事業では業務委託(C06)として活動 - 給与・報酬はそれぞれの契約に基づき別々に計算・支払われる - ログイン時は「所属」に基づいてアクセス可能な会社を判定 ## 退職者データ保存ポリシー - 従事者情報は削除せず永続保存する - 退職後もデータは保持し、稼働状況と終了区分で管理する - 削除機能は実装しない ### 保存の理由 1. **法的要件**:給与台帳(7年/5年)、源泉徴収票、社会保険記録の保存義務 2. **過去案件参照**:退職者が担当した案件の担当者名表示に必要 3. **警察監査対応**:探偵業法に基づく従事者情報の開示要求対応 4. **税務調査対応**:退職者を含む給与支払報告書の作成 --- ## 保存処理API仕様 ### 1. 概要 従事者情報の保存は、専用のAPI(`/master/api/save_employee.php`)を介して行う。 新規登録時は自動採番機能を含む。 ### 2. リクエスト仕様 | 項目 | 内容 | |------|------| | メソッド | POST | | エンドポイント | `/master/api/save_employee.php` | | リクエストヘッダー | `Content-Type: application/json` | ### 3. リクエストボディ ```json { "employee": { "SPS_ID": "SPS01-00005", "氏名": "山田 太郎", "稼働状況": "常勤", "権限": { "case_view_self": true, "expense_view_self": true } }, "user": "SPS01-00001" } ``` ### 4. レスポンス仕様 **成功時** ```json { "success": true, "message": "保存しました", "sps_id": "SPS01-00005", "timestamp": "2026-03-16 15:30:00" } ``` **エラー時** ```json { "success": false, "message": "エラーメッセージ" } ``` ### 5. 処理内容 1. リクエストデータのバリデーション 2. 新規登録の場合: - 拠点コードから拠点番号取得 - カウンターファイル(`/master/counters/employee_counter.json`)から次回採番番号取得 - ID生成(例:SPS01-00005) - カウンター更新 3. ファイルロック取得(排他制御) 4. `/master/employees.json` 読み込み 5. **稼働状況が退職・契約終了・契約解除・解雇に変更された場合、`権限` フィールドを `{}` に自動クリアする** 6. 新規追加 or 更新処理 7. 権限変更が含まれる場合:対象ユーザーのPHPセッションを強制破棄 8. 更新日時・更新者情報追加 9. ファイル書き込み 10. ロック解除 11. バックアップ作成(自動) ### 6. エラーハンドリング | エラー状況 | HTTPステータス | メッセージ | |-----------|---------------|-----------| | 必須パラメータ不足 | 400 | 必須パラメータが不足しています | | ファイルロック失敗 | 500 | ファイルのロックに失敗しました | | 更新対象不存在 | 404 | 更新対象の従事者データが見つかりません | | ID採番失敗 | 500 | IDの採番に失敗しました | --- ## 改訂履歴 | 日付 | 版 | 担当 | 内容 | |------|----|------|------| | 2026-03-12 | 1.0 | マスタ管理担当(初代) | 初版作成 | | 2026-03-15 | 1.1 | マスタ管理担当(初代) | 所属フィールド、兼任者対応を追加 | | 2026-03-15 | 1.2 | マスタ管理担当(初代) | 社会保険情報(将来拡張)を追記 | | 2026-03-16 | 1.3 | マスタ管理担当(初代) | 終了区分と退職者表示ポリシーを追記 | | 2026-03-16 | 1.4 | マスタ管理担当(初代) | 保存処理API仕様を追記 | | 2026-04-04 | 1.5 | マスタ管理担当(2代目) | 稼働状況に「緊急ロック」追加。従事者一覧画面の表示設計(3段階・表示項目設定・タブ)新設。個人詳細アクセス制限新設。管理者アクセスログ新設。保存処理5節にセッション強制破棄を追記 | | 2026-04-05 | 1.6 | マスタ管理担当(3代目) | 稼働状況に「臨時」追加。権限自動クリアルール新設(退職・契約終了・契約解除・解雇で自動クリア、緊急ロック・臨時はクリアしない)。保存処理5節に権限自動クリア処理を追記。稼働中タブに「臨時」を追加 |