private void AdicionarParcela(NumeroParcela numeroParcela, ICalculadoraDeParcelaStrategy calculadora) => _parcelas.Add(new Parcela { Numero = numeroParcela, SaldoDevedorInicial = calculadora.CalcularSaldoDevedorInicial(this, numeroParcela), Valor = ValorDaParcela, Principal = calculadora.CalcularPrincipal(this, numeroParcela), Juros = calculadora.CalcularJuros(this, numeroParcela), });
public static ICalculadoraDeParcelaStrategy Create(NumeroParcela numeroParcela) => numeroParcela.IsFirst ? new CalculadoraDePrimeiraParcela() : new CalculadoraDeProximaParcela();
internal Parcela ObterParcela(NumeroParcela numero) => Parcelas.First(p => p.Numero == numero);
public ValorMonetario CalcularJuros(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) => contrato.TaxaAoMes.Aplicar(CalcularSaldoDevedorInicial(contrato, numeroParcela));
public ValorMonetario CalcularSaldoDevedorInicial(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) => contrato.ObterParcela(numeroParcela - 1).SaldoDevedorFinal;
public decimal CalcularPrincipal(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) => contrato.ValorDaParcela - CalcularJuros(contrato, numeroParcela);
public ValorMonetario CalcularJuros(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) => contrato.TaxaAoMes.Aplicar(contrato.ValorFinanciado);
public ValorMonetario CalcularSaldoDevedorInicial(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) => contrato.ValorCarencia + contrato.ValorFinanciado;