On this page

A patient intake form captures a wide range of information in a single interaction — demographics, insurance, medical history, medications, allergies, family history, and consent. In FHIR, this information fans out into many discrete resource types. This page maps out that resource graph, explains how the resources relate to each other, and identifies the US Core profiles that apply.

This page covers:

- The resource graph produced by intake processing
- Each resource's role and whether it is typically created or updated
- US Core profiles applied during intake
- How intake resources connect to Encounters
- The RelatedPerson pattern for dependent insurance coverage

## Resource Graph [​](/content/docs/intake/intake-data-model#resource-graph "Direct link to Resource Graph"/index.html)

Intake processing transforms a single [`QuestionnaireResponse`](/content/docs/api/fhir/resources/questionnaireresponse/index.html) into multiple FHIR resources. The graph splits naturally into two groups: **core identity** resources that establish who the patient is and how they're covered, and **clinical history** resources that capture the patient's medical background.

### Core Identity Resources [​](/content/docs/intake/intake-data-model#core-identity-resources "Direct link to Core Identity Resources"/index.html)

- beneficiary
- patient
- payor
- QuestionnaireResponse
- Patient
- Coverage
- Consent
- RelatedPerson
- Organization

### Clinical History Resources [​](/content/docs/intake/intake-data-model#clinical-history-resources "Direct link to Clinical History Resources"/index.html)

- subject
- patient
- QuestionnaireResponse
- Observation
- SDOH, smoking, etc.
- AllergyIntolerance
- MedicationRequest
- Condition
- FamilyMemberHistory
- Immunization
- CareTeam
- Preferred Pharmacy

## Resource Role Reference [​](/content/docs/intake/intake-data-model#resource-role-reference "Direct link to Resource Role Reference"/index.html)

