440 lines
30 KiB
Python
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
|