VERBATIM port of v1 getChartReviewJobKey (non-manual paths). These keys are the cross-app
idempotency contract with the legacy pipeline: a chart review triggered by v1 wrote a
job_executions row under exactly this key (often with a ~114-year TTL), and producing the
same key here is what prevents v2 from re-running it.
Known v1 quirk preserved on purpose: a utilization_end trigger with no
lastUtilizationEndDate yields a literal "undefined" suffix.
VERBATIM port of v1 getChartReviewJobKey (non-manual paths). These keys are the cross-app idempotency contract with the legacy pipeline: a chart review triggered by v1 wrote a job_executions row under exactly this key (often with a ~114-year TTL), and producing the same key here is what prevents v2 from re-running it.
Known v1 quirk preserved on purpose: a utilization_end trigger with no lastUtilizationEndDate yields a literal "undefined" suffix.