2026-03 SMILE得意先CSVの更新キーと再インポートルール¶
背景¶
- SMILE 得意先マスタを正本とし、Vendure 側では SMILE 由来の顧客情報を再インポートで反映する運用を採る。
- 同一顧客の再取り込み時に新規顧客が増殖すると、受注・配送先・請求先コードの整合が崩れる。
- そのため、どのキーで既存顧客を再利用し、どこまで上書きするかを追加仕様として明文化する。
決定事項¶
1. 顧客の更新キー¶
- SMILE 得意先CSVの Customer upsert キーは 得意先コード とする。
- Vendure 上では
Customer.customFields.customerCodeを照合キーとし、同じ値の既存顧客が見つかった場合は新規作成せず更新する。 - 判定基準は「同じ名称」「同じメールアドレス」ではなく、同じ得意先コードかどうかを優先する。
2. 再インポート時の上書き範囲¶
- 得意先コード一致で既存顧客を再利用した場合、SMILE 由来の顧客項目(名称、メール、請求先コード、回収方法、住所関連 custom field、元行JSON など)は最新行で更新する。
- 住所は
Address.customFields.deliveryPointCodeを upsert キーとして更新する。 deliveryPointCodeが空または0の場合は、既存のdefaultBillingAddressを更新対象として扱う。
3. 上書きの例外¶
customerStatusは SMILE importer では設定・補完しない。Vendure 側の custom field default または Dashboard / 運用側の明示設定を正本にする。- SMILE の
回収方法はcollectionMethodとして保持し、顧客分類への変換は import 時に行わない。 collectionMethodに保存する値は SMILE の回収方法コードのみとする。tokuisaki.csvの回収方法,回収方法は1列目がコード、2列目が表示名であり、 2列目の label (現金/口座引落/振込/振込(先入金)) や Vendure 内部値 (generalなど) は保存しない。
4. メールアドレスの扱い¶
- 通常のメールアドレスは、顧客再利用の照合キーにしない。
- したがって、得意先コードが異なるがメールアドレスだけ同じという理由では自動マージしない。
- メールアドレスが未入力の行は仮ID運用とし、
${customerCode}@ritsubi-platform.com形式の仮メールアドレスを使用する。 - 再インポート時、得意先コード一致の顧客が見つからなくても、同形式の仮メールアドレスを持つ顧客が存在する場合は、その顧客を再利用して更新する。
- 仮パスワードは新規仮アカウント作成時に生成するが、Customer custom field や import log には保存しない。
- 生成した仮パスワードは、SMILE 取込実行直後の Dashboard レスポンスでその場限りで表示 し、画面遷移後・再読込後・履歴画面からの再参照は不可とする。
- 仮パスワードを忘れた場合は、顧客詳細の「パスワード設定」から新しい値を再発行する。
5. 同一ファイル内の重複行¶
- 同一CSV内に同じ得意先コードの行が複数ある場合は、行順に処理する。
- 先に出現した行で作成または更新した顧客に対し、後続行が上書きされる。
- したがって、最終的な取り込み結果は最後に出現した同一得意先コードの行を正とする。
運用ルール¶
- SMILE 由来の顧客情報を修正したい場合は、Vendure で直接メンテナンスせず SMILE 側を更新して再インポートする。
- 既存顧客を更新したい場合は、同じ得意先コードで SMILE CSV を出力する。
- 新規顧客として扱いたい場合は、SMILE 側で新しい得意先コードを発行する。
- importer は SMILE の列値を Vendure の顧客分類や決済可否へ意味変換しない。
決済可否は PMCA、顧客分類は
customerStatus、価格・販促条件は各ルールの責務として import 後の計算時に評価する。
既存データ修復¶
2026-05-28 に以下の migration で、過去の import 時意味変換による既存データを修復する。
StopSmileCollectionMethodCustomerStatusDerivation1779934399464回収方法由来で自動設定されたcustomerStatusを Vendure 側の default に戻す。RepairSmileCustomerCollectionMethodCode1779936361554collectionMethodに保存された label を SMILE コードへ戻す。- DB CHECK 制約
CHK_customer_collection_method_smile_codeで、今後は null/空文字または numeric code 以外を拒否する。
関連ドキュメント¶
docs/03-implementation/vendure-plugins/smile-integration.mddocs/03-implementation/smile/smile-master-data-reference.mddocs/specifications/2026-03-smile-billing-linkage-ssot.md