Worked Example — Solex E-commerce Reference

A minimal, single-merchant, single-channel SMB e-commerce implementation — GrowDirect’s reference e-commerce front-end — used as the production transaction source for Canary Retail. As an operating merchant against the Square sandbox, it produces real transactions, refunds, inventory adjustments, subscriptions, and webhook events; Chirp/Fox (the Q-prefix loss-prevention module) observes that stream.

This article reads column-wise across the Canary Retail module spine and shows concretely how much of the canonical retail capability surface a single well-modeled operational app can populate. The answer, by coverage assessment: ~70%.

That number is load-bearing. It is the evidence behind Canary Retail’s “SMB collapse” thesis — that the classical enterprise retail decomposition (distinct catalog hub, pricing engine, cart, checkout, subscription, inventory, tax, shipping, fulfillment, and POS systems) compresses into one operational app for SMB specialty retailers, without losing capability.

Why this article exists

Canary Retail is a platform. Platform claims require evidence. Solex is the evidence:

  1. It instantiates the Multi-Channel domain. The enterprise reference model’s Multi-Channel domain assumed call-center + catalog division-of-labor. In SMB specialty, the e-commerce app is the channel.
  2. It demonstrates the SMB collapse principle in code. The same capability set that an enterprise stack splits across 5+ systems collapses into one Flask service with named modules.
  3. It produces fact data. Real transactions, refunds, inventory adjustments, subscription charges, and webhook events — the same shape of data an enterprise POS feed carries, in commodity form.

Component → capability mapping

Each Solex service module mapped to the canonical retail capability tables it populates.

Solex componentCapability tables it populates
services/catalog.pyMulti-Channel: Catalog Analysis · Products & Services: Product Analysis
services/cart.pyMulti-Channel: eCommerce Analysis · Customer: Market Basket Analysis · abandoned-cart feeds funnel reports
services/checkout.pyMulti-Channel: eCommerce Analysis · Customer: Purchase Profiles · Store Ops: Transaction Profitability · Corporate Finance: Financial Mgmt Accounting
services/inventory.pyMerchandising: Inventory Analysis (On Hand) · Store Ops: Loss Prevention (Inventory Discrepancy — reason='shrink' adjustments) · Merchandising: Slow Moving (derivable from decrement velocity)
services/subscriptions.pyCustomer: Customer Loyalty · Customer Lifetime Value · Customer Movement Dynamic (pause/resume/cancel) · Multi-Channel: identified-shopper segmentation
services/refunds.pyStore Ops: Loss Prevention (refund-pattern detection) · Customer: Customer Complaints · Multi-Channel: return rate per product · Corporate Finance: Income Analysis
services/email.pyCustomer: Campaign & Promotion Analysis · Customer Interaction Analysis
services/scenarios/Cross-cutting test-data generator
services/webhooks.pyStore Ops: Loss Prevention (orphan-payment recovery) · Corporate Finance: reconciled state
services/auth.pyCustomer: Customer Profile Analysis (identified vs guest)
services/tax.py / shipping.py / addresses.py / fulfillment.pyMulti-Channel: geographic distribution · Corporate Finance: gross-to-net
services/analytics.pyMulti-Channel: eCommerce Analysis (clickstream × sales, session cycle) · Customer: Customer Movement Dynamic
services/abandonment.pyCustomer: Campaign & Promotion Analysis (recovery) · Multi-Channel: funnel

Data flow → event mapping

Each named flow generates a specific event shape that populates report computations.

