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 extensions - •
fhir_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, primary - •
fhir_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 extensions - •
fhir_searchRelatedPerson?patient=abc-789 -- returns 0 entries - •
fhir_searchCoverage?patient=abc-789&status=active -- returns 0 entries - •
fhir_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:
code
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:codePatient.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 demographics - •
insurance-coverage-summary-- for deeper insurance analysis including coordination of benefits - •
allergy-adverse-reaction-summary-- when allergy documentation flag is raised