Coder Social home page Coder Social logo

ministeriopublicorj / sinapse Goto Github PK

View Code? Open in Web Editor NEW
3.0 7.0 2.0 4.87 MB

Ferramenta gráfica de análise de vínculo, conectando dados oficiais da Receita, DETRAN, dentre outros órgãos.

Shell 0.26% Python 52.96% HTML 4.14% CSS 12.10% JavaScript 30.52% Batchfile 0.02%

sinapse's Introduction

Build Status Coverage Status Codacy Badge

Sinapse

Ferramenta gráfica de análise de vínculo, conectando dados oficiais da Receita, DETRAN, dentre outros órgãos.

Objetivo

Encontrar padrões e conexões muitas vezes não evidentes entre servidores, pessoas físicas e jurídicas em contratos com o Estado, de forma gráfica e intuitiva, a fim de facilitar a análise das promotorias de justiça podendo trazer insights de onde pode partir uma investigação, ou prover insumos para inquéritos já em curso.

As buscas podem ser relacionadas a parentesco, relação societária, propriedades, bens, utilizando os caminhos que estas conexões fazem, que podem muitas vezes em conflito de interesse com a sociedade civil.

Sinapse

Configuração e ambiente

O projeto utiliza decouple para variáveis de configuração e ambiente, é necessário utilizar um arquivo settings.ini ou exportar no ambiente as seguintes variáveis:

NEO4J_USUARIO=(usuário do banco Neo4J)
NEO4J_SENHA=(senha do usuário)
NEO4J_DOMINIO=(FQDN do banco Neo4J)
MONGO_USUARIO=(usuário do banco MongoDB para log de acesso)
MONGO_SENHA=(senha do usuário MongoDB)
MONGO_HOST=(host do MongoDB)
MONGO_AUTHDB=(domínio de autorização)
SECRET=(secret key única segura)
AUTH_MPRJ=(FQDN do autorizador web MPRJ)
USERINFO_MPRJ=(FQDN do sistema de roles MPRJ)
DEV=True/False(Em DEV não precisa de autenticação)
SISTEMAS=???

Dependências, Instalação e Execução

O projeto foi testado nas versões 3.5 e 3.6 do Python.

Para instalação das dependências do projeto é necessário instalar os pacotes da seguinte forma:

Configurando ambiente no Linux

sudo apt-get install redis-server
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install -r dev-requirements.txt

Configurando ambiente no Mac

brew install python redis
brew services start redis
pip3 install virtualenv cython
virtualenv --python=$(which python3) venv
source venv/bin/activate
pip install -r dev-requirements.txt

Rodando no Linux ou Mac

Você precisará abrir dois terminais. No primeiro:

source venv/bin/activate
export WORKER=1
sh app.sh

No segundo:

source venv/bin/activate
sh app.sh

Caso você tenha o erro

app.sh: line X: syntax error: unexpected end of file

execute

vim app.sh
:set fileformat=unix
:wq

Desenvolvendo no Windows

virtualenv venv
venv\bin\activate.bat
pip install -r dev-requirements.txt

Rodando no Windows

venv\bin\activate.bat
app.bat

O servidor waitress está configurado para rodar no endereço: http://127.0.0.1:8080

Endpoints

A API exposta pelo backend tem os seguintes endpoints:

/api/labels

Retorna array de strings com os tipos de entidades disponíveis.

/api/search?q=

Retorna entidades que contenham os termos buscados.

{
    "tipo_da_entidade": {
        "highlighting": {
            "id_aleatorio": {
                "chave": [
                    "<em>texto que deu match</em>"
                ]
            }
        },
        "response": {
            "docs": [
                {
                    "chave": "valor",
                    "uuid": "id único"
                }
            ],
            "numFound": quantidade_de_elementos_encontrados,
            "start": item_inicial_retornado_(0)
        }
    }
}

/api/nodeProperties?label=

Retorna objeto com as propriedades disponíveis para a entidade buscada, no formato:

