The working core of every sheet: claims assert a relation with a grade ceiling; evidence units bind claims to studies with extraction detail; studies carry design, model, duration, RoB. They join on stable hashed keys — claim → evidence → study — and every join resolves inside the release.
# pandas — claims with their evidence depth import pandas as pd claims = pd.read_csv("claims.csv") evidence = pd.read_csv("evidence.csv") studies = pd.read_csv("studies.csv") # which graded claims carry the most bound evidence? depth = (evidence.groupby("claim_id").size() .rename("bound_units").reset_index()) claims.merge(depth, on="claim_id") \ .sort_values("bound_units", ascending=False) \ [["claim_id", "grade", "direction", "bound_units"]].head()
-- SQL — benefit claims where opposition was bound SELECT c.claim_id, c.relation, c.grade, COUNT(o.record_id) AS opposing_records FROM claims c JOIN oppositions o ON o.claim_id = c.claim_id AND o.verdict = 'BOUND' WHERE c.direction = 'BENEFIT' GROUP BY c.claim_id, c.relation, c.grade ORDER BY opposing_records DESC;
# Databricks — the turmeric share, zero download # catalog: mfi_turmeric (Delta Sharing recipient) spark.sql("SELECT * FROM mfi_turmeric.claims WHERE grade='HIGH'").show()
Record IDs are content-derived and stable across rebuilds — CLM-…, STU-… identifiers don't drift between releases, so your queries survive version deltas. The version_deltas ledger records exactly which rows changed between releases, so you can diff rather than re-scan.