https://github.com/augustoarraes/sapju
Sistema de Análise de Processos Jurídicos.
https://github.com/augustoarraes/sapju
api-rest docker fastapi judge postgresql python rabbitmq
Last synced: about 2 months ago
JSON representation
Sistema de Análise de Processos Jurídicos.
- Host: GitHub
- URL: https://github.com/augustoarraes/sapju
- Owner: augustoarraes
- Created: 2025-10-18T17:57:29.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-10-19T06:10:55.000Z (8 months ago)
- Last Synced: 2025-10-19T10:57:10.314Z (8 months ago)
- Topics: api-rest, docker, fastapi, judge, postgresql, python, rabbitmq
- Language: Python
- Homepage:
- Size: 313 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# SAPJu
SAPJu defini com as iniciais de *`Sistema de Análise de Processos Jurídicos`* + `u` minusculo.
Melhor [referência](desafio-python-developer.md) do Sistema. O Sistema distribuído foi desenvolvido com o frame do Python FastAPI, com Docker, Banco de Dados Postgres, eventos com RabbitMQ (*broker* de eventos) e MinIO como storage das extrações. São três microsserviços FastAPI:
- API: App Backend de Processo e Documentos
- Publisher: Responsável inserir na fila de eventos do RabbitMQ
- Extrator: Responsável por consumir a fila de eventos do RabbitMQ e Realizar a Extração dos Textos dos Documentos (cadastrados na API).
Porquê FastAPI?: Python, Assincrono nativo, alto desempeho, alta performance, leve, moderno, totalmente integrável e muito mais.
## Diretórios do Projeto
- `sapju`: A API (FastAPI), backend de cadastro de Processo e Documentos (PDFs)
- `Publisher`: Microsserviço (FastAPI) que lança eventos na fila do RabbitMQ.
- `Extrator`: Microsserviço (FastAPI) Consumidor do RabbitMQ e Extrator de Texto dos PDFs
- `documentos`: Documentos exemplos utilizados na App.
## Subindo o Sistema
```bash
docker compose up -d
```
⚠️ Devido às dependencias entre os serviços, é normal aparecer "Error" no inicio do proceso. Ao concluir, todos os containers estarão prontos.
Sugiro em seguida:
```bash
# .. Devido ao RabbitMQ demorar um pouco a subir
docker restart sapju_publisher sapju_extrator
```
Swagger da API: [http://127.0.0.1:5000/docs](http://127.0.0.1:5000/docs)
Swagger do Publisher de Documentos: [http://127.0.0.1:5673/docs](http://127.0.0.1:5673/docs)
Swagger do Extrator de Documentos: [http://127.0.0.1:5674/docs](http://127.0.0.1:5674/docs)
Admin Web do MinIO (S3/armazenamento da Extração dos documentos): [http://localhost:9001](http://localhost:9001)
E, as configurações e credenciais do sistema estão em `/sapju/app/.env` e em `compose.yml`.
## Troubleshooting
Listando serviços `docker ps`.
Sempre bom verificar de algum dos serviços não subiram ou cairam `docker logs -f sapju_publisher`. Sendo assim, `docker restart sapju_publisher`, por exemplo.
## Utilizando a API
### Cadastrando o Processo
Endpoint:
~~~bash
http://localhost:5000/api/processo
~~~
Body:
``` json
{
"classe": "ARE",
"numero": 123456,
"orgao_origem": "STF"
}
```
### Upload de Documento(s)
Enpoint:
~~~bash
http://localhost:5000/api/processos/{processo_id}/documentos
~~~
Em Body, escolher `form-data`, criar a `Key` *`arquivos`* e o tipo dessa `Key` é *`File`*. Em `Value`, selecione o Documento para upload.
### Consultando o Processo
Endpoint:
~~~bash
http://localhost:5000/api/processos/{processo_id}
~~~
### Consultando um Documento
Endpoint:
~~~bash
http://localhost:5000/api/processos/{processo_id}/documentos/{documento_id}
~~~
### Status da Extração do Texto
Endpoint:
~~~bash
http://localhost:5000/api/processos/{processo_id}/documentos/{documento_id}/status
~~~
## Rodando os Testes
```bash
docker exec -it sapju_api pytest
```
Aqui iniciei a implementação dos Testes de Integração. Não implementei nenhum teste unitário até então.
## Arquitetura da Aplicação
Os Processos Judiciais e Documentos são cadastrados via Api. Assim que os documento são inseridos, são lançados (*publisher*) na esteira de eventos do Rabbit.
O extrator consome os arquivos disponíveis na fila, realiza a extração de texto e persiste em outro serviço de *storage* MinIO.

## Melhorias e Futuras Features
Concluir a ETL (Extrair, Transformar e Carregar). Pois ainda faltaria Transformar e Carregar.
Uma camada posterior a esse App, um Treino inicial de modelos IA.
## Contato
Augusto Arraes
[(85) 99991 6898](https://wa.me/5585999916898)