private void RunFinalJob(List <StageClassification> stageClassifcation)
        {
            var _finalEcl = new List <FinalEcl>();

            foreach (var rowStage in stageClassifcation)
            {
                try
                {
                    string contractId = rowStage.ContractId;
                    int    stage      = rowStage.Stage;
                    //xxxxxxxxxxxxxxxx
                    string eirGroup = "";
                    try
                    {
                        eirGroup = eadInput.FirstOrDefault(x => x.Contract_no == contractId).Eir_Group;
                    }
                    catch { try { eirGroup = eadInput.FirstOrDefault().Eir_Group; } catch { } }
                    double finalEclValue = ComputeFinalEclValue(monthlyEcl, cummulativeDiscountFactor, lifetimeEad, lifetimeLGD, contractId, rowStage, eirGroup);

                    var newRow = new FinalEcl();
                    newRow.ContractId    = contractId;
                    newRow.Stage         = stage;
                    newRow.FinalEclValue = finalEclValue;
                    var mntECL = monthlyEcl.Where(o => o.ContractId == rowStage.ContractId).ToList();

                    foreach (var itm in mntECL)
                    {
                        itm.FinalEclValue = finalEclValue;
                        itm.Stage         = stage;
                        _finalEcl.Add(itm);
                    }
                }
                catch (Exception ex)
                {
                    Log4Net.Log.Error(ex);
                    var cc = ex;
                }
            }
            lock (finalEcl)
                finalEcl.AddRange(_finalEcl);
        }
        public List <FinalEcl> ComputeMonthlyEcl(List <LifetimeLgd> lifetimeLgds, List <LifetimeEad> lifetimeEads, List <LifeTimeObject> lifetimePds)
        {
            var monthlyEcl = new List <FinalEcl>();

            foreach (var row in lifetimeLgds)
            {
                string contractId = row.ContractId;
                string pdGroup    = row.PdIndex;
                int    month      = row.Month;

                double monthlyEclValue = ComputeMonthlyEclValue(lifetimePds, lifetimeEads, row, contractId, pdGroup, month);

                var newRow = new FinalEcl();
                newRow.ContractId      = contractId;
                newRow.EclMonth        = month;
                newRow.MonthlyEclValue = monthlyEclValue;

                monthlyEcl.Add(newRow);
            }

            return(monthlyEcl);
        }