예제 #1
0
        public void Criar_contrato(ContratoData data)
        {
            var id       = Guid.NewGuid();
            var contrato = ContratoDeEmprestimoAggregate.CriarContrato(
                new ParametrosDeContratoDeEmprestimo
            {
                Id                   = id,
                ValorLiquido         = data.ValorLiquido,
                QuantidadeDeParcelas = data.Prazo,
                TaxaAoMes            = data.TaxaAoMes,
                Tac                  = data.Tac,
                Iof                  = data.Iof,
                DiasDeCarencia       = data.DiasDeCarencia
            });

            contrato.Id.Should().Be(id);
            contrato.TaxaAoDia.Should().BeEquivalentTo(new Percentual(data.TaxaAoDia));
            contrato.ValorCarencia.Should().BeEquivalentTo(new ValorMonetario(data.ValorCarencia));
            contrato.ValorFinanciado.Should().BeEquivalentTo(new ValorMonetario(data.ValorFinanciado));
            ValorMonetario.ToDecimal(contrato.ValorDaParcela)
            .Should()
            .BeApproximately(data.ValorDaParcela, PRECISION);
            contrato.Parcelas.Should().HaveCount(data.Prazo);

            foreach (var parcela in contrato.Parcelas)
            {
                var parcelaExpected = data.Parcelas.Single(p => p.Numero == parcela.Numero);

                ValorMonetario.ToDecimal(parcela.SaldoDevedorInicial)
                .Should()
                .BeApproximately(ValorMonetario.ToDecimal(parcelaExpected.SaldoDevedorInicial), PRECISION);

                ValorMonetario.ToDecimal(parcela.Valor)
                .Should()
                .BeApproximately(ValorMonetario.ToDecimal(parcelaExpected.Valor), PRECISION);

                ValorMonetario.ToDecimal(parcela.Principal)
                .Should()
                .BeApproximately(ValorMonetario.ToDecimal(parcelaExpected.Principal), PRECISION);

                ValorMonetario.ToDecimal(parcela.Juros)
                .Should()
                .BeApproximately(ValorMonetario.ToDecimal(parcelaExpected.Juros), PRECISION);

                ValorMonetario.ToDecimal(parcela.SaldoDevedorFinal)
                .Should()
                .BeApproximately(ValorMonetario.ToDecimal(parcelaExpected.SaldoDevedorFinal), PRECISION);
            }
        }
예제 #2
0
        protected override async Task Handle(CriarContratoCmd request, CancellationToken cancellationToken = default)
        {
            _logger.Information("Criando contrato com os parâmetros {@ParametrosContrato}", request);
            await CheckIfAlreadyExists(request);

            await _repository.SaveAsync(
                ContratoDeEmprestimoAggregate.CriarContrato(
                    new ContratoDeEmprestimoAggregate.ParametrosDeContratoDeEmprestimo
            {
                Id                   = request.Id,
                ValorLiquido         = request.ValorLiquido,
                QuantidadeDeParcelas = request.QuantidadeDeParcelas,
                TaxaAoMes            = request.TaxaAoMes,
                Tac                  = request.Tac,
                Iof                  = request.Iof,
                DiasDeCarencia       = request.DiasDeCarencia,
            }),
                cancellationToken);
        }
 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);
예제 #6
0
 public ValorMonetario CalcularJuros(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) =>
 contrato.TaxaAoMes.Aplicar(contrato.ValorFinanciado);
예제 #7
0
 public ValorMonetario CalcularSaldoDevedorInicial(ContratoDeEmprestimoAggregate contrato, NumeroParcela numeroParcela) =>
 contrato.ValorCarencia + contrato.ValorFinanciado;