smc_cet_cibil_py/services/CibilBusinessOperationService.py
2023-10-06 16:44:28 +05:30

440 lines
30 KiB
Python

from flask import current_app as my_app
import pandas as pd
import re,copy
import logging
from datetime import datetime
from time import time
# from .CibilMasterDataService import CibilMasterDataService
from .SampleDataProviderService import SampleDataProviderService
from .DpdCalculationService import DpdCalculationService
from .CibilSummaryDataUpdateService import CibilSummaryDataUpdateService
from .CibilDataService import CibilDataService
from Models.op_rtr_summary_of_active_loans import Out_active_and_closed_loans_details
class CibilBusinessOperationService:
# start making summary of single member/applicant's credit bureau summary
# report by @param : member_reference_number
#to store master data like configured bucket details
# dpd_month_bucket_master = []
# sanction_summary_month_buckets = []
# enquiry_summary_month_buckets = []
# #data generating using masters synamic bucket skeletons/headers
# sanction_summary_skeleton = {}
# enquiry_summary_skeleton = {}
# #for hold all summary reports
# unique_credit_facility_summary = {'total_count':0,'overdue_count':0,'zero_bal_count':0,'nil_overdue':0,'adv_high_credit':0,'current_balance':0,'overdue_balance':0,'date_latest_opened': '','date_oldest_opened': ''}
# live_and_closed_account_summary = []
# sanctioned_amt_details_summary = {}
# enquiry_amt_details_summary = {}
#http://127.0.0.1:5000/api/cibil?reference_number=202201121116395000000&los_id=MW112233&cibil_type=1&action=1
def doCIBILActiveCloseLoansSummary(los_id,reference_number,cibil_type):
# raise Exception('manual stop')
logText = 'doCIBILActiveCloseLoansSummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+' '
my_app.logger.info(logText)
print('doCIBILActiveCloseLoansSummary - ',logText)
# logger = logging.getLogger('cibil.sub')
# logger.info(logText)
# return True
live_and_closed_account_summary = []
credit_facility_details = CibilDataService.getCreditFacilityDetails(reference_number,los_id,cibil_type)
logText = 'TOTAL CREDIT FACILITY - ' + str(len(credit_facility_details)) + ' FOUND'
my_app.logger.info(logText)
print(logText)
dpd_details = CibilDataService.getDPDDetails(reference_number,los_id,cibil_type)
# return dpd_details
borrower_details = CibilDataService.getBorrowerDetails(reference_number,los_id,cibil_type)
# cibil_raw_data = SampleDataProviderService.getCIBILRawData(reference_number=member_reference_number,type=1)
dpd_month_bucket_master = CibilDataService.getMonthBucketMaster('DPD'
) # raise Exception('manual stop')
# start
if len(credit_facility_details) > 0:
# print('####LOGIC STARTED#######')
# over_start_time = time()
for idx,row in enumerate(credit_facility_details):
# if row['AccountTranDetailsID'] == '388857':
# print('#########################BREAK')
# break
CustomerName1 = "" if borrower_details[0]['ConsumerNameField1'] == None else borrower_details[0]['ConsumerNameField1'].strip()
CustomerName2 = "" if borrower_details[0]['ConsumerNameField2'] == None else borrower_details[0]['ConsumerNameField2'].strip()
CustomerName = CustomerName1+' '+CustomerName2
GroupString = row['grp_str']
AccountType = row['AccountType'].strip()
ReportedandCertifiedDate = row['DateReportedAndCertified']
OpendDate = (row['DateOpenedDisbursed']) if row['DateOpenedDisbursed'] != "" and row['DateOpenedDisbursed'] != None and row['DateOpenedDisbursed'] != 'None' else None
DateClosed = (row['DateClosed']) if row['DateClosed'] != "" and row['DateClosed'] != None and row['DateClosed'] != 'None' else None
SanctionedAmount = (row['HighCreditSanctionedAmount']) if row['HighCreditSanctionedAmount'] != "" and row['HighCreditSanctionedAmount'] != None and row['HighCreditSanctionedAmount'] != 'None' else 0
CurrentBalance = (row['CurrentBalance']) if row['CurrentBalance'] != "" and row['CurrentBalance'] != None and row['CurrentBalance'] != 'None' else 0
EMIAmount = (row['EMIAmount']) if row['EMIAmount'] != "" and row['EMIAmount'] != None and row['EMIAmount'] != 'None' else 0
OverdueAmount = (row['AmountOverdue']) if row['AmountOverdue'] != "" and row['AmountOverdue'] != None and row['AmountOverdue'] != 'None' else 0
RepaymentTenure = (int(float(row['RepaymentTenure']))) if row['RepaymentTenure'] != "" and row['RepaymentTenure'] != None and row['RepaymentTenure'] != 'None' else 0
Status = row['WrittenOffAndSettledStatus'].strip()
Ownership = row['OwnershipIndicator'].strip()
Ownership = "I" if Ownership == "Individual" else "J" if Ownership == "Joint" else "AU" if re.search("Authorised User", Ownership) else "G" if Ownership == "Guarantor" else Ownership
if AccountType == 'Credit Card':
SanctionedAmount = (row['CreditLimit']) if row['CreditLimit'] != "" and row['CreditLimit'] != None and row['CreditLimit'] != 'None' else 0
#unique credit facility function call , if current credit facility is J and G #currently ot in use
# if Own == "J" or Own == "G":
#CibilBusinessOperationService.getUniqueCreditFacilitySummary(row)
#DPD logic start
dpd_result = DpdCalculationService.dpdCalculation(row['AccountTranDetailsID'],dpd_details,dpd_month_bucket_master)
CurrentDPD = dpd_result['currentDPD']
DPD0_6 = dpd_result['DPD0_6']
DPD7_12 = dpd_result['DPD7_12']
DPD13_24 = dpd_result['DPD13_24']
DPD25_36 = dpd_result['DPD25_36']
# LatestDPD = 0
# DPD0_6 = 0
# DPD7_12 = 0
# DPD13_24 = 0
# DPD25_36 = 0
# temp = {"CustomerName":CustomerName,"AccountType":AccountType,"SanctionedDate":SanctionedDate,"SanctionedAmount":SanctionedAmount,"CurrentBalance":CurrentBalance,"EMIAmount":EMIAmount,"Overdue":Overdue,"Tenure":Tenure,"Own":Own,"LatestDPD":LatestDPD,'DPD0_6':DPD0_6,'DPD7_12':DPD7_12,'DPD13_24':DPD13_24,'DPD25_36':DPD25_36}
temp = Out_active_and_closed_loans_details(losid=los_id,ref_no=reference_number,consumer_name=CustomerName,account_type=AccountType,reported_and_certified_date=ReportedandCertifiedDate,opened_date=OpendDate,DateClosed=DateClosed,sanctioned_amount=SanctionedAmount,current_balance=CurrentBalance,emi_amount=EMIAmount,overdue_amount=OverdueAmount,repayment_tenure=RepaymentTenure,status=Status,ownership=Ownership,current_dpd=CurrentDPD,highest_dpd_month_wise_bucket_or_count_0_to_6=DPD0_6,highest_dpd_month_wise_bucket_or_count_07_to_12=DPD7_12,highest_dpd_month_wise_bucket_or_count_13_to_24=DPD13_24,highest_dpd_month_wise_bucket_or_count_25_to_36=DPD25_36,is_active=1,createdAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),updatedAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),createdby=1,updatedby=1,grp_str=GroupString)
live_and_closed_account_summary.append(temp);
# start_time = time()
# print('idx',idx)
# print("--- %s seconds ---" %(time() - start_time))
##### All o/p data insertion startes here except open & closed ac summary. it gets inserted in above loop
logText = 'TOTAL ACTIVE&CLOSED LOANS - ' + str(len(live_and_closed_account_summary))
my_app.logger.info(logText)
print(logText)
res = CibilSummaryDataUpdateService.updateActiveOrClosedLoans(live_and_closed_account_summary)
logText = (res) +' INSERTED'
my_app.logger.info(logText)
print(logText)
##### End of All o/p data insertion startes here except open & closed ac summary. it gets inserted in above loop
# return live_and_closed_account_summary
# print("--- %s seconds overall ---" %(time() - over_start_time))
return True
# transform Sansactioned Amt table from transactions details
# def getSanctionedAmtDetails(accountTranDetails):
def doCIBILSanctionedLoansSummary(los_id,reference_number,cibil_type,output_type):
logText = 'doCIBILSanctionedLoansSummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+', O/PTYPE - '+str(output_type)
my_app.logger.info(logText)
print(logText)
sanctioned_amt_details_summary = {}
credit_facility_details = []
month_bucket_master = CibilDataService.getMonthBucketMaster('SAN_SUM')#SAN_SUM = sanction summary bucket master
sanction_summary_skeleton = CibilBusinessOperationService.prepareSkeletons(month_bucket_master,type = 2)# 2 = sanction
if output_type == 1:credit_facility_details = CibilDataService.getCreditFacilityDetails(reference_number,los_id,cibil_type)
elif output_type == 2:credit_facility_details = CibilDataService.getUniqueCreditFacilityDetails(los_id)
# print(credit_facility_details)
# return(credit_facility_details)
logText = 'TOTAL '+ str(len(credit_facility_details))+' CREDIT FACILITIES FOUND'
my_app.logger.info(logText)
print(logText)
# print(month_bucket_master)
# print(sanction_summary_skeleton)
# print(credit_facility_details)
# raise Exception('doCIBILSanctionedLoansSummary')
total_enquiry_count_for_log = 0
for index,credit_facility_detail in enumerate(credit_facility_details):
creditFacility = credit_facility_detail['AccountType'].strip()
SanctionedDate = credit_facility_detail['DateOpenedDisbursed']
DateClosed = credit_facility_detail['DateClosed']
CurrentBalance = credit_facility_detail['CurrentBalance']
SanctionedAmount = credit_facility_detail['HighCreditSanctionedAmount']
if creditFacility == 'Credit Card':
SanctionedAmount = credit_facility_detail['CreditLimit']
# print((SanctionedAmount))
SanctionedAmount = float(SanctionedAmount) if SanctionedAmount != "" and SanctionedAmount != 'None' and SanctionedAmount != None else 0
# print('###Credit Card### - ', SanctionedAmount,SanctionedAmount.isnumeric())
month_bucket_index = credit_facility_detail['month_bucket_index']
# month = (datetime.strptime((SanctionedDate.split(" ")[0]), "%Y-%m-%d")).month if SanctionedDate != 'None' else 1
# month_bucket = '1' if month == 1 else '2-3' if month >= 2 and month <= 3 else '4-6' if month >=4 and month <= 6 else '7-12' if month >= 7 and month <= 12 else '13-24' if month >= 13 and month <= 24 else '25-36' if month >= 25 and month <= 36 else '>36' if month > 36 else 'None'
month_bucket = DpdCalculationService.dpdFindDaysBucket(month_bucket_master,month_bucket_index)
sanctioned_amt_detail = { 'creditFacility': creditFacility, 'SanctionedDate':SanctionedDate,'SanctionedAmount':SanctionedAmount,'monthBucket':month_bucket,'CurrentBalance':CurrentBalance, 'DateClosed' : DateClosed }
# print('mergeSanctionAmtDetails')
#check current credit facility exists in sanctioned_amt_details_summary
if sanctioned_amt_detail['creditFacility'] not in sanctioned_amt_details_summary.keys():
# print("FIRST TIME SKELETON ADDED-",sanctioned_amt_detail['creditFacility'],'-',sanctioned_amt_detail['monthBucket'],'-',sanctioned_amt_detail['SanctionedAmount'])
sanctioned_amt_details_summary[ sanctioned_amt_detail['creditFacility'] ] = copy.deepcopy(sanction_summary_skeleton)
# print("BEFORE ADDED***********",sanctioned_amt_detail['SanctionedAmount'],type(sanctioned_amt_detail['SanctionedAmount']),sanctioned_amt_detail['monthBucket'],(sanctioned_amt_detail['SanctionedAmount'] != "" and sanctioned_amt_detail['SanctionedAmount'] != None))
# print(sanctioned_amt_details_summary)
tempSanctionedAmount = float(sanctioned_amt_detail['SanctionedAmount'])
# if sanctioned_amt_detail['SanctionedAmount'].isnumeric()else 0
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['amt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['count'] += 1
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['total_amt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['total_count'] += 1
total_enquiry_count_for_log += 1
#for Amount & Count of open and closed accounts
if (sanctioned_amt_detail['DateClosed'] == None or sanctioned_amt_detail['DateClosed'] == "" or sanctioned_amt_detail['DateClosed'] == 'None'):
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['openamt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['opencount'] += 1
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['open_total_amt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['open_total_count'] += 1
else:
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['closeamt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']][sanctioned_amt_detail['monthBucket']]['closecount'] += 1
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['closed_total_amt'] += tempSanctionedAmount
sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']]['closed_total_count'] += 1
# print("AFTER ADDED***********")
# print(sanctioned_amt_details_summary[sanctioned_amt_detail['creditFacility']])
# print("")
# print("SKELTON-",sanction_summary_skeleton)
# print("")
logText = str(total_enquiry_count_for_log) +' CREDIT FACILITIES SUMMARIZED AS ' + str(len(sanctioned_amt_details_summary))
my_app.logger.info(logText)
print(logText)
res = CibilSummaryDataUpdateService.updateSanctionedSummaryAndOverallOpenedClosedLoans(sanctioned_amt_details_summary,reference_number,los_id,cibil_type,output_type)
logText = str(res) +' INSERTED'
my_app.logger.info(logText)
print(logText)
return sanctioned_amt_details_summary
def prepareSkeletons(month_buckets,type):
# print('prepareSkeletons')
return_skelton = {}
if type == 2: # sanction
for month_bucket in month_buckets:
return_skelton[month_bucket['name']] = {'amt':0,'count':0,'openamt':0,'opencount':0,'closeamt':0,'closecount':0}
return_skelton['total_amt'] = 0
return_skelton['total_count'] = 0
return_skelton['open_total_amt'] = 0
return_skelton['open_total_count'] = 0
return_skelton['closed_total_amt'] = 0
return_skelton['closed_total_count'] = 0
elif type == 1:#enquiry
for month_bucket in month_buckets:
return_skelton[month_bucket['name']] = {'amt':0,'count':0}
return_skelton['total_amt'] = 0
return_skelton['total_count'] = 0
# print(return_skelton)
return return_skelton
# def doCIBILEnquirySummary(enquiry_details, type):
def doCIBILEnquirySummary(los_id,reference_number,cibil_type,output_type):
logText = 'doCIBILEnquirySummary - LOSID - '+los_id+', '+'REFNO - '+reference_number+', '+'CTYPE - '+cibil_type+', O/P TYPE - '+str(output_type)
my_app.logger.info(logText)
print(logText)
enquiry_amt_details_summary = {}
enquiry_details = []
month_bucket_master = CibilDataService.getMonthBucketMaster('ENQ_SUM')#ENQ_SUM = enquiry summary bucket master
enquiry_skeleton = CibilBusinessOperationService.prepareSkeletons(month_bucket_master,type = 1)# 1 = enquiry
if output_type == 1 : enquiry_details = CibilDataService.getEnquriyDetails(reference_number,los_id,cibil_type)
elif output_type == 2 : enquiry_details = CibilDataService.getUniqueEnquriyDetails(los_id)
logText = 'TOTAL '+ str(len(enquiry_details))+' ENQURIES FOUND'
my_app.logger.info(logText)
print(logText)
# return enquiry_details
# print(month_bucket_master)
# print(enquiry_skeleton)
# print(enquiry_details)
# raise Exception('dssd')
total_enquiry_count_for_log = 0
#transform/filter raw consumer enquiry data to necessary data
for enquiry_detail in enquiry_details:
creditFacility = enquiry_detail['EnquiryPurpose'].strip()
SanctionedDate = enquiry_detail['DateOfEnquiry']
SanctionedAmount = float(enquiry_detail['EnquiryAmount'])
month_bucket_index = enquiry_detail['month_bucket_index']
# month = (datetime.strptime((SanctionedDate.split(" ")[0]), "%Y-%m-%d")).month
# month_bucket = '1' if month == 1 else '2-3' if month >= 2 and month <= 3 else '4-6' if month >=4 and month <= 6 else '7-12' if month >= 7 and month <= 12 else '13-24' if month >= 13 and month <= 24 else '25-36' if month >= 25 and month <= 36 else '>36' if month > 36 else 'None'
month_bucket = DpdCalculationService.dpdFindDaysBucket(month_bucket_master,month_bucket_index)
# print("")
# print("DATA - ",creditFacility,'-',SanctionedDate,'-',SanctionedAmount,'-',month,'-',month_bucket)
# print("")
#check current credit facility exists in enquiry_amt_details_summary
if creditFacility not in enquiry_amt_details_summary.keys():
# print("FIRST TIME SKELETON ADDED-")
enquiry_amt_details_summary[ creditFacility ] = copy.deepcopy(enquiry_skeleton)
# print("BEFORE ADDED***********")
# print(CibilBusinessOperationService.enquiry_amt_details_summary)
enquiry_amt_details_summary[creditFacility][month_bucket]['amt'] += SanctionedAmount
enquiry_amt_details_summary[creditFacility][month_bucket]['count'] += 1
enquiry_amt_details_summary[creditFacility]['total_count'] += 1
enquiry_amt_details_summary[creditFacility]['total_amt'] += SanctionedAmount
total_enquiry_count_for_log += 1
logText = str(total_enquiry_count_for_log) +' ENQURIES SUMMARIZED AS ' + str(len(enquiry_amt_details_summary))
my_app.logger.info(logText)
print(logText)
#update data
res = CibilSummaryDataUpdateService.updateEnquirySummaryData(enquiry_amt_details_summary,reference_number,los_id,cibil_type,output_type)
logText = str(res) +' INSERTED'
my_app.logger.info(logText)
print(logText)
return res
#not in use not in use not in use not in use
def getUniqueCreditFacilitySummary(creditFacility):
print('UniqueCreditFacilitySummary-',creditFacility['AmountOverdue'],creditFacility['CurrentBalance'],creditFacility['DateOpenedDisbursed'],type(creditFacility['CurrentBalance']))
CibilBusinessOperationService.unique_credit_facility_summary['total_count'] += 1
if creditFacility['AmountOverdue'] != 'None' :
CibilBusinessOperationService.unique_credit_facility_summary['overdue_count'] += 1
CibilBusinessOperationService.unique_credit_facility_summary['overdue_balance'] += float((creditFacility['AmountOverdue'])) if creditFacility['AmountOverdue'] != 'None' else 0
else:
CibilBusinessOperationService.unique_credit_facility_summary['nil_overdue'] +=1
if float(creditFacility['CurrentBalance']) == float(0) or creditFacility['CurrentBalance'] == "": CibilBusinessOperationService.unique_credit_facility_summary['zero_bal_count'] +=1
else: CibilBusinessOperationService.unique_credit_facility_summary['current_balance'] += float(creditFacility['CurrentBalance']) if creditFacility['CurrentBalance'] !='None' else 0
if CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] == "":
CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] = creditFacility['DateOpenedDisbursed'] if creditFacility['DateOpenedDisbursed'] != 'None' else ""
else:
CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] = creditFacility['DateOpenedDisbursed'] if CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] > creditFacility['DateOpenedDisbursed'] else CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened']
if CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] == "":
CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] = creditFacility['DateOpenedDisbursed'] if creditFacility['DateOpenedDisbursed'] != 'None' else ""
else:
CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] = CibilBusinessOperationService.unique_credit_facility_summary['date_latest_opened'] if CibilBusinessOperationService.unique_credit_facility_summary['date_oldest_opened'] > creditFacility['DateOpenedDisbursed'] else creditFacility['DateOpenedDisbursed']
###################################END OF CONSUMER CIBIL BUSINESS SERVICE##################################################
###################################END OF CONSUMER CIBIL BUSINESS SERVICE##################################################
###################################END OF CONSUMER CIBIL BUSINESS SERVICE##################################################
###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE#########################################
###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE#########################################
###################################START OF COMMERCIAL CIBIL BUSINESS SERVICE#########################################
###################################NOT IN USE * NOT IN USE * NOT IN USE * NOT IN USE#########################################
#http://127.0.0.1:5000/api/cibil?application_reference_number=202201111930347000000
def doCommercialCIBILOperations(application_reference_number,los_id):
print('CommercialCIBILOperations')
cibil_raw_data = CibilMasterDataService.getCIBILRawData(reference_number=application_reference_number,los_id=los_id,type = 2)
# cibil_raw_data = SampleDataProviderService.getCIBILRawData(reference_number=application_reference_number,type = 2)
CibilBusinessOperationService.dpd_month_bucket_master = cibil_raw_data['masters']['dpd_month_buckets']
CibilBusinessOperationService.sanction_summary_month_buckets = cibil_raw_data['masters']['sanction_summary_month_buckets']
CibilBusinessOperationService.enquiry_summary_month_buckets = cibil_raw_data['masters']['enquiry_summary_month_buckets']
CibilBusinessOperationService.prepareSkeletons()
# print(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details'])
# raise Exception('asknalk')
# print(cibil_raw_data['commercial_cibil_rawdata']['com_dpd_details'])
CibilBusinessOperationService.prepareEnquirySummary(cibil_raw_data['commercial_cibil_rawdata']['com_enquiry_details'],type = 2)#2 = commercials
if len(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details']) > 0:
print('####COMMERCIAL LOGIC STARTED#######')
for idx,row in enumerate(cibil_raw_data['commercial_cibil_rawdata']['com_credit_facility_current_details']):
# if idx == 2:
# print('#########################MAINBREAK')
# break
CustomerName = cibil_raw_data['commercial_cibil_rawdata']['com_borrower_details'][0]['EnqInfoBorrowerName'] if cibil_raw_data['commercial_cibil_rawdata']['com_borrower_details'][0].get('EnqInfoBorrowerName') is not None else 'NA'
AccountType = row['CreditFacilityCDcfType'].strip()
ReportedandCertifiedDate = row['CreditFacilityCDLstReportedDate']
OpendDate = (row['CreditFacilityCDDatesSanctionedDt']) if row['CreditFacilityCDDatesSanctionedDt'] != "" and row['CreditFacilityCDDatesSanctionedDt'] != None and row['CreditFacilityCDDatesSanctionedDt'] != 'None' else None
SanctionedAmount = (row['CreditFacilityCDAmtSanctionedAmt']) if row['CreditFacilityCDAmtSanctionedAmt'] != "" and row['CreditFacilityCDAmtSanctionedAmt'] != None and row['CreditFacilityCDAmtSanctionedAmt'] != 'None' else 0
CurrentBalance = row['CreditFacilityCDAmtoutstandingBalance']
EMIAmount = (row['CreditFacilityCDAmtinstallmentAmt']) if row['CreditFacilityCDAmtinstallmentAmt'] != "" and row['CreditFacilityCDAmtinstallmentAmt'] != None and row['CreditFacilityCDAmtinstallmentAmt'] != 'None' else 0
row['CreditFacilityCDAmtinstallmentAmt']
OverdueAmount = (row['CreditFacilityCDAmtOverdue']) if row['CreditFacilityCDAmtOverdue'] != "" and row['CreditFacilityCDAmtOverdue'] != None and row['CreditFacilityCDAmtOverdue'] != 'None' else 0
RepaymentTenure = (row['CreditFacilityCDODTenure']) if row['CreditFacilityCDODTenure'] != "" and row['CreditFacilityCDODTenure'] != None and row['CreditFacilityCDODTenure'] != 'None' else 0
Status = row['CreditFacilityCDStatus']
Ownership = 'NA'
# CurrentDPD = row['CreditFacilityCDAssetCDPDueDpd']
dpd_result = DpdCalculationService.commercialDpdCalculation(row['CreditFacilityCDcfSrNo'],cibil_raw_data['commercial_cibil_rawdata']['com_dpd_details'],CibilBusinessOperationService.dpd_month_bucket_master)
CurrentDPD = dpd_result['currentDPD']
DPD0_6 = dpd_result['DPD0_6']
DPD7_12 = dpd_result['DPD7_12']
DPD13_24 = dpd_result['DPD13_24']
DPD25_36 = dpd_result['DPD25_36']
# LatestDPD = 0
# DPD0_6 = 0
# DPD7_12 = 0
# DPD13_24 = 0
# DPD25_36 = 0
# call sansactioned amt transformation function
# for calculate sanctioned amt summary
sanctioned_amt_detail = CibilBusinessOperationService.getSanctionedAmtDetails({'AccountType':AccountType,'DateOpenedDisbursed':row['CreditFacilityCDDatesSanctionedDt'],'CurrentBalance':CurrentBalance,'HighCreditSanctionedAmount':SanctionedAmount})
CibilBusinessOperationService.mergeSanctionAmtDetails(sanctioned_amt_detail)
# end of call sansactioned amt transformation function
# temp = {'los_id':'MW12345','ref_no':application_reference_number,"consumer_name":CustomerName,"account_type":AccountType,"reported_and_certified_date":ReportedandCertifiedDate,"opened_date":OpendDate,"sanctioned_amount":SanctionedAmount,"current_balance":CurrentBalance,"emi_amount":EMIAmount,"overdue_amount":OverdueAmount,"repayment_tenure":RepaymentTenure,"status":Status,"ownership":Ownership,"current_dpd":CurrentDPD,'dpd0_6':DPD0_6,'dpd7_12':DPD7_12,'dpd13_24':DPD25_36,'dpd25_36':DPD25_36,'is_active':1,'createdAt':datetime.now().strftime("%Y-%m-%d %H:%M:%S"),'updatedAt':datetime.now().strftime("%Y-%m-%d %H:%M:%S"),'createdby':1,'updatedby':1}
temp = Out_active_and_closed_loans_details(losid=los_id,ref_no=application_reference_number,consumer_name=CustomerName,account_type=AccountType,reported_and_certified_date=ReportedandCertifiedDate,opened_date=OpendDate,sanctioned_amount=SanctionedAmount,current_balance=CurrentBalance,emi_amount=EMIAmount,overdue_amount=OverdueAmount,repayment_tenure=RepaymentTenure,status=Status,ownership=Ownership,current_dpd=CurrentDPD,highest_dpd_month_wise_bucket_or_count_0_to_6=DPD0_6,highest_dpd_month_wise_bucket_or_count_07_to_12=DPD7_12,highest_dpd_month_wise_bucket_or_count_13_to_24=DPD13_24,highest_dpd_month_wise_bucket_or_count_25_to_36=DPD25_36,is_active=1,createdAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),updatedAt=datetime.now().strftime("%Y-%m-%d %H:%M:%S"),createdby=1,updatedby=1)
# print(temp);
# raise Exception('tata')
# temp = {'los_id':'MW12345'}
# if CurrentBalance != 0:
CibilBusinessOperationService.live_and_closed_account_summary.append(temp);
# print('idx',idx)
# raise Exception('manual stop')
CibilSummaryDataUpdateService.updateActiveOrClosedLoans(CibilBusinessOperationService.live_and_closed_account_summary)
CibilSummaryDataUpdateService.updateEnquirySummaryData(CibilBusinessOperationService.enquiry_amt_details_summary,application_reference_number,los_id)
CibilSummaryDataUpdateService.updateSanctionedSummaryAndOverallOpenedClosedLoans(CibilBusinessOperationService.sanctioned_amt_details_summary,application_reference_number,los_id)
return (CibilBusinessOperationService.sanctioned_amt_details_summary)
# return cibil_raw_data