Skip to content

Add uuid5 identifiers to all FHS-ingest YAML files#359

Merged
amc-corey-cox merged 2 commits intomainfrom
add-uuid5-fhs-ingest
Feb 25, 2026
Merged

Add uuid5 identifiers to all FHS-ingest YAML files#359
amc-corey-cox merged 2 commits intomainfrom
add-uuid5-fhs-ingest

Conversation

@amc-corey-cox
Copy link
Collaborator

Summary

  • Adds deterministic uuid5 identifiers to all FHS-ingest YAML files so Visit and Observation/Condition/Demography records can be linked by matching UUIDs computed from participant_id + visit_name
  • visit.yaml: Adds id slot with uuid5 expr to all 35 Visit blocks (including 3 SHHS blocks with distinct participant PHV fields)
  • 121 observation/condition/demography files: Transforms associated_visit from name:/value_mappings: to uuid5 expr: (1,771 static name + 373 value_mappings blocks)
  • 18 pht006027 blocks with associated_participant: value: UNKNOWN left unchanged (no participant PHV available)

uuid5 patterns

Static name (most common):

# Before:
associated_visit:
  name: FHS OFFSPRING EXAM 2
  range: string
# After:
associated_visit:
  expr: 'uuid5("https://w3id.org/bdchm/Visit", str({phv00008379}) + ":FHS OFFSPRING EXAM 2")'

Value mappings:

# Before:
associated_visit:
  populated_from: phv00277016
  value_mappings:
    '2': FHS NEW OFFSPRING SPOUSE EXAM 1
    '3': FHS GENERATION 3 EXAM 1
# After:
associated_visit:
  expr: 'uuid5("...", str({phv00277015}) + ":" + case(({phv00277016} == ''2'', ''FHS NEW...''), ...))'

Visit id (visit.yaml only):

# Added before existing name:
id:
  expr: 'uuid5("https://w3id.org/bdchm/Visit", str({phv00177926}) + ":" + <name_expr>)'
name:
  expr: '<existing case expr>'

Verification performed

  • All 2,584 PHV references in uuid5 expressions verified to already exist in original blocks (zero new PHVs introduced)
  • All PHVs used as local references (consistent with original populated_from usage)
  • All 124 files pass yaml.safe_load() validation
  • Block counts preserved in every file

Pre-existing data quality issues found during review

Cross-referencing visit names between observation files and visit.yaml revealed several pre-existing issues (not introduced by this PR) that are tracked in separate issues.

Test plan

  • Verify uuid5 expressions parse correctly in linkml-map transformer
  • Run FHS-ingest temporal pipeline end-to-end
  • Spot-check that Visit id values match associated_visit values for same participant + visit combination

🤖 Generated with Claude Code

Regenerate uuid5 transformation on top of v35 (PR #358). Adds
deterministic Visit identifiers for longitudinal linking:

- Type A (1771 blocks): static visit value → uuid5 expr
- Type B (373 blocks): value_mappings → uuid5 + case() expr
- Type C (35 blocks): visit.yaml id field insertion

Blocks with UNKNOWN participant are left unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@amc-corey-cox
Copy link
Collaborator Author

Regenerated on v35 (force-push)

Branch has been force-pushed with uuid5 identifiers regenerated on top of the v35 files from PR #358. The previous v33 uuid5 state has been preserved in the release repo.

Changes from previous version

Transformation summary

  • Type A (static value → uuid5 expr): 1,771 blocks
  • Type B (value_mappings → uuid5 + case() expr): 373 blocks
  • Type C (visit.yaml id insertion): 35 blocks
  • Total: 2,179 transformations across 122 files

Validation

  • All files pass validate_ingest_yamls.py (linkml-map schema validation)
  • 5,801 blocks validated across 606 files
  • Only 3 pre-existing known issues (manifest, empty il18, pr_qrs_qt nesting)

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds deterministic uuid5-based Visit identifiers across FHS-ingest YAML transforms so Visit and Observation/Condition/Demography records can be linked via uuid5(participant_id + ":" + visit_name).

Changes:

  • Replaces many associated_visit value / value_mappings blocks with expr: uuid5(...) expressions.
  • Updates several multi-visit mapping cases to compute visit UUIDs deterministically from participant + mapped visit name.
  • Keeps existing block structure while changing visit-linking representation.

Reviewed changes

Copilot reviewed 108 out of 122 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
priority_variables_transform/FHS-ingest/tak_med_diab.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/tak_insulin.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/tak_angiorecepblk.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/tak_alphablk.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/tak_aldorecepblk.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/tak_aceinhib.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/stroke.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/spo2.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/sodium_intak.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/sodium_blood.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/sleep_duration_daily.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/rdw.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/rdbld_ct.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/qt_ekg.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/pr_qrs_qt.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/pmv.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/platelet_ct.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/pad.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/opg.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/obesity.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/nt_bnp.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/mpo.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/monocyte_ncnc_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/mmp9.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/mean_art_press.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/mcv.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/mcp1.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/mchc.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/mch.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/lympho_pct.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/lactate_dehyd.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/lactate.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/insulin_in_blood.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/il6.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/il1_beta.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/il10.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/icam.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/hypertension.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/hist_cvd.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/hist_cor_bypg.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/hist_cor_angio.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/hemo_a1c.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/hemo.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/hemat.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/fvc.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/fruit_serving.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/fibrin.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/fev1.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/ferritin.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/fast_lipids.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/fast_gluc_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/fam_stroke.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/fam_income.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/factor_8.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/factor_7.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/eselectin.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/eosinophil_ncnc_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/edu_lvl.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/demography.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/d_dimer.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/cysc_bld.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/crp.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/creat_urin.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/copd.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/chloride_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/cesd_score.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/cd40.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/carotid_sten_right.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/carotid_sten_left.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/carotid_imt.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/cac_volume.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/cac_score.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/bun.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/bnp.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/bmi.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/bilirubin_tot.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/bilirubin_con.yaml Convert associated_visit constants to uuid5 expr
priority_variables_transform/FHS-ingest/basophil_ncnc_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/ast_sgot.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/apnea_hypop_index.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/angina.yaml Convert associated_visit mappings to uuid5 expr
priority_variables_transform/FHS-ingest/alt_sgpt.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/albumin_urine.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/albumin_bld.yaml Convert associated_visit constants/mappings to uuid5 expr
priority_variables_transform/FHS-ingest/afib.yaml Convert associated_visit constants/mappings to uuid5 expr

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@amc-corey-cox amc-corey-cox merged commit d6a08ea into main Feb 25, 2026
1 check passed
@amc-corey-cox amc-corey-cox deleted the add-uuid5-fhs-ingest branch February 25, 2026 20:11
@amc-corey-cox amc-corey-cox restored the add-uuid5-fhs-ingest branch February 25, 2026 20:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants