import logging import math # Configure logging logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(name)s - %(message)s", ) logger = logging.getLogger(__name__) def __main__(record_counts_revolving_trade_count:int,record_counts_total_trade_count:int,score_results:float,total_amount_high_credit:float,revolving_amount_credit_limit:float,revolving_amount_percent_available_credit:float,revolving_amount_current_balance:float,revolving_amount_monthly_payment:float,revolving_amount_high_credit:float,closed_with_balance_amount_current_balance:float,closed_with_balance_amount_monthly_payment:float,AGG101:float,AGG102:float,AT09S:int,AT20S:int,AT31S:int,BALMAG01:float,BC21S:int,PAYMNT10:float,REV83:float,US01S:int,monthly_income:float,internal_monthly_payment:float,installment_amount_monthly_payment:float,open_amount_current_balance:int,installment_amount_current_balance:int)->dict: #record_counts_revolving_trade_count treatment if record_counts_revolving_trade_count is None or math.isnan(record_counts_revolving_trade_count): record_counts_revolving_trade_count = None elif 0 <= record_counts_revolving_trade_count <= 999: record_counts_revolving_trade_count = min(30, max(0, record_counts_revolving_trade_count)) else: record_counts_revolving_trade_count = None #record_counts_total_trade_count treatment if record_counts_total_trade_count is None or math.isnan(record_counts_total_trade_count): record_counts_total_trade_count = None elif 0 <= record_counts_total_trade_count <= 999: record_counts_total_trade_count = min(35, max(0, record_counts_total_trade_count)) else: record_counts_total_trade_count = None #score_results treatment if score_results is None or math.isnan(score_results): score_results = None elif 350.0 <= score_results <= 850.0: score_results = min(850.0, max(350.0, score_results)) else: score_results = None #revolving_amount_credit_limit treatment if revolving_amount_credit_limit is None or math.isnan(revolving_amount_credit_limit): revolving_amount_credit_limit = None elif 0.0 <= revolving_amount_credit_limit <= 999999999.0: revolving_amount_credit_limit = min(20000.0, max(0.0, revolving_amount_credit_limit)) else: revolving_amount_credit_limit = None #revolving_amount_percent_available_credit treatment if revolving_amount_percent_available_credit is None or math.isnan(revolving_amount_percent_available_credit): revolving_amount_percent_available_credit = None elif 0.0 <= revolving_amount_percent_available_credit <= 100.0: revolving_amount_percent_available_credit = min(100.0, max(0.0, revolving_amount_percent_available_credit)) else: revolving_amount_percent_available_credit = None #total_amount_monthly_payment if (revolving_amount_monthly_payment is None or math.isnan(revolving_amount_monthly_payment)) and (installment_amount_monthly_payment is None or math.isnan(installment_amount_monthly_payment)): total_amount_monthly_payment = None else: total_amount_monthly_payment = sum(value for value in [revolving_amount_monthly_payment, installment_amount_monthly_payment] if value is not None) #total_amount_current_balance # if (open_amount_current_balance in [None, ""] or pd.isna(open_amount_current_balance)) and (revolving_amount_current_balance in [None, ""] or pd.isna(revolving_amount_current_balance)) and (installment_amount_current_balance in [None, ""] or pd.isna(installment_amount_current_balance)): # if pd.isna(open_amount_current_balance) and pd.isna(revolving_amount_current_balance) and pd.isna(installment_amount_current_balance): # total_amount_current_balance = None # else: # total_amount_current_balance = sum(filter(pd.notna, [open_amount_current_balance, revolving_amount_current_balance, installment_amount_current_balance])) if (open_amount_current_balance is None or math.isnan(open_amount_current_balance)) and (revolving_amount_current_balance is None or math.isnan(revolving_amount_current_balance)) and (installment_amount_current_balance is None or math.isnan(installment_amount_current_balance)): total_amount_current_balance = None else: total_amount_current_balance = sum(value for value in [open_amount_current_balance, revolving_amount_current_balance, installment_amount_current_balance] if value is not None and value != "") #total_amount_current_balance treatment if total_amount_current_balance is None or math.isnan(total_amount_current_balance): total_amount_current_balance = None elif 0.0 <= total_amount_current_balance <= 999999999.0: total_amount_current_balance = min(120000.0, max(0.0, total_amount_current_balance)) else: total_amount_current_balance = None #revolving_amount_current_balance treatment if revolving_amount_current_balance is None or math.isnan(revolving_amount_current_balance): revolving_amount_current_balance = None elif 0.0 <= revolving_amount_current_balance <= 999999999.0: revolving_amount_current_balance = min(20000.0, max(0.0, revolving_amount_current_balance)) else: revolving_amount_current_balance = None #revolving_amount_monthly_payment treatment if revolving_amount_monthly_payment is None or math.isnan(revolving_amount_monthly_payment): revolving_amount_monthly_payment = None elif 0.0 <= revolving_amount_monthly_payment <= 999999999.0: revolving_amount_monthly_payment = min(500.0, max(0.0, revolving_amount_monthly_payment)) else: revolving_amount_monthly_payment = None #revolving_amount_high_credit treatment if revolving_amount_high_credit is None or math.isnan(revolving_amount_high_credit): revolving_amount_high_credit = None elif 0.0 <= revolving_amount_high_credit <= 999999999.0: revolving_amount_high_credit = min(20000.0, max(0.0, revolving_amount_high_credit)) else: revolving_amount_high_credit = None #AGG101 treatment if AGG101 is None or math.isnan(AGG101): AGG101 = None elif 0.0 <= AGG101 <= 999999999.0: AGG101 = min(40000.0, max(0.0, AGG101)) else: AGG101 = 0.0 #AGG102 treatment if AGG102 is None or math.isnan(AGG102): AGG102 = None elif 0.0 <= AGG102 <= 999999999.0: AGG102= min(60000.0, max(0.0, AGG102)) else: AGG102 = 0.0 #AT09S treatment if AT09S is None or math.isnan(AT09S): AT09S = None elif 0 <= AT09S <= 999: AT09S = min(10, max(0, AT09S)) else: AT09S = 0 #AT20S treatment if AT20S is None or math.isnan(AT20S): AT20S = None elif 0 <= AT20S <= 999: AT20S = min(500, max(0, AT20S)) else: AT20S = 0 #AT31S treatment if AT31S is None or math.isnan(AT31S): AT31S = None elif 0 <= AT31S <= 999: AT31S = min(100, max(0, AT31S)) else: AT31S = 0 #BALMAG01 treatment if BALMAG01 is None or math.isnan(BALMAG01): BALMAG01 = None elif 0.0 <= BALMAG01 <= 600.0: BALMAG01 = min(500.0, max(0.0, BALMAG01)) else: BALMAG01 = 500.0 #BC21S treatment if BC21S is None or math.isnan(BC21S): BC21S = None elif 0 <= BC21S <= 999: BC21S = min(100, max(0, BC21S)) else: BC21S = 100 #PAYMNT10 treatment if PAYMNT10 is None or math.isnan(PAYMNT10): PAYMNT10 = None elif 0.0 <= PAYMNT10 <= 999.0: PAYMNT10 = min(15.0, max(0.0, PAYMNT10)) else: PAYMNT10 = 0.0 #REV83 treatment if REV83 is None or math.isnan(REV83): REV83 = None elif 0.0 <= REV83 <= 999.0: REV83 = min(500.0, max(0.0, REV83)) else: REV83 = 500.0 #US01S treatment if US01S is None or math.isnan(US01S): US01S = None elif 0 <= US01S <= 999: US01S = min(10, max(0, US01S)) else: US01S = 10 #internal_monthly_payment treatment if internal_monthly_payment is None or math.isnan(internal_monthly_payment): internal_monthly_payment = 92.97 #monthly_income treatment if (monthly_income is not None and monthly_income != "") and not math.isnan(monthly_income): if 0.0 <= monthly_income <= 999999999.0: monthly_income = min(8500.0, max(0.0, monthly_income)) else: monthly_income = None #pti calculation if (monthly_income not in [None, 0.0] and not math.isnan(monthly_income) and internal_monthly_payment not in [None, ""] and not math.isnan(internal_monthly_payment) and total_amount_monthly_payment not in [None, ""] and not math.isnan(total_amount_monthly_payment)): pti = (total_amount_monthly_payment + internal_monthly_payment) / monthly_income elif ((monthly_income != 0.0) and monthly_income not in [None, ""] and monthly_income != monthly_income) and (total_amount_monthly_payment not in [None, ""] and total_amount_monthly_payment != total_amount_monthly_payment): pti = (total_amount_monthly_payment + 92.97) / monthly_income else: pti = None #total_amount_high_credit treatment if total_amount_high_credit is None or math.isnan(total_amount_high_credit): total_amount_high_credit = None elif 0.0 <= total_amount_high_credit <= 999999999.0: total_amount_high_credit = min(150000.0, max(0.0, total_amount_high_credit)) else: total_amount_high_credit = None #closed_with_balance_amount_current_balance treatment if closed_with_balance_amount_current_balance is None or math.isnan(closed_with_balance_amount_current_balance): closed_with_balance_amount_current_balance = None elif 0.0 <= closed_with_balance_amount_current_balance <= 999999999.0: closed_with_balance_amount_current_balance = min(15000.0, max(0.0, closed_with_balance_amount_current_balance)) else: closed_with_balance_amount_current_balance = None #closed_with_balance_amount_monthly_payment treatment if closed_with_balance_amount_monthly_payment is None or math.isnan(closed_with_balance_amount_monthly_payment): closed_with_balance_amount_monthly_payment = None elif 0.0 <= closed_with_balance_amount_monthly_payment <= 999999999.0: closed_with_balance_amount_monthly_payment = min(300.0, max(0.0, closed_with_balance_amount_monthly_payment)) else: closed_with_balance_amount_monthly_payment = None output_data = {"pti" : pti,"score_results" : score_results,"BALMAG01" : BALMAG01,"revolving_amount_monthly_payment" : revolving_amount_monthly_payment, "closed_with_balance_amount_current_balance" : closed_with_balance_amount_current_balance,"AT31S" : AT31S,"AT20S" : AT20S, "BC21S" : BC21S,"record_counts_revolving_trade_count" : record_counts_revolving_trade_count,"record_counts_total_trade_count" : record_counts_total_trade_count, "PAYMNT10" : PAYMNT10,"AGG102" : AGG102,"total_amount_high_credit" : total_amount_high_credit,"revolving_amount_current_balance" : revolving_amount_current_balance, "total_amount_current_balance" : total_amount_current_balance,"REV83" : REV83,"revolving_amount_high_credit" : revolving_amount_high_credit, "closed_with_balance_amount_monthly_payment" : closed_with_balance_amount_monthly_payment,"revolving_amount_percent_available_credit" : revolving_amount_percent_available_credit, "AGG101" : AGG101,"revolving_amount_credit_limit" : revolving_amount_credit_limit,"AT09S" : AT09S,"US01S" : US01S} logger.info(f"PD V2 Pre processed data: {output_data}") return output_data