O Sistema e-SUS APS PEC é composto de uma estrutura complexa de banco de dados contendo colunas defasadas e atuais para retrocompatibilidade, é um probgrama amplamente utilizado na atenção básica ao redor do Brasil, porém pobre em exibição de métricas e análise inteligente dos dados, por isso o desenvolvimento dessa camada dem anipulação de dados para exposição dos mesmos em API com autenticação a fim de cálculo de métricas de desempenho dentre outras utilidades.
Criar arquivo .env com base na estrutura de variáveis exposto em .env.example
# Porta onde será exposta aplicação web que expõe a estrutura de tabelas, somente leitura
PGWEB_PORT=8098
# Porta que expõe a aplicação principal, é possível acessar a área de testes (playground) com http://localhost:8072/api/v1/graphql
API_PORT=8072
# É a senha mestra usado quando da criação de usuários pelo playground
MASTER_KEY='passw@rd'
# Chave de criptografia
SECRET=
# URL tcp do banco de dados que teremos acesso
DATABASE_URL='postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@psql:5432/${POSTGRES_DB}?sslmode=disable'
Para preencher a variável SECRET
, que identificada como chave de criptografia, tenha instalado o Python em sua máquina e rode em terminal o seguinte comando
python -c 'import secrets; print(secrets.token_hex())'
As seguintes linhas de código executam os comandos expressos nos respectivos blocos identificados em Makefile
make run
make migrate
make migrate
make m="update some table" makemigrations
flask db init --multidb
flask db migrate -m "Initial migration"
flask db upgrade
O banco de dados, na versão 4.2.8
em que essa documentação foi escrita continha 919 tabelas com relacionamentos abundantes e aparente repetição de dados. Não existe uma documentação do banco, porém segue algumas dicas que uso para poder navegar.
Para que seja impossível por meio dessa API editar os dados por acidente, permitindo apenas a leitura por parte da API.
-- Criando Role (Função)
CREATE ROLE readaccess;
ALTER ROLE readaccess LOGIN;
-- Criando grupo de permissões para a Função
GRANT CONNECT ON DATABASE esus TO readaccess;
GRANT USAGE ON SCHEMA public TO readaccess;
GRANT SELECT ON ALL TABLES IN SCHEMA "public" TO readaccess;
-- Criando o usuário com a Função
CREATE USER esus_reader WITH PASSWORD 'esus';
-- Dando a possibilidade de realizar login para visualizar tabelas
GRANT readaccess TO esus_reader;
Aparentemente alguns comando não funcionam diretamente na linha de comando psql
, mas funcionaram com o dbeaver
para parte de rodar comando sql. That's odd! 😖
docker exec -it esus_psql bash
psql -U postgres
\c esus
\dt
\d+ tb_proced
select t.table_schema,
t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name
and c.table_schema = t.table_schema
where c.column_name = 'co_principio_ativo'
and t.table_schema not in ('information_schema', 'pg_catalog')
and t.table_type = 'BASE TABLE'
order by t.table_schema;