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

# Check in before a visit

> The haau3 caregiver app as a SMART Health Check-in wallet: a website's check-in page asks for the records and forms it needs, and the person chooses what to send.

[SMART Health Check-in](https://smart-health-checkin.org/spec/) is an open protocol that lets a
clinic's check-in page ask a health app the patient chooses for records and forms before a visit.
The haau3 caregiver app is a web wallet for it. The website asks for exactly what it needs, the
person chooses item by item, and record by record, what to send, and the answers go back to that
website alone.

<Note>
  Check-in is an early version. haau3 is building toward a minimum viable product in November
  2026 and general availability in early 2027. What it answers today is listed below, and the
  list will grow.
</Note>

## How it differs from a SMART Health Link

Both let a patient or caregiver skip the clipboard. They differ in who decides what is asked for.

<CardGroup cols={2}>
  <Card title="SMART Health Link" icon="qrcode" href="/app/kill-the-clipboard/generate-smart-health-link">
    The person makes a link or QR code from their record and shows it at the appointment. They
    decide what it holds, and the receiving system reads whatever it carries.
  </Card>

  <Card title="Check-in" icon="clipboard-check">
    The clinic's check-in page asks for the records and forms it wants, before the visit. The
    person says yes or no to each one, answers the forms, and the page gets the answers back.
  </Card>
</CardGroup>

## Add haau3 to your check-in page

haau3 answers over the web-wallet transport of the
[SMART Health Check-in client library](https://github.com/smart-health-checkin/client): your page
opens the wallet in a new tab from a click, the wallet says it is ready, receives your request, and
posts back a sealed response.

| Field | Value |
| - | - |
| Name | haau3 |
| Wallet URL | `https://haau3.com/check-in` |
| Icon | `https://haau3.com/apple-touch-icon.png` (180 px) |
| Opens in | a new tab |

Opened on its own, without a request, the page explains that it starts from a website's check-in
and shows nothing about anyone.

## What the person does

<Steps>
  <Step title="Sign in on the page">
    The tab stays on haau3 while the person signs in, with Google or an emailed code, so your
    request is kept. Check-in signs in to an existing haau3 account that has finished
    setting up; it does not create one.
  </Step>

  <Step title="Pick whose records">
    A caregiver who manages more than one person picks whose records your page gets. Nothing is
    picked for them.
  </Step>

  <Step title="Choose item by item, and record by record">
    Your page appears by its web address, and your request's own words are shown as what the
    website says. Each item shows how many records would go and their names. An item with records
    starts on Share with every record chosen. The person can turn any item off, even one your
    request marks as required, and can leave out single records or a whole kind of record, such
    as every document. A record left out of one item is left out of every item.
  </Step>

  <Step title="Answer your forms">
    A form sits in its item's card, shown as you sent it. A shared form needs at least one answer,
    and an answer to every question it marks as required, before the person can send.
  </Step>

  <Step title="Send">
    haau3 sends one response with a status for every item, then closes its tab. Closing the tab
    without sending sends nothing, and your page reads that as a decline.
  </Step>
</Steps>

## What haau3 answers today

Records are matched to an item by `meta.profile`, and sent with their profiles exactly as stored.
An item can name exact profiles, a whole implementation guide (`profilesFrom`, such as US Core), or
a guide narrowed by `resourceTypes`, such as US Core's Observations. Each shared item's records come
back as a FHIR R4 (4.0.1) `collection` Bundle.

| You ask for | haau3 sends |
| - | - |
| Patient | The person's details as haau3 holds them |
| Problems and health concerns (Condition) | Conditions with the US Core profile, and Conditions with no profile whose category is `problem-list-item` or `health-concern` |
| Allergies (AllergyIntolerance) | Every allergy record |
| Medications (MedicationRequest) | What the person chose in Settings: haau3's combined medication list (the default) or every prescription as received. Until haau3 has made the combined list for the person, it sends the prescriptions as received. Each prescription brings the drug it names |
| Immunizations | Every immunization record |
| Procedures | Every procedure record |
| Implantable devices | Every implantable device record |
| Insurance (Coverage) | Every coverage record, with the insurer it names |
| Lab results, vital signs and other results (Observation) | Every result, in every category |
| Lab reports and notes (DiagnosticReport) | Every report. A lab report brings the results it names |
| Documents (DocumentReference) | Every document. Each brings the file it names, as a Binary in the same Bundle at the address the document gives, so the address resolves there |
| A whole guide, such as US Core (`profilesFrom`) | Every record above that claims a profile in the guide. haau3 does not look for visits, goals or care plans yet, so the item answers `partial` |
| An item with no selector (none of `profiles`, `profilesFrom` or `resourceTypes`) | What the person picks as relevant, from every record above and their own My Story answers (what matters to them and their treatment wishes, as Observations with the profiles of the PACIO Advance Directive Interoperability guide, exactly as stored). Nothing is picked for them, and the item answers `fulfilled` with what they pick |

**Forms** are shown as you send them inline. A form named only by its canonical URL is found for
LOINC forms, for the forms the SMART Health Check-in connectathon publishes, and for forms
published at their own address under other places haau3 is set up to reach. To have forms you
publish found this way, email [hello@haau3.com](mailto:hello@haau3.com) with the address they are
published under. haau3 shows
questions of type `choice`, `open-choice`, `decimal`, `string`, `text`, `integer`, `boolean` and
`display`.

* A `choice` or `open-choice` question that `repeats` is shown as checkboxes, and its answers are
  sent in the order the form lists its options.
* An `open-choice` question also takes the person's own words, sent as one `valueString` answer.
* A question or display text with `enableWhen` is shown only while its conditions hold, with the
  operators read as FHIR R5 defines them (so `!=` holds while the question is unanswered). An item
  that is not shown is left out of the response.

A form that uses any other question type, groups, a typed question that `repeats`, `minOccurs`,
`maxOccurs` or `optionExclusive`, an answer value set, or a condition haau3 can't evaluate, is not
shown, and answers `unsupported`.

The response is a QuestionnaireResponse whose `subject` is the patient. When the patient answers,
`author` and `source` name the patient too. When a caregiver answers, the response contains a US
Core RelatedPerson for them, with `id` `caregiver`:

* their name;
* their relationship to the patient, coded in `v3-RoleCode`, when it is parent, grandparent,
  spouse, child, grandchild or sibling;
* an `identifier` whose `value` is the record's address at haau3 (`system` `urn:ietf:rfc:3986`).

`author` is `#caregiver`. The caregiver says, form by form, whose answers these are: the patient's
own, which the caregiver entered (`source` is the patient), or the caregiver's answers about the
patient (`source` is `#caregiver`).

## Statuses

| Status | When |
| - | - |
| `fulfilled` | The person shared the item. For a form, they answered it. For an item with no selector, they picked something |
| `declined` | The person turned the item off or left out every record in it. For an item with no selector, they picked nothing |
| `unavailable` | haau3 looked and the person has no such records |
| `partial` | The person left out some of the item's records, or a record one of them brings, such as a report's result (the message says so, with no count); or the item also asks for kinds of records haau3 does not look for yet, asks for a profile version the records do not claim exactly, or names a document whose file haau3 could not find (the document goes without it) |
| `unsupported` | Something haau3 can't answer yet, listed below |
| `error` | haau3 could not fetch a form named by its canonical URL |

haau3 answers `unsupported` for an item naming only kinds of records or a guide haau3 holds none of, a request that excludes FHIR 4.0.1 or an item that does not accept
`application/fhir+json`, a form it can't find or show, and an inline form over 256 KB. When an item reaches beyond what haau3 looks for and nothing matched, the
answer is `unsupported`, never `unavailable`, so your page is never told the person has none of
something haau3 did not look for.

## Limits

* **The person needs a haau3 account.** Without one, the page tells them to make one at
  haau3.com and start again from your page.
* **Your page's time limit.** The client library's page waits five minutes by default. haau3 can't
  extend it. The person sees the time left near the end, and when a request has a form, they are
  told about the limit before they start.
* **Size.** One response carries at most 4 MB. When what the person leaves on Share adds up to
  more, haau3 tells them before they send, shows the size of any record over 1 MB, and asks them
  to leave out some records or turn off some items.
* **Where it has been tested:** desktop Chrome, and Safari on iPhone.

## Privacy

* Nothing is sent until the person chooses, item by item and record by record.
* The response is sealed to the key in your request and bound to your page's origin, so only your
  page can open it.
* When a caregiver answers a form, their name and relationship to the patient go with the answers,
  and the screen tells them so before they send.
* haau3 keeps no copy of what is sent, and no copy of the answers to your forms.

## Test it

<Steps>
  <Step title="Add haau3 to the SMART Testing EHR">
    Open the [SMART Testing EHR](https://smart-health-checkin.org/connectathon/testing-ehr/), add
    haau3 by its wallet URL, `https://haau3.com/check-in`, choose a scenario and send it.
  </Step>

  <Step title="Use the sample account">
    On haau3's sign-in step, choose **Use the sample account**, then **Continue**. Nobody signs in,
    and nothing is typed. The sample account is Yuk Sample, who has a small record and cares for
    two people:

    * **Rosalynn Sample**, with an everyday record holding every kind of record haau3 sends,
      documents with their files included.
    * **Chris Sample**, with ten years of results and notes, for responses over 1 MB.

    Pick whose records to send, as a caregiver would. A form answered for Rosalynn or Chris carries
    Yuk as their caregiver.
  </Step>

  <Step title="Read what arrives">
    The people and records are made up. Every record the sample sends carries HL7's security label
    for test data, `HTEST` from `http://terminology.hl7.org/CodeSystem/v3-ActReason`, in
    `meta.security`. So does each form's response, and the caregiver inside it.
  </Step>
</Steps>

The sample account runs the same check-in as a real account, from matching your request to sealing
the response. Three things it does not show: signing in, how haau3 searches a real person's
records, and the quirks of real records. To test those, make a haau3 account by following
[Account setup](/app/getting-started/account-setup). An account with no records connected answers
the Patient item and any forms, and its other record items answer `unavailable`.

## Related

<CardGroup cols={2}>
  <Card title="Kill the Clipboard" icon="circle-info" href="/app/kill-the-clipboard/kill-the-clipboard">
    The use case, and the two ways the haau3 app serves it.
  </Card>

  <Card title="Generate a SMART Health Link" icon="qrcode" href="/app/kill-the-clipboard/generate-smart-health-link">
    Share at the appointment with a link or QR code.
  </Card>

  <Card title="Account setup" icon="user-plus" href="/app/getting-started/account-setup">
    Create an account and onboard a patient.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.