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