contract-computation-null-propagation
Contract Computation Null Propagation
What This Skill Diagnoses
A Liquid template computation that chains a conditionally-shown questionnaire variable produces null — causing the final computed field (e.g., sd_salary) to display as blank or as the raw variable name in the contract preview/view.
Root mechanism: Liquid arithmetic filters (plus, minus, times, divided_by) return null if either operand is null or missing. When a questionnaire variable is conditionally shown (behind a flag like sd_v_c), and the flag is false at contract creation, the variable is never prompted and never stored in ContractData. When the computation runs at preview/view time, it evaluates "value + missing" → null, and the entire chain collapses.
Example (BharatPe, March 2026):
sd_total_a = sd_fixed_a | plus: sd_variable_a
sd_salary = sd_total_a
sd_variable_a is shown only when sd_v_c (Variable Component present) is true. For contracts where sd_v_c = false, sd_variable_a is never stored → sd_total_a and sd_salary are both null → contract shows blank.
This is different from:
questionnaire-hidden-variable-data-loss— values were stored, then wiped by a platform edithubspot-sfdc-conditional-overpersistence— values were incorrectly persisted, then later cleaned up