All of it is synthetic
Every patient, identifier, date, and line of report text in this data set is written test data. The names, medical record numbers, and birth dates do not belong to real people, and the reports were authored for the project. Counts below were read at commit 06f64a7 on main and 36fa30c on dev.
The three sample sets
| Set | Patients | Contents | Purpose |
|---|---|---|---|
example1 | one, Jane Smith, MRN0000002, born 1985-06-15 | two Exam Finding Lists with 6 and 7 findings, one Imaging Problem List with 10 entries, and the two source FHIR DiagnosticReports they were derived from | shows the transformation end to end, including the FHIR input |
example2 | one, John Doe, MRN0000001, born 1961-01-01 | ten exams, ten Exam Finding Lists, ten source reports in markdown, one Imaging Problem List, and a working spreadsheet | the main longitudinal data set |
example3 (development branch only) | none, unattributed reports | 31 plain-text radiology reports | extraction input for the batch pipeline and evaluation harness, not Exam Finding Lists |
example2 in detail
Ten exams over four and a half years, from 2021-05-22 to 2025-10-07, across seven distinct LOINC exam types.
| Date | Exam | LOINC |
|---|---|---|
| 2021-05-22 | XR Shoulder, left | 26158-6 |
| 2021-06-14 | XR Chest | 30745-4 |
| 2021-08-26 | CT Abdomen and Pelvis WO contrast | 36952-0 |
| 2022-02-08 | US Abdomen | 24558-9 |
| 2022-03-15 | XR Chest | 30745-4 |
| 2022-09-22 | CT Chest WO contrast | 29252-4 |
| 2022-11-03 | CT Abdomen and Pelvis W contrast IV | 36813-4 |
| 2023-01-18 | CT Abdomen and Pelvis W contrast IV | 36813-4 |
| 2023-01-25 | MR Brain WO and W contrast IV | 24587-8 |
| 2025-10-07 | CT Abdomen and Pelvis WO contrast | 36952-0 |
Findings per exam range from 9 on the shoulder radiograph to 48 on the January 2023 abdominal computed tomography. The presence values that occur are present, absent, and indeterminate.
What the branches differ on
The two branches hold the same exams and very nearly the same findings. What changed on dev is the anatomic enrichment and the regrouping that followed it.
| Measure | main | dev |
|---|---|---|
Exam Finding Lists in example2 | 10 | 10 |
| Total observations across them | 275 | 276 |
Observations carrying an anatomicLocation | 0 | 274 |
Entries in the example2 Imaging Problem List | 98 | 123 |
| Observations in that problem list | 275 | 276 |
The two observations without a location are in the brain magnetic resonance study, where the assignment rules require leaving a structure unassigned rather than forcing a wrong code when the ontology has no entry for it. The jump from 98 entries to 123 is the grouping key change, from finding code alone to finding code and location identifier; the observations did not multiply, the groups got finer. Both are explained in Imaging Problem List.
File layout
sample_data/ follows a flat naming convention, with one Exam Finding List per exam named after the exam and date.
sample_data/
example1/
sample_efl.json CT abdomen and pelvis, 6 findings
chest_ct_efl.json CT chest, 7 findings
sample_ipl.json the two aggregated, 10 entries
powerscribe-fhir.json the source FHIR DiagnosticReport for the first
chest-ct-fhir.json the source FHIR DiagnosticReport for the second
example2/
xr_shoulder_20210522.md the synthetic report
xr_shoulder_20210522_efl.json its Exam Finding List
... eight more pairs ...
MRN0000001_ipl.json all ten aggregated
findings_with_oifm_ids.xlsx the working spreadsheet
example3/ 31 .txt reports, dev branch only
The viewer reads a different, nested layout, documented in the repository’s own notes.1
viewer/data/
patients.json manifest of all patients
patients/<patient-id>/
patient.json demographics and exam count
ipl.json the Imaging Problem List
exams/<report-id>/
efl.json the Exam Finding List
report.txt raw report text
exam_type_mappings.json short display names for exam types
finding_region_mappings.json 98 finding-to-body-region entries
Its bundle covers both synthetic patients: patient-mrn0000001 with 10 exams and 98 problem list entries, and patient-mrn0000002 with 2 exams and 10 entries. This bundle was not re-enriched. On both main and dev it holds the 98-entry, location-free problem list, so the deployed first-generation viewer shows the pre-anatomy data.
The second-generation viewer has its own bundle under viewer_v2/public/data/, built from sample_data/example2, carrying the 123-entry anatomy-grouped list for the one patient, with reports as markdown rather than text and extra files for the anatomy index, anatomy clusters, and finding display information. Its manifest is stamped viewer-v2-data.1 and records its own source paths and warnings.
The spreadsheet
findings_with_oifm_ids.xlsx is the human working sheet the whole example2 set was built from. It is one row per finding per exam, with columns Exam Date, Exam Type, Exam Code, Finding, OIDM Finding Model Name, OIDM FMID, Presence OIFMA_ID, Present/Absent, and Text.2 It records where the finding model and attribute identifiers were assigned by hand, which is why it is worth keeping alongside the generated JSON.
Regenerating
Four scripts produce the data, in this order.
| Script | What it does |
|---|---|
generate_efl_from_excel.py | reads the spreadsheet, groups rows by exam, writes one *_efl.json per exam with a fresh UUID diagnosticReportId2 |
enrich_efl_anatomy.py | runs each finding through the production coding pipeline to attach an anatomicLocation, and writes a review CSV of every location decision with candidates and unresolved reasons. The pass is additive and idempotent: re-running recomputes and overwrites.3 |
generate_ipl_from_efls.py | reads a directory of *_efl.json files sorted by filename, groups by finding code and location identifier, writes one ipl.json4 |
build_viewer_v2_data.py | builds the static JSON bundle the second-generation viewer serves5 |
Only the enrichment step calls a language model. The other three are deterministic. Exact invocation belongs with the code and is not repeated here; see the repository.