> ## 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.

# Returns, voids and amendments

> Reverse a whole sale, void or discount part of one, put stock back into its lots, and settle what a customer still owes.

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={['pharmacy']} plans="All plans" roles="'Refund or void a sale' — a cashier does not have it by default" />

Everything after the sale happens on the **Sales** page: reversing a whole transaction, voiding the two packs a customer brought back, discounting what they kept, and collecting what is still owed.

<Path steps={['Sidebar', 'Sales', 'Recent Sales']} />

<TaskHeader before="The completed sale, and the 'Refund or void a sale' permission" time="Under a minute" after="A corrected sale, the money accounted for, and stock back in its exact lots if you restocked" />

## Find the sale

The **Sales Dashboard** — "Track and analyze your pharmacy sales performance" — opens on **Overview**. Go to **Recent Sales** for the **Sales History** table, listing **Sale #**, **Date & Time**, **Customer**, **Items**, **Payment**, **Amount** and **Status**.

* Narrow the period with the select: **Today**, **Last 7 Days**, **This Month** or **All Time**.
* Filter by state: **All Status**, **Completed**, **Pending**, **Cancelled**, **Refunded**.
* Search or scan into "Search or scan receipt..." — scanning the barcode on the customer's receipt opens their sale directly.
* A sale taken during an outage carries an **Offline** badge.

## Amend part of a sale

Use this when the customer brings some of it back, or keeps everything and you agree a reduction.

<Steps>
  <Step title="Open Edit sale">
    On the row's **⋯** menu, select **Edit sale** — "\{sale number} · void returned units or discount what the customer keeps". It is offered on completed sales only.
  </Step>

  <Step title="Void the units that came back">
    Each line offers **Void units (max \{n})**, where the maximum is what has not already been given back. A line that is done reads **(none left)**, and the sheet shows **Already given back: \{amount}** for anything previously refunded.
  </Step>

  <Step title="Or discount what they keep">
    **Discount (max \{amount})** takes money off without returning goods, with presets for **10%**, **25%**, **50%** and **All**. The sheet shows the equivalent percentage as you type.
  </Step>

  <Step title="Decide whether the goods go back on the shelf">
    Tick **Restock the voided units** only when the stock is genuinely resaleable — "Only after inspecting the goods — they go back into the exact lots they left."

    Leave it unticked and the sheet is explicit: "Voided units will NOT return to stock. Tick restock above if the goods came back."
  </Step>

  <Step title="Say why">
    **Reason** is free text — "e.g. damaged outer packaging, customer returned 2 packs…". Write what you would want to read in three months when the figures are queried.
  </Step>

  <Step title="Apply">
    Check the summary — **Voiding \{n} unit(s)**, **Discount**, **Back to customer** — then select **Apply changes**.
  </Step>
</Steps>

## Reverse the whole sale

<Steps>
  <Step title="Open Return / void all">
    On the row's **⋯** menu, select **Return / void all**. The dialog is headed **Return sale \{sale number}**: "This reverses the full sale. The refund is netted out of your sales reports; returns are only allowed inside your configured return window."
  </Step>

  <Step title="Give a reason">
    "e.g. wrong item, damaged packaging, customer changed mind…".
  </Step>

  <Step title="Inspect, then decide on restocking">
    **Restock inventory** — "Only tick this after inspecting the goods — returned stock goes back into its exact lots." You must also confirm **I have inspected the returned goods and confirm this refund**; without it the dialog says "Confirm inspection before restocking."
  </Step>

  <Step title="Confirm">
    Select **Confirm return**. The toast reads **Sale \{number} returned · stock restored** when you restocked.
  </Step>
</Steps>

<Warning>
  Restocking puts the goods back into the exact lots they came out of, and they will be dispensed to the next customer. Only tick it after you have physically inspected what came back — cold-chain items, opened packs and anything that left the premises unaccounted for should never go back on the shelf.
</Warning>

## Money still owed: the Debtors sheet

Part payments create a balance, and **Debtors** at the top of the Sales page is where you clear them — "Sales with an outstanding balance. Record a payment when the customer settles up."

* **Total outstanding** heads the sheet when anything is owed. When nothing is, it reads "No outstanding balances — everyone's paid up."
* Each row shows **Paid \{amount} of \{total}**, the phone number, and the **Balance**. A registered customer with wallet funds also shows **\{amount} on account**.
* **Record payment** takes the money now — enter the **Amount** and choose the **Method**: **Cash**, **Card**, **Bank transfer** or **Mobile money**.
* **Settle from account** debits the customer's wallet and pays the sale in one step, when they have the funds and you are online. See [Customer wallets](/pharmacy/customers/wallet).

Paying more than is owed is refused rather than absorbed — put the extra on the customer's account instead, so it stays theirs.

## Check it worked

* The sale's **Status** in **Sales History** becomes **Refunded** after a full return; an amended sale keeps its number and shows the reduced amount.
* If you restocked, the item's quantity in **Inventory** goes back up, into the same lots and expiry dates it left.
* A settled debt disappears from **Debtors**, with a toast of **Paid in full** or **Payment recorded — \{amount} still due**.

## If something goes wrong

<AccordionGroup>
  <Accordion title="'Needs authorisation — amending a completed sale is reserved for your Pharmacist-in-Charge.'">
    You do not have **Refund or void a sale**. It is deliberately separate from selling, so the person who took the money is not the person who reverses it. See [Staff permissions](/platform/team/permissions).
  </Accordion>

  <Accordion title="The return is refused as outside the window">
    Returns are time-limited, and the message names your window — for example, "outside your 48-hour return window". The limit is a setting, not a fixed rule; an owner or manager can review it.
  </Accordion>

  <Accordion title="Edit sale is not on the menu">
    It appears on **Completed** sales only. A sale that is already refunded or cancelled cannot be amended again.
  </Accordion>

  <Accordion title="'Confirm inspection before restocking.'">
    The inspection tick is required whenever you restock. It exists so that putting goods back is a decision somebody made, not a default.
  </Accordion>

  <Accordion title="I refunded but the stock did not come back">
    The restock box was not ticked — the sheet warns about exactly this. Correct the quantity with a stock adjustment in Inventory, and note the reason.
  </Accordion>

  <Accordion title="'That payment was already recorded'">
    The same settlement reached us twice, usually a double-tap or a retry. The balance is correct; nothing has been taken twice.
  </Accordion>

  <Accordion title="I cannot find an export button">
    There is none on this page. Exports live on the **Executive** dashboard's report tabs and in [Analytics](/pharmacy/money/analytics).
  </Accordion>
</AccordionGroup>

<StillStuck topic="a return" />

The Sales page as a whole — the overview, product performance and the day's figures — is covered in [Sales](/pharmacy/money/sales).
