Ordering rule: an item comes first when its absence forces re-reading an already extracted article or makes a protocol likelihood unfittable.
Add unit to result lines (Q1; forces re-extraction). Protocol "Missing statistics and conversions": HbA1c mmol/mol to percent, WOMAC rescaled to 0 to 100; outcomes.csv O06 "converted using baseline weight", O24B/O24C "direction aligned per instrument". The result table has no unit field. Add: unit required on change, percent_change, final, md, slope; instrument required for O24A to O24C, O41, O80 (SF-36, SF-12, IWQOL-Lite-CT, KCCQ, WOMAC, other name); scale_range (0-20, 0-50, 0-100) for O80.
Known status as counts, and separate the three meanings of t_weeks (Q1, Q2, Q3; contradiction). Protocol Data items: "number with known status at t by arm; observation period". Event outcomes: counts enter the cloglog likelihood "only when status is known for every randomized participant at t, the longest follow-up at which that holds" (95 percent in sensitivity); recorded harms use "the nominal observation period in years"; Rates: "median follow-up [is] not [a] substitute". The manual's known_status (complete, partial, unknown) cannot feed any of these, and "the median follow up as t_weeks" is exactly what the protocol forbids. Replace on events lines with: status_weeks (the t), n_unknown (randomized participants lost or withdrawn from follow up before t without a target event or documented competing death; 0 when all are accounted for), observation_weeks (nominal adverse event observation period of the arm: treatment period plus any protocol follow up window). Allow several events lines per arm at different status_weeks. Move follow up to the arm table: median_follow_up_weeks, follow_up_type (median, mean, max, planned); the analyzed horizon is "the median follow-up of the network's reference arms".
Competing event inputs (Q1, Q3). Protocol Data items: "competing deaths without a preceding target event and person years at risk by arm ... any reported hazard ratio for the competing event"; Rates: "treatment exposure and median follow-up are not substitutes". Add on events and rate lines: competing_deaths (optional count), person_years_type (at_risk_first_event, exposure, total_follow_up, unclear; required whenever person_years is given), optional week_from for interval specific counts (piecewise route). Add contrast statistic competing_hr (estimate, lower, upper, estimator) carrying the target outcome_id.
Estimand per intercurrent event with a sponsor term mapping (Q1, Q4). Protocol Data items: "estimands and the strategy for each intercurrent event (treatment discontinuation, rescue medication, death)"; Estimands: "classified by its strategy for every intercurrent event". One value cannot encode "on treatment without rescue". Add to study and result lines ie_discontinuation, ie_rescue, ie_death (same vocabulary as estimand); estimand=treatment_policy only when discontinuation and rescue are both treatment policy. Mapping table in the manual: "treatment regimen", "treatment policy" to treatment_policy; "trial product", "efficacy estimand", "on treatment without rescue", "hypothetical" to hypothetical (EM12 already says "hypothetical or trial product"); "on treatment", "while on treatment" to while_on_treatment; completers or per protocol analyses to population=completers|per_protocol with ie_discontinuation=while_on_treatment.
Nonrandomized studies: estimand=not_stated contradicts harms_nrs.csv (Q1, Q2, Q5). That table requires "(a) initial treatment (intention to treat analogue) and (b) on treatment; never combined", non users "in a separate secondary stratum", latency, a checkable minimum confounder set and effect measures pooled separately. Replace with: design controlled (new_user_cohort, active_comparator_new_user, target_trial_emulation, nested_case_control, case_control, self_controlled, procedure_cohort, pregnancy_cohort); on result lines nrs_estimand (initial_treatment, on_treatment, not_stated), comparator_type (active, non_user), latency_weeks, risk_window (short); confounders as a ; list from a vocabulary mirroring harms_nrs.csv; several comparators as arms C1, C2 with comparator_class (SGLT2I, DPP4I, other_glucose_lowering, non_user). Recommendation: do not start the 209 include_harms records tonight; run them as a second pass under these fields.
Cluster and crossover fields (Q1). Protocol sec-designs needs the design effect 1 + (m − 1)ρ and the paired contrast or first period rule. Study line: clusters_n, mean_cluster_size, icc, cluster_adjusted (yes, no); periods_n, period_weeks, washout_weeks, carryover_addressed (washout, analysis, both, no). Result line: period (all_paired, first, all_unpaired).
subgroup on result lines; documentation of the 80 percent rule (Q1). Protocol Participants: a trial enters a population "when results are reported for a subgroup defined at baseline that meets it"; Meta-regression: "Subgroup results reported within trials are extracted". Add subgroup=<variable>:<level> (for example egfr:<60, established_cvd:yes), absent for the whole trial; extract now only subgroups that place the trial in another population, for that population's primary outcomes; defer modifier subgroups. Study line: population_percent, stratum_percent (share meeting the definition or stratum), eligibility_key (age, BMI, HbA1c, eGFR, LVEF ranges in a few words), run_in_enrichment for P02W (populations.csv: "recorded separately").
Define the replacement key (Q4). "A later line with the same key fields replaces an earlier one" names no keys; two O22D composites or two subgroups overwrite each other silently. Result key: study_id, outcome_id, definition_stratum, subgroup, week, ie_discontinuation, ie_rescue, ie_death, population, arm_id, vs_arm_id, statistic, source. Baseline key: study_id, arm_id, variable, statistic, subgroup. Arm key: study_id, arm_id.
Coverage lines (Q2, Q4, Q5). Add one table=coverage|outcome_id=O21|status=reported|not_reported|figure_only|registry_only line per protocol outcome applicable to the study's populations. Without it the coordinator cannot tell an extractor's omission from true absence when sets A and B differ, except by re-reading. figure_only also resolves the contradiction between the manual's "not figures only" and the protocol's "Values read from figures are digitized twice independently and flagged".
Cut the scope of result lines (Q4). "Every time point ... every estimand ... every source" is combinatorial (a CVOT: 20 outcomes, 3 sources, 2 estimands). Replace with: time points inside any windows.csv window for the outcome and population, plus end of randomized treatment and longest follow up; every estimand at those; journal and supplement always; registry, abstract and regulatory lines only when the value is absent from the journal or differs from it (the protocol's "all values are kept" governs disagreement, not duplication).
Decide responders versus events by model_scale; derive hazard_type (Q2, Q3, Q4). Rule: responders for every outcome with model_scale=log_odds (not only O03 and O11A to O11E; O60, O61, O90A to O90C, O110B, O111, O111B, O112, O113 too); events for log_hazard_cloglog and time_to_event; rate and rate_ratio only for O04B. Drop hazard_type from extraction: the protocol says "the hazard type follows the estimator" and not_applicable is O20 only, so extractors offered a free choice will disagree; derive it at analysis from estimator and outcome. Add on hr lines ph_test (not_reported, not_rejected, rejected) and ph_p (protocol: "reported proportionality assessments are extracted").
Controlled component vocabulary and flags (Q1, Q4). definition_stratum as free text will never match between extractors. Tokens: cv_death; mi; stroke; ua_hosp; hf_hosp; hf_urgent; revasc; all_cause_death; kidney_failure; dialysis; transplant; egfr_decline_50; egfr_decline_40; creatinine_doubling; egfr_lt15; kidney_death; macroalbuminuria. Add mapped=pre2017 on O04 lines mapped under the outcome's mapping rule (protocol: "mapped trials are flagged and excluded in a sensitivity analysis") and adjudicated (yes, no) on O21, O21B, O29 lines (O29 "investigator reported in a sensitivity analysis").
Second tier statistics (Q3, Q4). On change and final: allow median, q1, q3, min, max in place of estimate plus dispersion, and optional p or t (protocol: SDs "derived from ... t statistics or P values; medians ... converted and flagged"). cuminc: optional se. Make ci_level an explicit optional field on every line with lower and upper. Numeric rules: values as printed, no rounding, sign kept, percent as a number, p_lt=0.001 for inequalities.
Denominator rule (Q4). n on result lines is the denominator printed in the source; population says which; the analysis substitutes n_randomized from the arm table (protocol: "Denominators are the number randomized; the safety population is used only when the randomized number is not reported, and those trials are flagged"). Never let the extractor substitute.
RoB 2: capture the design facts now, defer the judgments (Q5). Study line: sequence_generation (computer, other_adequate, not_reported, inadequate), allocation_concealment (central, pharmacy_or_sealed, not_reported, inadequate), outcome_adjudication (yes, no, not_reported), sap_available (yes, no). These sit in the methods section the extractor reads anyway. Note the conflict for the later pass: the manual's "Never copy sentences" versus the protocol's "signaling question answers and supporting quotations are stored as data"; resolve by allowing quotations in a non public RoB table.
Figure index lines so digitization can be deferred without re-reading (Q5). table=figure|outcome_id=|arm_ids=|source=R0001234:Figure 2|curve=km_survival|km_cuminc|aalen_johansen|mean_over_time|numbers_at_risk=yes|no|competing_curve=yes|no. Curves, numbers at risk, proportionality and constant hazard judgments are then a later reviewer pass (protocol: "made by two reviewers before relative effects are modeled").
State what is not an extractor item (Q5). Registration versus start date and registered but unreported outcomes (ROB-MEN) come from the registry packet and inventory; the coordinator derives them. Minor additions to baseline: add waist to the always list (protocol names it) and insulin_use, metformin_use, sglt2i_use (percent) to document S0 to S3.
Clarifications, not contradictions. Double extraction of study and arm characteristics is stricter than the protocol's "extracted by one reviewer and verified by a second"; say so in one clause. Add one worked example block (study, arms, baseline, results, coverage, done) per table; it does more for agreement between two Opus extractors than any rule.