mcpField
R
returns-refund-policy

returns-refund-policy

github.com/finsilabsその他60103 回インストール5 日前に更新
リポジトリ

returns-refund-policy について

returns-refund-policyは、商品カテゴリ、顧客ランク、商品状態に応じた返品・返金ルールを設定するEC事業者向けスキルです。各プラットフォームでの設定、返品期限の計算、ポリシーの告知、独自の評価ロジックを扱います。

主な機能

  1. 01カテゴリ別の返品期限設定
  2. 02手数料と返品不可商品の設定
  3. 03会員ランクによるポリシー上書き
  4. 04条件を満たす返品の自動承認
  5. 05期限計算とポリシー告知の案内

活用シーン

  1. 01返品対応の基準を統一
  2. 02商品カテゴリごとに異なるルールを設定
  3. 03会員向けに返品期限を延長
  4. 04監査可能な自動承認フローの構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill returns-refund-policy

インストール後、Claude Code で/returns-refund-policyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

tile.json
evals/auto-approval-workflow-and-value-cap/
criteria.json
task.md
evals/policy-resolution-and-eligibility-evalua/
criteria.json
task.md
evals/policy-versioning-and-audit-trail/
criteria.json
task.md

詳細

返品・返金ポリシーエンジン

概要

返品・返金ポリシーエンジンを使うと、商品カテゴリごとの異なる返品期間、特定の商品タイプに対する再入荷手数料、返品不可商品の除外、ロイヤルティ会員向けの延長期間など、ルールを自動的に適用できます。これにより、カスタマーサービスチームが返品リクエストを一件ずつ手動で判断する必要がなくなり、ポリシーを一貫して適用できます。多くのプラットフォームでは、返品アプリと商品タグ、顧客セグメントを組み合わせて、これらのルールを実装できます。

このスキルを使う場面

  • カスタマーサービスがケースバイケースで対応しているため、返品の判断に一貫性がない場合
  • 商品カテゴリ(電子機器、アパレル、消耗品など)ごとに異なる返品期間を設定する必要がある場合
  • ロイヤルティ会員の返品期間を延長したり、再入荷手数料を免除したりする段階的な返品ポリシーを導入する場合
  • ほとんどの返品を人手を介さずに処理する自動承認ワークフローを構築する場合
  • コンプライアンスや法的要件により、返品ポリシーの監査とバージョン管理が求められる場合

基本手順

ステップ 1: プラットフォームを特定し、適切な返品ツールを選ぶ
プラットフォームおすすめのツール理由
ShopifyLoop Returns または AfterShip ReturnsLoop は最も機能が充実しており、商品タイプごとのポリシー、再入荷手数料、返品不可商品のブロック、ロイヤルティティアによる上書きに対応しています
WooCommerceReturnGo または WooCommerce Returns and Warranty RequestsReturnGo は商品カテゴリごとのカスタムポリシールールと自動承認ロジックに対応しています
BigCommerceAfterShip Returns Center または Loop Returnsどちらもカテゴリごとのポリシールールと再入荷手数料に対応しています
カスタム/ヘッドレスポリシー評価エンジンを構築し、返品ラベルには Shippo を使用ポリシーをデータベースに保存し、返品リクエストの受信時にプログラムで評価します
ステップ 2: 返品ポリシーのルールを定義する

ツールを設定する前に、ポリシーの一覧を明確に定義します。

商品カテゴリ返品期間再入荷手数料自動承認備考
デフォルト(アパレル、アクセサリー)配達日から30日0%はいほとんどの商品
電子機器配達日から15日15%いいえ — 手動審査開封済みの電子機器
ファイナルセール0日—いいえ返品不可
VIP/ゴールド会員配達日から60日0%はいロイヤルティティアによる上書き
不良品/誤配送品配達日から90日0%はい顧客に責任がない場合
ステップ 3: 返品アプリでポリシールールを設定する
Shopify — Loop Returns
  1. Shopify App Store から Loop Returns をインストールします
  2. Loop → Policy → Return Windows に移動します。
    • デフォルト:30日
    • 「Add Rule」をクリックし、「Product tag is 'electronics'」を設定 → 返品期間:15日
    • 「Add Rule」をクリックし、「Product tag is 'final-sale'」を設定 → 返品期間:0日(返品不可)
  3. Shopify 管理画面で商品に該当するタグを付けます(Products → Tags)
  4. Loop → Policy → Restocking Fees に移動します。
    • ルールを追加します:「Product tag is 'electronics'」→ 再入荷手数料:15%
  5. Loop → Policy → Customer Segments に移動します。
    • ルールを追加します:「Customer tag is 'gold-member' or 'vip'」→ 返品期間の上書き:60日、再入荷手数料:0%
  6. Loop → Settings → Automation で、対象となる返品の自動承認を有効にします:「ポリシー条件を満たす返品を自動承認する」
  7. 返品が承認されると、Loop が返品ラベルを自動生成します

ポリシーのテスト:

  • Loop の Policy Simulator(Loop → Policy → Test Policy)を使って、想定上の返品リクエスト(商品タイプ、顧客タグ、配達からの経過日数)に正しいルールが適用されることを確認します
WooCommerce — ReturnGo
  1. retgo.com(または WordPress.org)からReturnGoをインストールします
  2. ReturnGo → Return Policy に移動します:
    • デフォルトの返品期間を設定します:30日
    • 「Custom Rules」で、商品カテゴリーに基づくルールを追加します:
      • カテゴリー「Electronics」→ 15日、15%の再入庫手数料、手動審査が必要
      • カテゴリー「Final Sale」→ 0日(返品不可)
  3. 「Customer Rules」で、タグに基づく上書きルールを追加します:
    • 顧客タグ「wholesale」→ 14日、10%の再入庫手数料
  4. 自動承認を設定します:ReturnGo → Automation →「Auto-approve returns that match policy」を有効にします
  5. 顧客として返品リクエストを作成し、ルールが正しく適用されることを確認します

WooCommerce でファイナルセールを設定する方法:

  • 「final-sale」という商品カテゴリーまたはタグを作成します
  • ReturnGo で、このカテゴリー/タグの商品を返品不可にするルールを追加します
  • 商品ページに、商品バッジプラグインを使って「Final Sale — No Returns」というメッセージを表示します
BigCommerce — AfterShip Returns Center
  1. BigCommerce App Marketplace から AfterShip Returns Center をインストールします
  2. AfterShip → Policy に移動します:
    • デフォルトの返品期間を設定し、商品タイプごとの例外を設定します
  3. AfterShip のポリシーエンジンでは、商品タグに基づく返品期間と自動承認ルールを設定できます
  4. 再入庫手数料について:AfterShip では有料プランに再入庫手数料の設定が含まれています
Step 4: 返品期間の計算を正しく行う

最も重要な設定は、返品期間の起点を注文日や発送日ではなく、配達日にすることです。

重要な理由:

  • 配送には、サービスによって2~10日かかります
  • 注文日を起点に30日間の返品期間を設定すると、顧客が実際に商品を返品できる期間が20日しか残らない場合があります
  • 多くの消費者保護法(EUの14日間のクーリングオフ権、英国の14日間)は配達日を起点としています

返品アプリでこの設定を確認してください:

  • Loop Returns:Loop → Settings → Return Window に移動し、「Starts from: Delivery Date」を確認します ✓
  • ReturnGo:Settings → Policy に移動し、「Return window starts from: Delivered date」を確認します ✓
  • AfterShip:Settings → Return Policy に移動し、「Start date: Order delivered date」を確認します ✓

返品アプリに配達を検知する追跡連携機能がない場合は、近似値として「注文日+配送業者の平均輸送日数」を使用してください。

Step 5: ポリシーを明確に伝える
  1. 返品ページ: ポリシーの一覧表を掲載した専用の /returns または /return-policy ページを作成します。顧客は購入前にこのページを確認します
  2. 商品ページ:「カートに追加」ボタンの近くに、「30日間返品無料」またはファイナルセール商品向けの「Final Sale — No Returns」という短い返品案内を表示します
  3. 注文確認メール: 返品ページへのリンクと、「30日間返品可能」という短い案内を記載します
  4. 返品期間終了前のリマインダー: 返品期間終了の7日前に自動メールを送信するよう設定します。Loop と AfterShip はどちらもこの機能に対応しています
Step 6: カスタム/ヘッドレス — ポリシー評価ロジック
// Return policy rules stored in database and evaluated programmatically
interface ReturnPolicy {
  id: string;
  name: string;
  priority: number;           // higher = evaluated first
  conditions: {
    productTags?: string[];   // match any of these tags
    customerTags?: string[];  // match any of these customer tags
    orderTags?: string[];     // e.g., ['final-sale']
  };
  windowDays: number;         // 0 = no returns allowed
  restockingFeePct: number;   // 0–100
  autoApprove: boolean;
}

async function evaluateReturnEligibility(params: {
  orderId: string;
  productId: string;
  customerId: string;
  returnReason: string;
  deliveredAt: Date;
}): Promise<{
  eligible: boolean;
  policy: ReturnPolicy | null;
  restockingFeeCents: number;
  requiresManualReview: boolean;
  daysRemaining: number;
  reason?: string;
}> {
  const order = await db.orders.findById(params.orderId);
  const product = await db.products.findById(params.productId, { include: ['tags'] });
  const customer = await db.customers.findById(params.customerId, { include: ['tags'] });

  // Find highest-priority matching policy
  const policies = await db.returnPolicies.findAll({ is_active: true }, { orderBy: ['priority', 'desc'] });
  const policy = policies.find(p => {
    const productMatch = !p.conditions.productTags?.length ||
      p.conditions.productTags.some(tag => product.tags.includes(tag));
    const customerMatch = !p.conditions.customerTags?.length ||
      p.conditions.customerTags.some(tag => customer.tags.includes(tag));
    const orderMatch = !p.conditions.orderTags?.length ||
      p.conditions.orderTags.some(tag => order.tags?.includes(tag));
    return productMatch && customerMatch && orderMatch;
  }) ?? null;

  if (!policy || policy.windowDays === 0) {
    return { eligible: false, policy, restockingFeeCents: 0, requiresManualReview: false, daysRemaining: 0, reason: 'FINAL_SALE_OR_NO_POLICY' };
  }

  // Calculate days since delivery
  const daysSinceDelivery = Math.floor((Date.now() - params.deliveredAt.getTime()) / 86400000);
  const daysRemaining = policy.windowDays - daysSinceDelivery;

  if (daysRemaining < 0) {
    return { eligible: false, policy, restockingFeeCents: 0, requiresManualReview: false, daysRemaining: 0, reason: 'WINDOW_EXPIRED' };
  }

  // Calculate restocking fee on the item's original price
  const orderLine = await db.orderLines.findOne({ order_id: params.orderId, product_id: params.productId });
  const itemValueCents = orderLine.unit_price_cents * orderLine.quantity;
  const restockingFeeCents = Math.round(itemValueCents * (policy.restockingFeePct / 100));

  return {
    eligible: true,
    policy,
    restockingFeeCents,
    requiresManualReview: !policy.autoApprove,
    daysRemaining,
  };
}

ベストプラクティス

  • 返品期間は注文日ではなく配達日を起点にします — そのほうが顧客にとって公平で、紛争を減らし、ほとんどの地域の消費者保護法にも合致します
  • ポリシーを変更するたびにバージョンを記録します — 返品ポリシーを更新する際は、変更日時とともに旧ポリシーを記録します。顧客から返品の申請があった場合は、購入時点で有効だったポリシーを適用します
  • 顧客が返品を確定する前に再入庫手数料を表示します — 返品手続きの開始時に、「返金額から15%の再入庫手数料($12.75)が差し引かれます」と表示し、手続きの完了後に表示することは避けます
  • 自動承認に返金額の上限を設けます — 自動承認を有効にしていても、潜在的な不正を検知できるよう、500ドルを超える返品は手動審査に回します
  • 返品期間の終了が近づいたら、事前に顧客へ通知します — 最近購入した顧客に「30日間の返品期間はあと7日で終了します」というメールを送信すると、返品期間を逃して不満を感じる顧客を減らせます

よくある落とし穴

問題解決策
返品可能期間が配送日ではなく注文日を基準に計算される返品アプリの設定で「返品可能期間の起算日」を明示的に確認してください。一部のツールでは注文日がデフォルトになっているため、配送日に変更してください
複数のポリシーが一致し、誤ったポリシーが適用されるpriority DESC で並べ替えて最初に一致したものを選びます。管理画面に優先順位の階層を記載し、VIP会員が家電を購入する場合などのエッジケースをテストしてください
顧客が再入庫手数料に異議を唱える返品確認メールに手数料の金額とポリシー名(「家電ポリシー — 再入庫手数料15%」)を記載し、顧客が記録として保管できるようにしてください
最終販売タグが一貫して適用されない運用手順を作成してください。セールに追加する商品にはすべて「final-sale」タグを付け、商品タグのレポートを使って毎月監査してください

関連スキル

  • @returns-management
  • @order-management-system
  • @b2b-commerce

コメント