Patient Demographics Summary
Overview
Pull structured demographic data from FHIR Patient, RelatedPerson, and Coverage resources. Format into a consolidated summary including identifiers, contact information, emergency contacts, insurance, preferred language, communication preferences, and advance directive status. Flag missing critical data elements that may affect care delivery.
FHIR Resources Used
| Resource | Purpose | Key Fields |
|---|---|---|
| Patient | Core demographics | name, birthDate, gender, address, telecom, communication, identifier, extension |
| RelatedPerson | Emergency contacts, guarantors | name, telecom, relationship, period |
| Coverage | Insurance information | status, type, subscriberId, payor, period, class |
Instructions
Step 1: Retrieve Patient Resource
Tool: fhir_read
resourceType: "Patient"
id: "[patient-id]"
Extract the following fields:
- Identifiers: MRN (
identifierwheretype.coding.code= "MR"), SSN (last 4 only), driver's license - Name:
namearray -- usename.use= "official" as primary; note maiden names (use= "maiden") - Birth Date:
birthDate(calculate age) - Gender:
gender(administrative gender) - Race/Ethnicity: US Core extensions at
extensionwhere URL =http://hl7.org/fhir/us/core/StructureDefinition/us-core-raceandhttp://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity - Address:
addressarray -- identifyuse= "home" vs "work" vs "temp" - Telecom:
telecomarray -- phone (system= "phone"), email (system= "email"), fax - Preferred Language:
communicationarray wherepreferred= true - Marital Status:
maritalStatus - Deceased:
deceasedBooleanordeceasedDateTime - Managing Organization:
managingOrganization
Step 2: Retrieve Emergency Contacts and Related Persons
Tool: fhir_search
resourceType: "RelatedPerson"
queryParams: "patient=[patient-id]"
For each RelatedPerson:
- Extract name, relationship type (
relationship.coding.code), phone, email - Check
periodto confirm the relationship is current (noenddate orend> today) - Identify relationship roles: emergency contact, next of kin, guarantor, power of attorney
Step 3: Retrieve Insurance Coverage
Tool: fhir_search
resourceType: "Coverage"
queryParams: "patient=[patient-id]&status=active"
For each active Coverage:
- Plan name from
classwheretype.coding.code= "plan" - Group number from
classwheretype.coding.code= "group" - Subscriber ID from
subscriberId - Payor organization from
payorreference - Coverage period from
period - Coverage order (
orderfield: 1 = primary, 2 = secondary)
Step 4: Check for Advance Directives
Tool: fhir_search
resourceType: "Consent"
queryParams: "patient=[patient-id]&category=http://terminology.hl7.org/CodeSystem/consentcategorycodes|acd"
If no results, also search:
Tool: fhir_search
resourceType: "DocumentReference"
queryParams: "patient=[patient-id]&type=http://loinc.org|64298-3"
LOINC 64298-3 = Power of attorney / Advance directive
Step 5: Flag Missing Critical Data
Scan the collected data and flag any of the following as missing:
- No emergency contact (zero RelatedPerson resources or none with emergency contact relationship)
- No active insurance coverage
- No preferred language specified
- No allergy documentation status (check if
AllergyIntolerancesearch returns zero results -- this indicates allergies have not been reviewed, not that there are none) - No advance directive on file
- Missing phone number or email
- Missing address
Step 6: Format Output
Present the summary in this structure:
PATIENT DEMOGRAPHICS
====================
Name: [official name]
MRN: [identifier]
DOB: [birthDate] (Age: [calculated])
Gender: [gender]
Race/Ethnicity: [from extensions]
Preferred Language: [language]
Marital Status: [status]
CONTACT INFORMATION
===================
Home Phone: [telecom]
Mobile Phone: [telecom]
Email: [telecom]
Home Address: [address]
EMERGENCY CONTACTS
==================
1. [name] - [relationship] - [phone]
2. [name] - [relationship] - [phone]
INSURANCE COVERAGE
==================
Primary: [plan name] - ID: [subscriberId] - Group: [group]
Secondary: [plan name] - ID: [subscriberId] - Group: [group]
ADVANCE DIRECTIVES
==================
Status: [On file / Not on file]
MISSING DATA FLAGS
==================
- [list of flagged items]
Examples
Example 1: Complete Demographics Pull
User says: "Pull up demographics for patient 12345"
Actions:
fhir_readPatient/12345 -- returns full Patient resource with name, DOB, address, telecom, US Core race/ethnicity extensionsfhir_searchRelatedPerson?patient=12345 -- returns 2 entries: spouse (emergency contact), adult child (next of kin)fhir_searchCoverage?patient=12345&status=active -- returns 1 active Coverage: Blue Cross PPO, primaryfhir_searchConsent?patient=12345&category=... -- returns 1 advance directive
Result:
PATIENT DEMOGRAPHICS
====================
Name: Maria Garcia
MRN: MRN-12345
DOB: 1958-03-15 (Age: 67)
Gender: Female
Race/Ethnicity: Hispanic or Latino / White
Preferred Language: Spanish
Marital Status: Married
CONTACT INFORMATION
===================
Home Phone: (555) 234-5678
Mobile Phone: (555) 876-5432
Email: mgarcia@email.com
Home Address: 456 Oak Ave, Austin, TX 78701
EMERGENCY CONTACTS
==================
1. Roberto Garcia - Spouse - (555) 234-5679
2. Ana Garcia-Lopez - Daughter - (555) 345-6789
INSURANCE COVERAGE
==================
Primary: Blue Cross Blue Shield PPO - ID: BCB998877 - Group: GRP-4421
ADVANCE DIRECTIVES
==================
Status: On file (dated 2022-06-10)
MISSING DATA FLAGS
==================
- No secondary insurance on file
Example 2: Patient With Missing Critical Data
User says: "Who is patient abc-789? Get me their info."
Actions:
fhir_readPatient/abc-789 -- returns minimal Patient resource: name and DOB only, no telecom, no extensionsfhir_searchRelatedPerson?patient=abc-789 -- returns 0 entriesfhir_searchCoverage?patient=abc-789&status=active -- returns 0 entriesfhir_searchConsent?patient=abc-789&category=... -- returns 0 entries
Result:
PATIENT DEMOGRAPHICS
====================
Name: James Wilson
MRN: Not recorded
DOB: 1990-11-22 (Age: 35)
Gender: Male
Race/Ethnicity: Not documented
Preferred Language: Not specified
Marital Status: Unknown
CONTACT INFORMATION
===================
No contact information on file
EMERGENCY CONTACTS
==================
None documented
INSURANCE COVERAGE
==================
No active coverage found
ADVANCE DIRECTIVES
==================
Status: Not on file
MISSING DATA FLAGS [CRITICAL]
==============================
- No phone number or email
- No home address
- No emergency contact
- No active insurance coverage
- No preferred language
- Race/ethnicity not documented
- No advance directive on file
- Allergy documentation status unknown
Troubleshooting
No Patient Resource Found
- Verify the patient ID is correct. Try searching by name and DOB instead:
Tool: fhir_search resourceType: "Patient" queryParams: "family=[lastname]&given=[firstname]&birthdate=[YYYY-MM-DD]" - Check if the ID format matches the FHIR server's expectations (some use UUIDs, others use numeric IDs).
RelatedPerson Search Returns Empty But Patient Has Emergency Contact in Record
- Some EHR systems store emergency contacts as extensions on the Patient resource rather than as separate RelatedPerson resources. Check
Patient.contactarray for embedded contact entries:Patient.contact[].relationship Patient.contact[].name Patient.contact[].telecom - EPIC systems often use the
Patient.contactarray instead of RelatedPerson resources.
Coverage Resources Missing Plan Details
- The
classarray may use different type codes depending on the payer. Check fortype.coding.codevalues: "plan", "group", "subplan", "subgroup", "rxbin", "rxpcn". - Some systems populate plan details in the
payorreferenced Organization resource. Follow the reference withfhir_readon the Organization.
Related Skills
clinical-summary-generator-- for clinical data beyond demographicsinsurance-coverage-summary-- for deeper insurance analysis including coordination of benefitsallergy-adverse-reaction-summary-- when allergy documentation flag is raised
Converted and distributed by TomeVault — claim your Tome and manage your conversions.