How all the pieces of QIIUB connect together
How data moves from the store to the cloud and back
Where the data lives and how it stays isolated
Large groups like a pharmacy cooperative can be split across multiple databases for performance. Each pharmacy's data stays isolated by MerchantId. The system routes to the correct database automatically.
One platform, 3 verticals — all 26 modules included for every merchant, no per-module licensing
Who talks to whom and how
| From | To | Channel | What For |
|---|---|---|---|
| Admin Portal | Cloud API | HTTPS | Partner management, merchant boarding, device registry, sync monitoring (/v1/platform/*, /v1/partner/*) |
| Merchant Portal | Cloud API | HTTPS | Products, sales, inventory, customers, employees, reports, settings (/v1/*) |
| Mobile App | Cloud API | HTTPS | PO approval, receiving, stock counts |
| POS Sync Service | Azure IoT Hub | IoT Hub | Receive "sync now" commands, report status, get config updates |
| POS Sync Service | Cloud API | HTTPS | Push sales data, pull product/price updates (bulk transfers) |
| POS Application | Local SQLite | Local | All POS operations (sales, lookups). Never touches the network. |
| POS Sync Service | Local SQLite | Local | Read pending sales to push, write incoming updates from cloud |
| Cloud API | Central DB + Merchant DB(s) | Internal | All database operations. API is the only thing that touches the cloud databases. |
Where familiar RMH concepts live in the new platform
| RMH Concept | QIIUB Equivalent | What Changed | |
|---|---|---|---|
| Item (85 columns) | → | Product + ProductBarcode + ProductPrice | One monolith table split into focused entities. Prices support multiple tiers. Barcodes are a separate list (unlimited per product). |
| ItemClass + Dimension | → | ProductOption + ProductVariant | Matrix items (Size/Color) are now proper option sets with variant combinations. No more Title1/Title2/Title3 columns. |
| Alias | → | ProductBarcode | Alternate barcodes stored in the same barcode table. Type auto-detected. |
| Department + Category | → | Category (hierarchical) | Both merged into a single parent-child category tree. Unlimited depth. |
| Supplier | → | Supplier + ProductSupplier | Mostly the same. Products can now have multiple suppliers (junction table). |
| Customer (63 columns) | → | Customer + CustomerAddress | Address split out. PriceLevel (0-3) maps to a PriceTier. Lifetime stats tracked separately. |
| Transaction + TransactionEntry + TaxEntry | → | Sale + SaleLineItem + SaleTax | Same concept, cleaner structure. Tax captured per line. TransactionType determines SaleType. |
| TransactionHold | → | Sale (Status = Held) | No separate hold table. A held transaction is a Sale with Status=Held. If cancelled, the Sale row is soft-deleted (IsDeleted=true) — the Sale number is consumed, same as RMH consuming a TransactionHold number on cancel. |
| TenderEntry | → | SalePayment | TenderType maps to a PaymentMethod lookup. Split-tender supported natively. |
| Batch (38 columns) | → | Shift + ShiftCount | Batch = Shift. TenderDeclaration columns exploded into ShiftCount rows per payment method. |
| Cashier | → | Employee + EmployeeRole | Cashiers and SalesReps merged into one Employee entity with role-based assignment. |
| SalesRep | → | Employee + EmployeeRole | Same person can have multiple roles (Cashier + SalesRep + Manager). |
| Register | → | Terminal | Same concept. Register.ID = Terminal.Code. |
| Tax (74 columns!) | → | TaxGroup + TaxRate | One row with 8 embedded rate slots normalized into a TaxGroup with up to 8 TaxRate rows. |
| Store | → | Location | Same concept, new name. Supports multi-location natively. |
| PurchaseOrder | → | PurchaseOrder + PurchaseOrderLine | Same flow but with full Receipt → Distribution pipeline. Mobile approval. |
| Quantity (on Item) | → | LocationProduct.QuantityOnHand | Stock tracked per location, not on the item. Movements create an audit trail. |
| RMH Central Manager + Store Manager | → | Admin Portal + Merchant Portal | Both desktop apps replaced by two browser-based portals. Admin Portal (qiiub-admin) for partner/merchant boarding and infrastructure. Merchant Portal (qiiub-portal) for products, sales, inventory. No VPN needed. Accessible from anywhere. |