Pular para o conteúdo principal

Negócio Query (ENQ)

Introdução

Com o foco em consultas de dados, a API Negócio Query é responsável por prover informações sobre processos, documentos, encaminhamentos e outros casos de uso do sistema. A partir desta api são construídas várias páginas do sistema, como a página de caixas de processos, encaminhamentos, contadores da tela inicial, entre outras.


Agentes

Agente Seleção Modal

Regras de Negócio

ObterPatriarcasDisponiveisSemEspeciais:

  • Consulta lista de patriarcas disponíveis (através do método em EAQ).
  • Consulta lista de patriarcas especiais (através do método em EAQ).
  • Retorna apenas os patriarcas disponíveis que não estão na lista de especiais.
  • Em caso de falha em qualquer consulta, retorna erro.

ObterRecentesDocumentoAssinatura:

  • Valida se o Guid do Papel foi informado (não vazio).
  • Busca agente ativo associado ao papel (através de EAQ).
    • Se não encontrado ou inválido, retorna erro.
  • O patriarca vinculado ao papel deve estar habilitado ou ser OAB. Essa verificação é feita através do método privado IsPatriarcaHabilitadoOuOab.
    • Se não estiver, retorna erro.
  • Consulta IDs de assinantes recentes: (essa consulta é feita artavés do _elasticQuery)
    • Pelo capturador (usuário) -> busca agentes ativos correspondentes -> preenche RecentesPorPapel.
    • Pelo setor/unidade do capturador -> busca agentes ativos correspondentes -> preenche RecentesPorLocal.
    • Retorna AgenteRecentesDto com as listas preenchidas.

ObterDestinatariosRecentesEncaminhamento:

  • Mesma validação de Guid e agente ativo.
  • Mesma regra de patriarca habilitado/OAB.
  • Consulta IDs de destinatários recentes:
    • Pelo capturador -> preenche RecentesPorPapel.
    • Pelo setor/unidade -> preenche RecentesPorLocal.

ObterDestinatariosRecentesDespachoProcesso:

  • Mesma validação de Guid e agente ativo.
  • Mesma regra de patriarca habilitado/OAB.
  • Consulta IDs de destinatários de despacho de processo:
    • Pelo capturador -> busca agentes ativos, ordena por Nome do Cidadão e Nome do Papel -> preenche RecentesPorPapel.
    • Pelo setor/unidade -> preenche RecentesPorLocal.
Detalhes
  • A diferença entre os 3 métodos está na consulta de IDs cada uma chama um método diferente do _elasticQuery.
  • Todos usam EAQ para buscar os agentes ativos.

IsPatriarcaHabilitadoOuOab (privado):

  • Busca todos os patriarcas disponíveis (através de EAQ).
  • Adiciona o patriarca OAB à lista de habilitados.
  • Retorna true se o patriarca está na lista (habilitado ou OAB), caso contrário, false.

Common

Contadores Globais

Função

Fornecer dados de todos os contadores do sistema.

Regras de Negócio

  • Todo contador é obtido para um único cidadão identificado por GuidCidadao.
  • Antes de contar processos ou encaminhamentos, o sistema consulta o ENB para obter apenas as caixas (custódias e destinos) às quais o cidadão tem acesso, usandos as permissões PROCESSO_CONTADOR_GLOBAL_V2 E ENCAMINHAMENTO_CONTADOS_GLOBAL_V2.
  • Os contadores de processos e encaminhamentos são calculados somente sobre as caixas retornadas no passo anterior (não conta o que o cidadão não tem permissão).
  • O contador de credenciamento pendente de aprovação é calculado apenas para o cidadão informado.
  • O sistema retorna separadamente os contadores de processos em andamento e processos encerrados com pendência de credenciamento.
  • O contador de pendência do Eflow é obtido usando exclusivamente o GuidCidadao.
  • Se qualquer chamada de API ou repositório retornar isFailure, o método retorna imediatamente um Result.Failure e nenhum contador é retornado.
  • Todos os contadores válidos são agrupados em um único objeto ContadoresGlobaisDto e retornados via Result.Success().

Informação Usuário

Função

Determinar o papel preferencial de um cidadão dentro do sistema, com base na quantidade de vínculos relacionados primeiramente ao Patriarca e depois ao Órgão.

Regras de Negócio

ObterPapelPreferencial:

  • Verifica se Guid do cidadão foi informado (não vazio).
  • Busca papéis de servidor do usuário através de EAQ.
    • Caso o resultado da busca seja null ou vazio, retorna sucesso com a lista vazia.
  • Agrupa os papéis do cidadão por PartriarcaId.
  • Conta quantos papéis existem em cada patriarca.
  • Seleciona o patriarca principal: aquele com maior quantidade de papéis vinculados.
  • Dentre os papéis do patriarca principal, seleciona o órgão com a maior quantidade de papéis para ser o órgão principal.
  • Dentro do órgão principal, pega o primeiro papel encontrado como o papel preferencial do cidadão, e retorna esse papel.

Evento

Função

Consultar o status de um evento de processamento a partir de um identificador externo

Regras de Negócio

ObterDadosProcessamentoSeFinalizado:

  • Caso o identificador externo seja vazio, retorna erro.
  • Caso a chamada para obter o evento retorne vazia ou null, é gerado erro.
  • É criado um objeto de status com Token = identificador do evento e Situação = situação atual do evento.
  • Se o tipo do evento for de captura, define em retorno o IdentificadorExternoDocumento do evento.
  • Caso a situação do eventoestiver como concluido, faz uma verificação extra no repositóriode documentos:
    • Se o documento ainda não estiver indexado altera a situação para Processando (mesmo que o evento já tenha marcado como concluído).
  • Retorna sucesso com pocessamentoStatus.

Credenciamento

Função

Obter contador de documentos com solicitações de credenciamento pendentes.

Regras de Negócio

ObterContadorCredenciamentoTotalPendentes:

  • Verifica se Guid é vazio, caso seja, retorna erro.
  • Busca e retorna o contador de credenciamentos pendentes de aprovação.

Documento Histórico

Função

Obter a lista de alterações no nível de acesso e gestão de fundamentos legais (incluindo solicitações)

Regras de Negócio

ObterHistoricoNivelAcesso:

  • Verifica se Guid é vazio, caso seja, retorna erro.
  • Busca e retorna o historico do documento.

Documento Fase de Assinatura

Helper

Função

Gerenciar e validar os agentes envolvidos em um documento na fase de assinatura, definindo quem pode visualizar, assumir, bloquear ou excluir o documento de acordo com as regras de negócio aplicáveis.

Regras de Negócio

ListarAgentesDocumentoFaseAssinaturaDetalhe:

  • Sempre inclui o cidadão logado (guidCidadao).
  • Acrescenta agentes relacionados ao documento (ListarAgentesDocumento), bloqueio (ListarAgentesBloqueador) e assinantes indicados (ListarAgentesAssinateIndicado).
  • Remove duplicados antes de retornar.

ListarAgentesByClasse (privado):

  • Se a classe documental existir e tiver plano de classificação, adiciona a organização responsável.

ListarAgentesDocumento (privado):

  • Se o documento existir, inclui:
    • Agente de envio.
    • Agente capturador.
    • Organização da classe (via ListarAgentesByClasse).

ListarAgentesBloqueador (privado):

  • Se o documento existir, adiciona o agente que bloqueou o documento.

ListarAgentesAssinateIndicado (privado):

  • Se existirem assinantes indicados, adiciona todos os agentes que foram definidos como assinantes.

ValidarTodosServidoresAssinantesInativos (privado):

  • So se aplica se o documento foi carregado por servidor.
  • Considera apenas servidores (não cidadãos).
  • Conta quantos assinantes servidores estão inativos.
  • Caso todos os assinantes estejam inativos, retorna true.

UsuarioPodeExcluirDocumento:

  • Se o capturador for nulo, não pode excluir.
  • Se o usuário logado é o capturador, pode excluir.
  • Se o usuário for um assinante e todos os servidores estiverem inativos (ValidarTodosServidoresAssinantesInativos), pode excluir.

UsuarioPodeAssumirDocumento:

  • Unica forma de assumir o documento é caso o capturador esteja inativo, e o usuário seja um assinante com papel ativo.

Detalhes

Função

Fornecer operações para obter dados detalhados sobre o documento.

Regras de Negócio

ObterDetalheDocumento:

  • Valida entradas:
    • guidCidadao não pode ser vazio.
    • id do documento precisa ser maior que zero.
  • Busca os detalhes do documento pelo repositório.
    • Se não encontrar documento, retorna null (sucesso com resultado nulo).
  • Busca e atribui a hierarquia de classe do documento.
  • Busca informações adicionais:
    • Bloqueio do documento.
    • Assinantes indicados do documento.
    • Processo associado ao documento.
  • Lista os agentes envolvidos no documento (via helper ListarAgentesDocumentoFaseAssinaturaDetalhe).
    • Buscar agentes ativos ou inativos para esses GUIDs.
  • Busca papeis do cidadão logado.
  • Se o documento tiver classe, buscar o termo completo da classe na Classificação.
  • Monta um DocumentoFaseAssinaturaMap com todos esses dados.
  • Mapeia para DocumentoFaseAssinaturaDetalheDto.
  • Retorna sucesso com o DTO.

