///<inheritdoc/>
        public Task <CalculateBaseResult <CalculateInssResult> > CalculateInss(CalculateInssArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException(nameof(args));
            }

            if (string.IsNullOrWhiteSpace(_url))
            {
                throw new InvalidOperationException($"The service url '{_url} is null or empty!");
            }

            _logger?.LogInformation("Process CalculateInss command");

            using GrpcChannel channel = CreateAuthenticatedChannel(_url);
            LaborTaxesClient client = new LaborTaxesClient(channel);

            CalculateBaseResult <CalculateInssResult> result = new CalculateBaseResult <CalculateInssResult>();

            try
            {
                CalculateInssRequest request = new CalculateInssRequest()
                {
                    InssType      = MapInssType(args.InssType),
                    Revenue       = (double)args.Revenue,
                    ReferenceDate = args.ReferenceDate?.ToString("yyyy-MM-dd") ?? string.Empty
                };

                CalculateInssReply reply = client.CalculateInss(request);
                result.Success = reply.Success;
                if (reply.Success)
                {
                    result.Data = new CalculateInssResult()
                    {
                        Amount  = (decimal)reply.Data.Amount,
                        IsLimit = reply.Data.IsLimit,
                        Rate    = (decimal)reply.Data.Rate
                    };
                    _logger?.LogInformation("CalculateInss Success");
                }
                else
                {
                    result.Data   = null;
                    result.Errors = reply.Errors;
                    _logger?.LogInformation("CalculateInss FAIL, {Errors}", result.Errors);
                }
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Errors  = ex.Message;
                _logger?.LogInformation("CalculateInss FAIL, {Message}", ex.Message);
            }

            return(Task.FromResult(result));
        }
        public async Task <IActionResult> CalculateInss
        (
            [FromServices] ILogger <LaborTaxesController> logger,
            [FromServices] ILaborTaxesService service,
            [FromBody] CalculateInssRequest request,
            [FromQuery] DateTime?date,
            CancellationToken cancellationToken = default
        )
        {
            CalculateInssResult resp = await service.CalculateInss(request.Type.Value, request.Revenue, date, cancellationToken);

            if (resp == null)
            {
                return(NotFound(resp));
            }
            return(Ok(resp));
        }