FlowEvent shapeCapabilities computable
Guest checkout (happy path)cart_created → cart_lines_added → checkout_started → square_order_created → square_payment_succeeded → order_persisted → inventory_decremented → email_enqueued → analytics_purchaseMulti-Channel: eCommerce Analysis · Customer: Purchase Profiles, Market Basket · Products & Services: Sales by Product · Merchandising: Inventory (decrement) · Store Ops: Transaction Profitability
Autoship chargescheduled_check → due_subscriptions_found → charge_saved_card → place_order(autoship_source)Customer: Customer Loyalty (tenure), Customer Lifetime Value, Customer Movement Dynamic · Multi-Channel: identified-shopper segment
Scenario runadmin_triggered → scenario_emit → place_order × N (with scenario_tag)Cross-cutting — targets specific tables
Refundrefund_requested → square_refund_created → refund_persisted → order.status updated → inventory_incremented → email_enqueuedStore Ops: Loss Prevention (refund pattern, value ratio) · Customer: Customer Complaints · Corporate Finance: Income Analysis
Catalog importyaml_loaded → upsert_product → image_copy → search_index_rebuiltProducts & Services: Product Analysis · Multi-Channel: Catalog Analysis

Scenario → capability coverage

Named scenarios are deliberate fact patterns designed to populate specific cells.

ScenarioCapabilities exercised
normal_retail_dayBaseline for every table — no anomaly population
after_hours_burstStore Ops: Loss Prevention (after-hours analog) · Multi-Channel: session cycle by period
round_amount_clusterStore Ops: Loss Prevention (round-amount pattern)
high_value_saleStore Ops: Transaction Profitability · Customer: Customer Lifetime Value (high-value detection)
autoship_cohortCustomer: Customer Loyalty, Customer Lifetime Value, Customer Movement Dynamic
bulk_reseller_orderCustomer: Market Basket (large basket), Customer Profitability (bulk-buyer segment), Products & Services: Sales Quantity
refund_waveStore Ops: Loss Prevention (refund pattern across cohort) · Customer: Customer Complaints
shrink_eventStore Ops: Loss Prevention (Inventory Discrepancy — direct shrink signal) · Merchandising: Inventory Analysis
cart_abandonment_cohortMulti-Channel: funnel patterns · Customer: Customer Interaction Analysis

Data model → dimensions / measures

Solex model groupDimensionsMeasures
Catalog (Product, Category, Image)Product, Category, Brand(master — no facts)
Inventory (Inventory, InventoryAdjustment)Reason (sale, refund, shrink, restock, manual)On-hand, adjustment-quantity, adjustment-velocity
Customers + authCustomer, segment (autoship / one-off / guest), geo, acquisition channelCustomer-count, new-customer-count
Cart (Cart, CartLine)Cart-stage, funnel-positionCart-value, add-to-cart, abandon-rate
Order (Order, OrderItem, Tender)Order-status, channel, payment-method, tax-jurisdiction, shipping-region, promo-codeOrder-count, order-value, tax-collected, shipping-collected, AOV
SubscriptionsSubscription-status, cadence, tenure-bucketSubscription-count, MRR, pause-rate, cancel-rate
Refunds + returnsRefund-reason, return-statusRefund-count, refund-value, refund-rate, return-to-sale ratio
Ops / observability (Webhook, Scenario, Analytics)Webhook-type, scenario-tag, event-typeEvent-count, reconciliation-lag, funnel-step-rate

Coverage assessment per capability domain

Multi-Channel Management

CapabilityCoverageNote
eCommerce AnalysisFullAll sample reports computable
Catalog AnalysisFullDemographic-response thin
Call Center AnalysisNoneNo call-center surface

Customer Management

CapabilityCoverageNote
Purchase ProfilesFullOrder × catalog × customer
Customer ProfilesPartialLimited to geo + acquisition
Product Purchasing RFQFullRepeat-purchase from autoship + one-off
Campaign & PromotionPartialAbandonment yes; broader attribution limited
Cross Purchase BehaviorFullOrder × catalog patterns
Target Product AnalysisFullPer-product order metrics
Customer Movement DynamicFullSubscription + acquisition timestamps
Market BasketFullOrderItem composition
Customer LoyaltyFullSubscription tenure + repeat behavior
Customer Lifetime ValueFullCumulative order value
Customer ProfitabilityPartialNeeds cost-of-goods
Customer AttritionPartialSubscription cancel yes; one-off needs definition
Customer ComplaintsPartialRefund reasons + returns
Customer Credit RiskNoneSquare handles
Customer InteractionPartialEmail thin; analytics present
Lead / Market AnalysisNoneNo pre-sale or external market tracking

