docs: 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)