| Resource | Role in Intake | Created or Updated | Key References |
| --- | --- | --- | --- |
| [`Patient`](/content/docs/api/fhir/resources/patient/index.html) | Demographics, contact info, emergency contacts, language preferences, extensions for race/ethnicity/veteran status | Usually **created** (new patient) or **updated** (returning patient) | — |
| [`Coverage`](/content/docs/api/fhir/resources/coverage/index.html) | Insurance information — payor, subscriber ID, relationship to subscriber | Created; upserted by `beneficiary` + `payor` | `beneficiary` → Patient, `payor` → Organization |
| [`RelatedPerson`](/content/docs/api/fhir/resources/relatedperson/index.html) | Insurance subscriber when subscriber is not the patient (e.g., a child on a parent's plan) | Created when `Coverage.relationship` is not `self` | `patient` → Patient |
| [`Consent`](/content/docs/api/fhir/resources/consent/index.html) | Treatment consent, privacy practices, payment agreements, advance directives, communication preferences | Created (one per consent type) | `patient` → Patient |
| [`Observation`](/content/docs/api/fhir/resources/observation/index.html) | Social determinants of health (housing, education), smoking status, sexual orientation, pregnancy status | Created or upserted by `patient` + `code` | `subject` → Patient |
| [`AllergyIntolerance`](/content/docs/api/fhir/resources/allergyintolerance/index.html) | Patient-reported allergies with reaction and onset | Upserted by `patient` + `code` | `patient` → Patient |
| [`MedicationRequest`](/content/docs/api/fhir/resources/medicationrequest/index.html) | Current medications | Upserted by `subject` + `code` | `subject` → Patient |
| [`Condition`](/content/docs/api/fhir/resources/condition/index.html) | Medical history / problem list | Upserted by `subject` + `code` | `subject` → Patient |
| [`FamilyMemberHistory`](/content/docs/api/fhir/resources/familymemberhistory/index.html) | Family medical history — condition, relationship, deceased status | Upserted by `patient` + `code` + `relationship` | `patient` → Patient |
| [`Immunization`](/content/docs/api/fhir/resources/immunization/index.html) | Vaccination history | Upserted by `patient` + `vaccine-code` + `date` | `patient` → Patient |
| [`CareTeam`](/content/docs/api/fhir/resources/careteam/index.html) | Preferred pharmacy | Upserted by `name` + `subject` | `subject` → Patient, `participant.member` → Organization |

Created vs. Updated

In many real-world flows, the [`Patient`](/content/docs/api/fhir/resources/patient/index.html) resource already exists by the time the intake form is submitted — because the patient was registered or scheduled first. The intake bot in the [Patient Intake Demo](https://github.com/medplum/medplum/tree/main/examples/medplum-patient-intake-demo) creates a new Patient, but your implementation may instead search for and update an existing one. Most clinical history resources (allergies, medications, conditions) use [`upsertResource`](/content/docs/fhir-datastore/working-with-fhir#upsert/index.html) to avoid duplicates on resubmission.

## US Core Profiles [​](/content/docs/intake/intake-data-model#us-core-profiles "Direct link to US Core Profiles"/index.html)

The intake demo applies [US Core](https://www.hl7.org/fhir/us/core/) profiles to resources where applicable. Adding a profile to `meta.profile` signals that the resource conforms to the profile's constraints and enables profile-aware validation.

| Resource | US Core Profile |
| --- | --- |
| Patient | `us-core-patient` |
| Coverage | `us-core-coverage` |
| AllergyIntolerance | `us-core-allergyintolerance` |
| MedicationRequest | `us-core-medicationrequest` |
| Immunization | `us-core-immunization` |
| CareTeam | `us-core-careteam` |
| Observation (smoking) | `us-core-smokingstatus` |
| Observation (sexual orientation) | `us-core-observation-sexual-orientation` |

The Patient resource also uses US Core extensions for race (`us-core-race`), ethnicity (`us-core-ethnicity`), and veteran status (`military-service-veteran-status`).

## Encounter Linkage [​](/content/docs/intake/intake-data-model#encounter-linkage "Direct link to Encounter Linkage"/index.html)

In many implementations, intake is tied to an [`Encounter`](/content/docs/api/fhir/resources/encounter/index.html) — either a scheduled visit or a walk-in registration. When an Encounter exists:

- Downstream clinical resources ( [`Observation`](/content/docs/api/fhir/resources/observation/index.html), [`Condition`](/content/docs/api/fhir/resources/condition/index.html)) can reference the Encounter, connecting them to a specific visit
- [`Task`](/content/docs/api/fhir/resources/task/index.html) resources for intake questionnaires link to the Encounter via `Task.encounter`, which ties them into the encounter chart view
- A [`ClinicalImpression`](/content/docs/api/fhir/resources/clinicalimpression/index.html) linked to the Encounter provides chart notes

For visit-based intake orchestrated via [PlanDefinition](/content/docs/intake/post-intake-automation#plandefinition-orchestration/index.html), the `$apply` operation accepts an `encounter` parameter that automatically links generated Tasks to that Encounter.

## RelatedPerson and Insurance Coverage [​](/content/docs/intake/intake-data-model#relatedperson-and-insurance-coverage "Direct link to RelatedPerson and Insurance Coverage"/index.html)

When the insurance subscriber is someone other than the patient — such as a child covered by a parent's plan — the intake process creates a [`RelatedPerson`](/content/docs/api/fhir/resources/relatedperson/index.html) resource alongside the [`Coverage`](/content/docs/api/fhir/resources/coverage/index.html).

For full details on Coverage modeling, insurance card image capture, and payor setup, see [Patient Insurance](/content/docs/billing/patient-insurance/index.html).

Relationship Code Inversion

The relationship code **inverts** between Coverage and RelatedPerson, and this is one of the most common sources of bugs in intake implementations:

- `Coverage.relationship` describes the **patient's** relationship **to the subscriber** (e.g., `child` means "the patient is a child of the subscriber")
- `RelatedPerson.relationship` describes the **RelatedPerson's** relationship **to the patient** (e.g., `PRN` / parent means "this person is a parent of the patient")

So if `Coverage.relationship` is `child`, the corresponding `RelatedPerson.relationship` should be `PRN` (parent) — because the RelatedPerson _is_ the parent.

| Coverage.relationship | RelatedPerson.relationship | Why |
| --- | --- | --- |
| `child` | `PRN` (parent) | Patient is the child; subscriber is the parent |
| `parent` | `CHILD` (child) | Patient is the parent; subscriber is the child |
| `spouse` / `common` | `SPS` (spouse) | Symmetric relationship |

## See Also [​](/content/docs/intake/intake-data-model#see-also "Direct link to See Also"/index.html)

- [Patient Insurance](/content/docs/billing/patient-insurance/index.html) — Coverage resource modeling, insurance card capture, payor setup
- [Questionnaires & Assessments](/content/docs/questionnaires/index.html) — General Questionnaire mechanics
- [Intake Questionnaires: Design and Extraction](/content/docs/intake/intake-questionnaires/index.html) — Questionnaire structure patterns for intake
- [Patient Intake Demo](https://github.com/medplum/medplum/tree/main/examples/medplum-patient-intake-demo) — Working reference implementation

- [Resource Graph](/content/docs/intake/intake-data-model#resource-graph/index.html)
  - [Core Identity Resources](/content/docs/intake/intake-data-model#core-identity-resources/index.html)
  - [Clinical History Resources](/content/docs/intake/intake-data-model#clinical-history-resources/index.html)
- [Resource Role Reference](/content/docs/intake/intake-data-model#resource-role-reference/index.html)
- [US Core Profiles](/content/docs/intake/intake-data-model#us-core-profiles/index.html)
- [Encounter Linkage](/content/docs/intake/intake-data-model#encounter-linkage/index.html)
- [RelatedPerson and Insurance Coverage](/content/docs/intake/intake-data-model#relatedperson-and-insurance-coverage/index.html)
- [See Also](/content/docs/intake/intake-data-model#see-also/index.html)