Products & Services Management

CapabilityCoverageNote
Product AnalysisFullSales × catalog at product/category
Business PerformancePartialVendor-side reports absent
Product ProfitabilityPartialNeeds cost-of-goods
Planning and ForecastingPartialBackward velocity yes; forward forecast outside scope

Merchandising Management

CapabilityCoverageNote
Inventory AnalysisPartialOn-hand + adjustments yes; no multi-location, no on-order
Pricing AnalysisPartialSet vs Actual yes; markdown yes; competitive / multi-channel absent
Promotion AnalysisPartialPromo-code dimension yes; engine stubbed
Assortment / AllocationPartialSingle-channel; no multi-store allocation
Physical Merchandising / SpaceNoneNo physical store

Store Operations Management

CapabilityCoverageNote
Loss PreventionFullShrink scenario + refund wave + round-amount + after-hours scenarios — Solex is a production source for LP, not just a fixture
Transaction ProfitabilityFullPer-order revenue + line-item composition
Service Delivery AnalysisPartialWebhook-reconciliation lag as proxy
Vendor PerformanceNoneNo vendor surface
StaffingNoneNo employee surface
Store Location AnalysisNoneSingle-location
Store OptimizationPartialInventory-projection absent

Corporate Finance Management

CapabilityCoverageNote
Financial Mgmt AccountingFullOrder revenue + refund offsets + Square payouts
Income AnalysisFullOrder × Refund × Subscription
Capital Allocation / Credit RiskNoneOut of scope for SMB e-commerce

What this coverage tells us — the SMB collapse

Reading the coverage column-wise produces three observations that underpin the Canary Retail platform thesis.

  1. Multi-Channel and Corporate Finance compress cleanly. A single well-built e-commerce app gives you nearly the full canonical report set for both. The enterprise reference assumed call-center + catalog division-of-labor; in SMB, the e-commerce app is the channel and the order is the financial transaction.
  2. Customer compresses well. Authenticated customers + order history + subscription state covers most Customer capabilities. The gaps (credit risk, delinquency, lead, market) are gaps the payment processor handles or that don’t apply at SMB scale.
  3. Merchandising and Store Ops are where the missing operational schemas surface. The gaps in Merchandising (multi-location inventory, on-order, planogram, assortment-allocation) and Store Ops (vendor, staffing, multi-store) are exactly the gaps Canary Retail’s module spine closes — and they motivate the non-Differentiated-Five prefixes (C / D / F / J / S / P / L / W) in spine-13-prefix.

A useful corollary: an SMB doesn’t need a separate system for each gap. The Solex coverage shows that a single well-modeled operational app populates ~70% of the capability surface. The remaining 30% is either out-of-scope for SMB scale, processor- handled, or addressable by extending the same operational schema rather than building a separate system.

What Solex does NOT cover (gaps for Canary Retail modules)

Each gap maps to a Canary Retail module on the spine:

  • Vendor surfaceF (Finance) module: vendor management, invoice and PO flow, supplier compliance.
  • Multi-location inventoryD (Distribution) module: warehouse + store + transit tiers, store-to-store transfers.
  • On-order inventoryJ (Forecast & Order) module: PO / replenishment surface closes the open-order dimension.
  • Planogram / space managementS (Space, Range, Display) module: for physical-store customers Canary Retail also serves.
  • Vendor performance / complianceF (Finance) + vendor- side of Merchandising.
  • Promotion engineP (Pricing & Promotion) module: extends Solex’s promo-code stub into full promotion engine.
  • StaffingL (Labor & Workforce) module: employee surface, scheduling, time tracking.
  • Customer demographics beyond geoR (Customer) module extension when customer-data-platform integrations land.
  • Multi-domain work executionW (Work Execution) module: generalizes Chirp+Fox beyond LP to every domain in the spine.