> ## Documentation Index
> Fetch the complete documentation index at: https://help.clinikehr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run the online store

> Publish products from hospital inventory to a branded storefront, take orders online, and keep one stock figure across both.

export const StillStuck = ({topic}) => <div className="ck-callout ck-callout--note" role="note">
    <p className="ck-callout__body">
      <strong>Still stuck{topic ? ` with ${topic}` : ''}?</strong>{' '}
      Check <a href="/platform/help/troubleshooting">Troubleshooting</a> first —
      it covers the failures we see most often. If that does not resolve it,{' '}
      <a href="/platform/help/contact-support">contact support</a> and include
      your workspace name and the time the problem happened, so we can find the
      matching entry in your audit log.
    </p>
  </div>;

export const TaskHeader = ({before, time, after}) => <div className="ck-task">
    {before ? <div className="ck-task__cell">
        <div className="ck-task__title">Before you start</div>
        <p className="ck-task__body">{before}</p>
      </div> : null}

    {time ? <div className="ck-task__cell">
        <div className="ck-task__title">Takes about</div>
        <p className="ck-task__body">{time}</p>
      </div> : null}

    {after ? <div className="ck-task__cell">
        <div className="ck-task__title">When you're done</div>
        <p className="ck-task__body">{after}</p>
      </div> : null}
  </div>;

export const Path = ({steps = []}) => <span className="ck-path">
    {steps.map((s, i) => <span key={i} className="ck-path__step">
        {i > 0 ? <span className="ck-path__sep" aria-hidden="true">
            ›
          </span> : null}
        {s}
      </span>)}
  </span>;

export const Availability = ({editions = ['all'], plans, roles, note}) => {
  const list = editions.includes('all') ? ['clinic', 'pharmacy', 'lims'] : editions;
  return <div className="ck-avail" role="note" aria-label="Feature availability">
      <span className="ck-avail__label">Available in</span>

      {list.map(e => <span key={e} className={`ck-pill ck-pill--${e}`}>
          {EDITION_LABELS[e] || e}
        </span>)}

      {plans ? <span className="ck-avail__label">Plan</span> : null}
      {plans ? <span className="ck-pill ck-pill--plan">{plans}</span> : null}

      {roles ? <span className="ck-avail__label">Who</span> : null}
      {roles ? <span className="ck-pill ck-pill--role">{roles}</span> : null}

      {note ? <span className="ck-avail__note">{note}</span> : null}
    </div>;
};

<Availability editions={['clinic']} plans="Enterprise" roles="Owners and managers" />

The store sells what your hospital already holds in stock — supplements, dressings, devices, home-care consumables — at a public address patients reach without signing in. Stock and cost stay in inventory; the store is the shop window.

<Path steps={['Sidebar', 'Supply Chain', 'Store']} />

<TaskHeader before="Inventory items to sell, and a connected payout account" time="15 minutes for your first product and a published page" after="A live storefront taking orders, with stock drawn from inventory" />

## Before you start

The store needs a payout account that can accept charges, exactly as memberships do. Without one you get **Connect payouts to sell products** and the create buttons are disabled. Connect it under **Settings → Online Payments** — see [Online payments](/hospital/settings/online-payments).

## What you're looking at

The heading reads **Store** — "Sell physical and digital products online. Stock draws on your inventory; payments settle to your connected account (1.9% fee)."

Along the top sit **Collections** and **Discounts** (both open as dialogs, not tabs), **Share store**, **Sell from inventory** and **New product**.

Three tabs:

| Tab              | What it holds                                                                |
| ---------------- | ---------------------------------------------------------------------------- |
| **Products (n)** | Everything listed, with a **\{active} / \{limit} products** usage chip       |
| **Orders (n)**   | What customers have bought                                                   |
| **Overview**     | **Revenue (paid)**, **Orders**, **Avg. order value** and **Active products** |

**Products** searches with "Search products by name, type, or SKU…" and filters by **All statuses**, **Active**, **Draft** or **Archived**. Each card shows the title, **Physical** or **Digital**, its status, the price range and how many variants it has.

**Orders** searches by order number or customer and filters by status — **Paid**, **Pending**, **Payment failed**, **Refunded**, **Cancelled**, **Abandoned** — and by fulfilment: **Unfulfilled**, **Partial**, **Fulfilled**. The columns are **Order**, **Customer**, **Status**, **Fulfillment**, **Total** and **Date**.

**Empty states.** With nothing listed: **No products yet** and "Add a product, or publish an existing inventory item to your store. Drafts stay hidden until you publish them." With nothing sold: **No orders yet** and "Orders placed on your storefront will appear here."

## List something for sale

The fast route is usually the right one.

<Steps>
  <Step title="Publish straight from stock">
    Select **Sell from inventory** — "Publish an existing inventory item as a store product. We'll create a draft you can finish editing." Search with "Search inventory by name or SKU…", then select **Sell** on the item. You get a draft product with one variant, already linked to the stock it came from.
  </Step>

  <Step title="Open the product to finish it">
    The editor is headed "Details, variants, and photos. Stock + cost come from the linked inventory item." Give it a **Title** and a **Description** a patient would understand, and assign a **Collection** if you group your shelf.
  </Step>

  <Step title="Save once, then add photos">
    Photos and extra variants attach to a product that exists — before the first save the panel reads "Save the product to add photos."
  </Step>

  <Step title="Add the variants you sell">
    Under **Variants**, select **Add variant** and name it — "Variant name (e.g. 100ml)". The first one is called **Default**; rename it if you sell more than one size. Link each variant to its **Inventory item (stock source)**, which lists each item with its SKU and on-hand figure.
  </Step>

  <Step title="Publish it">
    Set **Status** to **Active (published)** — a product left at **Draft** stays hidden — and save.
  </Step>
