profiles / ViewDefinition
Condition → condition_occurrence (FHIR-flat, stage 1)
One FHIR Condition maps to one condition_occurrence row. Status filtering drops entered-in-error, refuted, and inactive/resolved conditions. Onset is resolved via a priority chain (onsetDateTime > onsetPeriod.start > recordedDate); conditions with no resolvable start date are skipped. Category drives type_concept_id (problem-list-item vs encounter-diagnosis). Domain routing is not implemented -- all conditions go to condition_occurrence regardless of OMOP vocabulary domain_id. Stage 1 of FHIR→OMOP: produce a flat row keeping source codes per vocabulary. Stage 2 joins vocab.concept to resolve concept_ids.
select.column (16)
| column name | FHIRPath | type | → OMOP column · stage-2 transform | description |
|---|---|---|---|---|
| id | Condition.id | id | condition_occurrence_id surrogate key from hash/sequence/lookup of FHIR id |
FHIR Condition.id; surrogate OMOP key derived (hash/sequence) downstream. |
| code_snomed | Condition.code.coding.where(system='http://snomed.info/sct').first().code | code | condition_concept_id lookup vocab.concept WHERE vocabulary_id='SNOMED' AND concept_code = (this column); standard_concept='S' preferred |
Condition code — SNOMED |
| code_icd10cm | Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-10-cm').first().code | code | condition_concept_id lookup vocab.concept WHERE vocabulary_id='ICD10CM' AND concept_code = (this column); standard_concept='S' preferred |
Condition code — ICD10CM |
| code_icd9cm | Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-9-cm').first().code | code | condition_concept_id lookup vocab.concept WHERE vocabulary_id='ICD9CM' AND concept_code = (this column); standard_concept='S' preferred |
Condition code — ICD9CM |
| code_icd10 | Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-10').first().code | code | condition_concept_id lookup vocab.concept WHERE vocabulary_id='ICD10' AND concept_code = (this column); standard_concept='S' preferred |
Condition code — ICD10 |
| code_text | Condition.code.text | string | condition_source_value copy text verbatim into OMOP source_value column |
Free text label from Condition.code |
| subject_id | Condition.subject | Reference(Patient) | person_id resolve PERSON reference; downstream maps to person_id |
Resolve Patient reference to integer. Defaults to 0 if unresolved; omoponfhir throws FHIRException. |
| condition_start_date | Condition.onset[x] | dateTime | Period | Age | Range | string | condition_start_date coalesce(onsetDateTime, onsetPeriod.start, recordedDate) |
Falls back through onsetDateTime > onsetPeriod.start > recordedDate. Condition skipped if none resolvable. |
| condition_start_datetime | Condition.onset[x] | dateTime | Period | condition_start_datetime coalesce(onsetDateTime, onsetPeriod.start, recordedDate) |
Full ISO datetime when available. omoponfhir uses 9999-12-31 when missing (line 542). |
| condition_end_date | Condition.abatement[x] | dateTime | Period | condition_end_date coalesce(abatementDateTime, abatementPeriod.end) |
FhirToCdm falls back to visit end date when absent (line 301-302). No other implementation does this. |
| condition_end_datetime | Condition.abatement[x] | dateTime | Period | condition_end_datetime coalesce(abatementDateTime, abatementPeriod.end) |
|
| condition_status | Condition.clinicalStatus | CodeableConcept | condition_status_concept_id resolve CONCEPT reference; downstream maps to condition_status_concept_id |
active/recurrence/relapse->32902, absent->0. ETL-German uses diagnostic confidence instead. |
| condition_status_text | Condition.clinicalStatus.coding[0].code | code | condition_status_source_value |
Verbatim clinical status code. ETL-German stores diagnostic confidence code here. |
| stop_reason | Condition.abatementString | string | stop_reason substring(abatementString, 0, 20) |
Free-text reason for resolution. Truncated to 20 chars. fhir-x-omop uses note[0].text instead. |
| performer_id | Condition.asserter | Reference(Practitioner) | provider_id coalesce(resolveRef(asserter), resolveRef(recorder)) |
Asserter preferred; recorder fallback. omoponfhir uses asserter only. fhir-x-omop uses recorder only. |
| encounter_id | Condition.encounter | Reference(Encounter) | visit_occurrence_id resolve VISIT_OCCURRENCE reference; downstream maps to visit_occurrence_id |
Resolve Encounter reference. FhirToCdm also sets visit_detail_id from encounter. |
Raw JSON
{
"resourceType": "ViewDefinition",
"id": "omop-condition-condition-occurrence",
"url": "https://fhir2omop.health-samurai.io/ViewDefinition/omop-condition-condition-occurrence",
"version": "0.2.0",
"name": "OmopConditionConditionOccurrenceView",
"title": "Condition → condition_occurrence (FHIR-flat, stage 1)",
"status": "draft",
"experimental": true,
"description": "One FHIR Condition maps to one condition_occurrence row. Status filtering drops entered-in-error, refuted, and inactive/resolved conditions. Onset is resolved via a priority chain (onsetDateTime > onsetPeriod.start > recordedDate); conditions with no resolvable start date are skipped. Category drives type_concept_id (problem-list-item vs encounter-diagnosis). Domain routing is not implemented -- all conditions go to condition_occurrence regardless of OMOP vocabulary domain_id.\n\nStage 1 of FHIR→OMOP: produce a flat row keeping source codes per vocabulary. Stage 2 joins vocab.concept to resolve concept_ids.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-target-table",
"valueString": "condition_occurrence"
},
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-edge",
"valueString": "Condition__condition_occurrence"
}
],
"resource": "Condition",
"select": [
{
"column": [
{
"name": "id",
"path": "Condition.id",
"type": "id",
"description": "FHIR Condition.id; surrogate OMOP key derived (hash/sequence) downstream.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_occurrence_id"
},
{
"url": "transform",
"valueString": "surrogate key from hash/sequence/lookup of FHIR id"
}
]
}
]
},
{
"name": "code_snomed",
"path": "Condition.code.coding.where(system='http://snomed.info/sct').first().code",
"type": "code",
"description": "Condition code — SNOMED",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_concept_id"
},
{
"url": "transform",
"valueString": "lookup vocab.concept WHERE vocabulary_id='SNOMED' AND concept_code = (this column); standard_concept='S' preferred"
}
]
}
]
},
{
"name": "code_icd10cm",
"path": "Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-10-cm').first().code",
"type": "code",
"description": "Condition code — ICD10CM",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_concept_id"
},
{
"url": "transform",
"valueString": "lookup vocab.concept WHERE vocabulary_id='ICD10CM' AND concept_code = (this column); standard_concept='S' preferred"
}
]
}
]
},
{
"name": "code_icd9cm",
"path": "Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-9-cm').first().code",
"type": "code",
"description": "Condition code — ICD9CM",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_concept_id"
},
{
"url": "transform",
"valueString": "lookup vocab.concept WHERE vocabulary_id='ICD9CM' AND concept_code = (this column); standard_concept='S' preferred"
}
]
}
]
},
{
"name": "code_icd10",
"path": "Condition.code.coding.where(system='http://hl7.org/fhir/sid/icd-10').first().code",
"type": "code",
"description": "Condition code — ICD10",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_concept_id"
},
{
"url": "transform",
"valueString": "lookup vocab.concept WHERE vocabulary_id='ICD10' AND concept_code = (this column); standard_concept='S' preferred"
}
]
}
]
},
{
"name": "code_text",
"path": "Condition.code.text",
"type": "string",
"description": "Free text label from Condition.code",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_source_value"
},
{
"url": "transform",
"valueString": "copy text verbatim into OMOP source_value column"
}
]
}
]
},
{
"name": "subject_id",
"path": "Condition.subject",
"type": "Reference(Patient)",
"description": "Resolve Patient reference to integer. Defaults to 0 if unresolved; omoponfhir throws FHIRException.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "person_id"
},
{
"url": "transform",
"valueString": "resolve PERSON reference; downstream maps to person_id"
}
]
}
]
},
{
"name": "condition_start_date",
"path": "Condition.onset[x]",
"type": "dateTime | Period | Age | Range | string",
"description": "Falls back through onsetDateTime > onsetPeriod.start > recordedDate. Condition skipped if none resolvable.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_start_date"
},
{
"url": "transform",
"valueString": "coalesce(onsetDateTime, onsetPeriod.start, recordedDate)"
}
]
}
]
},
{
"name": "condition_start_datetime",
"path": "Condition.onset[x]",
"type": "dateTime | Period",
"description": "Full ISO datetime when available. omoponfhir uses 9999-12-31 when missing (line 542).",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_start_datetime"
},
{
"url": "transform",
"valueString": "coalesce(onsetDateTime, onsetPeriod.start, recordedDate)"
}
]
}
]
},
{
"name": "condition_end_date",
"path": "Condition.abatement[x]",
"type": "dateTime | Period",
"description": "FhirToCdm falls back to visit end date when absent (line 301-302). No other implementation does this.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_end_date"
},
{
"url": "transform",
"valueString": "coalesce(abatementDateTime, abatementPeriod.end)"
}
]
}
]
},
{
"name": "condition_end_datetime",
"path": "Condition.abatement[x]",
"type": "dateTime | Period",
"description": "",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_end_datetime"
},
{
"url": "transform",
"valueString": "coalesce(abatementDateTime, abatementPeriod.end)"
}
]
}
]
},
{
"name": "condition_status",
"path": "Condition.clinicalStatus",
"type": "CodeableConcept",
"description": "active/recurrence/relapse->32902, absent->0. ETL-German uses diagnostic confidence instead.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_status_concept_id"
},
{
"url": "transform",
"valueString": "resolve CONCEPT reference; downstream maps to condition_status_concept_id"
}
]
}
]
},
{
"name": "condition_status_text",
"path": "Condition.clinicalStatus.coding[0].code",
"type": "code",
"description": "Verbatim clinical status code. ETL-German stores diagnostic confidence code here.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "condition_status_source_value"
}
]
}
]
},
{
"name": "stop_reason",
"path": "Condition.abatementString",
"type": "string",
"description": "Free-text reason for resolution. Truncated to 20 chars. fhir-x-omop uses note[0].text instead.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "stop_reason"
},
{
"url": "transform",
"valueString": "substring(abatementString, 0, 20)"
}
]
}
]
},
{
"name": "performer_id",
"path": "Condition.asserter",
"type": "Reference(Practitioner)",
"description": "Asserter preferred; recorder fallback. omoponfhir uses asserter only. fhir-x-omop uses recorder only.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "provider_id"
},
{
"url": "transform",
"valueString": "coalesce(resolveRef(asserter), resolveRef(recorder))"
}
]
}
]
},
{
"name": "encounter_id",
"path": "Condition.encounter",
"type": "Reference(Encounter)",
"description": "Resolve Encounter reference. FhirToCdm also sets visit_detail_id from encounter.",
"extension": [
{
"url": "https://fhir2omop.health-samurai.io/StructureDefinition/omop-column-target",
"extension": [
{
"url": "column",
"valueString": "visit_occurrence_id"
},
{
"url": "transform",
"valueString": "resolve VISIT_OCCURRENCE reference; downstream maps to visit_occurrence_id"
}
]
}
]
}
]
}
],
"targetTable": "condition_occurrence",
"edgeKey": "Condition__condition_occurrence"
}