@cfxlabsinc/b2b-services
    Preparing search index...

    Type Alias RouteExplanation

    One route's candidacy verdict and its evaluated route matcher. rejectedBy is null when the matcher accepted; then deniedBy and ResolvedRoute.reason explain the cross-route rules and activation. A placement without a grant on the route's program is a route matcher rejection on its programIds clause.

    type RouteExplanation = {
        criteria: MatcherCriteria;
        deniedBy: (
            Omit<CrossRouteDenial, "routeId" | "matcher" | "criteria"> & {
                matcher: ExplainNode;
            }
        )[];
        rejectedBy: "ROUTE_MATCHER"
        | null;
        routeId: string;
        routeMatcher: ExplainNode;
        vendorId: string;
    }
    Index
    criteria: MatcherCriteria

    The enriched criteria the route matcher was evaluated against.

    deniedBy: (
        Omit<CrossRouteDenial, "routeId" | "matcher" | "criteria"> & {
            matcher: ExplainNode;
        }
    )[]

    The cross-route activation rules, a vendor's own restriction among them, that remove this route before activation, each with its matcher's evaluated tree; search still keeps the route, resolve() drops it.

    rejectedBy: "ROUTE_MATCHER" | null
    routeId: string
    routeMatcher: ExplainNode
    vendorId: string