@cfxlabsinc/b2b-services
    Preparing search index...
    PaymentApprovalState:
        | { status: "NONE" }
        | {
            status: "REQUIRED";
            stepCount: number;
            steps: PaymentApprovalStep[] | null;
        }
        | { reason: PaymentApprovalBlockReason; status: "BLOCKED" }

    What the confirm page shows for the payment: no rule matched (today's flow), a rule needs approval, or a rule matched and the payment cannot be sent for it. steps is null when the viewer may not read the roster the names come from; stepCount still says how many approvals it needs.