public HttpResponseMessage GetImpostoCalculado(decimal salarioMinimo)
        {
            CalcularIRInput calculo = new CalcularIRInput();

            calculo.SalarioMinimo = salarioMinimo;

            try
            {
                var resultado = _contribuinteService.Handle(calculo);

                if (_contribuinteService.IsValid())
                {
                    return(Request.CreateResponse(HttpStatusCode.OK, Newtonsoft.Json.JsonConvert.SerializeObject(resultado)));
                }

                return(Request.CreateResponse(HttpStatusCode.BadRequest, _contribuinteService.Notifications));
            }
            catch (System.Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message, ex));
            }
        }
        public CalcularIRResult Handle(CalcularIRInput input)
        {
            CalcularIRResult result = new CalcularIRResult();

            try
            {
                // Recupera os contribuintes da base de dados
                var contribuintes = _contribuinteRepository.ObterTodos();

                // Varre todos os contribuintes da base de dados.
                foreach (var contribuinte in contribuintes)
                {
                    // Cria um novo imposto
                    var imposto = ImpostoDeRenda.Novo(contribuinte, input.SalarioMinimo);

                    // Verifica se o imposto está válido
                    if (imposto.IsValid())
                    {
                        result.ContribuintesImpostoDeRenda.Add(imposto);
                    }
                    else
                    {
                        base.AddNotifications(imposto.Notifications);
                    }
                }

                // Ordena o resultado.
                result.ContribuintesImpostoDeRenda =
                    result.ContribuintesImpostoDeRenda.OrderByDescending(x => x.Imposto)
                    .ThenByDescending(x => x.Contribuinte.Nome).ToList();
            }
            catch (Exception ex)
            {
                base.AddNotification("Error", $"Houve uma falha inesperada! Mensagem: {ex.Message}");
            }

            return(result);
        }