# 05_employee_management/05_03_employee_edit.md 版:v1.3 実装の状況は `work_order_db_migration.md`(作業書)を見る ## 1. 概要 従事者マスタの**編集**画面(既存の従事者の情報を見る・直す画面)。 新規登録は、本画面では行わない。新規登録は `employees/register.html`(`05_09_admin_menu.md`)で行う。 ## 2. 画面構成 - ファイルパス: `employees/edit.html` - 遷移元: 人事管理メニュー(`employees/admin_menu.html`)の「従事者マスタ管理」ボックス。従事者一覧(`employees/index.html`)などから、`?sps_id=xxx` 付きで開くこともできる - ヘッダー: 「← 戻る」リンク(人事管理メニューへ)、タイトル、ユーザー名表示 - **従事者の検索・選択欄**: `sps_id` なしで開いた場合に表示する。氏名・カナ・SPS_IDで対象の従事者を選ぶ。`sps_id` 付きで開いた場合は、検索・選択欄を省き、対象の従事者を直接読み込む - 基本情報: 氏名、氏名カナ、primary_company、稼働状況、メール、その他 - 所属: 会社ごとに、契約、職務ポジション、部署、契約拠点、管轄拠点またはサテライト(`02_01`、`01_11`) - 住所: 郵便番号、住所都道府県、住所市区町村、住所町名、住所番地、建物名(郵便番号から自動入力。番地は手入力。`02_01_employee_table.md` 参照) - 写真: 従事者写真の表示・アップロード・差し替え(4節) - 権限設定: 権限マスタ(`permissions`)から `active` が真の権限をカテゴリ別に表示。チェックボックスでON/OFF(6節) - 変更履歴と出来事(7節): 「履歴」ボタン、「賞罰を登録」「昇進・降格を登録」ボタン、出来事の一覧 - 保存ボタン、キャンセルボタン(キャンセルは人事管理メニューに戻る) ## 3. データ取得・編集フロー - 初期表示時、`sps_id` が指定されていれば `GET /employees/api/load_employee.php?sps_id=xxx` でデータを取得する。指定がなければ、検索・選択欄を表示し、対象を選んだ後に取得する。 - 検索・選択欄の候補は、`GET /employees/api/load_employee_list.php` から取得する。サーバー側で、呼び出し者の権限に応じて範囲を絞る(`03_02_master_management.md` 11.2節)。連絡先は返さない。 - 保存は `POST /employees/api/save_employee.php`。更新者は、リクエストで受け取らず、サーバーがセッションから取得する。 保存リクエストの例(テスト用データ): ```json { "employee": { "SPS_ID": "SPS01-99999", "氏名": "テスト 太郎", "権限": { "company_access_sps": true } }, "reason": "任意の理由(区分Aの項目を変えたとき)", "effective_date": "2026-11-01" } ``` 権限要件: - 更新: 自分は `profile_edit_self`、他人は `profile_edit_branch`(同一拠点)または `profile_edit_all` - 権限フィールドの変更: `permission_assign` 必須 ## 4. 写真 - 表示: 従事者の写真(`/data/employees/photos/{SPS_ID}.jpg`)。無い場合はプレースホルダを表示する。 - アップロード・差し替え: ファイルを選ぶと、`POST /employees/api/upload_photo.php`(`sps_id`、`photo`)に送る。仕様(形式、縮小、サイズ上限、権限、保存先)は `03_02_master_management.md` 11.2節に従う。 - **失敗したときの表示**: 写真の欄の下に、インラインでエラーを表示する(`console.warn` で握りつぶさない)。次の場合を区別して書く。 | 場合 | 表示する文言(案) | |---|---| | 形式が違う(jpg・png以外、中身が画像でない) | 写真はjpgまたはpngを選んでください | | サイズが大きい(10MB超) | 写真が大きすぎます(10MBまで) | | 権限がない(403) | この従事者の写真を変更する権限がありません | | 未ログイン・期限切れ(401) | ログインの有効期限が切れました。再度ログインしてください | | サーバー側の処理に失敗(変換・保存の失敗など) | 写真を保存できませんでした。時間をおいて、もう一度お試しください | | 通信エラー | 通信できませんでした。接続を確認してください | - 失敗しても、既存の写真は、そのまま表示する(消さない)。ほかの項目の保存には影響しない。 - アップロードが成功したら、表示を新しい写真に更新する(キャッシュ対策として、取得URLに時刻を付ける)。 ## 5. 本人が変更できない項目 画面を開いた人が、自分自身を編集するとき(`profile_edit_self` のみで、`profile_edit_branch`・`profile_edit_all` を持たない)は、次の項目を**変更できない**。入力欄を `disabled` にし、その旨を画面に表示する。 | 本人が変更できる(案) | 本人が変更できない(案) | |---|---| | 郵便番号、住所各項目、建物名、電話、携帯、メール、写真、最終学歴、卒業校名、前職、資格、その他 | 氏名、氏名カナ、所属、primary_company、生年月日、採用年月日、採用拠点CD、現在契約CD、業務委託契約、現在拠点CD、部署CD、職務CD、従事する探偵業務、稼働状況、終了区分、終了日、探偵業罰則、罰則内容、採用時確認書類、確認書類内容、社会保険情報、権限 | - **サーバー側でも同じ制限を確認する。** 本人からの保存で、変更できない項目の値が変わっていた場合は、保存せず403で応答する(無視して保存する方式にするかは、`save_employee.php` の仕様で決める)。画面の `disabled` だけに頼らない。 - 上の区分は案。真柴さんの承認で確定する。 ## 6. 権限チェックUI(ペアリング制御) - `company_access_*_edit` がONになった場合、対応する `company_access_*` を自動的にONにし、チェックボックスを `disabled` にする(OFF不可)。 - `company_access_*_edit` がOFFになった場合、対応する `company_access_*` の `disabled` を解除する(チェック状態は保持)。 - `permission_assign` を持たないユーザーが操作する場合、すべての権限チェックボックスを `disabled` にし、その旨を画面に表示する。 - 権限の変更は、保存しても、すぐには反映されない。**確認者の承認後に反映する**(`00_10_change_history.md` 区分B)。保存後、画面に「承認待ち」を表示し、承認が済むまでは、現在の権限を表示する。承認待ちのあいだに、もう一度権限を保存することはできない。 - `supreme_access` を持つ人が自分で保存した場合は、単独で確定する(「単独許可」として記録される)。 - 新規登録時の初期権限(職務別デフォルト)の扱いは未決(`06_01_permission_design.md` 1.5節)。 ## 7. 変更履歴と出来事(`00_10_change_history.md`) ### 7.1 保存時の入力 - 区分Aの項目(`02_01_employee_table.md` の「変更履歴」節)が変わっているとき、保存の直前に、「有効日(任意)」と「理由(任意)」の入力欄を表示する。空欄でも保存できる。 - **「訂正」か「変更」かを選ぶ操作は、画面に設けない。** 項目の区分で自動的に決まり、確認は、別の権限者が行う。 - 氏名を変えるときだけ、「改姓・改名」のチェックを1つ付ける。チェックが無ければ訂正扱い(編集ログのみ)。 - 区分Bの項目を変えて保存すると、「承認待ち」として保存される(6節の権限と同じ)。 ### 7.2 「履歴」ボタン - 押すと、この従事者の変更履歴が、日付順に表示される。項目名、有効日、変更前→後、理由、記録した人、確認した人、状態(未確認・承認待ち・確認済み)を表示する。 - 表示には `change_history_view` が必要。氏名・賞罰・権限などの機密性の高い項目の履歴は、`change_history_view_sensitive` も必要。権限がない人には、ボタン自体を表示しない。 - 履歴は読み取り専用。画面から書き換え・削除はできない。 - API(名称案): `GET /employees/api/load_change_history.php?sps_id=xxx`。ツリー承認で確定する。 ### 7.3 出来事の登録 - 「賞罰を登録」「昇進・降格を登録」の2つのボタンを置く。押すと、入力欄(日付、種類、題名、内容。昇進・降格は、新しい職務CD)を表示する。 - 登録した出来事は、この画面の下に、時系列で一覧する。 - **職務ポジションは、この画面の入力欄では直接書き換えられない(新規登録のときの初期値を除く)。** 昇進・降格の登録だけが、その会社の職務ポジションを変える(登録と同時に反映。履歴に「未確認」で記録)。 - 賞罰は、確認者が承認するまで確定しない(承認待ち)。 - 登録の権限は、その従事者を編集できる権限に従う。 - API(名称案): `POST /employees/api/save_employee_event.php`。ツリー承認で確定する。 ## 8. 制約 - localStorage / sessionStorage 使用禁止。 - confirm() / alert() 使用禁止。インラインのメッセージ表示で代替する。 - データの表示は、`textContent` または無害化関数を使う。`innerHTML` に、データをそのまま入れてはならない(XSS対策)。 ## 9. 改訂履歴 | 日付 | 版 | 担当 | 内容 | |------|----|------|------| | 2026-10-26 | 1.0 | Deepseek | 初版作成 | | 2026-10-29 | 1.1 | 全体管理者(14代目) | ①新規登録フローを削除(新規登録は `register.html`)。②検索・選択欄、戻り先を人事管理メニューに、キャンセルの動作を追記(`03_02` 11.2節と整合)。③本人が変更できない項目(5節。案)と、サーバー側での確認を追記。④写真アップロード失敗時のインライン表示(4節)。⑤権限の変更は承認後に反映(6節)。⑥変更履歴と出来事(7節)を新設:保存時の有効日・理由、「履歴」ボタン、賞罰・昇進降格の登録。職務CDの直接編集を不可に。⑦例を `テスト 太郎`・`SPS01-99999` に差し替え | | 2026-10-29 | 1.2 | 全体管理者(14代目) | DB前提の書き直し。権限の取得元を権限マスタに | | 2026-10-30 | 1.3 | 全体管理者(14代目) | 所属を会社ごとの契約・職務ポジション・部署・拠点に変更(`02_01` v2.1)。「職務CD」を「職務ポジション」に |