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

    Type Alias RecurringFeeChargeOutcome

    One customer's outcome for one period.

    Only charged leaves a durable trace in Postgres, as the fee_transfer row. insufficient_funds leaves none, which is what keeps the customer due: the nightly sweep re-attempts them and bills once the account is funded. failed and skipped are surfaced through the child workflow's history.

    type RecurringFeeChargeOutcome = {
        customerId: SelectCustomer["externalId"];
        feeTransferId?: string;
        periodKey: string;
        reason?: string;
        status: "charged" | "insufficient_funds" | "failed" | "skipped";
    }
    Index
    customerId: SelectCustomer["externalId"]
    feeTransferId?: string
    periodKey: string
    reason?: string
    status: "charged" | "insufficient_funds" | "failed" | "skipped"