ObterGerirAssinaturaDocumento:

  • Valida entradas:
    • guidCidadao não pode ser vazio.
    • id do documento precisa ser maior que zero.
  • Busca o documento para gerir assinantes pelo repositório.
    • Se não existir documento, retorna null (sucesso com resultado nulo).
  • Regra de permissão:
    • Somente o capturador do documento pode gerir seus assinantes.
    • Se o guidCidadao não for o mesmo IdAgente do AgenteCapturador, retorna erro de permissão.
  • Busca:
    • Bloqueio do documento.
    • Assinantes indicados do documento.
  • Lista os agentes envolvidos (via helper ListarAgentesDocumentoFaseAssinaturaDetalhe).
    • Busca agentes ativos ou inativos.
  • Valida novamente a permissão do capturador:
    • O capturador precisa estar ativo.
    • Se não estiver ativo ou não for o mesmo guidCidadao, retorna erro de permissão.
  • Monta DocumentoFaseAssinaturaGerirAssinantesDto com os dados coletados.
  • Retorna sucesso com o DTO.

Obs: Caso qualquer operação falhe, retorna erro.

Listagem

Função

Fornecer operações para obter dados para paginação e listagem de:

  • Documentos pendentes de assinatura.
  • Documentos carregados pelo cidadão.
  • Documentos selecionados para assinatura em lote.

Regras de Negócio

ObterDadosDocumentosPendentes:

  • Valida entrada:
    • guidCidadao não pode ser vazio.
  • Busca total de documentos pendentes do cidadão no repositório.
  • Busca dados dos documentos pendentes (ObterDocumentosPendentes):
  • Monta PaginationReturn com:
    • Dados = lista de DocumentoFaseAssinaturaListItemDto.
    • Total = total de documentos pendentes.
  • Retorna sucesso com o objeto paginado.

ObterDocumentosPendentes (privado):

  • Chama _documentoFaseAssinaturaRepository.ObterDocumentosPendentesByCidadaoAssinante.
  • Mapeia cada documento para DocumentoFaseAssinaturaListItemDto contendo:
    • Documento.
    • Guid do cidadão.
    • Assinantes do documento.
    • Assinante indicado (filtra o assinante que corresponde ao cidadão).

ObterDadosDocumentosCarregados:

  • Valida entrada:
    • guidCidadao não pode ser vazio.
  • Busca dados dos documentos carregados (método privado ObterDocumentosCarregados):
  • Busca total de documentos carregados do cidadão.
  • Monta PaginationReturn com:
    • Dados = lista de DocumentoFaseAssinaturaListItemDto.
    • Total = total de documentos carregados.
  • Retorna sucesso.

ObterDocumentosCarregados (privado):

  • Chama _documentoFaseAssinaturaRepository.ObterDocumentosCarregadosByUsuario.
  • Mapeia cada documento para DocumentoFaseAssinaturaListItemDto contendo:
    • Documento.
    • Guid do cidadão.
    • Assinantes do documento (filtrados por ID do documento).
    • Assinante indicado (filtra o assinante que corresponde ao cidadão).

ObterDadosAssinaturaEmLote:

  • Valida entradas:
    • guidCidadao não pode ser vazio.
    • idsDocumentos não pode estar vazio.
  • Busca documentos para assinatura em lote.
  • Mapea cada documento para DocumentoFaseAssinaturaLoteDto contendo:
    • Documento.
    • Guid do cidadão.
    • Assinantes do documento (filtrados pelo ID do documento).
  • Retorna sucesso com a lista.

Obs: Caso qualquer operação falhe, retorna erro.


E-Flow

Helper

Função

Mapear e transformar dados de instâncias de fluxo para DTOs do sistema, aplicando filtros de estados de execução quando necessário.

Regras de Negócio

MapToEflowInstanceListItemDto:

  • Converte um objeto de API (ApiFlowInstanceListDto) em um objeto de uso interno (FlowInstanceListDto).
  • Copia os principais atributos: IdFlowInstance, Nome, DataInicio, DataUltimaAtualizacao.
  • Traz a situação usando .ObterDescricao() para obter descrição textual.

MapToListOfFlowStateEnum:

  • Recebe um filtro (IFlowStateFilter) e retorna uma lista de estados possíveis (FlowStateEnum) de acordo com as flags:
    • IsEmAndamento -> adiciona NotStarted, Started, AwaitingAction.
    • IsConcluido -> adiciona Finished, ManuallyFinished.
    • IsCancelado -> adiciona AutomaticallyCancelled, ManuallyCancelled.
  • Caso nenhuma flag esteja marcada, retorna todos os estados possíveis (pesquisa geral).

MapToEflowInstanceStatusDto:

  • Converte ApiFlowInstanceStatusDto em FlowInstanceStatusDto.
  • Copia os principais atributos: IdFlowInstance, Nome, DataInicio, DataUltimaAtualizacao, DataEncerramento.
  • Converte Situacao e EtapaAtualTipo em descrições textuais.
  • Regra específica para EtapaAtualInformacaoAdicional:
    • Só é preenchida se o usuário solicitante estiver ativo. Caso contrário, retorna null.
  • Sempre inicializa a lista Encaminhamentos como vazia.

Definition

Função

Identificar quais patriarcas possuem fluxos ligados ao usuário, determinar o público-alvo desses fluxos e, por fim, listar as definições de fluxos disponíveis para esse contexto.

Regras de Negócio

ObterPatriarcasComFluxoByUser:

  • Verifica GuidUsuario, caso esteja vazio, retorna erro.
  • Consulta a API do E-Flow para obter os patriarcas com fluxo ligados ao usuário.
  • Se houver guid de patriarcas:
    • Busca na API de agentes (EAQ) os patriarcas disponíveis.
    • Caso contrário, retorna apenas os que estão presentes na lista de guids e ordena pela sigla (PatriarcaSigla).
  • Se não houver patriarcas retorna sucesso com a lista vazia.

ObterPublicoAlvo:

  • Verifica GuidPatriarca e GuidUsuario, caso algum esteja vazio, retorna erro.
  • Consulta API E-Flow para obter os guids do público-alvo do patriarca + usuário.
    • Caso não tenha nenhum guid, retorna sucesso com a lista vazia.
  • Se algum guid retornado estiver vazio, adiciona manualmente um item na lista (Id = Guid.Empty, Agente = null).
  • Busca na API de agentes (EAQ) os agentes ativos correspondentes aos guids retornados.
    • Se houver agentes ativos, adiciona cada um convertido em EflowPublicoAlvoDto, sendo que:
      • Se o agente for do tipo Cidadão -> Id = Guid.Empty, Agente = null.
      • Caso contrário, usa Id e Agente normais.
  • Retorna lista final de público-alvo encontrada.

ObterListagemFlowDefinition:

  • Verifica GuidPatriarca, caso esteja vazio, retorna erro.
  • Monta um objeto FlowDefinitionsDisponiveisFiltroDto com o patriarca informado e a lista de público-alvo (se houver).
  • Consuta API E-Flow para obter a lista de flow definitions disponíveis passando o filtro de público-alvo.
  • Extrai os guids das unidades responsáveis de cada definição de fluxo.
  • Consulta a API de agentes (EAQ) para obter os agentes ativos correspondentes as unidades responsáveis. Caso não haja nenhum agente, retorna sucesso com lista vazia.
  • Monta a lista final combinando:
    • IdFlowDefinition e Nome vindos do fluxo.
    • SiglaOrgao vinda da unidade responsável.
  • Retorna lista final ordenada pelo nome do fluxo.

Instance

Função

Gerenciar os fluxos relacionados ao usuário no sistema.

Regras de Negócio

ObterStatusFluxoByUsuario:

  • Verifica se o guidFlowInstance e o guidUsuario são válidos.
  • Busca o status do fluxo para o usuário.
  • Garante que apenas usuário com algum papel válido veja os fluxos:
    • Solicitante, PendentePraMim ou RespondidoPorMim.
  • Valida se o solicitante existe e está correto.
  • Monta um objeto com:
    • Dados do solicitante.
    • Unidade responsável, se existir.
    • Responsável pela etapa atual, se existir.
    • Lista de encaminhamentos, se existirem.
  • Caso contrário, retorna falha ou fluxo sem acesso.

ObterFlowsIniciadosPorMim:

  • Verifica se o usuário é válido.
  • Cria um filtro com as situações possíveis do fluxo (em andamento, concluído, cancelado).
  • Consulta todos os fluxos iniciados pelo usuário.
  • Mapeis os dados básicos de cada fluxo (id, nome, situação, etc.).
  • Busca dados extras (solicitante, unidade, responsável, responsáveis de etapas) e adiciona às informações do retorno.
  • Retorna lista paginada de fluxos iniciados pelo usuário.

ObterFlowsPendentesParaMim:

  • Verifica se o usuário é válido.
  • Busca todos os fluxos que estão aguardando ação do usuário.
  • Monta lista paginada com os dados dos fluxos pendentes.
  • Inclui informações adicionais de solicitante, unidade responsável e responsável da etapa, caso existam.
  • Retorna lista com os fluxos que exigem ação do usuário.

ObterFlowsJaRespondidos:

  • Verifica se o usuário é válido.
  • Cria um filtro de busca com:
    • Guid do usuário.
    • Situações do fluxo (concluído, cancelado, etc.), mapeadas via MapToListOfFlowStateEnum.
    • Paginaçao.
  • Aplica o filtro para buscar fluxos que já foram respondidos pelo usuário.
    • Caso o resultado seja vazio, retorna sucesso com lista vazia.
  • Mapeia os fluxos encontrados para o modelo de listagem via MapToEflowInstanceListItemDto.
  • Caso a lista de guidsParaBuscar não esteja vazia, busca e adiciona informações complementares (solicitante, unidade, responsáveis) via API de agentes (EAQ) através do método ObterAgentesAtivosOuInativos.

ObterContadorFlowsPendentes:

  • Valida se o usuário é válido.
  • Recupera apenas o número de fluxos pendentes para o usuário.
  • Retorna o contador sem passar detalhes dos fluxos.

Encaminhamentos

Ação

Função

Montar o formulário de ação de um encaminhamento dentro do sistema.

Regras de Negócio (comuns aos três métodos)

  • Validação de parâmetros:
    • O idEncaminhamento deve ser maior que zero.
    • O guidUsuario não pode ser vazio.
    • Caso contrário, o método retorna erro.
  • Verificação de permissões:
    • Cada método consulta a API _negocioBaseApiClient para verificar se o usuário tem papéis que o autorizam a executar a ação:
      • Complementar -> ObterPapeisEncaminhamentoComplementar.
      • Responder/Reencaminhar -> ObterPapeisEncaminhamentoTramitar.
      • Se a lista de papéis for nula ou vazia, o usuário não tem permissão, e o método retorna mensagem de erro.
  • Montagem do formulário base:
    • Cria-se um objeto EncaminhamentoFormularioDto, configurando:
      • TipoMensagem (Complemento, Resposta ou Reencaminhamento).
      • PapeisPermitidosAcao com os papéis obtidos.
      • Em alguns casos, Envolvidos é iniciado como lista vazia.
  • Busca de dados do encaminhamento:
    • Chama o repositório _encaminhamentoRepository para obter os dados do encaminhamento:
      • Complementar/Responder -> ObterEncaminhamentoAcaoResponderEComplementar.
      • Reencaminhar -> ObterEncaminhamentoAcaoReencaminhar.
      • Se não houver resultado, retorna o formulário sem dados adicionais (ainda assim válido).
  • Validação do remetente:
    • Usa o _agenteQueryApiClient (ObterAgenteAtivoOuInativo) para verificar se o remetente do encaminhamento está ativo.
    • Atualiza o campo Ativo do remetente com base no resultado.
  • Definição de remetente e envolvidos:
    • Define o remetente do formulário como o primeiro papel permitido.
    • Nos métodos Responder e Reencaminhar, busca também os envolvidos com _encaminhamentoRepository (ObterEnvolvidosEncaminhamento).
  • Retorno final:
    • Caso tudo ocorra bem, retorna "formularioMontado".
    • Em qualquer falha intermediária (erro de API ou repositório), retorna o erro capturado.

Regras Específicas

ObterEncaminhamentoComplementar:

  • Só pode complementar quem enviou o encaminhamento.
  • O sistema chama _negocioBaseApiClient (ObterPapeisEncaminhamentoComplementar), que retorna apenas os papéis do remetente.
    • Se não houver papéis válidos, o erro indica que o usuário "não pode complementar um encaminhamento que não foi enviado por ele".
  • O formulário resultante (EncaminhamentoFormularioDto) só precisa do remetente, não há campo de "envolvidos", pois a complementação não muda os destinatários.
  • Define TipoMensagem como TipoMensagem.Complemento.

ObterEncaminhamentoResponder:

  • O sistema chama _negocioBaseApiClient (ObterPapeisEncaminhamentoTramitar).
  • O usuário precisa estar entre os destinatários (envolvidos) do encaminhamento.
    • Se não tiver papéis válidos, o erro informa que ele "não pode tramitar um encaminhamento que não foi enviado para ele".
  • Busca também os envolvidos do encaminhamento com _encaminhamentoRepository (ObterEnvolvidosEncaminhamento) para popular o formulário, a resposta precisa mostrar quem recebeu e quem está respondendo.
  • Define TipoMensagem como TipoMensagem.Resposta.

ObterEncaminhamentoReencaminhar:

  • Também usa _negocioBaseApiClient (ObterPapeisEncaminhamentoTramitar), mas o contexto é outro:
    • Aqui o usuário pode tramitar para outros agentes, e não apenas responder.
  • A verificação de papéis é idêntica à do método anterior, mas o repositório consultado é diferente:
    • Chama _encaminhamentoRepository (ObterEncaminhamentoAcaoReencaminhar) (que pode trazer campos adicionais necessários para o reenvio).
    • Também busca os envolvidos para manter o histórico completo.
  • Define TipoMensagem como TipoMensagem.Reencaminhamento.

Caixa

Função

Listar os encaminhamentos que estão relacionados ao usuário logado.

Regras de Negócio

ObterCaixasComContadoresDePendencia:

  • Valída guidUsuario, caso esteja vazio, retorna erro.
  • Busca todas as caixas que pertencem ao usuário (tanto entrada como saída).
  • Remove duplicatas.
  • Monta um filtro para enviar ao ElasticSearch, contendo Guid do usuário e as caixas repetidas.
  • Usa _elasticQueryApiClient (ObterContadoresPendenciasCaixas) para consultar o total de pendências de cada caixa.
  • Mapeia cada caixa encontrada com o contador de pendências correspondente.
  • Ordena as caixas por quantidade de pendências (decrescente).
  • Retorna uma lista de EncaminhamentoCaixaDto, cada um contendo:
    • Nome da caixa.
    • Identificador da caixa.
    • Quantidade de pendências.

ObterTodasPastasDaCaixa:

  • Se idCaixa for vazio, retorna erro.
  • Obtém todas as pastas da caixa via _encaminhamentoPastaRepository (ObterPastasPorCaixa).
  • Adiciona manualmente a pasta "Entrada" à lista (caso não exista).
  • Usa _elasticQueryApiClient (ObterPastasEncComPendenciaUnificado) para obter a contagem de pendências em cada pasta.
  • Junta as informações do banco e do ElasticSearch em uma lista de EncaminhamentoPastaDto.
  • Ordenação final:
    • A pasta “Entrada” sempre vem primeiro.
    • As demais são ordenadas alfabeticamente.
  • Retorna a lista completa de pastas com seus contadores de pendências.

ListarEncaminhamentosNovaCaixaEntrada:

  • Validação de filtros obrigatórios:
    • ResultsPerPage maior que 0
    • CurrentPage maior que 0
    • IdentificadorExternoCaixa não nulo.
    • Se algum falhar, retorna erro de validação.
  • O filtro recebido é convertido para um EncaminhamentoFiltroDto.
  • Busca de IDs no ElasticSearch depende do modo de filtro (ModoCaixaEnum):
    • Pendentes -> _elasticQueryApiClient (ObterIdsPendentesCaixaNovaEntradaUnificado)
    • Resolvidos -> _elasticQueryApiClient (ObterIdsResolvidosCaixaNovaEntradaUnificado)
    • Todos -> _elasticQueryApiClient (ObterTodosIdsCaixaNovaEntradaUnificado)
    • Caso o ElasticSearch retorne falha, o método retorna erro.
    • Se a lista de IDs for nula ou vazia, retorna um resultado paginado vazio (PaginationReturn).
  • Busca encaminhamentos no banco usando _encaminhamentoRepository (ObterEncaminhamentosCaixaEntradaPendentesNovo) para obter os dados completos dos encaminhamentos.
  • Os encaminhamentos são ordenados conforme a sequência dos IDs vindos do ElasticSearch.
  • Chama "ListarEventosEncaminhamentoPosterior" para buscar os eventos mais recentes de cada encaminhamento.
  • Marcação “em processamento”:
    • Caso o encaminhamento esteja pendente no ElasticSearch mas resolvido no banco, é marcado como "em processamento".
  • Contagem total:
    • Chama _encaminhamentoRepository (ObterListaEncaminhamentosCaixaEntradaTotal) para obter o total de registros.
  • Retorno final:
    • Retorna um PaginationReturn contendo:
    • Lista paginada.
    • Total de itens.

ListarEncaminhamentosNovaCaixaSaida:

  • Validação de filtros:
    • Mesmas regras do método da caixa de entrada.
  • Criação do filtro interno:
    • Monta o EncaminhamentoFiltroDto com base no filtro recebido.
  • Busca de IDs no ElasticSearch:
    • Usa _elasticQueryApiClient (ObterIdsCaixaNovaSaidaUnificado).
  • Tratamento de falhas:
    • Se falhar ou retornar vazio, devolve lista paginada vazia.
  • Busca de dados no banco:
    • Usa _encaminhamentoRepository (ObterEncaminhamentosCaixaSaidaPendentesNovo).
  • Reordenação:
    • Mantém a ordem original dos IDs obtidos no ElasticSearch.
  • Eventos e status "em processamento":
    • Busca eventos e marca encaminhamentos pendentes que ainda estão sendo atualizados.
  • Contagem total:
    • Usa _encaminhamentoRepository (ObterListaEncaminhamentosCaixaSaidaTotal).
  • Retorna o resultado paginado.