{
    "columns": [
        "keys(n)"
    ],
    "data": [
        [
            [
                "prop1", "prop2"
            ]
        ]
    ]
}

/api/findNodes?label=&prop=&val=

Retorna as propriedades de uma dada entidade, em um objeto no formato:

{
    "nodes": [
        "id": 1,
        "type": [
            "type1"
        ],
        "properties": {
            "prop1": "val1"
        }
    ]
}

/api/nextNodes?node_id=

Retorna as ligações de uma dada entiade, em um objeto no formato:

{
    "edges": [
        {
            "arrows":"to",
            "dashes":false,
            "from":"1",
            "to":"2"
            "id":"3",
            "label":"um label",
            "properties":{
                "prop1":"val1"
            },
        }
    ],
    "nodes":[
        {
            "id":"1",
            "properties":{
                "prop1": "val1"
            },
            "type":[
                "type1"
            ]
        }
    ]
}

/api/foto?rg=1234 ou api/foto?node_id=1234

Busca da foto de uma pessoa no DETRAN. A resposta é objeto vazio ({}) ou um objeto no formato:

{
    "imagem": "foto em base 64",
    "rg": "número do rg",
    "tipo": "pessoa",
    "uuid": "identificador único da pessoa no banco"
}

/api/foto-veiculo?caracteristicas=VW/SANTANA 2000 MI 1998 CINZA

Busca da foto do veículo. As caracteristicas são o resultado da concatenação separada por espaço da marca, modelo e cor do veículo. A resposta é um objeto vazio ({}) ou um objeto no formato:

{
    "caracteristicas": "string passada",
    "imagem": "foto em base64",
    "tipo": "veiculo",
    "uuid": "identificador único do veículo no banco"
}

/api/findShortestPath?node_id1=140885160&node_id2=81208568&rel_types=opcional"

Busca do caminho mais curto entre dois nós, no mesmo formato do endpoint /api/nextNodes.

{
    "edges": [],
    "nodes": []
}

/api/whereabouts?node_id=140885160

Faz busca dos endereços em diferentes bases.

[
    {
        "formatted_addresses": [
            "bairro": "",
            "cep": "",
            "cidade": "",
            "complemento": "",
            "endereco": "",
            "numero": "",
            "sigla_uf": "",
            "telefone": ""
        ]
        "type": "receita_federal ou credilink"
    }
]

sinapse's People

Contributors

rhenanbartels avatar samambaman avatar nighto avatar barbier avatar bernardoccordeiro avatar laylasaurus avatar victoralves avatar danielbelchior avatar ramosanderson avatar rlage avatar bakudas avatar

Stargazers

 avatar  avatar GeoConstantino avatar

Watchers

James Cloos avatar  avatar  avatar  avatar GeoConstantino avatar  avatar  avatar

Forkers

myguel1 renanzg

sinapse's Issues

Estilo e Layout de Nós e Relações

Para relações mais numerosas e menos relevantes, como multas, os ícones devem ser menores.
Relações mais relevantes, como empresas e relações familiar, devem possuir destaque e tamanhos maiores.

Integração com Outros Sistemas

Deve ser disponibilizada uma interface por serviço que irá permitir que outros sistemas autentiquem usuários SCA no Conexão e os redirecionem diretamente para a ferramenta, já logados.

Homepage

Necessidade: hoje os promotores precisam visualizar de forma gráfica os dados de cruzados dos bancos de dados do MPRJ, com o objetivo de visualizar vínculos entre nós destas bases de dados.

Objetivo: disponibilizar uma tela para que, utilizando as ferramentas disponíveis na solução, o promotor visualize de forma fácil esses nós, suas relações, propriedades e vínculos antes não vislumbrados.

