GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
73 lines
5.1 KiB
Markdown
73 lines
5.1 KiB
Markdown
# プリザンター社員マスタ更新ルール
|
|
|
|
planMerge()ロジック整理。n8n版(`logic-merge-master-plan`)最新反映(2026-08-22)。CLI版(`src/commands/merge-master.js`)は未反映・乖離あり(内部列名のまま、状態判定ロジック無し)、要注意。
|
|
|
|
## データ取得方式
|
|
|
|
- 正サイト(マスタ本体、SiteId=1)全件取得: `items/export`使用。表示名キー・表示値のままexistingItems保持。内部列名変換一切しない
|
|
- 実ユーザー全件取得: `users/get`(コード値のまま)。理由: `users`にAPI経由export存在せず(ブラウザUI専用機能のみ、APIKey不可)。今後もget維持
|
|
- 選択肢マスタ(役職/職級/利用権限タイプ)取得: `items/get`のまま(Title/Status/ResultId基本列のみ、コード値/表示名区別問題起きない構造)
|
|
|
|
## 突合優先順位
|
|
|
|
**LINEWORKS社員→既存マスタ**
|
|
1. 社員ID一致
|
|
2. 無ければメールローカル部一致
|
|
|
|
**マッチ済み既存マスタ→プリザンター実ユーザー**
|
|
1. 既存マスタ内ユーザID最優先。メール変更・削除に影響されない安定突合
|
|
2. 無ければメールローカル部解決。候補1件→自動採用。複数→emailOverrides参照。無し→needsReview行き、プリザンター側不可触のまま
|
|
|
|
**プリザンター専用ユーザー(LINEWORKS非在籍)→既存マスタ**
|
|
- 対象: 既存マスタ内「社員IDが元々無い」行のみ限定(2026-08-22追加制約)
|
|
- 社員IDがある行の使用中ユーザーIDは、この処理から完全除外(create/updateどちらにも入れない)。**理由: 社員ID有る行は退職処理側の担当。除外しないとcreate/update/retirements間で二重処理・重複が起きる(2026-08-22実データで2種類発覚・修正済み)**
|
|
- ユーザID一本。メールフォールバックなし(同一ローカル部複数UserId紐づくケースでの奪い合い事故防止、2026-08-08実データ)
|
|
|
|
## 状態列判定(2026-08-22新規追加)
|
|
|
|
| LINEWORKS | プリザンター組織(DeptId) | 状態 |
|
|
|---|---|---|
|
|
| 有 | 問わず | 在籍中 |
|
|
| 無 | 7(「退職済み」組織) | 退職済み |
|
|
| 無 | 7以外 | その他 |
|
|
|
|
「その他」該当は社員ID無し(プリザンター専用ユーザー)が前提。社員IDある行(退職処理対象)は基本的に「退職済み」想定だが、DeptId基準で機械的に計算(異常データでも安全側)。
|
|
|
|
## create/update/retire判定
|
|
|
|
| ケース | 動作 |
|
|
|---|---|
|
|
| LINEWORKS社員・既存マスタ未登録 | create |
|
|
| LINEWORKS社員・既存マスタ登録済み | update |
|
|
| プリザンター専用(社員ID無し)・既存マスタ未登録 | create |
|
|
| プリザンター専用(社員ID無し)・既存マスタ登録済み(ユーザID一致) | update |
|
|
| 既存マスタ社員IDあり・今回LINEWORKS不在 | 退職処理(update。LINEWORKS有無=無、状態=DeptId判定、LINEWORKS在籍フラグ明示1) |
|
|
|
|
## 書き込み範囲
|
|
|
|
| 項目 | ルール |
|
|
|---|---|
|
|
| LINEWORKS由来項目群 | LINEWORKS由来のみ更新 |
|
|
| プリザンター紐付け項目群 | 実ユーザー紐付け時のみミラーリング。紐付かなければ不可触 |
|
|
| 名前 | 常にLINEWORKS姓名(半角スペース結合)で上書き。プリザンターName値は無視 |
|
|
| 生年月日/入社日 | LINEWORKS側値消失時のみ明示クリア(`1899/12/31`送信)。既に未設定なら無変更 |
|
|
| 役職/職級/利用権限タイプ | 外部選択肢マスタResultIdへ解決。無ければ新規作成(get-or-create) |
|
|
|
|
## フラグ
|
|
|
|
- LINEWORKS有無: LINEWORKS社員なら常時「有」、プリザンター専用・退職処理対象なら「無」
|
|
- プリザンター有無: プリザンター実ユーザー紐付けば「有」、紐付かなければ「無」
|
|
- LINEWORKS在籍フラグ: LINEWORKS社員なら"1"、プリザンター専用は空欄維持、退職処理対象は"1"明示(ユーザー指示、2026-08-22)
|
|
|
|
## import時の重要な落とし穴(2026-08-22発覚・修正)
|
|
|
|
creates/updates/retirementsを1つのCSVにまとめるとヘッダー(列)が全行共通になる。一部項目しか持たない行(退職処理等)に、他行だけが持つ列(氏名等)の値が空文字で明示送信され、既存値を上書き消去する事故が発生した(8/17の990/1071データ全消去、8/22の氏名再消失、いずれも実データ)。
|
|
|
|
**対策**: updates/retirementsは`backupFields`(既存の全項目)をベースに変更点だけ`{...backupFields, ...changedFields}`でマージしてからCSV化する。creates(新規)はbackupFields無いのでそのままでよい。
|
|
|
|
## 実装
|
|
|
|
- n8n版本体: `logic-merge-master-plan`サブワークフロー(id: `asKvC5LSVg3q8tuU`)
|
|
- n8n版検証用コピー: ブロックB(`org-sync: ②-B planmerge test`、id: `MRrc8DnuCupSoVjq`)。**本体とは別の独立コピー、本体修正時は必ずこちらも同時修正要**(2026-08-22、修正漏れで一度検証失敗)
|
|
- CLI版: `apps/org-master-sync/src/commands/merge-master.js` `planMerge()`。**内部列名ベースのまま、状態列判定・社員ID重複除外ロジック等、今回の変更未反映。乖離状態**
|