Os métodos privados ObterListaEncaminhamentosCaixaEntradaTotal e ObterListaEncaminhamentosCaixaSaidaTotal tem as mesmas regras, mudando apenas a origem dos dados (um usa a caixa de entrada e o outro a caixa de saída). Ambos:

  • Validam se o parâmetro filtros é vazio, caso seja, retorna erro.
  • Convertem o objeto EncaminhamentoCaixaFiltroDtoNovo para EncaminhamentoFiltroDto usando método MapToCaixaEncaminhamentoFiltroDto (padroniza os dados antes da consulta).
  • Consulta ao ElasticSearch:
    • A contagem total é obtida chaando métodos do _elasticQueryApiClient, que consulta o ElasticSearch.
    • O método específico depende do tipo de listagem (ModoListagem):
      • Pendentes -> encaminhamento ainda não resolvidos.
      • Resolvidos -> encaminhamentos já finalizados.
      • Outros -> todos os encaminhamentos.
  • Se a consulta falhar, retorna erro.
  • Caso a busta tenha sucesso, retorna o número total de encaminhamentos (long) dentro dos filtros aplicados.

ObterTodasCaixasEncaminhamento (privado):

  • Recebe o guidUsuario e chama o repositório _encaminhamentoCaixaRepository (ObterTodasCaixasPorUsuario).
  • Remove duplicidades e retorna uma lista com todas as caixas disponíveis.
  • Se não houver nenhuma caixa, retorna uma lista vazia (nunca nulo).

ObterCaixasEContadores (privado):

  • Recebe duas listas:
    • Caixas (do banco).
    • Contadores (do ElasticSearch).
  • Para cada caixa, procura o contador correspondente (baseado no IdCaixa).
    • Se não encontrar, o contador é definido como zero.
  • Retorna uma lista de EncaminhamentoCaixaDto com:
    • Nome da caixa.
    • Quantidade de pendências.

MapToCaixaEncaminhamentoFiltroDto (privado):

  • Recebe como entrada o Guid do usuário e uma lista de caixas.
  • Cria um EncaminhamentoFiltroDto contendo:
    • GuidUsuario.
    • Lista de IDs das caixas.
    • Parâmetros de paginação e modo da caixa.
  • Retorna o filtro pronto para ser usado em chamadas ao ES.

Common

Função

Extrair informações básicas e padronizadas de um encaminhamento, para exibir em telas, relatórios ou listagens.

Regras de Negócio

ObterTituloEncaminhamento:

  • Validação de nulo:
    • Se o Encaminhamento for null, o método retorna null.
  • Identificação do encaminhamento base:
    • Se o encaminhamento atual for um complemento ou resposta, ele pode ter um EncaminhamentoRaiz.
    • O método usa "src.EncaminhamentoRaiz ?? src" para garantir que sempre pegue o encaminhamento original da cadeia.
  • O título é definido a partir do campo Assunto do encaminhamento base.
    • Se o campo for nulo, é retornada uma string vazia.
  • Retorna o assunto (ou vazio), garantindo que nunca haja erro de nulo.

ObterProtocoloEncaminhamento:

  • Caso o Encaminhamento for null, o método retorna null.
  • Assim como no método anterior, é usado o encaminhamento raiz (EncaminhamentoRaiz ?? src) para garantir que o número de protocolo venha sempre do documento principal.
  • O protocolo começa com o valor "2018-LEGADO", indicando que o encaminhamento pode ser antigo ou não ter controle vinculado.
  • Busca pelo documento de controle:
    • O método verifica se o encaminhamento base contém documentos (DocumentosEncaminhamento).
  • Se houver documentos, ele procura o documento marcado como controle, pois é ele que representa o documento principal do encaminhamento.
  • Se encontrar o documento de controle, o protocolo é formado por:
    • "Ano - Código".
    • Caso contrário, mantém o valor "2018-LEGADO".
  • Retorna o protocolo definido, seja o real ou o padrão.

Detalhe

Função

Fornecer detalhes e rastreamento de encaminhamentos (documentos tramitados entre unidades ou usuários no sistema).

Regras de Negócio

ObterDetalheEncaminhamento:

  • Validação inicial:
    • O idEncaminhamento deve ser maior que zero.
    • O guidUsuario não pode ser vazio.
    • Caso contrário, retorna erro de validação.
  • Busca os detalhes do encaminhamento via _encaminhamentoRepository (ObterEncaminhamentoDetalhe)
  • Controle da caixa:
    • Caso o idCaixa tenha valor:
      • Atribui o idCaixa aos detalhes do encaminhamento.
      • Se esse ID da caixa esteja entre os destinatários de entrada (DestinatariosCaixaEntrada), o usuário pode retirar o encaminhamento da caixa.
    • Caso contrário, pode devolver o encaminhamento.
  • Atualização do remetente:
    • Obtém os dados atualizados do remetente via EAQ (ObterAgenteAtivoOuInativo).
    • Atualiza o campo Remetente.Ativo conforme o status retornado.
  • Definição de permissões do usuário:
    • Consulta os papéis do usuário:
      • _agenteQueryApiClient (EAQ) (ObterUsuarioPapeisServidor) -> papéis atuais.
      • _negocioBaseApiClient (ObterPapeisEncaminhamentoTramitar) -> papéis que permitem tramitar.
      • _negocioBaseApiClient (ObterPapeisEncaminhamentoComplementar) -> papéis que permitem complementar.
    • Define:
      • PodeTramitar -> se houver papéis válidos para tramitar.
      • PodeEntranhar -> se for servidor e também puder tramitar.
      • PodeComplementar -> se houver papéis válidos para complementar.
  • Verificação de favoritos:
    • Determina o ID base (raiz ou atual) do encaminhamento.
    • Consulta se o encaminhamento é favorito do usuário (_usuarioManagerApiClient.ObterEncaminhamentoFavoritoUsuario).
    • Define IsFavorito = true se houver registro.
  • Retorna Success com o objeto EncaminhamentoDetalheDto completo e validado.

ObterHistoricoEncaminhamento:

  • Ainda não implementado.

ObterRastreioEncaminhamento:

  • Validação de entrada:
    • O protocolo (protocoloEncaminhamento) não pode ser nulo, vazio ou só espaços.
    • Remove traços e espaços.
    • Verifica se o tamanho é exatamente 10 caracteres, qualquer outro formato é inválido.
  • Consulta da quantidade total de trâmites:
    • Usa _encaminhamentoRepository (ObterTotalEncaminhamentosComFilhos) para saber quantos nós o encaminhamento possui.
    • Se a consulta falhar, retorna erro.
  • Limitação de volume:
    • Se houver mais de 50 encaminhamentos relacionados, o método retorna sucesso com valor nulo.
  • Consulta detalhada:
    • Busca os dados completos do rastreamento via _encaminhamentoRepository.ObterEncaminhamentoRastreio.
    • Se falhar, retorna erro.
  • Retorna o DTO EncaminhamentoRastreioDto com todas as informações do percurso do documento.

Histórico

Função

Retornar o histórico completo de movimentações de um encaminhamento (ou seja, tudo que aconteceu com ele: quem enviou, para quem, quando e qual ação foi feita).

Ele faz isso garantindo que o usuário que solicitou tenha permissão de visualização, consultando o repositório de históricos e convertendo os dados para o formato adequado.

Regras de Negócio

ObterHistoricoMovimentacaoEncaminhamento:

  • Validação de parâmetros obrigatórios:
    • idEncaminhamento precisa ser maior que zero.
      • Caso contrário, retorna erro HistoricoMovimentacaoEncaminhamentoIdEncaminhamentoInvalido.
    • guidUsuario não pode ser vazio.
      • Caso contrário, retorna erro HistoricoMovimentacaoEncaminhamentoGuidUsuarioInvalido.
  • Busca de destinos do encaminhamento:
    • Consulta _destinoEncaminhamentoRepository.ObterDestinosEncaminhamentoByIdEncaminhamento.
      • Se falhar, retorna erro.
    • Se não houver destinos, retorna erro HistoricoMovimentacaoEncaminhamentoNaoEncontrado.
  • Esses destinos indicam para onde o encaminhamento já foi enviado, e são usados para verificar as permissões do usuário depois.
  • Busca das caixas com permissão para o histórico:
    • Chama _negocioBaseApiClient.ObterTodasCaixasEncaminhamento, passando o guidUsuario e a flag de permissão "ENCAMINHAMENTO_HISTORICO_V2".
      • Se a chamada falhar, retorna erro.
      • Se não houver caixas retornadas, retorna erro HistoricoMovimentacaoEncaminhamentoUsuarioSemPermissao.
  • Verificação de permissão do usuário
    • O sistema confere se o usuário tem permissão de visualizar o histórico, comparando as caixas do usuário com os destinos do encaminhamento usando a função TemPermissaoVerHistorico.
    • Essa verificação passa por vários níveis de associação:
      • IdAgente
      • IdUnidade
      • IdPapel
      • IdGrupo
      • IdOrganizacao
      • IdSistema
    • Se houver qualquer correspondência, o usuário está autorizado a ver o histórico.
  • Busca do histórico de movimentação:
    • Chama _historicoMovimentacaoEncaminhamentoRepository.ObterHistoricoByIdEncaminhamento.
    • Se falhar, retorna erro.
    • Se não houver registros, retorna erro HistoricoMovimentacaoEncaminhamentoNaoEncontrado.
  • Se o usuário não tem permissão (!hasPermission) e também não aparece como executor de nenhuma ação, o método bloqueia o acesso e retorna HistoricoMovimentacaoEncaminhamentoUsuarioSemPermissao. Ou seja, o histórico só é exibido se o usuário tiver caixa autorizada ou tiver participado diretamente das movimentações.
  • Converte cada entidade HistoricoMovimentacaoEncaminhamento para DTO usando MapEtyToDto.
  • Retorna a lista de DTOs com Success.