Critérios de Aceite:

  • Tela deve estar no ambiente autorizado.
  • Todos os dados que trafegarem na resposta às consultas realizadas deverão estar logados.
  • Os dados deverão ser dispostos na tela utilizando ferramentas gráficas de acordo com a imagem 1 anexo:sinapse.png
  • Existem tipos de nós iniciais já existentes e estes devem ter, cada um, seu estilo gráfico próprio.
    São eles:
 empresa  
 mgp  
 multa  
 orgao  
 personagem  
 pessoa  
 telefone  
 veiculo  
  • Os tipos de nós que não estão nesta lista de nós iniciais deverão ter um estilo genérico.
  • Caso o nó retornado for um nó marcado como sensível, não serão disponibilizados dados sobre suas propriedades. Apenas as relações que ele possua.

Busca de Nós

Necessidade: os usuários precisa indicar um filtro inicial e refinar buscas para encontrar o nó desejado.

Objetivo: disponibilizar uma ferramenta de busca por atributos de quaisquer nós para iniciar a descoberta de relações.

Critérios de Aceite:

  • Filtro dinâmico de acordo com os atributos de cada nó
  • Será disponibilizados os tipos de nós, cada qual com seu estilo gráfico, onde o usuário irá selecionar o tipo de nó para o qual ele deseja fazer uma busca.
  • Após a seleção do tipo de nó será disponibilizada uma lista com todos os atributos que este nó tem, de forma a permitir ao usuário digitar o valor a ser pesquisado.
  • A busca retornará no máximo 25 nós.

Produto: ao final da consulta serão exibidos na Homepage os nós que atendem ao critério de busca informado pelo usuário.

URI e SSL

A URI pública e privada deve ser renomeada para conexao.* e deve suportar SSL para todos os ambientes MPRJ

Autenticação

A interface Conexão MPRJ deve ter autenticação e autorização utilizando o SCA.

Critérios:

  • Usuário e senha validados.
  • Existência da Role Conexão MPRJ

Produto:
Tela de autenticação direcionando o usuário para a Homepage

Expandir propriedades do Nó

Necessidade: o usuário necessita ver, para cada nó, todos os atributos cadastrados nas bases de dados MPRJ

Objetivo: ao selecionar um nó, deve ser exibido de forma inteligível todas as propriedades existentes do nó.

Critérios de aceite:

  • Propriedades sendo informadas de forma gráfica, sem prejudicar a utilização da ferramenta.

Busca Integrada com Outros Sistemas

Caso sistemas externos autorizem um usuário, deve existir a possibilidade de enviar parâmetros para exibir os personagens identificados em peças.

Limpar Filtros

Ao clicar em um ícone disponibilizado na tela de busca, o estado atual da tela de busca deve ser limpo e deve ser disponibilizado ao usuário os filtros iniciais de busca de nós.

Autorização SCA

Criar grupo de Autorização SCA e permitir apenas usuários autorizados no Conexão

Expansão de Relações

Necessidade: o usuário deseja, a partir de um nó, expandir as relações conhecidas do mesmo e, através delas, identificar vínculos

Objetivo: permitir que, ao clicar em um nó suas relações sejam expandidas.

Critérios de Aceite:

  • Os nós devem se expandir de forma gráfica, mas deve ser uma exibição suave, sem sobreposições ou efeitos gráficos que prejudiquem o conforto dos olhos do usuário.
  • Deve ser possível expandir as propriedades e as relações dos nós para que estes sejam indefinidamente explorados

Refinamento de Busca por Nós

Necessidade: caso o filtro por nós retorne uma quantidade muito grande de resultados o usuário deverá possuir uma ferramenta adequada para refinar sua busca;

Objetivo deverá ser disponibilizado ao usuário uma listagem com os nós encontrados, de forma a possibilitar ao usuário selecionar os nós que ele deseja exibir na Homepage

Animação do Click do Filtro

Ao clicar no botão de iniciar novas buscas, deve ser exibida uma animação para tornar este processo mais amigável

Limitar Expansão de Nós

Ao expandir nós, deve-se exibir apenas a quantidade viável para exibição, ordenada pelo registro mais recente.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.