public async Task <StatusCodeResult> Finalizar([FromBody] ProcesoData data)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var proceso = await _queryProcessor.ProcessAsync(new GetProcesoByFechaCorteQuery(data.FechaCorte), CancellationToken.None);

                    var identity        = new ProcesoId(proceso.Id);
                    var executionResult = await _commandBus.PublishAsync(
                        new FinalizarProcesoCommand(identity),
                        CancellationToken.None)
                                          .ConfigureAwait(false);
                }
                catch (DuplicateOperationException)
                {
                    // TODO: Al haber duplicados se debe loguear un WARN aunque el status code sea un HTTP 200
                    return(new OkResult());
                }
                catch (Exception)
                {
                    return(new StatusCodeResult(StatusCodes.Status500InternalServerError));
                }
            }
            return(new OkResult());
        }
 public async Task <StatusCodeResult> Iniciar([FromBody] ProcesoData data)
 {
     if (ModelState.IsValid)
     {
         try
         {
             var specification = ExistsFechaCorteSpecification.Create(_queryProcessor).Not();
             specification.ThrowDomainErrorIfNotSatisfied(data.FechaCorte);
         }
         catch (DomainError)
         {
             // TODO: Al haber duplicados se debe loguear un WARN aunque el status code sea un HTTP 200
             return(new OkResult());
         }
         var identity        = ProcesoId.New;
         var executionResult = await _commandBus.PublishAsync(
             new IniciarProcesoCommand(identity, data.FechaCorte),
             CancellationToken.None)
                               .ConfigureAwait(false);
     }
     return(new OkResult());
 }