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

# Check a client in and out

> Record an arrival, attach the services and labs the visit is for, then check the client out and issue the visit record.

export const AuditNote = ({action = 'This action'}) => <div className="ck-callout ck-callout--info" role="note">
    <p className="ck-callout__body">
      {action} is written to your workspace's audit log with your name, the
      record touched and the time — a HIPAA requirement, and one you can review
      yourself under <strong>Audit Log</strong>. See{' '}
      <a href="/platform/security/audit-log">Audit log</a>.
    </p>
  </div>;

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="Solo and Team" roles="Any staff member with access to the client record" />

Checking someone in records that they arrived, what they came for and who they are seeing. Checking them out closes the visit and lets you issue a visit record they can keep.

<Path steps={['Clients', 'A client', 'Overview', 'Check in']} />

<TaskHeader before="An existing client record" time="Under a minute" after="A visit on the client's chart, and a visit record you can download or email" />

## What you're looking at

Check-in happens from the client's own chart — a solo or team practice has no separate front-desk board, so there is nothing to keep in sync.

The card sits on the chart's **Overview** tab and has two states:

| State              | What the card shows                                                                                            |
| ------------------ | -------------------------------------------------------------------------------------------------------------- |
| **Not checked in** | "Check the client in for their visit", and a **Check in** button                                               |
| **Checked in**     | A pulsing green dot, the arrival time, the assigned staff member and the room, with **View** and **Check out** |

**Check in** opens a sheet titled **Check In Patient**, with the client's name underneath. Reopening an existing visit with **View** opens the same sheet titled **Patient Check-In**, in read-only form: a **Checked in** or **Checked out** badge, "by" whoever recorded it, the **In:** and **Out:** times, the **Visit items**, and the buttons **Edit**, **Check out**, **Download PDF**, **Email patient** and **Cancel check-in**. Selecting **Edit** retitles it **Edit Check-In** and swaps the footer button to **Save changes**.

## Check someone in

<Steps>
  <Step title="Open the Check In Patient sheet">
    Select **Check in**. The sheet opens with the current time already chosen.
  </Step>

  <Step title="Confirm the arrival time">
    Under **Check-in time**, change it if they arrived earlier than you got to the screen. This is the time the visit is recorded against, not the time you saved.
  </Step>

  <Step title="Attach the appointment, if there is one">
    Choose it under **Appointment (optional)** — the field only appears when the client has appointments. Leave it on **No appointment** for a walk-in.
  </Step>

  <Step title="Say what the visit is for">
    **Visit items — services, labs, custom** has two pickers, **+ Add service** and **+ Add lab test**, and a free-text box ("Custom item…") with its own **Add** button. Add as many as the visit needs.
  </Step>

  <Step title="Assign the visit">
    Pick the clinician or team member under **Assign to**, or leave it on **Unassigned** and assign later.
  </Step>

  <Step title="Enter the reason and the room">
    **Reason for visit** is free text — the placeholder suggests "e.g. Follow-up". **Location / room** ("e.g. Room 3") is for practices that track rooms, and **Notes (optional)** takes "Anything the care team should know…".
  </Step>

  <Step title="Select Check in">
    The toast names the client — **… checked in** — and the card on **Overview** turns green.
  </Step>
</Steps>

<Note>
  The sheet refuses to save an empty visit: **Add a reason, appointment, or at least one item**. Any one of the three satisfies it; a check-in with none of them tells the clinician nothing.
</Note>

## After the check-in

Select **View** on the card to reopen the visit. From there you can:

* **Edit** — change the items, assignment, room or reason, then **Save changes**. The toast reads **Check-in updated**.
* **Check out** — close the visit. **Check out** is also on the card itself, so a routine departure takes one select.
* **Cancel check-in** — remove a visit recorded in error. The toast reads **Check-in cancelled**.

Past visits stay on the chart's **History** tab, where **View check-in** reopens the same sheet.

## Issue the visit record

The reopened visit has **Download PDF** and **Email patient**. Emailing confirms with **Visit record sent** and names the address it went to.

