Skip to content

Ball Valve Nested Results

Ball Valve is nested because the matcher has to separate technical relevance from procurement release.

LayerLocationPurpose
Flat rowsmatch_result.resultsRaw candidate/result rows after policy decoration.
Summary contractmatch_result.summary.grouped_output_contractPublic counts and policy checks for grouped output.
Decision tracematch_result.decision.decision_traceTop-level branch and recommendation conclusion.
Row traceresults[].decision_traceRow-level why-not map and suppression reasons.
PresentationPipelineResult.presentationGrouped display payload for frontend/docs explanation.

The current grouped helper groups by:

  1. Manufacturer
  2. Brand
  3. Result rows

Logic20 presentation can also group by:

  1. Manufacturer
  2. Brand
  3. Family
  4. Result rows

When status is AMBIGUOUS_MATCHES, INPUT_RECHECK_REQUIRED, or NO_REFERENCE, rows are not procurement-ready. They are confirmation or discovery artifacts.

StatusResult row policy
AMBIGUOUS_MATCHESCONFIRMATION_OPTIONS_ONLY
INPUT_RECHECK_REQUIREDCONFIRMATION_OPTIONS_ONLY or EMPTY_INPUT_RECHECK
NO_REFERENCEEMPTY_NO_DEFENSIBLE_REFERENCE

Frontend and docs must not flatten Ball Valve output into a simple class list. A row can be technically promising while still blocked by evidence, reference confirmation, modification approval, or procurement policy.