}         // GetBusinessCaisStatuses

        public ConsumerLatesModel GetLates(
            int customerId,
            DateTime asOfDate,
            int minLateStatus,
            int lastMonthStatuses,
            List <CaisStatus> caisStatuses = null
            )
        {
            if (caisStatuses == null)
            {
                caisStatuses = GetConsumerCaisStatuses(customerId);
            }

            var numOfLates = 0;
            var lateDays   = 0;

            DateTime prevMonth      = asOfDate.AddMonths(-1);
            DateTime prevMonthStart = prevMonth.AddDays(1 - prevMonth.Day).Date;

            foreach (var caisStatus in caisStatuses)
            {
                if (caisStatus.LastUpdatedDate < prevMonthStart)
                {
                    continue;
                }

                bool isLateInAccount = false;

                for (int i = 0; i < lastMonthStatuses; ++i)
                {
                    if (caisStatus.AccountStatusCodes.Length - i <= 0)
                    {
                        continue;
                    }

                    string status = caisStatus.AccountStatusCodes[caisStatus.AccountStatusCodes.Length - i - 1].ToString();

                    var accountStatus = AccountStatusDictionary.GetAccountStatus(status);

                    if (accountStatus.IsLate && accountStatus.LateStatus > minLateStatus)
                    {
                        isLateInAccount = true;
                        lateDays        = lateDays < accountStatus.LateDays ? accountStatus.LateDays : lateDays;
                    }             // if
                }                 // for

                if (isLateInAccount)
                {
                    numOfLates++;
                }
            }             // for each CAIS status

            return(new ConsumerLatesModel {
                LateDays = lateDays,
                NumOfLates = numOfLates
            });
        }         // GetLates
        }         // GetLates

        public DefaultsModel GetDefaults(
            int customerId,
            DateTime asOfDate,
            int minAmount,
            int lastMonthStatuses,
            List <CaisStatus> caisStatuses = null
            )
        {
            if (caisStatuses == null)
            {
                caisStatuses = GetConsumerCaisStatuses(customerId);
            }

            DateTime asOfMonth = new DateTime(asOfDate.Year, asOfDate.Month, 1, 0, 0, 0, DateTimeKind.Utc);

            DateTime lastRelevantMonth = asOfMonth.AddMonths(-lastMonthStatuses + 1);

            var numOfDefaults  = 0;
            var defaultsAmount = 0;

            foreach (CaisStatus caisStatus in caisStatuses)
            {
                DateTime thisMonth = new DateTime(
                    caisStatus.LastUpdatedDate.Year,
                    caisStatus.LastUpdatedDate.Month,
                    1,
                    0,
                    0,
                    0,
                    DateTimeKind.Utc
                    );

                if (thisMonth < lastRelevantMonth)
                {
                    continue;
                }

                int monthSinceUpdate = 1 + MiscUtils.DateDiffInMonths(thisMonth, asOfMonth);

                int useLastStatusMonths = lastMonthStatuses - monthSinceUpdate + 1;

                bool isDefaultInAccount = false;

                for (int i = 0; i < useLastStatusMonths; ++i)
                {
                    if (caisStatus.AccountStatusCodes.Length - i <= 0)
                    {
                        continue;
                    }

                    string            status        = caisStatus.AccountStatusCodes[caisStatus.AccountStatusCodes.Length - i - 1].ToString();
                    CaisAccountStatus accountStatus = AccountStatusDictionary.GetAccountStatus(status);
                    int balance = Math.Max(caisStatus.Balance, caisStatus.CurrentDefBalance);

                    if (accountStatus.IsDefault && balance > minAmount)
                    {
                        isDefaultInAccount = true;
                    }
                }                 // for

                if (isDefaultInAccount)
                {
                    numOfDefaults++;
                    defaultsAmount += caisStatus.Balance;
                }         // if
            }             // for each CAIS status

            return(new DefaultsModel {
                DefaultsAmount = defaultsAmount,
                NumOfDefaults = numOfDefaults
            });
        }         // GetDefaults