O Mandado de Segurança é uma ação constitucional de natureza civil, regulada pela Lei nº 12.016/2009, que protege direito líquido e certo não amparado por habeas corpus ou habeas data, quando o responsável pela ilegalidade ou abuso de poder for autoridade pública ou agente de pessoa jurídica no exercício de atribuições do Poder Público.
Características essenciais:
- Direito líquido e certo: Comprovado de plano, sem dilação probatória
- Ato coator: Ameaça ou violação concreta por autoridade pública
- Cabimento subsidiário: Quando não houver outro recurso eficaz
O projeto foi organizado seguindo boas práticas de engenharia de software com separação clara de responsabilidades (SoC) para garantir:
✅ Manutenibilidade
✅ Escalabilidade
✅ Testabilidade
✅ Reusabilidade
.
├── venv/ # Ambiente virtual Python (ignorado no git)
├── app/
│ ├── clients/ # Comunicação com APIs externas
│ │ └── openai_client.py
│ ├── core/ # Lógica compartilhada
│ │ └── error_handlers.py
│ ├── routers/ # Endpoints da API
│ │ └── writ.py
│ ├── schemas/ # Validação de dados
│ │ └── writ_schema.py
│ └── services/ # Lógica de negócio
│ └── writ_generator.py
├── env/ # Variáveis de ambiente (ignorado no git)
├── .gitignore
├── requirements.txt
└── run.py
-
Apresentação (
routers/writ.py):- Gerencia requisições HTTP
- Formata respostas
-
Serviço (
services/writ_generator.py):- Orquestra a geração do documento
- Constrói prompts especializados
-
Infraestrutura (
clients/openai_client.py):- Gerencia comunicação com OpenAI
- Implementa políticas de retry
-
Validação (
schemas/writ_schema.py):@field_validator('lawyer_oab') def validate_oab_format(cls, v): if not re.match(r'^\d{1,6}/[A-Z]{2}$', v): raise ValueError('Formato OAB inválido. Use: 123456/UF') return v.upper()
-
Entrada:
- Recebe JSON via POST
/petitions/generate
{ "author_name": "Ana Rodrigues", "author_cpf": "123.456.789-09", "author_address": "Rua Exemplo, 123 - São Paulo/SP", "lawyer_name": "Dr. Jurídico", "lawyer_oab": "123456/SP", "respondent_authority": "Prefeito Municipal", "authority_position": "Município de São Paulo", "facts": "Negativa indevida de acesso a documento público...", "violated_right": "Direito fundamental de acesso à informação", "request": "Concessão de segurança para fornecimento do documento" } - Recebe JSON via POST
-
Validação:
- Verifica CPF, OAB e campos obrigatórios
-
Geração:
- Monta prompt jurídico
- Chama API da OpenAI (temperatura: 0.7)
-
Saída:
- Retorna documento formatado ou erros padronizados
- Isolamento de mudanças: Alterações na OpenAI afetam apenas
openai_client.py - Testabilidade: Serviços podem ser testados independentemente
- Organização: Separação clara por responsabilidades
- Documentação: Schemas definem contratos explicitamente
Tecnologias:
- Python 3.8+
- Flask, Pydantic, OpenAI API
Regra de Ouro: Cada componente tem uma única responsabilidade clara.
Esta arquitetura permite a evolução sustentável do sistema, mantendo o rigor técnico e jurídico necessário para documentos oficiais.