Premissas

Como a indexação do conteúdo pesquisável é feita em outro servidor os dados precisam estar em um ambiente de conteúdo determinístico não passível de mudanças ou influências externas, salvo exceções de atualizações sob demanda. Sendo assim, algumas premissas devem ser consideradas:

  • Os documentos indexados automaticamente pelo sistema serão aqueles considerados “finalizados” do ponto de vista do andamento processual, independente se é um PDF, assinado ou não, RTF, html ou outro conteúdo textual.
  • O servidor onde será instalado o sistema possuirá espaço em disco, ou mapeamento para storage, correspondente a quantidade de conteúdo a ser indexada.
  • A tecnologia suportada pelo MavenDoc e que será utilizada é o Apache Solr versão 7.1 que utiliza o Lucene 7.1, versão mais moderna e robusta do indexador open-source mais utilizado no mercado.
  • O cliente irá desenvolver as interfaces necessárias para fazer a requisição da pesquisa, seus filtros e design. Após a requisição será entregue a interface da Maven para exibição dos resultados e filtros agrupados com quantidades dentro do escopo da pesquisa realizada, conforme proposta de interface detalhada mais adiante.


Indexação de dados


Informação
Origem
Tipo
Texto do documento
Extração textual dos documentos PDF, RTF, HTML e outros documentos texto. Não armazenamos binários, que deixariam a pesquisa lenta, mas sim o conteúdo textual da extração.
Texto
SHA-CRIPTO
Hash criptográfico do conteúdo indexado para posterior integração em soluções de blockchain e validação de integridade/auditoria.
Texto
Data de criação
Timestamp da base de dados indicando a data e hora de criação do documento
Timestamp
Identificador
ID do documento que se relaciona com a base de dados de origem – Não é o ID único do registro pois a indexação pode receber informações de várias origens não somente de uma tabela – Mesmo registros avulsos de indexação via webservice devem receber um ID que permita identificar depois.
Número
Setor de criação
ID do SETOR de criação – Armazenaremos o ID para que o sistema consulte os nomes dos setores sempre do banco de dados, permitindo assim a mudança no nome sem precisar reindexar.
Número
Tipo de documento
ID do TIPO de documento - Armazenaremos o ID para que o sistema consulte os nomes dos setores sempre do banco de dados, permitindo assim a mudança no nome sem precisar reindexar.
Número
NUMERO DO DOCUMENTO (OPCIONAL)
Complemento do tipo de documento (ex: DESPACHO NR 400 – Será indexado 400)
Número
ID da autuação  (opcional)
ID da autuação para facilitar a busca por processos no futuro ou mesmo para criar um link de abertura do processo sem precisar buscar o ID da autuação do banco
Número
ANO, mês, DIA
Indexação de numerais auxiliares de data para filtros mais rápidos em comparação com manipulação de timestamp no Lucene.
Número
ID DA PÁGINA NO MAVENDOC  (opcional)
ID interno do MavenDOC com a identificação da página para que o visualizador já abra na página correta.
Número
URL de origem (opcional)
No caso de documentos indexados via webservice que não são processos e não aparecem no MavenDOC faz-se necessário informar a URL (HTTP)de origem para que possa ser criado o botão “Ver documento”
Texto
COD SISTEMA
Codigo do sistema que fez a solicitação da indexação – é usado para as operações de webservice junto com o ID que não possui garantia de unicidade.  Ex: MAVENDOC=1, ETCEXX=2, TCEDOCUMENTOS=3 etc..
Número
NOME DO USUARIO 
Nome do usuário que produziu o documento extraído das tabelas do sistema de origem
Texto
NÚMERO DO PROCESSO
Número do processo extraído das tabelas do sistema de origem
Texto
ASSUNTO DO PROCESSO
Assunto do processo extraído das tabelas do sistema de origem
Texto
SITUAÇÃO DO PROCESSO
ATENÇÃO – Dado mutável. A informação da situação do processo ao ser modificada precisará ser reindexada em todos os documentos do processo.
Texto


Dos campos acima, apenas o “Texto do documento” é pesquisável, os demais servem para filtragem posterior.


Servidor de Aplicação


