
From retyping every order to an event-driven pipeline.0101COVER · LIKE A FEATUREA good story sells better than a dry spec sheet. Write it up like a magazine feature so it earns attention, and attention sells the product next to it.The rule: editorial outsells a spec sheet
Partisan & Co runs three Shopify stores in South Africa: K-Swiss, Palladium, and its own multi-brand shop. The business is managed in Sage Intacct, and there is no supported connector between the two. Stock and prices were maintained by hand, and every order, return and exchange was rekeyed into Sage afterwards.
Inventory runs outbound. Sage is read over its XML gateway, warehouse by warehouse, and stock is resolved per SKU across tiers of warehouses: the first tier holding uncommitted stock wins, and where no tier holds any, the last tier's total stands. Open reservations are subtracted so the storefront does not sell what is already committed. The Shopify side is read through a bulk operations export rather than paged queries, which keeps a full catalogue to a single job. Sage's retail price list is VAT-exclusive while the stores are configured tax-inclusive, so prices are converted in transit.
SKUs that exist in Sage but not in Shopify are created. Size options are bound to Shopify's standard taxonomy metafields, which means resolving each size token to a real taxonomy value, normalising the naming shape the product already uses, sorting the values numerically instead of lexically, and publishing the result to the POS channel.
Documents run inbound. Intacct Smart Events POST a document ID to a function URL, and the handler dispatches on its prefix: a sale becomes an order entry invoice, a return becomes a credit note, an exchange nets the two, and a Lucca sales invoice is mirrored as a supplier invoice on the Partisan entity, so stock moving between the group companies reconciles without a manual capture. Writes are idempotent and keyed on the source document, so a replayed event cannot post twice, and every change is dry-run against live records into a CSV diff before it is allowed to write.
Each store runs the same engine, deployed separately as an arm64 container image with its configuration in environment variables, and carries only the handlers it needs. The Partisan store posts all four document types; Palladium runs the three that apply to it, and K-Swiss handles sales and returns only. When a document cannot be posted, the handler logs it, sends an alert, and creates nothing, so the warehouse captures it as it did before.
“Writes are keyed on the source document, so a replayed event cannot post twice.”