</Steps>

<Note>
  **Stock and cost are not editable in the store.** Both come from the linked inventory item, so there is one number for how many you have, wherever anyone looks. Change stock in [Inventory](/hospital/supply/inventory), not here.
</Note>

## Publish the storefront

<Path steps={['Sidebar', 'Settings', 'Store Page']} />

<Steps>
  <Step title="Claim your address">
    Your store address is checked for format, for reserved words, and for uniqueness across every ClinikEHR workspace — so a plausible name may already be taken.
  </Step>

  <Step title="Write the shopfront">
    The announcement bar, headline, subheadline, intro and footer note are the page copy. The success title and message are what a customer sees after ordering — say what happens next and when they can collect.
  </Step>

  <Step title="Style it and set tax">
    Choose the accent colour, theme, layout and featured products, and set the default tax rate and label so new products start correct rather than needing fixing one at a time.
  </Step>

  <Step title="Go live">
    Flip the switch from **Off** to **Live** and select **Save**. The page is not public until you do both.
  </Step>
</Steps>

See [Store page settings](/hospital/settings/store-page) for the full tab.

## Who can do this

**Role** decides whether the store opens: **owners and managers** manage it. An owner also controls which roles see the **Supply Chain** group at all under **Settings → Role Navigation**.

**Permission** decides very little here — the store is gated by role, plan and payout connection rather than by the per-person toggles used elsewhere:

| Action                                    | Who                       | Also needs                       |
| ----------------------------------------- | ------------------------- | -------------------------------- |
| Open Store                                | Owners and managers       | The Enterprise plan              |
| **New product** / **Sell from inventory** | Owners and managers       | A connected payout account       |
| Publish or archive a product              | Owners and managers       | —                                |
| Change the stock figure behind a product  | Stock staff, in Inventory | Not editable in the store at all |
| Read **Revenue (paid)** on **Overview**   | Owners and managers       | —                                |

Enforcement elsewhere in the product is **opt-in per person** — a colleague never saved in the permissions sheet is unrestricted, and the sheet warns **"Saving starts enforcing"** — but the owner-and-manager rule here applies regardless. A **denied action is recorded**; an allowed one is not.

## What your plan allows

Every Enterprise hospital has the top tier, but the ladder matters if a subscription ever lapses:

| Plan           | Active products      | Also                                                             |
| -------------- | -------------------- | ---------------------------------------------------------------- |
| Free           | No storefront at all | —                                                                |
| Starter        | 100                  | —                                                                |
| Essential      | 1,000                | —                                                                |
| Team           | Unlimited            | Digital products, embeddable storefront, abandoned-cart recovery |
| **Enterprise** | **Unlimited**        | **Same as Team**                                                 |

## Check it worked

* The product is under **Products** and counts toward **Active products** on **Overview**.
* Your store address loads in a private browser window with the product and price visible.
* A test order appears under **Orders**, and the linked inventory item's on-hand figure has dropped.

## Common issues

<AccordionGroup>
  <Accordion title="I cannot edit the stock level or the cost">
    That is deliberate. Both come from the linked inventory item — change them in [Inventory](/hospital/supply/inventory).
  </Accordion>

  <Accordion title="My variant did not save">
    Variants save individually, and only after the product itself exists. Save the product first, then each variant in turn.
  </Accordion>

  <Accordion title="I cannot upload a photo or a download file">
    "Save the product first, then add photos." The same applies to a downloadable file — the product must exist before anything attaches to it.
  </Accordion>

  <Accordion title="The store address is refused">
    It is checked for format, reserved words and uniqueness across all ClinikEHR workspaces. Choose something more specific to your hospital.
  </Accordion>

  <Accordion title="The page is not public">
    The switch must read **Live** and you must select **Save**. Setting one without the other leaves the store off.
  </Accordion>

  <Accordion title="An order came in for something out of stock">
    The store sells against inventory, so the inventory figure was wrong. Reconcile with a stock count — see [Stock counts](/pharmacy/inventory/stock-counts).
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Is the store the same as the pharmacy counter?">
    No. The counter is a face-to-face till for people in the building — see [Pharmacy POS](/hospital/pharmacy/pos). The store is a public web shop. Both draw on the same inventory.
  </Accordion>

  <Accordion title="Can I sell prescription medicines?">
    No. The store is for products a patient may buy without a script. Anything requiring dispensing goes through the pharmacy unit.
  </Accordion>

  <Accordion title="Do store orders appear in Billing?">
    No. Orders live under the store's **Orders** tab. Billed care lives in [Billing](/hospital/revenue/billing).
  </Accordion>

  <Accordion title="Can I run the shop on my own website?">
    Yes — embedding is available on Team and Enterprise. A custom address such as `shop.yourhospital.example` is too; see [Custom domains](/platform/settings/custom-domain).
  </Accordion>

  <Accordion title="What are Collections and Discounts?">
    Collections group products on the shopfront; discounts create codes customers apply at checkout. Both open as dialogs from the header rather than as tabs.
  </Accordion>
</AccordionGroup>

<StillStuck topic="the online store" />
