public MonthlyCashStatement(MonthlyCashStatementCategory category, YearMonth month, DateTime date, int amount, string description)
 {
     Category       = category;
     Month          = month;
     Date           = date;
     Amount         = amount;
     Description    = description;
     isFinalPayment = false;
 }
        private void AddExpense(List <MonthlyCashStatement> result, YearMonth month, MonthlyCashStatementCategory category, List <MonthlyCashStatement> movements)
        {
            var actualMovements = movements.Where(m => m.Category == category && m.Month == month).ToList();

            var paidAmount  = actualMovements.Sum(_ => _.Amount);
            var wasPaid     = actualMovements.Any(_ => _.IsFinalPayment) || Math.Abs(category.Amount) <= Math.Abs(paidAmount);
            var expenseDate = month.GetDate(category.DayOfMonth);

            if (!wasPaid && CalculationPeriod.Contains(expenseDate) && category.Effective.Contains(expenseDate))
            {
                result.Add(new MonthlyCashStatement(category, month, expenseDate, category.Amount - paidAmount, "<план>"));
            }
        }