MapEtyToDto (privado):

  • Copia campos como Id, Data, IdDestinoEncaminhamento, TipoAcao, CaixaEntrada, IdEvento, etc.
  • Garante que as informações sejam convertidas para tipos simples e seguros antes do envio à camada superior.

TemPermissaoVerHistorico (privado):

  • Compara os campos do destino.Agente com os campos correspondentes do caixaPermitida.
  • Se qualquer um dos IDs for igual (Agente, Unidade, Papel, Grupo, Organização ou Sistema), retorna true.
  • Caso contrário, retorna false.

Listagem

Função

Montar filtros de busca, consultar encaminhamentos no Elasticearch e BD, e retornar os encaminhamentos filtrados (pendentes ou resolvidos) de acordo com a caixa selecionada (entrada ou saída).

Regras de Negócio

MontarFiltroConsultaCaixaSelecionada (privado):

  • Cria um novo EncaminhamentoFiltroDto copiando os dados de um filtro base (filtroConsulta).
  • Define a caixa a ser utilizada como origem ou destino:
    • Se filtroConsulta.Origens tiver valor, usa a caixa selecionada como origem.
    • Se filtroConsulta.Destinos tiver valor, usa a caixa selecionada como destino.
    • Se filtros.IdCaixaSelecionada for nulo, seleciona a primeira caixa disponível da lista caixasEContadores.
  • Retorna também o Guid da caixa selecionada, que será usado na próxima etapa da busca.

MontarFiltroConsultaCaixa (privado):

  • Copia e adapta informações de EncaminhamentoCaixaFiltroDto para EncaminhamentoFiltroDto.
  • Define se a busca será feita por caixas de origem ou destino:
    • Se for caixa de Saída, popula Origens com os IDs das caixas do usuário.
    • Se for caixa de Entrada ou Resolvidos, popula Destinos.
  • Define IsCaixaPendente:
    • Entrada -> true
    • Resolvidos -> false
  • Se o Assunto informado for um protocolo válido, ele é movido para Protocolo e Assunto é limpado.
  • Retorna filtroConsulta.

MapToCaixaEncaminhamentoFiltroDto (privado):

  • Mapeia campos equivalentes: título, datas, página e quantidade de resultados.
  • Força DestinoEncaminhamento = true.
  • Define origem ou destino:
    • Se for caixa de Saída (filtros.Saida = true) -> adiciona em Origens.
    • Caso contrário, adiciona em Destinos.
    • Define também o Guid da pasta, se informado.

ObterTodasCaixasEncaminhamento (privado):

  • Faz chamada à _negocioBaseApiClient.ObterTodasCaixasEncaminhamento.
    • Se a chamada falhar, retorna falha imediatamente.
    • Se houver caixas na resposta, elas são adicionadas à lista de retorno.
  • Caso não haja nenhuma, retorna lista vazia com sucesso.

ObterCaixasEncaminhamentos (privado):

  • Verifica se o usuário possui caixas cadastradas:
    • Se não tiver, retorna resultado vazio.
  • Consulta contadores de encaminhamentos por caixa no ElasticSearch.
    • Se não houver caixas retornadas, encerra com sucesso (lista vazia).
  • Associa dados das caixas com seus contadores.
  • Monta o filtro específico para a caixa selecionada.
  • Consulta:
    • Total de encaminhamentos da caixa.
    • IDs dos encaminhamentos da caixa.
    • Encaminhamentos pendentes correspondentes no repositório.
  • Retorna estrutura com:
    • MenuCaixaEncaminhamento (lista de caixas + caixa selecionada).
    • Lista paginada de encaminhamentos.
  • Se qualquer etapa de busca falhar, retorna falha imediatamente.

ObterCaixasEContadores (privado):

  • Se Destinos for nulo ou vazio, retorna lista vazia com sucesso.
  • Consulta contadores no ElasticSearch.
    • Se falhar, retorna erro.
  • Se não houver resultados, retorna lista vazia.
  • Caso contrário, retorna a lista de contadores das caixas.

ObterCaixaEntradaPendentes:

  • Validações iniciais:
    • guidUsuario não pode ser vazio.
    • filtros não pode ser nulo.
  • Busca todas as caixas de encaminhamento associadas ao usuário.
  • Monta o filtro para caixa de entrada usando MontarFiltroConsultaCaixa.
  • Chama ObterCaixasEncaminhamentos para obter:
    • Caixas com contadores,
    • IDs dos encaminhamentos,
    • Dados dos encaminhamentos pendentes.
  • Retorna um EncaminhamentoListagemDto contendo:
    • Lista paginada de encaminhamentos,
    • Caixa selecionada e contadores.

ListarEncaminhamentosCaixaEntrada:

  • Validações iniciais:
    • Página e quantidade por página devem ser maiores que zero.
    • IdentificadorExternoCaixa não pode ser vazio.
  • Monta o filtro a partir de EncaminhamentoCaixaFiltroDtoNovo com MapToCaixaEncaminhamentoFiltroDto.
  • Busca no Elasticsearch os IDs dos encaminhamentos da caixa.
    • Se não houver IDs, retorna resultado vazio com sucesso.
  • Busca no banco os dados dos encaminhamentos correspondentes:
    • Entrada -> ObterEncaminhamentosCaixaEntradaPendentesNovo.
    • Saída -> ObterEncaminhamentosCaixaSaidaPendentesNovo.
  • Reordena os encaminhamentos conforme a ordem dos IDs retornados do ElasticSearch (mantendo consistência entre ES e BD).
  • Busca eventos posteriores no BD:
    • Se houver evento indicando que o encaminhamento foi resolvido, ele é marcado como EmProcessamento.
  • Busca no ES o total de encaminhamentos (ObterListaEncaminhamentosCaixaNovoTotal).
  • Retorna a listagem paginada com status atualizado.

ObterListaEncaminhamentosCaixaNovoTotal (privado):

  • Filtros não pode ser nulo.
  • Converte os filtros com MapToCaixaEncaminhamentoFiltroDto.
  • Busca no ES o total de encaminhamentos para a caixa (ObterIdsEncaminhamentosCaixaEntradaTotal).
  • Retorna o número total para ser usado na paginação.

ObterCaixasComContadoresDePendencia:

  • GuidUsuario não pode ser vazio.
  • Busca todas as caixas do usuário (ObterTodasCaixasEncaminhamento).
    • Se falhar, retorna falha.
    • Se não houver caixas, retorna lista vazia com sucesso.
  • Monta filtro com:
    • Destinos = caixas do usuário,
    • IsCaixaPendente = true.
  • Busca no ES (ObterCaixasEContadores) os contadores de pendências de cada caixa.
    • Se não houver dados, retorna lista vazia.
  • Ordena caixas por quantidade de pendências (descendente).
  • Monta lista final com EncaminhamentoCaixaDto (Caixa + contador).

ObterTodasPastasDaCaixa:

  • Se idCaixa for vazio, retorna erro.
  • Busca as pastas no banco de dados (ObterPastasByCaixa).
    • Se falhar, retorna erro.
  • Adiciona manualmente a pasta "Entrada" à lista.
  • Busca no Elasticsearch as pastas que têm pendências (ObterPastasDeEncaminhamentoComPendencia).
    • Se falhar, retorna erro.
  • Para cada pasta:
    • Monta um EncaminhamentoPastaDto com:
      • Identificador
      • Nome
      • Contador de pendências (ou 0 se não houver no ES).
  • Ordena a lista colocando "Entrada" primeiro e depois por nome alfabético.
  • Retorna a lista final com sucesso.

ObterCaixaEntradaResolvidos:

  • GuidUsuario não pode ser vazio.
  • Filtros não pode ser nulo.
  • Busca todas as caixas associadas ao usuário (ObterTodasCaixasEncaminhamento).
    • Se falhar, retorna erro.
  • Monta o filtro de consulta (MontarFiltroConsultaCaixa) com o tipo CaixaEncaminhamento.Resolvidos.
  • Chama ObterCaixasEncaminhamentos passando os filtros e a lista de caixas.
  • Retorna um EncaminhamentoListagemDto com os encaminhamentos resolvidos.

