Esempio n. 1
0
        //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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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)}]");
        }
Esempio n. 4
0
        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);
        }