//public void Run() //{ // var dataTable = ComputeSicrInput(); // string stop = "stop"; //} //public List<SicrInputs> ComputeSicrInput() //{ // var sicrInput = new List<SicrInputs>(); // //string[] testAccounts = { "15033346", "15036347", "222017177" }; // var loanbookTable = GetLoanbookData().Where(x => x.ContractId.Substring(0, 3) != ECLStringConstants.i.ExpiredContractsPrefix).ToList(); // var lifetimePds = _scenarioLifetimePd.ComputeLifetimePd(); // var redefaultLifetimePds = _scenarioRedefaultLifetimePd.ComputeRedefaultLifetimePd(); // //var pdMapping = _pdMapping.ComputePdMappingTable(); // foreach (var loanbookRow in loanbookTable) // { // var contractPdMapping = pdMapping.FirstOrDefault(x => x.ContractId == loanbookRow.ContractId); // if (contractPdMapping == null) // { // continue; // } // string contractPdGroup = contractPdMapping.PdGroup; // int contractTtmMonths = contractPdMapping.TtmMonths; // string impairedDate = null; // if(loanbookRow.ImpairedDate != null) // { // impairedDate=loanbookRow.ImpairedDate.ToString().Contains("1900") ? null : loanbookRow.ImpairedDate.ToString(); // } // string defaultDate = null; // if(loanbookRow.DefaultDate!=null) // { // defaultDate = loanbookRow.DefaultDate.ToString().Contains("1900") ? null : loanbookRow.DefaultDate.ToString(); // } // int maxClassification = contractPdMapping.MaxClassificationScore; // long maxDpd = contractPdMapping.MaxDpd; // var sicrRow = new SicrInputs(); // sicrRow.ContractId = loanbookRow.ContractId; // sicrRow.Pd12Month = ComputeLifetimeAndRedefaultPds(lifetimePds, contractPdGroup, 12); // sicrRow.LifetimePd = ComputeLifetimeAndRedefaultPds(lifetimePds, contractPdGroup, contractTtmMonths); // sicrRow.RedefaultLifetimePd = ComputeLifetimeAndRedefaultPds(redefaultLifetimePds, contractPdGroup, contractTtmMonths); // sicrRow.Stage1Transition = Math.Round(ComputeStageDaysPastDue(impairedDate)); // sicrRow.Stage2Transition = ComputeStageDaysPastDue(defaultDate); // sicrRow.DaysPastDue = ComputeDaysPastDue(maxClassification, maxDpd); // sicrInput.Add(sicrRow); // } // return sicrInput; //} public SicrInputs ComputeSICRInput(Loanbook_Data loanbookRow, PdMappings contractPdMapping, List <LifeTimeObject> lifetimePds, List <LifeTimeObject> redefaultLifetimePds) { string contractPdGroup = contractPdMapping.PdGroup; int contractTtmMonths = contractPdMapping.TtmMonths; string impairedDate = null; if (loanbookRow.ImpairedDate != null) { impairedDate = loanbookRow.ImpairedDate.ToString().Contains("1900") ? null : loanbookRow.ImpairedDate.ToString(); } string defaultDate = null; if (loanbookRow.DefaultDate != null) { defaultDate = loanbookRow.DefaultDate.ToString().Contains("1900") ? null : loanbookRow.DefaultDate.ToString(); } int maxClassification = contractPdMapping.MaxClassificationScore; long maxDpd = contractPdMapping.MaxDpd; var sicrRow = new SicrInputs(); //sicrRow.ContractId = loanbookRow.ContractId; sicrRow.Pd12Month = ComputeLifetimeAndRedefaultPds(lifetimePds, contractPdGroup, 12); sicrRow.LifetimePd = ComputeLifetimeAndRedefaultPds(lifetimePds, contractPdGroup, contractTtmMonths); sicrRow.RedefaultLifetimePd = ComputeLifetimeAndRedefaultPds(redefaultLifetimePds, contractPdGroup, contractTtmMonths); sicrRow.Stage1Transition = int.Parse(Math.Round(ComputeStageDaysPastDue(impairedDate)).ToString()); sicrRow.Stage2Transition = int.Parse(Math.Round(ComputeStageDaysPastDue(defaultDate)).ToString()); sicrRow.DaysPastDue = ComputeDaysPastDue(maxClassification, maxDpd); return(sicrRow); }
protected int ComputeMaxClassificationScorePerRecord(PdMappings pdMappingWorkingRecord, List <PdMappings> pdMappingWorkings) { //var r= pdMappingWorkings.Where(row => row.AccountNo == pdMappingWorkingRecord.AccountNo).Max(row => row.ClassificationScore); var r = pdMappingWorkings.Where(row => row.ContractId == pdMappingWorkingRecord.ContractId).Max(row => row.ClassificationScore); return(r); }
private string RunPDMappingJob(List <Loanbook_Data> sub_LoanBook, Guid eclId, EclType eclType, List <LifeTimeObject> lifetimePds, List <LifeTimeObject> redefaultLifetimePds, int expOdPerformacePastRepoting, int odPerformancePastExpiry) { var pdMappingTable = new List <PdMappings>(); foreach (var loanbookRecord in sub_LoanBook) { var mappingRow = new PdMappings(); try { mappingRow.ContractId = loanbookRecord.ContractId; mappingRow.AccountNo = loanbookRecord.AccountNo; mappingRow.ProductType = loanbookRecord.ProductType; mappingRow.RatingModel = loanbookRecord.RatingModel; mappingRow.Segment = loanbookRecord.Segment; mappingRow.RatingUsed = ComputeRatingUsedPerRecord(loanbookRecord); mappingRow.ClassificationScore = ComputeClassificationScorePerRecord(loanbookRecord) ?? 0; mappingRow.MaxDpd = Convert.ToInt32(Math.Round(ComputeMaxDpdPerRecord(loanbookRecord, sub_LoanBook))); mappingRow.TtmMonths = ComputeTimeToMaturityMonthsPerRecord(loanbookRecord, expOdPerformacePastRepoting, odPerformancePastExpiry); mappingRow.PdGroup = ComputePdGroupingPerRecord(mappingRow); }catch (Exception ex) { Log4Net.Log.Error(ex); var cc = ex; } pdMappingTable.Add(mappingRow); } pdMappingTable = pdMappingTable.Select(row => { row.MaxClassificationScore = ComputeMaxClassificationScorePerRecord(row, pdMappingTable); return(row); }).ToList(); var sicrInputWorking = new SicrInputWorkings(this._eclId, this._eclType); for (int i = 0; i < pdMappingTable.Count; i++) { var sicrinput = sicrInputWorking.ComputeSICRInput(sub_LoanBook[i], pdMappingTable[i], lifetimePds, redefaultLifetimePds); pdMappingTable[i].DaysPastDue = sicrinput.DaysPastDue; pdMappingTable[i].LifetimePd = sicrinput.LifetimePd; pdMappingTable[i].Pd12Month = sicrinput.Pd12Month; pdMappingTable[i].RedefaultLifetimePd = sicrinput.RedefaultLifetimePd; pdMappingTable[i].Stage1Transition = sicrinput.Stage1Transition; pdMappingTable[i].Stage2Transition = sicrinput.Stage2Transition; } var r = FileSystemStorage <PdMappings> .WriteCsvData(_eclId, ECLStringConstants.i.PdMappings_Table(this._eclType), pdMappingTable); return(r? "" : $"Could not Bulk Insert [{ECLStringConstants.i.PdMappings_Table(this._eclType)}]"); }
protected string ComputePdGroupingPerRecord(PdMappings pdMappingWorkingRecord) { string pdGrouping = ""; string[] productTypes = { ECLStringConstants.i._productType_od.ToLower(), ECLStringConstants.i._productType_card.ToLower(), ECLStringConstants.i._productType_cards.ToLower() }; if (pdMappingWorkingRecord.ContractId.Substring(0, 3) == ECLStringConstants.i.ExpiredContractsPrefix || (productTypes.Contains(pdMappingWorkingRecord.ProductType.ToLower()) && pdMappingWorkingRecord.TtmMonths == 0)) { pdGrouping = ECLStringConstants.i.ExpiredContractsPrefix; } else { if (pdMappingWorkingRecord.RatingModel.ToLower() == ECLStringConstants.i.yes) { pdGrouping = pdMappingWorkingRecord.RatingUsed.ToString(); } else { pdGrouping = pdMappingWorkingRecord.Segment.ToLower() == ECLStringConstants.i.COMMERCIAL.ToLower() ? ECLStringConstants.i.COMM : ECLStringConstants.i.CONS; pdGrouping += pdMappingWorkingRecord.MaxDpd < 30 ? ECLStringConstants.i._STAGE_1 : ECLStringConstants.i._STAGE_2; } } return(pdGrouping); }