ObterCaixaEntradaSaida:

  • GuidUsuario não pode ser vazio.
  • Filtros não pode ser nulo.
  • Busca todas as caixas do usuário (ObterTodasCaixasEncaminhamento).
    • Se falhar, retorna erro.
  • Monta o filtro de consulta (MontarFiltroConsultaCaixa) com o tipo CaixaEncaminhamento.Saida.
  • Chama ObterCaixasEncaminhamentos com os filtros e a lista de caixas.
  • Retorna um EncaminhamentoListagemDto com os encaminhamentos de saída.

ObterDocumentosEncaminhamento:

  • idEncaminhamento deve ser maior que zero.
    • Se inválido, retorna falha.
  • Busca os documentos no repositório (ObterDocumentosEncaminhamento).
  • Retorna a lista de documentos.

(nova caixa de encaminhamento) ListarEncaminhamentosNovaCaixaEntrada:

  • Se idCaixa for vazio, retorna falha.
  • Busca as pastas no banco de dados (ObterPastasByCaixa).
    • Se falhar, retorna erro.
  • Adiciona manualmente a pasta "Entrada" à lista.
  • Busca no Elasticsearch as pastas que têm pendências (ObterPastasDeEncaminhamentoComPendencia).
    • Se falhar, retorna erro.
  • Para cada pasta:
    • Monta um EncaminhamentoPastaDto com:
    • Identificador
    • Nome
    • Contador de pendências (ou 0 se não houver no ES).
  • Ordena a lista colocando "Entrada" primeiro e depois por nome alfabético.
  • Retorna a lista final com sucesso.

ListarEncaminhamentosNovaCaixaSaida:

  • guidUsuario não pode ser vazio.
  • filtros não pode ser nulo.
  • Busca todas as caixas associadas ao usuário (ObterTodasCaixasEncaminhamento).
    • Se falhar, retorna erro.
  • Monta o filtro de consulta (MontarFiltroConsultaCaixa) com o tipo CaixaEncaminhamento.Resolvidos.
  • Chama ObterCaixasEncaminhamentos passando os filtros e a lista de caixas.
  • Retorna um EncaminhamentoListagemDto com os encaminhamentos resolvidos.

ObterListaEncaminhamentosCaixaEntradaTotal (privado):

  • guidUsuario não pode ser vazio.
  • filtros não pode ser nulo.
  • Busca todas as caixas do usuário (ObterTodasCaixasEncaminhamento).
  • Se falhar, retorna erro.
  • Monta o filtro de consulta (MontarFiltroConsultaCaixa) com o tipo CaixaEncaminhamento.Saida.
  • Chama ObterCaixasEncaminhamentos com os filtros e a lista de caixas.
  • Retorna um EncaminhamentoListagemDto com os encaminhamentos de saída.

ObterListaEncaminhamentosCaixaSaidaTotal (privado):

  • idEncaminhamento deve ser maior que zero.
  • Se inválido, retorna falha.
  • Busca os documentos no repositório (ObterDocumentosEncaminhamento).
  • Retorna a lista de documentos.

Favoritos

Função

Listar os itens favoritados pelo usuário e rankear os processos/encaminhamentos mais favoritaos do E-Docs.

Regras de Negócio

ObterFavoritosUsuario:

  • O guidUsuario não pode ser vazio.
  • Busca _usuarioManagerApiClient (ObterFavoritosUsuario).
    • Se falhar, retorna erro.
    • Se nulo ou vazio, retorna lista vazia.
  • Adiciona dados à lista através de _commonRepository (ObterDadosFavoritos).
  • Retorna a lista completa.

ObterProcessosFavoritosRanking/ObterEncaminhamentosFavoritosRanking:

  • Busca _usuarioManagerApiClient (ObterProcessosFavoritosRanking/ObterEncaminhamentosFavoritosRanking).
    • Se falhar, retorna erro.
    • Se nulo ou vazio, retorna lista vazia.
  • Monta a lista completa através de _commonRepository (ObterDadosProcessosFavoritosRanking/ObterDadosEncaminhamentosFavoritosRanking).
  • Retorna a lista completa.

Processos

Detalhes

Ação Service

Função Fornecer os detalhes e permissões do usuário para executar ações específicas sobre um processo (como credenciamento, gerar cópia, alterar nível de acesso, auto-credenciamento ou sinalização), retornando todas as informações necessárias para exibir as opções disponíveis e os dados do processo.

Regras de Negócio (gerais)

Validação dos parâmetros de entrada

  • Todos validam se o guidUsuario é válido.
  • Alguns validam também o idProcesso (por exemplo, sinalização e nível de acesso).

Obtenção das informações básicas do processo

  • Geralmente via _processoHelper.ObterInformacaoProcesso ou _processoRepository (ObterDetalheMinimoProcesso).

Verificação das permissões do usuário para a ação solicitada

  • Chamada a _negocioBaseApiClient para buscar os papéis/patriarcas permitidos (autorização).
  • Caso não haja permissão, retorna erro com mensagem específica.

Obtenção dos atos processuais (quando aplicável)

  • Para ações que envolvem documentos, busca-se os atos via _processoRepository (ObterAtosProcessuais).
  • Os atos são ordenados com AtoProcessualHelper (OrdernarAtosDocumentosOrdemCrescente).

Tratamento dos documentos (em credenciamento e auto-credenciamento)

  • Documentos públicos são marcados como Desabilitado = true para não permitir ação sobre eles.

Montagem do DTO de retorno

  • Todos retornam um ProcessoAcaoDetalheDto com os dados do processo, permissões e, quando necessário, atos processuais ou sinalizações disponíveis.

Regras de Negócio (individuais)

ObterDetalheCredenciamentoLeituraPecas:

  • Exibe detalhes e permissões do usuário para credenciar documentos no processo.
  • Lista atos e marca documentos públicos como desabilitados.

ObterDetalheGerarCopia:

  • Exibe detalhes e permissões para gerar cópia de um processo.
  • Define qual API de papéis usar com base em IsProcessoPAS.
  • Lista atos (mas não desabilita documentos).

ObterDetalheGerirNivelAcessoPecas:

  • Exibe detalhes e permissões para alterar o nível de acesso das peças de um processo.
  • Não busca atos diretamente aqui — apenas permissões e informações do processo.

ObterDetalheGerirNivelAcessoPecasAtos:

  • Retorna apenas os atos processuais ordenados para uso em tela de gerenciamento de acesso.
  • Não verifica permissões nem monta DTO de ação.

ObterDetalheAutoCredenciamento:

  • Muito semelhante ao de leitura de peças.
  • Exibe detalhes e permissões para auto-credenciamento.
  • Marca documentos públicos como desabilitados.

ObterDetalheSinalizacao:

  • Exibe informações mínimas do processo e as sinalizações permitidas para o usuário.
  • Verifica patriarcas permitidos, obtém sinalizações disponíveis e as anexa ao DTO.
  • Não lida com atos nem documentos.

Ato Service

Função

Fornecer todas as informações e permissões necessárias para que o usuário execute um ato processual em um determinado processo — como autuação, despacho, entranhamento, encerramento, desentranhamento, reabertura, etc.

Regras de Negócio (gerais)

Validação dos parâmetros de entrada:

  • Todos os métodos validam guidUsuario ou idProcesso antes de prosseguir.
  • Se inválido, retorno imediato com erro específico.

Verificação de permissões (custódia):

  • Cada ato chama um método específico de _negocioBaseApiClient (ObterPapeisPermitidos).
  • Se o usuário não tem papéis permitidos, retorna erro.

Busca das informações básicas do processo (quando necessário):

  • Feita com _processoHelper (ObterInformacaoProcesso).
  • Essas informações são usadas para exibir dados gerais e compor regras posteriores (ex: tipo PAS, encerrado, etc.).

Dependendo do tipo de ato, busca-se dados extras:

  • Documentos (para chips informativos ou entranhamento).
  • Rascunhos (autuação, despacho).
  • Interessados (edição e PAS).
  • Atos processuais (desentranhamento).
  • Unidade de guarda (encerramento).

Validações adicionais específicas:

  • Ex.: Entranhamento especial não pode ocorrer em processo encerrado.
  • Encerramento só é permitido se o processo tiver unidade de guarda válida.
  • Desentranhamento filtra apenas documentos desentranháveis.

Todos retornam um ProcessoAtoDetalheDto (ou uma lista de documentos/interessados) com:

  • Informações do processo (quando aplicável).
  • Papéis permitidos.
  • Dados complementares conforme o tipo de ato.
  • Mensagens de erro específicas em casos de restrições.

Regras de Negócio (individuais)

ObterDetalheAutuacao:

  • Verifica permissões para autuar.
  • Pode trazer documento e rascunho pré-selecionados.

ObterDetalheEdicao:

  • Exige custódia.
  • Retorna interessados vinculados ao processo.

ObterDetalheDespacho:

  • Busca rascunho de despacho existente.
  • Verifica custódia.

ObterDetalheAvocamento:

  • Apenas valida custódia e retorna informações do processo.

ObterDetalheEntranhamento:

  • Pode receber documento ou encaminhamento.
  • Busca documentos chip e/ou encaminhamento informativo.
  • Usa API específica para PAS ou não PAS.

ObterDetalheEntranhamentoDocumentoEntranhamento:

  • Apenas retorna documentos chip associados ao encaminhamento.

ObterDetalheDesentranhamento:

  • Busca atos com documentos desentranháveis.
  • Filtra documentos que não estão desentranhados e não são de controle.

