# Synthea procedures.csv in OMOP: why rows reach Observation or Drug, checked against ETL-Synthea v5.4 SQL

OHDSI ETL-Synthea v5.4 reads procedures.csv only into procedure_occurrence and measurement, filtered by the target concept domain. A domain-driven ETL keeps the rest. The routing table, the SQL lines it rests on, and how to compare the two.

Page: https://omopforge.grain64.com/notes/synthea-procedures-domain-routing · Checked against OHDSI/ETL-Synthea commit e59d1c7dea83472be5e4166117ce197e203fcb7a, inst/sql/sql_server/cdm_version/v540.

Origin: a question on the OHDSI forum (https://forums.ohdsi.org/t/26001): a domain-driven ETL from Synthea CSV produces Observation and Drug rows from procedures.csv, while ETL-Synthea puts procedures into the procedure table.

Routing in ETL-Synthea v5.4 (each target reads the source through the vocabulary map and filters on the target concept's domain):

| Source file | Loaded into | Domain filter |
|---|---|---|
| procedures.csv | procedure_occurrence | Procedure |
| procedures.csv | measurement | Measurement |
| observations.csv | measurement | Measurement |
| observations.csv | observation | Observation |
| allergies.csv | observation | Observation |
| conditions.csv | observation | Observation |
| medications.csv | drug_exposure | Drug |
| immunizations.csv | drug_exposure | Drug |

procedures.csv is read only into procedure_occurrence (domain Procedure, SNOMED source code, standard concept, not invalid) and measurement (domain Measurement). Procedures whose standard concept is in the Observation or Drug domain are not loaded into those tables by ETL-Synthea, because observation reads allergies, conditions and observations, and drug_exposure reads medications and immunizations.

A domain-driven ETL maps each code with "Maps to" and routes by the concept's domain_id, so it keeps those rows. Both are legitimate. To compare: count rows per (source file, target domain) rather than per target table; decide which rule the network study expects; record the ETL-Synthea version and the vocabulary release, because a concept's domain can change between releases.

The public benchmark applies the same reference-first method to person, visit_occurrence and condition_occurrence: https://omopforge.grain64.com/benchmark
