Patient person implemented primary

Core demographics record. One FHIR Patient maps to exactly one OMOP person row. The person table is the central identity record — every OMOP event table carries a person_id FK.

Conversion profile omop-patient-person
A FHIR instance converts to person iff it validates against this profile.
Path Card Type Binding / Fixed Comment
Patient.identifier 1..*MS At least one identifier is required; used as person.person_source_value (best of SSN > MR > first).
Patient.gender 1..*MS fhir/administrative-genderrequired
Patient.birthDate 1..1MS Required — drives person.year_of_birth (and month/day/birth_datetime when components are present). This is the routing discriminator for Patient → person.
Patient.address MS Optional. When present, drives the Patient → location edge and person.location_id.
Patient.generalPractitioner MS Optional. First Practitioner reference becomes person.provider_id.
Patient.managingOrganization MS Optional. Becomes person.care_site_id.
ViewDefinition (Stage 1 flattener) omop-patient-person
15 columns · resource Patient
column name FHIRPath type
id Patient.id id
race_omb Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-race').extension('ombCategory').value.ofType(Coding).where(system='urn:oid:2.16.840.1.113883.6.238').code code
race_text Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-race').extension('ombCategory').value.ofType(Coding).display string
ethnicity_omb Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity').extension('ombCategory').value.ofType(Coding).where(system='urn:oid:2.16.840.1.113883.6.238').code code
ethnicity_text Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity').extension('ombCategory').value.ofType(Coding).display string
gender Patient.gender code
gender_code Patient.gender code
year_of_birth Patient.birthDate date
month_of_birth Patient.birthDate date
day_of_birth Patient.birthDate date
birth_datetime Patient.birthDate + patient-birthTime extension dateTime
address_id Patient.address Address
performer_id Patient.generalPractitioner[0] (Practitioner) Reference(Practitioner)
managing_organization_id Patient.managingOrganization Reference(Organization)
identifier_value Patient.identifier (best: SSN > MR > first) string
Implementation: src/mapper/patient.ts

Fields (18)

Vocabularies

gender

Source Display Concept ID Concept Name
male Male 8507 MALE
female Female 8532 FEMALE
other Other 8521 OTHER
unknown Unknown 8551 UNKNOWN
(absent) Absent 0 No matching concept

race

Source Display Concept ID Concept Name
1002-5 American Indian or Alaska Native 8657 American Indian or Alaska Native
2028-9 Asian 8515 Asian
2054-5 Black or African American 8516 Black or African American
2076-8 Native Hawaiian or Other Pacific Islander 8557 Native Hawaiian or Other Pacific Islander
2106-3 White 8527 White
(absent) Absent 0 No matching concept

ethnicity

Source Display Concept ID Concept Name
2135-2 Hispanic or Latino 38003563 Hispanic or Latino
2186-5 Not Hispanic or Latino 38003564 Not Hispanic or Latino
(absent) Absent 0 No matching concept

Edge Cases

Missing birthDate
OMOP convention: drop person. Most implementations write year_of_birth=0.
Partial birthDate (year-only or year-month)
Year always populated; month/day null when not provided. birth_datetime null if incomplete.
Missing gender
gender_concept_id=0, gender_source_value=null. Per OMOP Themis, use 0 rather than 8551.
Multiple identifiers
Pick best by priority: SSN > MR > first. Encoding varies across implementations.
Multiple generalPractitioner entries
Filter to Practitioner references only. Take last (most recent) or first.
Multi-race patient (multiple ombCategory entries)
OMOP has single race_concept_id. Pick first, or use 8522 (Other), or write 0.
deceasedBoolean=true without date
Cannot create death row. See Patient__death edge.
Multiple address entries
Pick most recent home address. See Patient__location edge.

Reference Implementations