Source code for mymoney.institutions.capitalone

import re
import logging

import numpy as np
import pandas as pd

from mymoney.institutions import institution_base


logging.basicConfig(
    level=logging.INFO,
    format="%(name)s\t[%(asctime)s] %(levelname)s: %(message)s",
    datefmt="%b/%d/%y %I:%M:%S %p",
    # filename="logs.log",
)


[docs] class CapitalOne(institution_base.Institution): """docs here!""" _this_institution_name = "capitalone" def __init__(self) -> None: super().__init__() def _credit_cleaning( self, input_df: pd.DataFrame, account_name: str ) -> pd.DataFrame: """docs here!""" # row["_new_Description"] == "CREDIT-CASH BACK REWARD": for cash back payments # row["_new_Description"] == "AU BONUS": for bonuses def institution_finder(val): return "Capital One " + str(val) def amount_finder(row): return row["Credit"] if np.isnan(row["Debit"]) else -row["Debit"] def is_transfer_finder(row): try: regex_flag_paypal = re.search(r"PAYPAL", str(row["_new_Description"])) regex_flag_payment = re.search(r"CAPITAL ONE \w* PYMT", str(row["_new_Description"])) except Exception: return "consider" if (regex_flag_payment or regex_flag_paypal): return "transfer" elif (not regex_flag_payment and not regex_flag_paypal): return "expense" else: return "consider" input_df["_new_Description"] = input_df["Description"].copy(deep=True) input_df["_new_Amount"] = input_df.apply(amount_finder, axis=1) input_df["_new_Date"] = input_df["Transaction Date"].copy(deep=True) input_df["_new_InstitutionCategory"] = input_df["Category"].copy(deep=True) input_df["_new_MyCategory"] = input_df["Category"].copy(deep=True) input_df["_new_Institution"] = input_df["Card No."].map(institution_finder) input_df["_new_IsTransfer"] = input_df.apply(is_transfer_finder, axis=1) # TODO: input_df["_new_IsCompatible"] = return input_df def _debit_cleaning( self, input_df: pd.DataFrame, account_name: str ) -> pd.DataFrame: """docs here!""" def institution_finder(val): return "Capital One " + str(val) def is_transfer_finder(row): try: regex_flag = re.search( r"VENMO|DISCOVER|AMEX|WELLS FARGO|PAYPAL|CITI CARD|" r"CAPITAL ONE [\w\s]*PMT|SOFI [\w\s\.]* CARD PAYMT|" r"360 Checking", str(row["_new_Description"]) ) except Exception: return "consider" if regex_flag: return "transfer" else: return "expense" input_df["_new_Description"] = input_df["Transaction Description"].copy(deep=True) input_df["_new_Amount"] = input_df["Transaction Amount"].copy(deep=True) input_df["_new_Date"] = input_df["Transaction Date"].copy(deep=True) input_df["_new_InstitutionCategory"] = pd.Series([np.nan] * len(input_df)) input_df["_new_MyCategory"] = pd.Series([np.nan] * len(input_df)) input_df["_new_Institution"] = input_df["Account Number"].map(institution_finder) input_df["_new_IsTransfer"] = input_df.apply(is_transfer_finder, axis=1) # TODO: input_df["_new_IsCompatible"] = return input_df