ObterDetalheEncerramento:

  • Bloqueia encerramento se custódia for órgão, grupo ou papel sem unidade.

ObterDetalheReabertura:

  • Apenas verifica permissões e retorna informações do processo.

ObterDetalheEntranhamentoEspecial:

  • Verifica papéis permitidos.

ObterDetalheAutuacaoPas:

  • Igual ao de autuação, mas específico para processo sancionatório.

ObterDetalheEdicaoPas:

  • Igual ao de edição, mas busca interessados específicos de PAS.

ObterDetalheGerirRepresentanteLegalPas:

  • Verifica permissões e retorna informações básicas do processo.

ObterDetalheGerirRepresentanteLegalPasInteressados:

  • Valida se o processo é PAS e retorna os interessados do tipo sancionatório.

Detalhes Service

Função

Fornecer dados detalhados e/ou paginados sobre elementos relacionados a um processo.

Regras de Negócio (gerais)

Validação dos parâmetros de entrada:

  • Todos os métodos validam guidUsuario, idProcesso ou idAto antes de prosseguir.
  • Se inválido, retorno imediato com erro específico.
  • Alguns validam também o formato do protocolo, caso seja diferente de (AAAA-XXXXX), retorna falha com log.
  • No caso de métodos para processos PAS, é verificado se o processo realmente é do tipo PAS.
  • Qualquer falha retornada em qualquer consulta, é gerado erro.

Paginação e totalização:

  • A maioria dos métodos busca primeiro o total de registros com um método ObterTotal... .
  • Se o total for 0, retorna sucesso com objeto paginado vazio.
  • Caso haja dados, executam a busca principal (ObterDados...) e montam o objeto PaginationReturn.

Verificação de permissões/custódia:

  • Alguns métodos fazem consultas à (EAQ) para (ObterAgentesAtivosOuInativos, ObterUsuarioPapeisServidor, ObterUsuarioPapeisAdvogado).
  • Se o usuário não tem papéis permitidos, retorna erro.

Alguns métodos usam quantitativos e contadores, buscam totais relacionados ao processo:

  • Interessados, associações, credenciamentos, encaminhamentos, registros de cópia, documentos na fase de assinatura, entranhamentos especiais, etc.
  • Aplica regras de negócio relacionadas ao bloqueio do processo por credenciamentos ou entranhamentos especiais.

Alguns buscam o status e a classificação atual do processo através de ENB para pegar:

  • Local de autuação, responsável, data de autuação, via, custodiante, último ato etc.
  • Se o custodiante estiver inativo no sistema externo, mas existir no banco, assume como ativo e loga um warning.
  • Busca a classe documental completa do processo (ObterClasseTermoCompleto) para exibição do nome completo da classe.

Favoritos:

  • Verifica se o processo está marcado como favorito pelo usuário.

Regras de Negócio (individuais)

ObterQuantitativosProcesso:

  • Valida idProcesso.
  • Busca dados de quantitativo do processo.

ObterDetalhesCompletosProcesso:

  • Valida protocolo e guidUsuario.
  • Busca detalhes do processo para a tela atual.

ObterDetalhesProcesso:

  • Valida protocolo e guidUsuario.
  • Busca detalhes do processo para a nova tela.

ObterInteressadosProcesso:

  • Valida idProcesso.
  • Verifica se o processo é PAS; se sim, retorna erro.
  • Busca total e dados dos interessados.

ObterInteressadosProcessoPas:

  • Valida idProcesso.
  • Verifica se o processo é PAS; se não for, retorna erro.
  • Busca total e dados dos interessados do PAS.

ObterCredenciamentosLeituraProcesso:

  • Valida idProcesso e guidUsuario.
  • Busca lista dos credenciamentos para leitura de peças do processo.

ObterEncaminhamentosAssociadosProcesso:

  • Valida idProcesso.
  • Busca total de encaminhamentos e dados paginados.

ObterAssociacoesProcesso:

  • Valida idProcesso.
  • Busca total e dados de associações do processo.
  • Consulta agentes proprietários de cada associação.

ObterDocumentosParaAssinarAssociadosProcesso:

  • Valida idProcesso e guidUsuario.
  • Busca total e dados de documentos para assinar associados ao processo.

ObterDocumentosCarregadosPorMimProcesso:

  • Valida idProcesso e guidUsuario.
  • Busca total e dados de documentos carregados pelo usuário.

ObterEntranhamentosEspeciaisProcesso:

  • Valida idProcesso.
  • Busca total e dados de entranhamentos especiais.

ObterRegistrosGeracaoCopiaProcesso:

  • Valida idProcesso.
  • Busca total e dados de registros de geração de cópia.

ObterRegistroGeracaoCopiaInfoProcesso:

  • Valida idCopia e guidUsuario.
  • Busca dados do registro de geração de cópia.
  • Consulta permissões do usuário via EAQ.
  • Define ExibirLinkDownload dependendo da permissão.
  • Retorna RegistroGeracaoCopiaInfoDto?.

ObterRegistroGeracaoCopiaPecasProcesso:

  • Valida idCopia.
  • Busca total e dados das peças da cópia.

ObterComunicadosEntranhamentosEspeciaisProcesso:

  • Valida idProcesso.
  • Busca total e dados de comunicados de entranhamentos especiais.

ObterSolicitacoesCredenciamentoProcesso:

  • Valida idAssociacao.
  • Busca lista de solicitações de credenciamentos no processo.

ObterAssociacaoInfoProcesso:

  • Valida idAssociacao.
  • Busca dados da associação no repositório.
  • Consulta agente proprietário; se nulo, mantém dados do BD.

ObterProcessosAssociados:

  • Valida idAssociacao.
  • Busca total de processos associados e dados paginados.

ObterAtosModoPecasProcesso:

  • Valida idProcesso.
  • Busca total de peças/atos e dados paginados.

ObterPecasAtoProcesso:

  • Valida idAto.
  • Busca lista dos atos do processo versão trâmites.

ObterAtosModoCompactoProcesso:

  • Valida idProcesso.
  • Busca total de atos e dados paginados no modo compacto.

ObterAtosModoTramitesProcesso:

  • Valida idProcesso.
  • Busca total de atos e dados paginados no modo trâmite.

ObterAtosModoClassicoProcesso:

  • Valida idProcesso.
  • Busca total de atos e dados paginados no modo clássico.

ObterAtoModoClassicoProcesso:

  • Valida idAto.
  • Busca dados do ato no modo clássico.

Listagem

Função

Fornecer as listas de processos para cada caixa e para a busca avaçada.

Regras de Negócio (gerais)

Os 4 métodos principais seguem o mesmo padrão.

  1. Tratam os parâmetros de entrada:
  • Verificam se guidUsuario é vazio e se filtrosCaixa é null, caso seja retorna erro.
  • Buscam e verificam se o usuário possui papel de servidor, caso não tenha retorna erro.
  1. Buscam todas as caixas para a caixa referente ao método (entrada/saída/encerrados/busca avançada).
  • Caso não encontre nenhuma caixa retorna sucesso com a lista vazia.
  1. Buscam todas as caixas e pastas com contadores.
  • Utiliza o método privado "CarregarCaixas" para realizar a busca.
  • Caso CaixasProcesso seja nulo ou vazio, retorna sucesso com lista vazia.
  1. Preparam filtros para as respectivas caixas.

  2. Obtem contador total da caixa através da API elasticQuery (ObterContadorTotalProcessos).

  3. Obtem os IDs do processo da caixa seguindo a paginação do filtro através da API elasticQuery (ObterIdsProcessos).

  4. Obtem a lista de processos detalhados, buscando no repositório através de "ObterProcessosCaixaConsulta".

  5. Preparam e retornam objeto paginado.

Regras de Negócio (individuais)

ObterProcessosCaixaEntrada:

  • Preparação do filtro:
    • Utiliza o método privado InicializarProcessoFiltro para montar a estrutura inicial dos filtros do processo.
    • Define filtros fixos e padrões de pesquisa:
      • Situação do processo = "Em Andamento".
      • Custódia é definida por IDs de todas as caixas de processo disponíveis.
      • Localização atual filtra especificamente pela caixa atualmente selecionada.
    • Ordena os resultados:
      • Primeiro por prioridade de sinalização (ordem crescente).
      • Depois pela data do último trâmite, conforme a preferência do usuário (asc ou desc).
    • Inicializa filtro avançado através do método privado InicializarProcessoFiltroAvancado.

ObterProcessosCaixaSaida:

  • Preparação do filtro:
    • Define condicional dos tipos de ato:
      • Se a caixa estiver filtrando processos em andamento, então:
        • Considera atos de Autuação, Despacho, Avocamento e Reabertura.
      • Se estiver filtrando processos encerrados, então:
        • Considera apenas processos encerrados.
      • Caso nenhum desses estados esteja ativo, o tipo permanece null (sem filtro específico por tipo de ato).
    • Constroi objeto filtro:
      • Copia diretamente parâmetros básicos informados na interface:
        • Protocolo -> número indentificador do processo.
        • Resumo -> busca textual.
        • DataTramiteInicial/Final -> limita por período de trâmite (data de movimentação dos atos).
    • Define as caixas envolvidas na saída:
      • CustodiasCaixasSaida recebe todos os IDs das caixas disponíveis, garantindo que a busca aconteca em todo o escopo da unidade.
      • CaixasSaida recebe a caixa selecionada pelo usuário, se houver, filtrando mais a pesquisa.
      • Caso o usuário não tenha selecionado nenhuma caixa, fica null -> sem restrição extra.
    • Filtra por tipo de ato:
      • Aplica o filtro pelos tipos de ato de acordo com a situação do processo.
      • Se tipos for null, não hà filtro de tipo -> a busca retornará todos os tipos possíveis.
    • Ordena os resultados:
      • Ordena os atos pela data do ato, do mais recente para o mais antigo.
      • Isso garante que as movimentações mais recentes apareçam primeiro.