É necessário a criação de um novo servidor Linux 64 bits com espaço em disco condizente com a quantidade de dados esperados para indexação e que possua conexão com o banco de dados Oracle do MavenDoc.

  • Instalaremos nesse servidor o Java8, Solr 7.1, Lucene 7.1, eventuais softwares open-source para cache e desempenho.
  • O SOLR necessita trabalha por padrão com a porta 9989 para transmissão de dados e 80 para gestão.
  • Não há necessidade de conhecimento na DMZ – Apenas o servidor Linux do MavenDOC acessa a porta 9989 e apenas usuários de gestão de infraestrutura precisam da porta 80 e 22.
  • A quantidade de memória e processamento podem variar conforme a quantidade esperada de pesquisas por segundo. No início até conclusão de toda a base histórica o uso de CPU pode exceder a média de uso após conclusão.  Em anexo enviamos uma planilha da Apache para cálculo de infraestrutura necessária para o SOLR.  Como referência podemos citar nosso servidor dos jornais que possui 8Gb de ram e 2.6Ghz com 2 cores e atende muito bem aproximadamente 500 a 700 pesquisas por minuto.


Operadores lógicos

Suporta-se os operadores lógicos suportados pelo SOLR para utilizar melhor os recursos de indexação. Caso o cliente entenda que algum operador não seja amigável para o perfil do usuário do cliente , podemos fazer um de-para entre a operação do SOLR e a sintaxe de operação do cliente. Segue abaixo a documentação para consulta.

http://lucene.apache.org/core/3_5_0/queryparsersyntax.html


Stopwords

Precisaremos configurar uma lista de stopwords mais comuns para evitar buscas desnecessárias ou ataques de DDOS no servidor de pesquisa. Uma lista de stopwords é um documento texto com termos e palavras irrelevantes para uma pesquisa como “processo” ou “tribunal” por exemplo, onde praticamente todos os documentos seriam encontrados.  Se o tribunal já tiver essa política ou palavras mapeadas em seu portal seria interessante nos enviar para manter. Em anexo o arquivo utilizado por padrão.


Integração via webservice


Para utilização dos webservices você precisa do MavenDoc instalado em seu ambiente e ter posse da API KEY. Sem a chave você não conseguirá invocar os serviços. Solicite a chave para suporte@maven.com.br 


O sistema entrega via API REST dois módulos: search e searchWeb.  


  • search  - Conjunto de serviços que entregam resultado sempre em JSON para que clientes possam criar suas próprias telas de resultado e tratar da melhor forma possível.
  • searchWeb - Serviço que realiza a pesquisa com base em um conjunto de parâmetros e entrega na sua própria URL uma página de resultado pronta para uso.


Serviços "search"


Para todos os serviços você precisa sempre enviar o "key" no header com a sua chave - sem isso não funcionará. Você pode usar o serviço de search para indexar novos documentos que não estejam já sendo indexados pelo módulo de visualização do MavenDoc, como documentos avulsos, textos, arquivos etc.. 


saveDocument

  • id  = ID do documento - cuide para ele nunca repetir - ele é usado para salvar documentos existentes se necessário
  • hash - Cálculo SHA-256 do arquivo - envie para registro de rastreabilidade
  • texto - Conteúdo textual do arquivo - quanto mais plain text melhor
  • descricao_documento = Um breve descritivo sobre o que está sendo salvo com o nome do documento
  • id_autuacao = Opcional caso o documento seja relacionado com algum processo. Não envie documentos que já estão sendo indexados pelo Mavendoc!
  • ordem = Ordem do documento dentro do processo - use 1 se não se aplica.
  • url = Quando o documento não tem relação com processo você precisa especificar a URL que o usuário vai acessar quando tentar abrir o documento pois ele não estará indexado no Mavendoc
  • assunto_processo = Campo específico com o assunto do processo
  • nome_usuario = Nome do usuário que criou ou atualizou esse documento
  • id_tipo_documento = Tipo do documento, como K1, M, A etc conforme mapeamento do tribunal
  • situacao_processo = Situação ou status do processo conforme sistema interno do tribunal
  • id_setor = ID do setor onde o documento foi criado
  • data = Data de criação do documento 
  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • numero_documento = ID do documento na base original do sistema acima


Após a requisição, em caso de erro você receberá a mensagem de erro. Em caso de sucesso você recebe o json com o resultado do documento indexado. Salve o ID em seu sistema para atualização futura se necessário. 


updateStatus


Só se aplica aos documentos indexados pelo MavenDoc. Se você atualizar o conteúdo de algum documento em seu sistema de origem e isso não refletir em atualização da data do documento do processo (nova movimentação ou novo andamento), então você precisa avisar manualmente o indexador para indexar o novo conteúdo. Isso se aplica apenas se você precisar mexer manualmente no arquivo que já foi indexado para corrigir algum erro e tiver que ordenar o sistema para indexar de novo. 


  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • id_documento = ID do documento na base original do sistema acima
  • idPagina = Ignorar, utilizado pelo mavenDoc


deleteDocument


