ken_nogi/NodeSrv/apps/org-master-sync/merge-master-rules.md
Kenichiro NOGI ce58cb4be4 初回コミット: dev配下(NodeSrv/Pleasanter等)をGitea管理下に統合
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>
2026-09-04 15:37:06 +09:00

5.1 KiB

プリザンター社員マスタ更新ルール

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重複除外ロジック等、今回の変更未反映。乖離状態