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

# Invite your team

> Send an invitation, pick the role and access a person needs, and give a cashier exactly the till permissions they should have.

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, up to the plan's seat cap" roles="Owner, Manager" />

Step 6 of the [setup checklist](/pharmacy/get-started) — "Bring your team on board by inviting staff to your pharmacy." It completes when a **second** person exists: you do not count as your own team member.

<Path steps={['Sidebar', 'Settings', 'Team', 'Staff & Teams']} />

<TaskHeader before="The person's email address, and a free seat on your plan" time="1 minute per person" after="An invitation sent, and a colleague who can sign in with exactly the access you gave them" />

## Seats are included, and capped

The **Staff Members** card shows **\{n} of \{limit} seats used**. On a pharmacy plan seats are **included at no extra cost** — nothing is ever billed per person — but the cap is a hard stop. At the limit the invite sheet is blocked behind **Staff Limit Reached**, and the card explains: "You've used all \{limit} seats on your plan." with **View plans**.

See [Staff seats](/platform/plans/seats).

## Send the invitation

Select **Invite Staff**. The sheet is titled **Add team member** and runs through **Profile**, **Specialty**, **Supervisor**, **Permissions** and **Review**.

<Steps>
  <Step title="Enter their details">
    **First name**, **Last name** and **Email**. The email is the one they will sign in with, so use a personal work address rather than a shared counter inbox — every action is recorded against the person who did it, and a shared login destroys that.
  </Step>

  <Step title="Choose the specialty">
    **Choose roles for \{first name}** — "Select the specialty and access level for this team member." The **Specialty** picker offers **Pharmacist**, **Pharmacy Technician**, **Cashier**, **Practice Manager**, **Medical Biller**, **Accountant** and **Employee**.

    The specialty is who they are professionally. The next choices decide what they can do.
  </Step>

  <Step title="Pick the role bundle and how much they see">
    Four bundles cover a pharmacy:

    | Bundle                      | What it means                                                                                                   |
    | --------------------------- | --------------------------------------------------------------------------------------------------------------- |
    | **Pharmacy Manager**        | Runs the branch: customer records, pricing and reports, staff accounts, announcements                           |
    | **Cashier / Till Operator** | Serves at the till: rings up sales, takes payment, issues receipts, registers walk-in customers                 |
    | **Inventory & Purchasing**  | Owns stock: receives deliveries, adjusts counts, manages suppliers and purchase orders, watches cost and expiry |
    | **Dispensing Supervisor**   | Oversees dispensing: checks a technician's work, authorises refunds and voided sales, reviews the day's takings |

    Then set how far they can see: **Own till** (only the sales they rang up), **Whole branch** (every sale, customer and stock movement here, and they can refund at the counter) or **All branches**.
  </Step>

  <Step title="Record their credentials, if they have any">
    The supervisor step — **Add \{name}'s pharmacy credentials** — is where a pharmacist's registration is recorded, and where you name the Pharmacist-in-Charge who supervises a technician.
  </Step>

  <Step title="Tune the permissions">
    The **Permissions** step is the per-person layer, grouped the way the pharmacy works:

    * **Till** — Dispense and sell at the till · Override the selling price · Discount beyond the set limit · Refund or void a sale · Open the cash drawer · Cash up and close the day
    * **Stock** — Receive deliveries into stock · Adjust stock counts · Transfer stock between branches · Manage suppliers and purchase orders
    * **Controlled drugs** — Witness a controlled-drug dispense
    * **Money** — View cost prices and margin · View the net position
    * **Oversight** — View per-cashier takings

    The bundle sets sensible defaults: a **Cashier** gets only "Dispense and sell at the till" and "Open the cash drawer". Leave it there unless you have a reason not to.
  </Step>

  <Step title="Review and send">
    The review step shows the seat as **Included in your plan**. Select **Send invitation** — it reads **Adding...** while it works.
  </Step>
</Steps>

## Check it worked

* The person appears in the staff table with their **Name**, **Email**, **Specialty** and **Last active**, and a toast confirms they have been added.
* The seat counter goes up by one.
* The setup checklist's team step is done, now that a second person exists.
* They receive an email invitation and set their own password on first sign-in.

## Getting the permissions right

<AccordionGroup>
  <Accordion title="A cashier who can discount is a cashier who can give the shop away">
    Any discount at the till — a single line or the whole cart — needs **Discount beyond the set limit**. It is off for cashiers by default, and that default is the reason the setting exists.
  </Accordion>

  <Accordion title="Refunds should not sit with the person who took the money">
    **Refund or void a sale** is separately grantable, and a cashier does not have it. Amending a completed sale then reads "Needs authorisation — amending a completed sale is reserved for your Pharmacist-in-Charge." See [Returns, voids and amendments](/pharmacy/pos/returns).
  </Accordion>

  <Accordion title="A cashier only sees two screens">
    With the till permissions alone, a person reaches **POS** and **Sales** and nothing else. That is expected, not a fault — the sidebar is built from what each person may do.
  </Accordion>

  <Accordion title="The countersignature is deliberately not the manager's">
    **Witness a controlled-drug dispense** belongs to the **Dispensing Supervisor**, and a **Pharmacy Manager** gets everything else *except* it. A countersignature only means something when it comes from a second, qualified person.
  </Accordion>
</AccordionGroup>

## If something goes wrong

<AccordionGroup>
  <Accordion title="'You've used all \{n\} seats on your plan.'">
    Seats are included rather than billed, so the cap blocks rather than charging you. The message offers the next plan up or a +5 staff pack — **View plans** takes you there. See [Staff seats](/platform/plans/seats).
  </Accordion>

  <Accordion title="'Staff Limit Reached'">
    The same cap, met when you opened the sheet. Free a seat by deactivating someone who has left, or move up a plan.
  </Accordion>

  <Accordion title="The email address is already in use">
    That person already has a ClinikEHR account — possibly already on your team. Check the staff table and the pending invitations before sending another.
  </Accordion>

  <Accordion title="'Your subscription payment is past due.'">
    A failed renewal suspends your seat capacity until the payment method is fixed. Use **Fix Payment** on the message.
  </Accordion>

  <Accordion title="They never got the invitation">
    Check the address in the staff table for a typo, and have them look in spam. You can cancel the pending invitation and send it again.
  </Accordion>
</AccordionGroup>

<StillStuck topic="inviting your team" />

The full reference for roles and per-person permissions is in [Staff permissions](/platform/team/permissions) and [Invite staff](/platform/team/invite-staff).
