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.
- Se houver agentes ativos, adiciona cada um convertido em EflowPublicoAlvoDto, sendo que:
- 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.
- Cada método consulta a API _negocioBaseApiClient para verificar se o usuário tem papéis que o autorizam a executar a ação:
- 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.
- Cria-se um objeto EncaminhamentoFormularioDto, configurando:
- 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).
- Chama o repositório _encaminhamentoRepository para obter os dados do encaminhamento:
- 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.
- Caso o idCaixa tenha valor:
- 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.
- Consulta os papéis do usuário:
- 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.
- idEncaminhamento precisa ser maior que zero.
- Busca de destinos do encaminhamento:
- Consulta _destinoEncaminhamentoRepository.ObterDestinosEncaminhamentoByIdEncaminhamento.
- Se falhar, retorna erro.
- Se não houver destinos, retorna erro HistoricoMovimentacaoEncaminhamentoNaoEncontrado.
- Consulta _destinoEncaminhamentoRepository.ObterDestinosEncaminhamentoByIdEncaminhamento.
- 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.
- Chama _negocioBaseApiClient.ObterTodasCaixasEncaminhamento, passando o guidUsuario e a flag de permissão "ENCAMINHAMENTO_HISTORICO_V2".
- 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).
- Monta um EncaminhamentoPastaDto com:
- 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.
- 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.
- 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.
- 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.
-
Preparam filtros para as respectivas caixas.
-
Obtem contador total da caixa através da API elasticQuery (ObterContadorTotalProcessos).
-
Obtem os IDs do processo da caixa seguindo a paginação do filtro através da API elasticQuery (ObterIdsProcessos).
-
Obtem a lista de processos detalhados, buscando no repositório através de "ObterProcessosCaixaConsulta".
-
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).
- Se a caixa estiver filtrando processos em andamento, então:
- 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).
- Copia diretamente parâmetros básicos informados na interface:
- 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.
- Define condicional dos tipos de ato:
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.
- Define:
- 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.
- Se IdClasse foi informado:
- Copia os filtros de pesquisa inseridos pelo usuário ou tela:
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.
- Se foi informado um local de autuação válido:
- 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.
- Similar ao local de autuação, mas aplicado à localização atual do processo:
- 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.
- Caso uma caixa específica tenha sido informada:
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.
- Faz uma consulta no ElasticSearch para obter todas as caixas com:
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.
- Para cada 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.
- Monta o objeto MenuCaixaProcessoDto com: