public static PlannerResult PlanNext(
            ReviewValues.Values value,
            DateTimeOffset valueDate,
            DateTimeOffset?previousDate)
        {
            double passedDays = 0;

            if (previousDate != null)
            {
                passedDays = Math.Truncate(valueDate.Subtract(previousDate.Value).TotalDays);
            }
            if (!CheckPassedDaysLimits(passedDays))
            {
                throw new ArgumentException();
            }

            int            nextDays = CalculateNextDays(value, (int)passedDays);
            DateTimeOffset nextDate = valueDate.AddDays(nextDays);

            PlannerResult plannerResult = new PlannerResult(
                nextDate,
                nextDays,
                (int)passedDays);

            return(plannerResult);
        }
        private static int CalculateNextDays(
            ReviewValues.Values value,
            int passedDays)
        {
            if (value == ReviewValues.Values.VALUE_0)
            {
                return(0);
            }

            ReviewValues.ReviewValue reviewValue = ReviewValues.GetReviewValueFromValue(value);
            double daysNext = Math.Floor(passedDays * reviewValue.DaysMultiplier + reviewValue.DaysBase);

            return((int)Math.Round(daysNext, MidpointRounding.AwayFromZero));
        }