Patient
→
death
documented
Mortality record. At most one death row per person. Only created when Patient.deceasedDateTime is present — deceasedBoolean=true without a date cannot produce a row because death_date is NOT NULL.
Conversion profile
omop-patient-death
A FHIR instance converts to death iff it validates against this profile.
| Path | Card | Type | Binding / Fixed | Comment |
|---|---|---|---|---|
| Patient.deceased[x] | 1..1MS | dateTime | Must be dateTime — deceasedBoolean is excluded by this profile. This is the routing discriminator for Patient → death. |
ViewDefinition (Stage 1 flattener)
omop-patient-death
3 columns · resource Patient
| column name | FHIRPath | type |
|---|---|---|
| id | Patient.id | id |
| death_date | Patient.deceasedDateTime | dateTime |
| death_datetime | Patient.deceasedDateTime | dateTime |
Condition: Patient.deceasedDateTime is present
Implementation:
src/mapper/patient.tsFields (7)
-
person_id←Patient.person_idinteger · integerPKFK→PERSONrequired -
death_date←Patient.deceasedDateTimedate · dateTimerequiredtransform:dateTime → dateNOT NULL — this is why deceasedBoolean=true cannot produce a row2 sources ▾
-
Populate from deceasedDateTime; drop row if only deceasedBoolean=true (log warning)
- omoponfhir(java) refs/refs/omoponfhir-omopv5-r4-mapping/src/main/java/edu/gatech/chai/omoponfhir/omopv5/r4/mapping/OmopPatient.java
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/PatientMapper.java:653-675 — Death staging via post_process_map
-
Not implemented — death row not created at all (mortality data silently lost)
- FhirToCdm(csharp) refs/refs/FhirToCdm/FhirToCdmMappings.cs
- NACHC-fhir-to-omop(java) refs/refs/NACHC-fhir-to-omop/src/main/java/org/nachc/tools/fhirtoomop/omop/person/factory/builder/person/OmopPersonBuilder.java
-
-
death_datetime←Patient.deceasedDateTimedatetime · dateTime -
death_type_concept_id← constant integer=32817EHR. ETL-German uses 32887 (EHR record patient status Deceased)2 sources ▾
-
Constant 32817 (EHR) — generic default for FHIR-sourced data
-
Constant 32887 (EHR record patient status Deceased) — more specific provenance concept
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/Constants.java — CONCEPT_EHR_RECORD_STATUS_DECEASED
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/PatientMapper.java:653-675
-
-
cause_concept_id← constant integer=0Patient resource has no cause-of-death field. Populate from Observation LOINC 69453-9 in post-processing. -
cause_source_value← constant varchar(50)=null -
cause_source_concept_id← constant integer=0
Vocabularies
death_type
| Source | Display | Concept ID | Concept Name |
|---|---|---|---|
| undefined | 32817 | EHR | |
| undefined | 32887 | EHR record patient status Deceased | |
| undefined | 32815 | Claim | |
| undefined | 32885 | Death Certificate |
Edge Cases
deceasedBoolean=true only
No row created; log warning. death_date is NOT NULL.
deceasedBoolean=false
No row — person is alive.
Partial deceasedDateTime (e.g. 2024-03)
Pad to last day of month per OMOP Themis. death_datetime left null.
Patient updated to alive (incremental)
Delete existing death row by person_id.
birthDate after deceasedDateTime
Data quality error — log and skip.
6 of 9 surveyed implementations silently lose mortality data
FhirToCdm, omopfhirmap, NACHC, fhir-to-omop-demo, fhir-x-omop do not create death rows.
Reference Implementations
- omoponfhir(java) refs/refs/omoponfhir-omopv5-r4-mapping/src/main/java/edu/gatech/chai/omoponfhir/omopv5/r4/mapping/OmopPatient.java
- ETL-German-FHIR-Core(java) refs/refs/ETL-German-FHIR-Core/src/main/java/org/miracum/etl/fhirtoomop/mapper/PatientMapper.java — Death staging via post_process_map lines 653-675
- fhir-omop-ig(fsh) refs/refs/fhir-omop-ig/input/fsh/Death.fsh — Logical model only, no FML