InFinOwl connector
InFinOwl is TechTur's clothing brand: one business, a storefront (Next.js) and a NestJS API with size/colour variants and an Inventory table with reserved counts.
Status: POS side implemented and tested. The InFinOwl mapping is in examples/infinowl-connector/ and unit-tested against InFinOwl's schema. Installing it in the InFinOwl API (a NestJS module on a feature branch) and approving the live application are pending.
Shape
InFinOwl is a single merchant, so the mapping model is one_business_per_platform: one POS business (InFinOwl's shop and any physical stand) linked once by the InFinOwl owner via launch ticket with businessRole: "owner". InFinOwl staff with SUPER_ADMIN or MANAGER map to Business Administrator/Store Manager.
Catalogue (InFinOwl owns it)
| InFinOwl | POS |
|---|---|
Product.id |
product externalId |
ProductVariant.id |
variant externalId; name = "size / color"; attributes { size, colour } |
ProductVariant.sku / Product.sku |
sku |
ProductVariant.price ?? Product.price |
price |
first ProductImage.url |
imageUrl |
first ProductCategory → Category |
category |
status === "ACTIVE" |
isActive |
| product without variants | one variant with externalId = "product:" + Product.id |
Stock (POS owns it)
POS becomes the stock authority across the website and any physical sales. InFinOwl's checkout submits orders to POS (paid orders deduct, pending payments reserve) and updates its Inventory.quantity from inventory.changed, so online and in-person sales never oversell or double-deduct. Until the InFinOwl side is installed, InFinOwl remains authoritative and POS should not be used for its stock.
Orders
Order.id → externalRef; PAID with the Payment.providerRef → payment; PENDING → unpaid (reserve); CANCELLED before payment → cancel; SHIPPED/DELIVERED → fulfilment.