Se você precisar remover um documento do indexador utilize esse método.

  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • idDocumento = ID do documento na base original do sistema acima
  • idPagina = Ignorar, utilizado pelo mavenDoc


deleteProcess


Se você precisar remover um processo do indexador utilize esse método.

  • idProcesso = ID do processo a ser removido


getDocument


Se você precisar obter todos os metadados de um documento indexado use esse serviço.

  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • idDocumento = ID do documento na base original do sistema acima


simpleFilter


Esse serviço service para montar a coluna com os filtros de um resultado de  uma pesquisa. Por exemplo, você pesquisa por "juiz" - ao invés do resultado ele irá te trazer a árvore de filtros e totalizadores do resultado da pesquisa para você montar essa área da tela - corresponde à coluna da direita na imagem no topo desse manual.


  • keywords  = Palavra chave da pesquisa que será realizada
  • username = Usuário logado que está realizando a pesquisa
  • startDate e endDate = Período para considerar na busca
  • year = Considerar apenas resultados de algum ano
  • pgNumber = Durante a paginação envie esse parâmetro
  • tipo_documento = Tipo do documento, como K1, M, A etc conforme mapeamento do tribunal - array
  • id_setor = ID do setor onde o documento foi criado
  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • sort = utilize asc ou desc para coordenar a ordem dos registros da pesquisa
  • numerodocumento = ID do documento na base original do sistema acima se quiser procurar em um documento específico


searchDocuments


Serviço que é utilizado pelo searchWeb junto com o simpleFilter para prover a tela de resultado da pesquisa. Você pode usar esse serviço e construir sua própria tela customizada do resultado da pesquisa.


  • keywords  = Palavra chave da pesquisa que será realizada
  • username = Usuário logado que está realizando a pesquisa
  • startDate e endDate = Período para considerar na busca
  • year = Considerar apenas resultados de algum ano
  • pgNumber = Durante a paginação envie esse parâmetro
  • tipo_documento = Tipo do documento, como K1, M, A etc conforme mapeamento do tribunal - array
  • id_setor = ID do setor onde o documento foi criado
  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • sort = utilize asc ou desc para coordenar a ordem dos registros da pesquisa
  • numerodocumento = ID do documento na base original do sistema acima se quiser procurar em um documento específico


Serviço searchWeb


O searchWeb é um serviço que já entrega a tela de resultado da pesquisa pronta para uso em qualquer sistema que possa embutir um link web. Você precisa apenas realizar um POST e direcionar o usuário para o link. Não capture o html pois ele possui folhas de estilo, javascript e outras dependências. 


Exemplo de aplicação: 


<form action="/mavendoc-solr-webservice-1.0/v1/searchWeb/" method="post" charset="utf-8">
Username: <input type="text" name="username" value="meu username"/><br/>
Pesquisar por: <input type="text" name="keywords" value="minha palavra chave"/><br/>
<input type="submit" value="Pesquisar"/>
</form>


Note que acima usamos os mesmos nomes de parâmetros usado no serviço searchDocument. Você pode então criar outros parâmetros para submeter a requisição. 


searchGetToken 

Você pode utilizar este serviço para gerar um token em base64 para abrir uma página de pesquisa. Isso é útlil em integrações com sistemas desktop por exemplo. Não esqueça de enviar o api key no header.


Exemplo de chamada:

curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: application/json' --header 'key: sua chave' -d 'parametros da pesquisa' 'http://seuhost:aplicacao/v1/searchWeb/searchGetToken'


  • keywords  = Palavra chave da pesquisa que será realizada
  • username = Usuário logado que está realizando a pesquisa
  • startDate e endDate = Período para considerar na busca
  • year = Considerar apenas resultados de algum ano
  • pgNumber = Durante a paginação envie esse parâmetro
  • tipo_documento = Tipo do documento, como K1, M, A etc conforme mapeamento do tribunal - array
  • id_setor = ID do setor onde o documento foi criado
  • cod_sistema = O MavenDoc é código 1 - se você vai integrar com o SistemaB, use código 2, ou com o sistema C use código 3
  • sort = utilize asc ou desc para coordenar a ordem dos registros da pesquisa
  • numerodocumento = ID do documento na base original do sistema acima se quiser procurar em um documento específico


getPageByToken


Com o token gerado pelo serviço acima, utilize a URL com esse serviço enviando o token através de POST. O token contém todos os dados da pesquisa que será realizada. 


Exemplo:



<form action="/mavendoc-solr-webservice-1.0/v1/searchWeb/getPageByToken" method="post"  target="_blank">
    Token: <textarea cols="50" rows="10" name="token">SEU TOKEN GERADO</textarea>
    <input type="submit" value="Realizar pesquisa"/>
</form>