15 "reason": "Service plugin (SPI), and here the 'not relevant' verdict is genuinely right for a reason worth stating: a catalog provider plugin makes an EXTERNAL catalog sellable on Wix, which is the OPPOSITE of migrating -- it keeps the data at the source. Never a migration path. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
24 "reason": "Service plugin (SPI). Same shape as the catalog provider: it delegates stock to an external system rather than moving it in. Never a migration path. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
33 "reason": "Service plugin (SPI) -- not an import path, but a CANDIDATE GAP-CLOSER for source surcharges (handling, packaging, cash-on-delivery) that have no Wix field to land in. Not yet attempted. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
42 "reason": "Service plugin (SPI), so not an import path -- BUT NOT IRRELEVANT, and this entry was previously wrong to imply otherwise. The Custom Discount Triggers plugin CLOSED A MAPPING GAP: a WooCommerce bulk/tiered discount needs mutually exclusive quantity BANDS, Wix's native bounded ITEM_QUANTITY_RANGE leaves the rule unrenderable in the merchant dashboard, and open-ended ranges stack (21 items matched all five tiers -> 75% off instead of 25%). A custom trigger answers yes/no per cart, so the band is exact. Implemented and deployed; see the bounded-quantity-bands-need-a-custom-trigger-spi pitfall on entities/discount-rule.json. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
51 "reason": "Service plugin (SPI) -- not an import path, but a CANDIDATE GAP-CLOSER rather than noise. This is the natural home for a source shipping rate table Wix's own shipping options cannot express; a free-shipping-over-threshold condition and per-shipping-class costs are both known to fail natively. Not yet attempted. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
60 "reason": "Service plugin (SPI) -- not an import path. Tax calculation could close a gap only if the source's tax logic genuinely exceeds Wix tax groups; not yet exercised. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
69 "reason": "Service plugin (SPI) -- not an import path, but a CANDIDATE GAP-CLOSER for source purchase restrictions (members-only items, min/max quantity, region blocks) with no native Wix equivalent. Not yet attempted. See domains/SERVICE-PLUGINS.md for the escalation rule, the cost list, a worked example and the full 25-plugin catalog.",
126 "reason": "Billing details are carried on the imported order payload, but refund records use the separate Refund Payments surface (POST /ecom/v1/order-billing/refund-payments). Live verification established that externalRefund:true is mandatory for historical data.",
135 "reason": "Fulfillment status folds into the imported order payload; standalone fulfillment creation targets live orders. Revisit if imported historical orders prove to need explicit fulfillment records.",
165 "reason": "Add Payments is the first half of the refund write path: Import Order creates no payment record, so a payment must be added before Order Billing's Refund Payments has a paymentId to reference. Note this surface alone is payments-only (refunds reach it as the Refund Completed webhook, and balanceSummary.refunded is computed) — the refund create lives in the sibling Order Billing tree, and reading this menu in isolation produced a false 'no refund-record import path' conclusion on 2026-08-12, corrected 2026-08-16.",