<AuditNote action="Opening a client's check-in" />

## Who can do this

Role decides whether the client's chart opens. Nothing inside the check-in card is behind a separate permission.

| Action                             | Who can do it by default                 | Governed by                                   |
| ---------------------------------- | ---------------------------------------- | --------------------------------------------- |
| Check a client in                  | Any staff member who can open that chart | The access tier chosen when they were invited |
| Edit a check-in                    | Any staff member who can open that chart | Role                                          |
| Check out, or cancel a check-in    | Any staff member who can open that chart | Role                                          |
| Download or email the visit record | Any staff member who can open that chart | Role                                          |

On Solo and Team the levers are the **role** somebody holds and the **access tier** you gave them — **Basic** and **Billing** cover their own clients only, **Full client list** and **Entire practice** cover everybody. There is no per-role navigation editor on these plans, and the **Permissions** sheet ("What they may do on the pages their role already opens") carries only clinical-authority acts such as signing and countersigning, none of which apply here.

Two behaviours surprise people:

* **Enforcement is opt-in, per person.** A colleague never saved in the permissions sheet is unrestricted. The sheet warns **"Saving starts enforcing"**.
* **A denied action is recorded; an allowed one is not.** Hiding a module from somebody's sidebar is a convenience, not a security boundary.

See [Staff permissions](/platform/team/permissions).

## Check it worked

* The card on **Overview** reads **Checked in** with a live dot, and shows the time, the assigned staff member and the room.
* After checking out, the card returns to **Not checked in** and the visit is on the **History** tab.
* **Email patient** reports **Visit record sent**.

## Common issues

<AccordionGroup>
  <Accordion title="Check in is greyed out">
    The chart is still loading the client record. That is deliberate — a check-in recorded before the chart knows whose it is would be attached to nobody. Give it a moment; if it never enables, reopen the chart from **Clients**.
  </Accordion>

  <Accordion title="The sheet will not save">
    **Add a reason, appointment, or at least one item.** You have none of the three. Add any one.
  </Accordion>

  <Accordion title="The arrival time is wrong">
    The visit is stamped with the time under **Check-in time**, not the time you saved. Reopen the visit, select **Edit** and correct it.
  </Accordion>

  <Accordion title="There is no Appointment field in the sheet">
    That field only renders when the client has appointments on file. Without one, record the visit as a walk-in — the reason or a visit item is enough.
  </Accordion>

  <Accordion title="Checked out by mistake">
    Check them back in. There is no confirmation on check-out precisely because it is reversible this way.
  </Accordion>

  <Accordion title="Email prepared (outbound disabled)">
    Outbound email is switched off for that workspace, so nothing was sent. Use **Download PDF** and send it yourself, and see [Notification settings](/platform/settings/notifications).
  </Accordion>
</AccordionGroup>

## FAQ

<AccordionGroup>
  <Accordion title="Does checking someone in create an invoice?">
    No. Visit items describe what the visit is for; billing is raised separately on the **Billing** tab. See [Invoices](/practice/money/invoices).
  </Accordion>

  <Accordion title="Do I have to book an appointment before checking someone in?">
    No. Leave **Appointment (optional)** on **No appointment** and the visit records as a walk-in. Attaching one links the two so the calendar and the chart agree.
  </Accordion>

  <Accordion title="What is the difference between cancelling and checking out?">
    **Check out** closes a visit that happened. **Cancel check-in** removes one that should never have been recorded. Use cancel only for mistakes — a client who arrived and left is checked out.
  </Accordion>

  <Accordion title="Can I check two people in at once?">
    Not from one sheet. Each check-in belongs to one client's chart, so a couple or a family is checked in one at a time.
  </Accordion>

  <Accordion title="What does the client get in the visit record?">
    The arrival and departure times, who they saw, the room, the reason and the visit items — a receipt of attendance, not a clinical note. Nothing you wrote in **Notes (optional)** or in a clinical note is on it.
  </Accordion>
</AccordionGroup>

<StillStuck />
