2026-05 紙同意ハガキ必須フロー¶
- 作成日: 2026-05-08
- 改訂日: 2026-05-27 (ハガキを SKU 化し OrderLine 自動付与方式へ切替)
- 種別: 追加要件の正本補足
目的¶
電子的な同意だけでなく、紙の同意書(はがき)の到着確認を発送条件に含める商品を、
同意テンプレート単位で管理できるようにする。
ハガキを 独立した商品 (ProductVariant) として扱い、対象商品がカートに入った際に
OrderLine として自動付与 する。受領待ちは line と並存する paperConsentStatus で発送ゲートする。
決定事項¶
- 同意テンプレートに
paperConsentRequired、paperConsentNoticeText、 およびpostcardProductVariantId(nullable) を持たせる。 paperConsentRequired = trueのテンプレートはpaperConsentNoticeTextとpostcardProductVariantIdを必須とする。- ハガキ ProductVariant の粒度は 同意テンプレートごとに 1 個 とする (1 テンプレ = 1 postcard ProductVariant)。
- ハガキの価格は ¥0、
trackInventory=false、非課税、送料計算除外とする。 - 商品・Variant の同意解決は既存どおり
Variant 優先 / Product フォールバックとし、紙同意設定も同じ規則で解決する。 - 紙同意対象商品を 1 件でも含む注文は、注文全体を紙同意待ちとして扱う。
- 紙同意待ちの注文は SMILE エクスポート対象外とし、発送しない扱いとする。
- 紙同意の到着確認は React Dashboard から手動で記録する。
カート挙動 (line 自動付与)¶
- 対象商品 (paperConsentRequired テンプレに紐づく商品) がカートに追加されたとき、 対象テンプレに対応する postcard ProductVariant を 数量 1 で OrderLine として自動付与 する。
- 同じテンプレに紐づく対象商品が複数あっても、postcard line は テンプレあたり 1 本 に集約する (同意 1 通 = ハガキ 1 枚/注文)。
- 異なるテンプレが混在する注文では、テンプレごとに別の postcard line を 1 本ずつ付与する。
- 対象商品がカートから全て取り除かれたら、対応する postcard line も自動で削除する。
- postcard line 自身の数量変更・削除・カート操作は サーバー側で拒否 する。
- マーカー: OrderLine custom field
isAutoPostcard: booleanとrelatedConsentTemplateId: IDを Shop API に公開する。
Storefront 要件¶
- 商品詳細では、通常の同意注意より優先して紙同意待ちの案内文面を表示する。
- カート投入前の同意導線では、電子同意に加えて紙同意待ちの案内文面を表示する。
- checkout の決済前でも、紙同意待ちの案内文面を再表示する。
- 紙同意待ちの案内文面はテンプレート設定をそのまま表示し、未設定で進ませない。
- カート画面では postcard line を「同意ハガキ(自動付与)」として明示表示 し、 quantity stepper・remove ボタンを非表示にする。¥0 として表示する。
React Dashboard 要件¶
- 同意テンプレート編集画面で
紙同意必須、紙同意案内文面、 およびハガキ商品 Variantを編集できる。 紙同意必須=trueのときハガキ商品 Variantを必須入力とする。- 注文詳細で
paperConsentStatus、確認日時、確認者を表示する。 - 注文詳細から
到着確認済みにする操作を実行できる。 - 到着確認操作は監査のため order note を残す。
注文状態要件¶
- 注文 custom fields に以下を保持する。
paperConsentRequiredpaperConsentStatuspaperConsentConfirmedAtpaperConsentConfirmedBypaperConsentStatusはNOT_REQUIRED/PENDING/RECEIVEDの 3 値とする。- 注文確定時の紙同意要否評価は
isAutoPostcard=trueの OrderLine の有無で判定 する。 - 手動確認後は
RECEIVEDに更新する。
注意:
paperConsent*フィールドは Vendure / React Dashboard の管理コンテキスト専用。 ストアフロントのGET_ACTIVE_ORDER_CONTEXTクエリには含めず、顧客向けにはpaperConsentNoticeText(テンプレート側フィールド)経由で案内文面のみ表示する。 postcard line 自体は Shop API で公開する(顧客がカートで認識できるよう)。
SMILE 連携要件¶
paperConsentStatus = PENDINGの注文は通常の SMILE エクスポート対象から除外する。- エクスポート結果には、紙同意待ち除外件数を含める。
- 除外の ON/OFF 切替は設けず、常時除外を正とする。
- postcard line 自体は SMILE CSV 出力対象から常時除外 する(¥0 line を SMILE に流さない)。
ハガキの社内オペレーション情報は
paperConsentStatus経由でのみ参照する。
SKU 命名・運用¶
- postcard ProductVariant の SKU は
POSTCARD-<consentId>-<version>を推奨する。 - 価格は
¥0、trackInventory=false、税区分=非課税、送料計算除外 facet を必ず付与する。 - 新規 postcard variant は Admin で手動作成し、同意テンプレート編集画面で紐付ける。
- 既存
paperConsentRequired=trueのテンプレに postcard variant が未割当の場合は、 起動時に warning ログを出す (apps/vendure-server/src/scripts/check-postcard-assignments.ts)。