@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, and a charge the chain rejects (an unfunded account included) leaves that row FAILED. A FAILED row does not count as collected, so the next nightly sweep charges again under the same key, which the failed row has released. failed and skipped are surfaced through the child workflow's history.

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

    Set on pending / charged: true when this call created the transfer, false on a replay.

    customerId: SelectCustomer["externalId"]
    feeTransferId?: string
    periodKey: string
    reason?: string
    status: "charged" | "pending" | "failed" | "skipped"

    pending: the transfer exists and its ledger workflow has not settled it.