Stack: Python 3.12/FastAPI + React 19/TypeScript + PostgreSQL + Redis. 6 artifacts: plan.md, research.md, data-model.md, api.yaml (OpenAPI), quickstart.md, updated AGENTS.md. Constitution check: 6/6 PASS.
6.3 KiB
Research: Motor de Detecção de Fraudes Bancárias
Feature: 001-fraud-detection-engine Date: 2026-05-11 Status: Complete
1. Backend Runtime & Framework
Decision: Python 3.12 + FastAPI
Rationale:
- Python é a linguagem dominante em data science e financial services — facilita contratação e evolução futura para ML.
- FastAPI oferece async nativo, validação automática via Pydantic, OpenAPI auto-generated, e performance comparável a Node.js.
- Ecossistema rico para processamento de dados (pandas, numpy) útil para análise de transações e backtesting de regras.
- Tipagem estática com mypy alinha-se com o princípio de Test-First da constituição.
Alternatives considered:
- Node.js + Express: Bom para I/O, mas ecossistema de data processing inferior. Regras complexas seriam mais verbosas.
- Go: Performance superior, mas ecossistema de dados limitado e curva de aprendizado maior para analistas que contribuem com regras.
- Java + Spring Boot: Maduro para banking, mas verboso e lento para iteração. Overkill para MVP.
2. Frontend Framework
Decision: React 19 + TypeScript + Tailwind CSS
Rationale:
- Dashboard com múltiplos gráficos e filtros se beneficia do modelo de componentes React.
- TypeScript alinha-se com a tipagem do backend (Pydantic → TypeScript types via OpenAPI codegen).
- Tailwind CSS para velocidade de desenvolvimento e consistência visual sem CSS complexo.
- Recharts ou Tremor para gráficos de dashboard (nativos React, bem mantidos).
Alternatives considered:
- HTMX + templates Jinja2: Mais simples, mas dashboard interativo com filtros dinâmicos e real-time updates seria complexo.
- Vue 3 + Nuxt: Excelente framework, mas React tem ecossistema maior de componentes de dashboard.
- Svelte: Performance superior, mas ecossistema de componentes para dashboard ainda imaturo comparado a React.
3. Database
Decision: PostgreSQL 16
Rationale:
- Audit log imutável: PostgreSQL com triggers ou particionamento por mês atende sem complexidade adicional.
- JSONB para payload flexível das transações e regras.
- Full-text search nativo para busca em explicações.
- Window functions para cálculos de médias móveis (baseline do cliente).
pgAuditextension para camada extra de auditoria a nível de banco.- Row-Level Security como defesa em profundidade.
Alternatives considered:
- MongoDB: Schema flexível para transações, mas audit log imutável é mais natural em relacional. Transações ACID são essenciais para dados financeiros.
- SQLite: Ótimo para dev/local, insuficiente para concorrência em produção.
- TimescaleDB (extensão PostgreSQL): Considerar para hypertables de transações se volume crescer além de 100k/dia. Não necessário para MVP.
4. Cache & Real-Time
Decision: Redis 7
Rationale:
- Contadores em tempo real do dashboard (transações/minuto, alertas/24h) via Redis
INCR+ TTL. - Cache de médias do cliente (gasto médio, localização habitual) para o motor de regras (evita JOIN pesado a cada transação).
- Rate limiting da API de ingestão.
- Pub/Sub para notificações de novos alertas no dashboard (SSE ou WebSocket).
Alternatives considered:
- Sem cache (query direta no PostgreSQL): Viável para MVP com <10k transações/dia, mas dashboard near real-time sofreria.
- Memcached: Mais simples, mas sem Pub/Sub e estruturas de dados avançadas.
5. Message Queue (Picos de Volume)
Decision: Redis Streams (MVP) → RabbitMQ (scale)
Rationale:
- Para MVP, Redis Streams oferece consumer groups, acknowledgments, e já está na stack.
- Se volume crescer, migrar para RabbitMQ que oferece dead letter queues, retry policies, e routing complexo.
- Padrão: API de ingestão → Redis Streams → Workers de processamento → PostgreSQL.
- Desacopla ingestão do processamento, essencial para os picos de 5x mencionados na spec.
Alternatives considered:
- Kafka: Overkill para MVP. Operação complexa.
- Processamento síncrono: Violaria SC-001 (2s p95) durante picos.
6. Rule Engine Architecture
Decision: Python rules engine built on Pydantic models + expression evaluator
Rationale:
- Regras são condições booleanas com peso. Exemplo:
transaction.amount > customer.avg_amount * 3→ score 30. - Pydantic models definem o schema da regra, validação automática.
simpleevaloulark-parserpara avaliar expressões de forma segura (semeval()nativo).- Cada regra é uma classe Python que implementa
evaluate(transaction, context) -> RuleResult. - Conjunto de regras é carregado do PostgreSQL no boot e cacheado em memória. Reload via endpoint admin.
- Snapshot versionado: cada transação registra qual versão do ruleset foi usada (rastreabilidade → FR-005).
Alternatives considered:
- Drools (Java): Maduro mas exige JVM, complexidade desnecessária.
- Django Rules: Acoplado ao Django ORM, não adequado para FastAPI.
- JSONLogic: Bom para regras simples, limitado para expressões aritméticas complexas.
7. Testing Strategy
Decision: pytest + pytest-asyncio (backend), Vitest + React Testing Library (frontend)
Rationale:
- TDD mandatório por constituição.
- Testes de regra: dataset de transações com fraudes conhecidas → assert score, assert explicação, assert alerta.
- Testes de contrato: OpenAPI schema validation, garantir que API não quebra entre versões.
- Testes de integração: pipeline completo (API → rules → alerta → decisão).
- Testes E2E: Playwright para fluxos do analista (login → fila → avalia alerta → decide).
8. Authentication & Authorization
Decision: JWT + OAuth2/OIDC via external IdP (Keycloak ou Auth0)
Rationale:
- Spec assume identity provider externo. FastAPI tem suporte nativo a OAuth2 + JWT.
- Perfis (analista, admin, sênior) mapeados para claims no token.
- Middleware de autorização por rota verifica claims.
- Sem senhas armazenadas no FraudShield — compliance LGPD simplificada.
9. Deployment
Decision: Docker Compose (dev/local) → Kubernetes ou cloud PaaS (produção)
Rationale:
- Docker Compose para ambiente dev: PostgreSQL + Redis + API + Frontend em containers.
- Simplicidade para MVP: um
docker compose upresolve. - Produção depende de onde hospedar (AWS ECS, GCP Cloud Run, Railway, etc.). Fora do escopo do MVP decidir.