public async Task <GruposPartesListItem> ListarGruposPartesProcesso(Guid userGuid, string termo, int casoId, bool clientes, bool partes, bool profissionais)
        {
            var retorno = new GruposPartesListItem();

            var taskCliente       = new List <Cliente>();
            var taskProfissionais = new List <Profissional>();
            var taskEnvolvidos    = new List <Domain.Models.BackendModels.Parte>();

            if (clientes)
            {
                taskCliente = await _clienteService.ListarClientesPorTermo(userGuid, termo);
            }

            if (profissionais)
            {
                taskProfissionais = await _profissionalService.ListarProfissionaisPorTermo(userGuid, termo);
            }

            if (partes)
            {
                taskEnvolvidos = await _processoService.ListarEnvolvidosPorTermo(userGuid, termo);
            }

            var taskEnvolvidosBd   = _envolvimentoRepositorio.ListarEnvolvidosPorTermo(termo);
            var taskEnvolvidosCaso = ListarPolosProcesso(casoId);

            await Task.WhenAll(taskEnvolvidosBd, taskEnvolvidosCaso);

            retorno.Clientes      = (taskCliente == null) ? new List <Domain.Models.BackendModels.Cliente>() : taskCliente;;
            retorno.Profissionais = (taskProfissionais == null) ? new List <Domain.Models.BackendModels.Profissional>() : taskProfissionais;;
            retorno.Envolvidos    = (taskEnvolvidos == null) ? new List <Domain.Models.BackendModels.Parte>() : taskEnvolvidos;

            var partesBd = _mapper.Map <List <Domain.Models.BackendModels.Parte> >(taskEnvolvidosBd.Result.ToList());

            retorno.MergeEnvolvidosLocalAndServico(partesBd);
            retorno.EsconderPartesJaCadastradas(taskEnvolvidosCaso.Result);

            return(retorno);
        }