:param payment_psp_object: an instance representing the original payment in the psp
    :param amount: the amount to refund
    :param client_ref: a reference that will appear on the customer's credit card statement
    :return: a tuple (success, refund_psp_object)

def refund_payment(payment_psp_object: Model, amount: Money, client_ref: str) -> Tuple[bool, Model]:
    """
    :param payment_psp_object: an instance representing the original payment in the psp
    :param amount: the amount to refund
    :param client_ref: a reference that will appear on the customer's credit card statement
    :return: a tuple (success, refund_psp_object)
    """
    logger.debug('refund-payment', payment_psp_object=payment_psp_object, amount=amount, client_ref=client_ref)
    if amount.amount <= 0:
        raise PreconditionError('Can only refund positive amounts')
    psp = psp_for_model_instance(payment_psp_object)
    return psp.refund_payment(payment_psp_object, amount, client_ref)