profiles / ViewDefinition

Condition → condition_occurrence (FHIR-flat, stage 1)

Condition → flat:condition_occurrence edge mapspec 16 columns

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"
}