ObterProcessosCaixaEncerrados:

  • Preparação do filtro:
    • Utiliza o método privado InicializarProcessoFiltro para montar a estrutura inicial dos filtros do processo.
    • Define filtros fixos e padrões de pesquisa:
      • Situação do processo = "Encerrado".
      • Localização atual filtra especificamente pela caixa atualmente selecionada.
    • Ordena os resultados pela data do último trâmite, do mais recente para o mais antigo.
    • Inicializa filtro avançado através do método privado InicializarProcessoFiltroAvancado.

ObterprocessosCaixaBuscaAvancada:

  • Preparação do filtro:
    • Utiliza o método privado InicializarProcessoFiltro para montar a estrutura inicial dos filtros do processo.
    • Ordena os resultados:
      • Primeiro por score (ordem decrescente).
      • Depois pela data do último trâmite, do mais recente para o mais antigo.
    • Inicializa filtro avançado através do método privado InicializarProcessoFiltroAvancado.

InicializarProcessoFiltro (privado):

  • Contrói um objeto filtro:
    • Copia os filtros de pesquisa inseridos pelo usuário ou tela:
      • PesquisaLivre -> texto livre para buscar por protocolo, nome, etc.
      • DataAutuacaoInicial/Final -> filtra processos por data de autuação (criação).
      • DataQualquerTramiteInicial/Final -> filtra por datas de trâmites (movimentações).
    • Filtro por último ato (opcional).
      • Se foi informado um tipo de último ato, ele é aplicado como filtro único.
      • Caso contrário, TiposUltimoAto recebe uma lista vazia -> sem restrição de ato.
    • Ignorar processos específicos (exclusão).
      • Se a lista IdsProcessosHide tiver valores, eles serão usados para excluir processos específicos da busca.
      • Se não tiver nada, permanece null -> não ignora nenhum processo.
    • Filtro por classe (opcional).
      • Se IdClasse for informado e válido, ele é aplicado no filtro.
      • Caso contrário, Classe fica null -> sem filtro por classe.
    • Paginação.
      • Define:
        • Page -> número da página de retorno dos processos.
        • Count -> quantidade de registros por página.
        • Essa configuração é essencial para não retornar listas gigantes de uma vez.
    • Consulta complementar no repositório de Classe.
      • Se IdClasse foi informado:
        • Consulta no banco de dados (via _classeRepository) para buscar detalhes da classe.
        • Se falhar, o método interrompe e retorna Failure.
        • Se der certo, insere o nome da classe no FiltroComplemento, para enriquecer a informação usada na pesquisa ou exibição.

InicializarProcessoFiltroAvancado (privado):

  • Filtro de sinalização:
    • Se houver um ID de sinalização, ele é adicionado ao filtro.
    • Isso restringe a busca a processos que possuem essa sinalização específica.
  • Recuperação de agentes:
    • Junta todos os IDs de agentes informados no filtro (caixa, autuador, interessado, localizações etc.).
    • Remove os Guid.Empty.
    • Busca detalhes desses agentes (ativos ou inativos) via EAQ.
  • Local de Autuação:
    • Se foi informado um local de autuação válido:
      • Armazena o nome completo do local no FiltroComplemento.
      • Se o local for uma organização, filtra todos os locais desse órgão.
      • Se for uma unidade, filtra apenas aquela unidade específica.
  • Localização Atual:
    • Similar ao local de autuação, mas aplicado à localização atual do processo:
      • Se for organização, busca todos os locais dela.
      • Se for unidade, busca apenas o local informado.
  • Autuador:
    • Se marcada a opção "Autuado por Mim", a busca considera todos os IDs de papéis do usuário logado.
    • Caso contrário, se um autuador específico foi informado:
      • Armazena o nome no FiltroComplemento.Autuador.
      • Filtra pelo ID do autuador selecionado.

obs.: A opção "Autuado por Mim" tem precedência sobre o ID manual.

  • Local de Tramitação:
    • Define um local específico de tramitação (para onde o processo foi ou está indo).
    • Também preenche o label correspondente.
  • Tramitado por:
    • Filtra por processos tramitados por um usuário específico.
    • Guarda também o nome do agente no FiltroComplemento.
  • Interessado:
    • Se marcada a opção "Sou Interessado", filtra pelos IDs do usuário e seus papéis.
    • Caso contrário, se informado um interessado específico:
      • Filtra por esse agente.
      • Preenche o label para exibição.

obs.: Assim como o autuador, "Sou Interessado" tem precedência.

  • Caixa:
    • Caso uma caixa específica tenha sido informada:
      • Preenche o nome no FiltroComplemento.Caixa.
      • Define o ID dessa caixa como localização atual.

CarregarPastas (privado):

  • Obtem pastas da caixa no banco de dados:
    • Busca no repositório todas as pastas cadastradas para a caixa informada.
  • Prepara lista auxiliar de retorno:
    • pastas: lista original de pastas do banco.
    • pastasAux: lista auxiliar onde será construída a lista final, combinando pastas da base + as recebidas.
  • Processa pastas recebidas no objeto caixa:
    • Se GuidPasta for vazio -> adiciona uma pasta especial chamada "Sem pasta definida", para representar processos que não estão em nenhuma pasta.
    • Se GuidPasta for válido -> busca a pasta correspondente no resultado do banco e adiciona com o contador recebido.
    • Se não encontrar a pasta no banco -> ignora (não adiciona).

obs.: Sempre preserva o contador (pastaCaixa.Contador) recebido, pois indica a quantidade de processos em cada pasta.

  • Verifica quais pastas não foram adicionadas ainda:
    • idsPastas -> IDs das pastas que já estão em pastasAux.
    • pastasRemanecentes -> pastas que vieram do banco, mas não foram incluídas ainda.
  • Adiciona as pastas remanescentes à lista final:
    • Para cada pasta remanescente, verifica se já existe alguma informação prévia de contador.
    • Se existir, reaproveita o contador.
    • Se não existir, atribui contador 0.
  • Ordena alfabeticamente e retorna:
    • Ordena as pastas finais pelo nome (Pasta.Nome).

CarregarCaixas (privado):

  • Inicializa e valida a lista de caixas:
    • Se o usuário não tiver caixas credenciadas, retorna um menu vazio.
    • Evita chamadas desnecessárias a serviços externos.
  • Extrai IDs de credenciamento:
    • Monta a lista de IDs das caixas às quais o usuário tem acesso.
    • Essa lista será usada para filtrar contadores e validações posteriores.
  • Obtem caixas com contadores no Elastic:
    • Faz uma consulta no ElasticSearch para obter todas as caixas com:
      • Custódias = caixas que o usuário tem acesso.
      • Situação = Em Andamento.
    • Assim, traz apenas caixas com processos ativos.

obs.: Se não houver caixas com processos ativos, retorna menu vazio.

  • Busca agentes correspondentes às caixas:
    • Busca no serviço de agentes os dados correspondentes a cada caixa retornada pelo Elastic.
    • Necessário para exibir nome e detalhes da caixa no menu.

obs.: Se não houver agentes correspondentes, retorna menu vazio.

  • Determina qual caixa deve vir selecionada:
    • Se o filtro já tiver uma caixa selecionada, usa essa.
    • Caso contrário, usa a primeira caixa disponível.
    • Isso define qual caixa terá suas pastas carregadas e será marcada como ativa na interface.
  • Associa dados de agentes e carregar pastas da caixa selecionada:
    • Para cada caixa:
      • Associa o objeto Agente correspondente (detalhes da caixa).
      • Se não for a caixa selecionada, não carrega pastas.
      • Se for a caixa selecionada, chama CarregarPastas(caixa) para obter e montar as pastas da caixa.

obs.: Apenas a caixa selecionada tem suas pastas carregadas — otimização de desempenho.

  • Loga caixas sem agente:
    • Se alguma caixa não tiver dados de agente, registra um log de warning.
    • Ajuda a identificar inconsistências de dados.
  • Determina pasta selecionada (se houver):
    • Se houver IdPasta informado nos filtros, busca a pasta correspondente dentro da caixa selecionada.
    • Caso contrário, pasta selecionada fica nula.
  • Monta e retorna DTO final do menu:
    • Monta o objeto MenuCaixaProcessoDto com:
      • Todas as caixas com contador.
      • Pastas da caixa selecionada.
      • Id da caixa e pasta selecionadas.
      • Flag TemAcessoCaixa — indica se o usuário realmente tem permissão na caixa selecionada.
    • Retorna o menu pronto.