Agente intermediário de análise de regras de negócio e compliance para o projeto acadêmico TALP-CIN — Pipeline Multiagente para Validação de User Stories.
Este repositório implementa o agente:
talp-compliance-agent
Ele faz parte de um pipeline multiagente composto por:
- talp-invest-agent — avalia a qualidade da User Story usando critérios INVEST.
- talp-compliance-agent — identifica regras de negócio, compliance, dependências, regras bloqueantes e lacunas.
- talp-bdd-agent — gera ou avalia cenários BDD a partir da User Story enriquecida.
O talp-compliance-agent recebe uma User Story já analisada pelo talp-invest-agent e executa uma análise de conformidade baseada em catálogo.
O agente identifica:
- regras de negócio aplicáveis;
- regras obrigatórias;
- regras bloqueantes;
- dependências entre regras;
- lacunas de informação;
- requisitos de compliance;
- possibilidade de seguir para o agente BDD.
O agente não pode inventar regras.
Todas as regras utilizadas na análise devem vir exclusivamente do catálogo local:
data/catalog_rules_v1.csv
A saída final deve ser rastreável e validada contra esse catálogo.
User Story original
↓
[talp-invest-agent]
↓
Resultado INVEST estruturado
↓
[talp-compliance-agent]
↓
Análise de regras, compliance, dependências e lacunas
↓
[talp-bdd-agent]
↓
Cenários BDD / Validação final
Nesta etapa, o projeto já possui:
- API FastAPI funcionando;
- health check;
- catálogo de regras carregado via CSV;
- sincronização do catálogo com banco SQLite;
- persistência de execuções de análise;
- endpoints de análise de compliance;
- endpoint para análise via arquivo JSON;
- Streamlit disponível via Docker;
- Docker Compose validado;
- banco SQLite inicializado automaticamente no startup da API.
Para execução local:
- Python 3.10+ ou 3.11+
- pip
- Git
Para execução com Docker:
- Docker
- Docker Compose
talp-compliance-agent/
├── app/
│ ├── api/
│ │ └── routes/
│ │ ├── health.py
│ │ ├── compliance.py
│ │ ├── compliance_runs.py
│ │ └── catalog.py
│ ├── config/
│ │ └── settings.py
│ ├── db/
│ │ ├── base.py
│ │ ├── session.py
│ │ ├── models.py
│ │ └── init_db.py
│ ├── nodes/
│ ├── schemas/
│ │ └── models.py
│ ├── services/
│ │ ├── catalog_repository.py
│ │ ├── file_loader.py
│ │ ├── persistence_service.py
│ │ └── rule_matcher.py
│ ├── graph.py
│ ├── graph_state.py
│ └── main.py
├── data/
│ ├── catalog_rules_v1.csv
│ └── samples/
├── features/
├── prompts/
├── storage/
│ ├── audit/
│ ├── db/
│ ├── exports/
│ └── imports/
├── tests/
├── streamlit_app.py
├── Dockerfile
├── docker-compose.yml
├── pyproject.toml
├── .env.example
├── .dockerignore
├── .gitignore
└── README.md
O catálogo principal está em:
data/catalog_rules_v1.csv
Regras atuais:
| ID | Nome | Domínio | Obrigatória | Bloqueante |
|---|---|---|---|---|
| RULE_001 | Sinais Vitais Obrigatórios | Triagem | Sim | Sim |
| RULE_002 | Classificação Manchester | Triagem | Sim | Sim |
| RULE_003 | Registro HDA | Atendimento Médico | Sim | Sim |
| RULE_004 | CID Obrigatório | Diagnóstico | Sim | Sim |
| RULE_005 | Conduta Médica Obrigatória | Diagnóstico | Sim | Sim |
| RULE_006 | Atualização de Status | Fluxo Assistencial | Sim | Não |
| RULE_007 | Prescrição Médica Obrigatória | Prescrição | Sim | Sim |
| RULE_008 | Validação CCIH | Controle de Infecção | Sim | Sim |
A forma mais simples de subir o projeto é com Docker Compose.
docker compose up --buildCaso o usuário ainda não tenha permissão para executar Docker sem sudo, use:
sudo docker compose up --buildA API ficará disponível em:
http://localhost:8000
O Streamlit ficará disponível em:
http://localhost:8501
Em outro terminal:
curl http://localhost:8000/healthResultado esperado:
{
"status": "healthy",
"service": "talp-compliance-agent",
"version": "0.1.0"
}Swagger:
http://localhost:8000/docs
ReDoc:
http://localhost:8000/redoc
http://localhost:8501
docker compose downOu, usando sudo:
sudo docker compose downgit clone https://github.com/SEU-USUARIO/talp-compliance-agent.git
cd talp-compliance-agentSubstitua SEU-USUARIO pelo usuário ou organização real do GitHub.
Linux/macOS:
python3 -m venv .venv
source .venv/bin/activateCaso o projeto esteja usando a pasta venv:
python3 -m venv venv
source venv/bin/activateWindows:
python -m venv .venv
.venv\Scripts\activatepython -m pip install --upgrade pip
pip install -e ".[dev]"Se houver erro com as dependências de desenvolvimento, instalar manualmente:
pip install fastapi "uvicorn[standard]" pydantic pydantic-settings sqlalchemy pandas odfpy python-dotenv langchain langchain-core langgraph streamlit pytest pytest-bdd httpx ruffcp .env.example .envO .env local não deve ser enviado para o Git.
python -m app.db.init_dbO banco SQLite será criado em:
storage/db/compliance_agent.db
Esse arquivo também não deve ser enviado para o Git.
uvicorn app.main:app --reloadOu:
python -m uvicorn app.main:app --reloadA API ficará disponível em:
http://localhost:8000
GET /health
GET /api/v1/healthExemplo:
curl http://localhost:8000/healthGET /api/v1/catalog/rulesExemplo:
curl http://localhost:8000/api/v1/catalog/rulesPOST /api/v1/catalog/syncExemplo:
curl -X POST http://localhost:8000/api/v1/catalog/syncResultado esperado:
{
"status": "ok",
"synced_rules": 8,
"message": "8 regra(s) sincronizada(s)."
}POST /api/v1/compliance/analyzeExemplo:
curl -X POST http://localhost:8000/api/v1/compliance/analyze \
-H "Content-Type: application/json" \
-d '{
"investment_id": "US-001",
"invest_result": {
"investment_id": "US-001",
"status": "warning",
"criteria_results": [
{
"criterion_id": "TEST-001",
"criterion_name": "Testable",
"result": true,
"evidence": "A história possui elementos verificáveis."
}
],
"summary": "Como médico, quero prescrever antibiótico para paciente internado, para iniciar o tratamento adequado.",
"metadata": {}
}
}'Resultado esperado: a resposta deve conter regras como RULE_007 e RULE_008, caso a lógica de matching encontre evidências relacionadas a prescrição e antibiótico.
POST /api/v1/compliance/analyze-fileExemplo:
curl -X POST http://localhost:8000/api/v1/compliance/analyze-file \
-H "Content-Type: application/json" \
-d '{"file_path": "data/samples/compliance_request_sample.json"}'GET /api/v1/compliance/runsExemplo:
curl http://localhost:8000/api/v1/compliance/runsGET /api/v1/compliance/runs/{run_id}O projeto usa SQLite local por padrão.
Configuração no .env.example:
DATABASE_URL=sqlite:///./storage/db/compliance_agent.dbA aplicação inicializa as tabelas no startup da API.
Arquivos locais de banco e auditoria não são versionados:
storage/db/*.db
storage/audit/*.jsonl
As pastas são mantidas no Git por meio de arquivos .gitkeep.
A interface Streamlit pode ser executada com Docker Compose:
docker compose up --buildDepois acesse:
http://localhost:8501
Também pode ser executada localmente:
streamlit run streamlit_app.pyExecutar todos os testes:
pytestExecutar com detalhes:
pytest -vExecutar testes BDD, se configurados:
pytest featuresO Docker Compose foi validado nesta etapa com:
docker compose up --build
curl http://localhost:8000/healthResultado obtido:
{
"status": "healthy",
"service": "talp-compliance-agent",
"version": "0.1.0"
}Serviços disponíveis:
| Serviço | URL |
|---|---|
| API FastAPI | http://localhost:8000 |
| Swagger | http://localhost:8000/docs |
| ReDoc | http://localhost:8000/redoc |
| Streamlit | http://localhost:8501 |
git clone https://github.com/SEU-USUARIO/talp-compliance-agent.git
cd talp-compliance-agentdocker compose up --buildcurl http://localhost:8000/health
curl http://localhost:8000/api/v1/catalog/rules
curl -X POST http://localhost:8000/api/v1/catalog/sync
curl http://localhost:8000/api/v1/compliance/runshttp://localhost:8000/docs
http://localhost:8501
Se aparecer erro de porta ocupada:
lsof -i :8000Mate o processo:
kill -9 NUMERO_DO_PIDOu altere a porta externa no docker-compose.yml:
ports:
- "8001:8000"Nesse caso, a API ficará em:
http://localhost:8001
Se aparecer:
permission denied while trying to connect to the docker API
Use temporariamente:
sudo docker compose up --buildPara corrigir definitivamente:
sudo usermod -aG docker $USERDepois faça logout/login no Ubuntu.
Se o Docker Compose avisar que version é obsoleto, remova a linha:
version: "3.8"O arquivo deve começar diretamente com:
services:- Criar estrutura FastAPI.
- Implementar health check.
- Carregar catálogo de regras.
- Criar endpoints de catálogo.
- Sincronizar catálogo com banco SQLite.
- Persistir execuções de análise.
- Criar endpoints de análise.
- Validar execução com Docker Compose.
- Refinar Streamlit.
- Adicionar testes BDD finais.
- Integrar formalmente com saída real do
talp-invest-agent. - Preparar contrato de saída para o
talp-bdd-agent. - Melhorar documentação técnica da arquitetura LangGraph.
TALP-CIN Team