{
  "reviewed": "2026-10-15",
  "method": "Directional capability comparison from the linked official product pages, not a hands-on vendor certification. Advertised means the cited product family explicitly describes the capability, subject to edition, region and plan. Integration / companion means a separate product, connector, or related module. Not established means the reviewed page does not establish the feature; it is not a claim of absence. Rupert Available means code exists, not independently verified live. This is a scoped set of relevant competitors, not an exhaustive inventory of the market. POS parity additions were reviewed against official vendor/manual/partner sources on 2026-10-15. Cell-specific sources and notes distinguish terminal time tracking from remote attendance, generic commission from the requested overlap formula, and offline checkout from offline inventory work. Unknown cells require vendor demonstration rather than implying absence.",
  "competitors": [
    {
      "id": "odoo",
      "name": "Odoo",
      "category": "ERP suite",
      "url": "https://www.odoo.com/page/all-apps",
      "caveat": "Broad modular ERP; Community/Enterprise and paid app differences need a scoped quote."
    },
    {
      "id": "erpnext",
      "name": "ERPNext + Frappe HR",
      "category": "Open-source ERP",
      "url": "https://erpnext.com",
      "caveat": "ERPNext core plus companion Frappe HR; module-specific deployment required."
    },
    {
      "id": "dolibarr",
      "name": "Dolibarr",
      "category": "Open-source ERP/CRM",
      "url": "https://www.dolibarr.org/",
      "caveat": "Modular self-hosted suite; connectors can require marketplace modules."
    },
    {
      "id": "netsuite",
      "name": "Oracle NetSuite",
      "category": "Enterprise ERP benchmark",
      "url": "https://www.netsuite.com/portal/products/erp.shtml",
      "caveat": "Cloud ERP with core platform, optional modules and user licensing; implementation required."
    },
    {
      "id": "zoho",
      "name": "Zoho Inventory",
      "category": "Inventory suite",
      "url": "https://www.zoho.com/inventory/features/",
      "caveat": "Inventory plus Zoho Books/CRM and other integrated products; limits vary by plan."
    },
    {
      "id": "cin7",
      "name": "Cin7",
      "category": "Inventory operations",
      "url": "https://www.cin7.com/",
      "caveat": "Core and Omni differ; manufacturing/automation/integrations depend on product and plan."
    },
    {
      "id": "inflow",
      "name": "inFlow",
      "category": "Inventory operations",
      "url": "https://www.inflowinventory.com/features",
      "caveat": "Inventory, purchasing, barcodes and B2B; paid add-ons and limits vary."
    },
    {
      "id": "katana",
      "name": "Katana",
      "category": "Inventory / manufacturing",
      "url": "https://katanamrp.com/",
      "caveat": "Commerce inventory and manufacturing; confirm selected manufacturing options."
    },
    {
      "id": "fishbowl",
      "name": "Fishbowl",
      "category": "Inventory / manufacturing",
      "url": "https://www.fishbowlinventory.com/",
      "caveat": "Warehouse and manufacturing product family; verify edition and integrations."
    },
    {
      "id": "brightpearl",
      "name": "Brightpearl",
      "category": "Retail operations",
      "url": "https://www.brightpearl.com/",
      "caveat": "Retail automation, inventory planning, accounting and integrations."
    },
    {
      "id": "linnworks",
      "name": "Linnworks",
      "category": "Multichannel operations",
      "url": "https://www.linnworks.com/",
      "caveat": "Listings, channel integrations, routing and shipping; not a full HR/finance suite."
    },
    {
      "id": "lightspeed",
      "name": "Lightspeed Retail",
      "category": "Retail POS",
      "url": "https://www.lightspeedhq.com/pos/retail/",
      "caveat": "Retail POS, suppliers, analytics and eCom; product/region and plan matter."
    },
    {
      "id": "square",
      "name": "Square for Retail",
      "category": "Retail POS",
      "url": "https://squareup.com/us/en/point-of-sale/retail",
      "caveat": "Retail workflows with separate Square Staff, Payroll, Loyalty and Marketing products."
    },
    {
      "id": "shopify",
      "name": "Shopify POS",
      "category": "Commerce / POS",
      "url": "https://www.shopify.com/pos",
      "caveat": "Commerce and POS, with app ecosystem extensions; POS Pro/plan restrictions apply."
    },
    {
      "id": "korona",
      "name": "KORONA POS",
      "category": "Retail POS benchmark",
      "url": "https://koronapos.com/pos-system/retail-pos-system/",
      "reviewed": "2026-10-15",
      "caveat": "Retail POS with KORONA Studio; inventory and reporting vary by package. Tips depend on supported processor/terminal configuration. POS time tracking is documented; remote employee punches and the exact overlapping-shift commission rule are not established.",
      "sources": [
        {
          "title": "Retail POS features",
          "url": "https://koronapos.com/pos-system/retail-pos-system/"
        },
        {
          "title": "Inventory, purchasing and barcodes",
          "url": "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/"
        },
        {
          "title": "Time tracking",
          "url": "https://manual.koronapos.com/working-times/"
        },
        {
          "title": "Commission setup",
          "url": "https://manual.koronapos.com/setting-up-commission/"
        },
        {
          "title": "Tips setup",
          "url": "https://manual.koronapos.com/tipping/"
        },
        {
          "title": "End-of-day statements",
          "url": "https://manual.koronapos.com/finish-day-end-of-day-statement/"
        }
      ]
    },
    {
      "id": "cova",
      "name": "Cova POS",
      "category": "Cannabis / hemp retail POS benchmark",
      "url": "https://www.covasoftware.com/pos",
      "reviewed": "2026-10-15",
      "caveat": "POS with Cova Pay and optional HR/payroll partners. Payment types, tipping, hardware and market availability depend on country/provider. KayaPush adds mobile attendance; the exact overlapping-shift commission rule is not established.",
      "sources": [
        {
          "title": "POS features and ecosystem",
          "url": "https://www.covasoftware.com/pos"
        },
        {
          "title": "Reporting and closeouts",
          "url": "https://www.covasoftware.com/cannabis-analytics-reporting"
        },
        {
          "title": "US payments and tipping",
          "url": "https://www.covasoftware.com/cannabis-payments-for-dispensaries"
        },
        {
          "title": "KayaPush integration",
          "url": "https://www.covasoftware.com/cannabis-pos-payroll-hr"
        },
        {
          "title": "Partner mobile attendance",
          "url": "https://www.kayapush.com/comparison/kayapush-vs-adp"
        }
      ]
    },
    {
      "id": "ctrax",
      "name": "C-Trax Serv",
      "category": "Cannabis / hemp retail POS benchmark",
      "url": "https://c-trax.com/",
      "reviewed": "2026-10-15",
      "caveat": "Public site advertises retail POS, multi-location operations, roles, analytics, tipping and PAX hardware support. Some integration descriptions are placeholders; require a working demonstration and written provider confirmation. A specific hardware support cutoff was not independently verified.",
      "sources": [
        {
          "title": "Official product and supported hardware overview",
          "url": "https://c-trax.com/"
        }
      ]
    },
    {
      "id": "swipesimple",
      "name": "SwipeSimple",
      "category": "Payments / compact POS benchmark",
      "url": "https://home.swipesimple.com/features",
      "reviewed": "2026-10-15",
      "caveat": "Payment acceptance, customer/item catalog, invoices and reporting; merchant provider, plan and hardware determine availability. Daily reports and batch reports use different cutoff rules. Rupert currently imports CSV sales; it does not operate a native SwipeSimple API adapter.",
      "sources": [
        {
          "title": "Product features",
          "url": "https://home.swipesimple.com/features"
        },
        {
          "title": "Tip and transaction settings",
          "url": "https://support.swipesimple.com/hc/en-us/articles/9479964055063-Account-Settings"
        },
        {
          "title": "Daily and batch reports",
          "url": "https://support.swipesimple.com/hc/en-us/articles/360011707534-Batch-Reports-Daily-Transaction-Reports"
        },
        {
          "title": "Reporting dashboard and access",
          "url": "https://support.swipesimple.com/hc/en-us/articles/9485658966167-SwipeSimple-Reporting-Dashboard-Overview"
        }
      ]
    }
  ],
  "capabilities": [
    {
      "name": "Multi-location inventory",
      "rupert": "Available",
      "scope": "Independent source/location mirrors with movements and bounded exception review; stored mirrors do not prove physical stock or complete source coverage.",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Advertised",
        "fishbowl": "Advertised",
        "brightpearl": "Advertised",
        "linnworks": "Advertised",
        "lightspeed": "Advertised",
        "square": "Advertised",
        "shopify": "Advertised",
        "netsuite": "Advertised",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Advertised",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ]
      }
    },
    {
      "name": "Orders and sales",
      "rupert": "Available",
      "scope": "Sales/order management",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Advertised",
        "fishbowl": "Advertised",
        "brightpearl": "Advertised",
        "linnworks": "Advertised",
        "lightspeed": "Advertised",
        "square": "Advertised",
        "shopify": "Advertised",
        "netsuite": "Advertised",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-pos-system/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://home.swipesimple.com/features"
        ]
      }
    },
    {
      "name": "Customer records",
      "rupert": "Available",
      "scope": "Directory and order history, not advanced CRM",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Advertised",
        "square": "Integration / companion",
        "shopify": "Advertised",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-pos-system/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-analytics-reporting"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://home.swipesimple.com/features"
        ]
      }
    },
    {
      "name": "POS checkout / payment capture",
      "rupert": "Partial",
      "scope": "C-Trax catalog checkout with cash/change, source tax checks, confirmed private tips and receipts; conditional Authorize.net hosted-browser capture/recovery and NMI sandbox-only testing. Live merchant acceptance, refunds/voids, discounts/split tenders and card-present terminals remain incomplete.",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Advertised",
        "square": "Advertised",
        "shopify": "Advertised",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Integration / companion",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-pos-system/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-payments-for-dispensaries"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://home.swipesimple.com/features"
        ]
      }
    },
    {
      "name": "Invoices and packing documents",
      "rupert": "Available",
      "scope": "Printable order documents",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "swipesimple": [
          "https://home.swipesimple.com/features"
        ]
      },
      "notes": {
        "swipesimple": "Invoices are advertised; packing documents were not established."
      }
    },
    {
      "name": "Fulfillment / shipping tracking",
      "rupert": "Available",
      "scope": "Tracking records and fulfillment states",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Advertised",
        "fishbowl": "Advertised",
        "brightpearl": "Advertised",
        "linnworks": "Advertised",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Integration / companion",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Vendor directory and purchasing",
      "rupert": "Available",
      "scope": "PO lifecycle and receiving",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Integration / companion",
        "inflow": "Advertised",
        "katana": "Integration / companion",
        "fishbowl": "Integration / companion",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Advertised",
        "square": "Advertised",
        "shopify": "Not established",
        "netsuite": "Advertised",
        "korona": "Advertised",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/"
        ]
      }
    },
    {
      "name": "Reorder advice / planning",
      "rupert": "Available",
      "scope": "SKU-based sales-pace estimates require identity and source review; exception diagnostics and exact variant recipes are separate from purchasing forecasts.",
      "phase": "0",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Advertised",
        "linnworks": "Not established",
        "lightspeed": "Advertised",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      }
    },
    {
      "name": "B2B portal / wholesale",
      "rupert": "Available",
      "scope": "Token-gated vendor catalog/cart/checkout",
      "phase": "0",
      "competitors": {
        "odoo": "Integration / companion",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Integration / companion",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Integration / companion",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Expenses and payable tracking",
      "rupert": "Available",
      "scope": "Local expenses and vendor-payment records",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Integration / companion",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Financial reports / analytics",
      "rupert": "Partial",
      "scope": "Operational reports; no full general ledger",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Advertised",
        "linnworks": "Advertised",
        "lightspeed": "Advertised",
        "square": "Advertised",
        "shopify": "Advertised",
        "netsuite": "Advertised",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/organization-report/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-analytics-reporting"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://support.swipesimple.com/hc/en-us/articles/9485658966167-SwipeSimple-Reporting-Dashboard-Overview"
        ]
      }
    },
    {
      "name": "HR employee records",
      "rupert": "Available",
      "scope": "Directory/departments/positions",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Integration / companion",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Integration / companion",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "cova": [
          "https://www.covasoftware.com/cannabis-pos-payroll-hr"
        ]
      }
    },
    {
      "name": "Timesheets / leave",
      "rupert": "Available",
      "scope": "Approval workflows and annual balances",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Integration / companion",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Integration / companion",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "cova": [
          "https://www.covasoftware.com/cannabis-pos-payroll-hr"
        ]
      },
      "notes": {
        "korona": "POS time tracking is documented; a full timesheet/leave workflow was not established."
      }
    },
    {
      "name": "Payroll",
      "rupert": "Partial",
      "scope": "Calculations/payslips only in Rupert",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Integration / companion",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Integration / companion",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "cova": [
          "https://www.covasoftware.com/cannabis-pos-payroll-hr"
        ]
      }
    },
    {
      "name": "Projects / tasks",
      "rupert": "Available",
      "scope": "Local project/task lifecycle",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Roles / access controls",
      "rupert": "Available",
      "scope": "Tenant and role permissions",
      "phase": "0",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Advertised",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Advertised",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-pos-system/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://support.swipesimple.com/hc/en-us/articles/9485658966167-SwipeSimple-Reporting-Dashboard-Overview"
        ]
      }
    },
    {
      "name": "External integrations / automation",
      "rupert": "Partial",
      "scope": "Native Shopify/C-Trax stock and C-Trax sales reads, SwipeSimple website/CSV evidence, separate reporting/deposit connectors, scoped read API and encrypted setup. Vendor entitlement and complete reconciliation require verification; a setup/read check does not establish checkout or terminal readiness.",
      "phase": "4",
      "competitors": {
        "odoo": "Integration / companion",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Advertised",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Advertised",
        "fishbowl": "Advertised",
        "brightpearl": "Advertised",
        "linnworks": "Advertised",
        "lightspeed": "Advertised",
        "square": "Integration / companion",
        "shopify": "Advertised",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Advertised",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      }
    },
    {
      "name": "Self-hosted ERP",
      "rupert": "Available",
      "scope": "Rupert runs in Incus; deployment model differs by vendor",
      "phase": "0",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Barcode scanning and labels",
      "rupert": "Partial",
      "scope": "Exact SKU and imported native barcode count scanning with replay/audit; C-Trax native-ID worksheets cover missing SKUs. Receiving, printer labels and camera/offline scanning remain planned.",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Advertised",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/",
          "https://manual.koronapos.com/generating-labels-printing/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      },
      "notes": {
        "cova": "Scan-to-order, mobile counts and scan-to-confirm are advertised; label template scope was not established."
      }
    },
    {
      "name": "Transfers / reservations / backorders",
      "rupert": "Partial",
      "scope": "Local source/location-specific holds and advisory ATP; transfers/backorders and platform-enforced allocation remain planned",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "notes": {
        "korona": "Stock transfers are advertised, but the full reservation/backorder workflow was not established.",
        "cova": "Multi-location transfers are advertised; the full reservation/backorder workflow was not established."
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-inventory-management-software/convenience-store-inventory-management-software/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      }
    },
    {
      "name": "Serial / lot / expiry tracking",
      "rupert": "Partial",
      "scope": "Raw-material lot receipts, integer-milligram movements and selected-lot sale-use audits; finished-good serials, expiry/recall management and broader traceability remain planned.",
      "phase": "2",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Carrier rates and label purchase",
      "rupert": "Planned",
      "scope": "Rupert tracking does not buy labels",
      "phase": "2",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Integration / companion",
        "linnworks": "Advertised",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Returns and exchanges",
      "rupert": "Planned",
      "scope": "Local refund records are not full reverse logistics",
      "phase": "2",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Advertised",
        "cin7": "Not established",
        "inflow": "Advertised",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Advertised",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Marketplace listings / channel expansion",
      "rupert": "Planned",
      "scope": "Additional channel adapters and listing lifecycle",
      "phase": "2",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Integration / companion",
        "dolibarr": "Not established",
        "zoho": "Integration / companion",
        "cin7": "Integration / companion",
        "inflow": "Integration / companion",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Integration / companion",
        "linnworks": "Advertised",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Integration / companion",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Integration / companion",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      }
    },
    {
      "name": "Double-entry accounting",
      "rupert": "Planned",
      "scope": "Rupert account tree is not a posting engine",
      "phase": "3",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Integration / companion",
        "cin7": "Integration / companion",
        "inflow": "Integration / companion",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Advertised",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Bank reconciliation",
      "rupert": "Planned",
      "scope": "Statement matching and review",
      "phase": "3",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Advertised",
        "zoho": "Integration / companion",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "BOM / assembly / manufacturing",
      "rupert": "Planned",
      "scope": "Components, production yield and cost posting",
      "phase": "4",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Advertised",
        "dolibarr": "Advertised",
        "zoho": "Not established",
        "cin7": "Advertised",
        "inflow": "Advertised",
        "katana": "Advertised",
        "fishbowl": "Advertised",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Marketing / loyalty",
      "rupert": "Planned",
      "scope": "Consent, segments and approved outbound campaigns",
      "phase": "4",
      "competitors": {
        "odoo": "Advertised",
        "erpnext": "Not established",
        "dolibarr": "Advertised",
        "zoho": "Integration / companion",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Integration / companion",
        "square": "Integration / companion",
        "shopify": "Integration / companion",
        "netsuite": "Not established",
        "korona": "Advertised",
        "cova": "Integration / companion",
        "ctrax": "Advertised",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://koronapos.com/pos-system/retail-pos-system/"
        ],
        "cova": [
          "https://www.covasoftware.com/pos"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ]
      }
    },
    {
      "name": "Open-book / profit-share ledger",
      "rupert": "Planned",
      "scope": "Business-specific allocation and distribution rules",
      "phase": "3",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Offline mobile operations",
      "rupert": "Planned",
      "scope": "Conflict-aware receive/count queue; mobile-friendly is not offline",
      "phase": "4",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "notes": {
        "cova": "Offline checkout is advertised; this row specifically asks for an offline receive/count queue, which was not established."
      },
      "sources": {
        "cova": [
          "https://www.covasoftware.com/pos"
        ]
      }
    },
    {
      "name": "Multi-company consolidation",
      "rupert": "Planned",
      "scope": "Beyond tenant isolation",
      "phase": "4",
      "competitors": {
        "odoo": "Integration / companion",
        "erpnext": "Advertised",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Forecast vs actual / budgets",
      "rupert": "Planned",
      "scope": "Financial budgets and versioned inventory forecasts",
      "phase": "3",
      "competitors": {
        "odoo": "Integration / companion",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Advertised",
        "linnworks": "Not established",
        "lightspeed": "Advertised",
        "square": "Not established",
        "shopify": "Not established",
        "netsuite": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      }
    },
    {
      "name": "Remote employee clock-in/out",
      "rupert": "Available",
      "scope": "Linked workers clock remotely and request corrections; reviewer approval and actor/history retained",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Integration / companion",
        "shopify": "Integration / companion",
        "korona": "Not established",
        "cova": "Integration / companion",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/working-times/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-pos-payroll-hr",
          "https://www.kayapush.com/comparison/kayapush-vs-adp"
        ],
        "square": [
          "https://squareup.com/help/us/en/article/8395-clock-in-and-out-for-team-members"
        ],
        "shopify": [
          "https://apps.shopify.com/staffy",
          "https://help.easyteam.io/en/article/easyteam-pricing-plans-and-billing-1p4sbaa/"
        ]
      },
      "notes": {
        "korona": "Terminal clock-in/out is documented; remote employee punches are not established.",
        "cova": "KayaPush partner supports mobile attendance/geotracking; confirm permitted remote locations and purchased plan.",
        "square": "Square Team app supports punches; Square Shifts/eligible plan and employer settings apply.",
        "shopify": "Easyteam companion app advertises mobile/web time clock and reviewed timesheets; confirm employer location rules."
      }
    },
    {
      "name": "Overlapping-shift 1% per-person commission",
      "rupert": "Partial",
      "scope": "Independent 1% per-worker preview over eligible imported sales/shift intervals; final payroll policy and settlement remain pending",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/setting-up-commission/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-pos-payroll-hr"
        ]
      },
      "notes": {
        "korona": "General salesperson/cashier/team commissions are documented, but this exact automatic overlap rule is not established.",
        "cova": "Sales/workforce integration is documented, but this exact commission allocation is not established.",
        "rupert": "Read-only per-worker overlap preview is implemented; final compensation policy and payouts remain pending.",
        "ctrax": "The exact per-person shift-overlap allocation was not established in the reviewed official product material.",
        "swipesimple": "Sales-by-user reports are documented; the exact shift-overlap allocation was not established."
      }
    },
    {
      "name": "Customer tipping at checkout",
      "rupert": "Partial",
      "scope": "Private paired no-tip/percentage/custom confirmation, frozen into implemented cash and conditional hosted-card receipts. Terminal tipping, tip reversal/refunds and real merchant acceptance remain pending.",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Advertised",
        "shopify": "Advertised",
        "korona": "Advertised",
        "cova": "Integration / companion",
        "ctrax": "Advertised",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/tipping/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-payments-for-dispensaries"
        ],
        "square": [
          "https://squareup.com/help/us/en/article/8631-set-up-and-customize-tipping"
        ],
        "shopify": [
          "https://help.shopify.com/en/manual/sell-in-person/shopify-pos/tips"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ],
        "swipesimple": [
          "https://support.swipesimple.com/hc/en-us/articles/9479964055063-Account-Settings"
        ]
      },
      "notes": {
        "korona": "Processor/terminal activation and tip account configuration are required.",
        "cova": "Cova Pay US advertises built-in tipping; confirm selected payment partner and hardware.",
        "shopify": "Supported card readers and eligible credit payments; this does not establish cash-tip collection.",
        "rupert": "Source POS tipping is separate from a native Rupert checkout prompt."
      }
    },
    {
      "name": "Daily cash/card register summary",
      "rupert": "Partial",
      "scope": "Canonical event-dated tender/refund/net evidence plus native C-Trax day/register controls and local review. Missing/open/cross-day cash remains unknown; complete refunds/fees, source closing and bank settlement remain separate gates.",
      "phase": "0",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Advertised",
        "shopify": "Advertised",
        "korona": "Advertised",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Advertised"
      },
      "sources": {
        "korona": [
          "https://manual.koronapos.com/finish-day-end-of-day-statement/",
          "https://manual.koronapos.com/organization-report/"
        ],
        "cova": [
          "https://www.covasoftware.com/cannabis-analytics-reporting",
          "https://www.covasoftware.com/cannabis-payments-for-dispensaries"
        ],
        "square": [
          "https://squareup.com/help/us/en/article/5072-summaries-and-reports-from-the-online-dashboard"
        ],
        "shopify": [
          "https://help.shopify.com/en/manual/sell-in-person/shopify-pos/cash-register-management/register-sessions-in-shopify-pos"
        ],
        "swipesimple": [
          "https://support.swipesimple.com/hc/en-us/articles/360011707534-Batch-Reports-Daily-Transaction-Reports"
        ],
        "ctrax": [
          "https://c-trax.com/"
        ]
      },
      "notes": {
        "korona": "Business-day register closeout and payment-method totals are documented.",
        "cova": "Daily/closeout analytics and payment reconciliation are advertised; an exact daily cash/card split per register was not established in accessible public material.",
        "square": "Sales/payment reports support day and device filters; validate required register grouping.",
        "shopify": "Register sessions include cash activity and all payment types; subscription/permission requirements apply.",
        "ctrax": "Custom sales/associate analytics are advertised; exact daily cash/card register summaries are not established.",
        "swipesimple": "Full daily reports include cash/card details; batch cutoffs and merchant-account grouping vary by provider."
      }
    },
    {
      "name": "Exact variant-to-material gram recipes",
      "rupert": "Partial",
      "scope": "Immutable effective Shopify-variant recipes and reviewed one-time whole-line milligram deductions against a selected lot, with shortage checks and receipt CSV. Automatic Sheets/refund reconciliation and split-lot or multi-material recipes remain planned.",
      "phase": "1",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "notes": {
        "rupert": "Recipes use exact source variant/order/line IDs, not shared SKUs. The effective basis is imported order creation time; operator verification remains required.",
        "comparison": "This exact Shopify-variant, gram and reviewed-lot contract was not established for other vendors in this review. General BOM or inventory advertising is separate; unknown does not mean absent."
      }
    },
    {
      "name": "Inventory exception review",
      "rupert": "Available",
      "scope": "Bounded source/location queue for stored stock and identity issues, local hold shortages, incomplete source orders, pending counts and depleted lots. Read-only review with explicit coverage limits.",
      "phase": "0",
      "competitors": {
        "odoo": "Not established",
        "erpnext": "Not established",
        "dolibarr": "Not established",
        "netsuite": "Not established",
        "zoho": "Not established",
        "cin7": "Not established",
        "inflow": "Not established",
        "katana": "Not established",
        "fishbowl": "Not established",
        "brightpearl": "Not established",
        "linnworks": "Not established",
        "lightspeed": "Not established",
        "square": "Not established",
        "shopify": "Not established",
        "korona": "Not established",
        "cova": "Not established",
        "ctrax": "Not established",
        "swipesimple": "Not established"
      },
      "notes": {
        "comparison": "Equivalent issue types, source-identity safeguards and bounded coverage were not verified for other vendors in this review; this is not a claim that they lack exception tools.",
        "rupert": "Legacy mirror clamping/fallback and count-location aggregation require source/physical verification; the queue cannot reconstruct lost provenance."
      }
    }
  ],
  "integration_candidates": [
    {
      "id": "valmar",
      "name": "Valmar Merchant Services",
      "category": "Reported payment processor / gateway preparation",
      "url": "https://vlmr.com/merchant-services/",
      "reviewed": "2026-10-15",
      "scope": "Valmar is the business-reported processor. Rupert supports operator-selected Authorize.net credential or NMI profile checks; the actual gateway serving this merchant account has not been confirmed.",
      "caveat": "Processor, gateway, terminal and POS are separate roles. API credentials, merchant approval and terminal compatibility must be confirmed for the actual account. Rupert setup checks do not authorize, capture or refund payments.",
      "sources": [
        {
          "title": "Merchant services and gateway overview",
          "url": "https://vlmr.com/merchant-services/"
        },
        {
          "title": "Official gateway knowledge base",
          "url": "https://vlmr.com/knowledge-base/"
        }
      ]
    },
    {
      "id": "easyteam",
      "name": "Easyteam",
      "category": "Shopify workforce companion candidate",
      "url": "https://apps.shopify.com/staffy",
      "reviewed": "2026-10-15",
      "scope": "Official app/help material describes POS/mobile/web punches, reviewed timesheets, commission plans and payroll integrations.",
      "caveat": "Companion candidate, not an ERP competitor. Generic commission plans and single-staff sales attribution do not establish the requested 1% for every worker clocked in during each sale. Confirm exact allocation before selection.",
      "sources": [
        {
          "title": "Official Shopify app listing",
          "url": "https://apps.shopify.com/staffy"
        },
        {
          "title": "Plan features and time-clock modes",
          "url": "https://help.easyteam.io/en/article/easyteam-pricing-plans-and-billing-1p4sbaa/"
        },
        {
          "title": "Sales attribution behavior",
          "url": "https://help.easyteam.io/en/article/how-to-attribute-a-sale-to-a-staff-member-usbxrb/"
        }
      ]
    }
  ]
}
