You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Batch-2 (business completeness) item from the 2026-08-02 review. Small scope, closes an existing loop.
Problem
crm_opportunity.win_reason / loss_reason / loss_details exist, and the loss_reason field comment even says "required when stage moves to closed_"* — but nothing enforces it (crm_case has exactly the pattern needed: resolution_required_for_closed). No report or dashboard widget consumes the fields either, so they are empty and invisible.
Scope
Enforce capture: requiredWhen conditional rules (v17, server-enforced — already available on the pinned protocol) or a cross_field validation — loss_reason required on closed_lost, win_reason on closed_won.
Analytics: win-rate metric (won / (won+lost)) by owner and by lead source; loss-reason breakdown widget; both feed from opportunity_metrics (add measures as needed).
Batch-2 (business completeness) item from the 2026-08-02 review. Small scope, closes an existing loop.
Problem
crm_opportunity.win_reason/loss_reason/loss_detailsexist, and theloss_reasonfield comment even says "required when stage moves to closed_"* — but nothing enforces it (crm_casehas exactly the pattern needed:resolution_required_for_closed). No report or dashboard widget consumes the fields either, so they are empty and invisible.Scope
requiredWhenconditional rules (v17, server-enforced — already available on the pinned protocol) or across_fieldvalidation —loss_reasonrequired onclosed_lost,win_reasononclosed_won.opportunity_metrics(add measures as needed).Acceptance