para.AI_ASSUNTOS_CNJ / docs /MODELCARD.md
caarleexx's picture
Update docs/MODELCARD.md
d9eb15e verified
# 🤖 MODELCARD.md — Para.AI Assuntos Jurídicos API
**Referência para LLMs e Tool Calling**
---
## Identidade
| Campo | Valor |
|-------|-------|
| Nome | Para.AI Assuntos Jurídicos API |
| Versão | 1.0.1 |
| Base URL | `https://api.para-ai.com` / `http://localhost:8000` |
| Protocolo | REST / JSON |
| Latência típica | 74ms (`/busca-q`) · 800ms (`/busca`) · 120ms (`/grafo/filhos`) |
| Licença dados | CNJ — domínio público |
| Licença código | MIT |
---
## Quando Usar Este Tool
Use este tool quando o usuário perguntar sobre:
- Classificação de processos judiciais
- Nome ou código oficial de assuntos jurídicos
- Legislação aplicável a um tema do Direito
- Hierarquia de ramos/categorias do Direito brasileiro
- Definição técnica de um instituto jurídico
- Navegação pela árvore de assuntos (drill-down hierárquico)
---
## Endpoint Recomendado: POST /busca-q
### Schema da Requisição
```json
{
"q": "string (opcional) — texto livre, multi_match em todos os campos",
"campos": [
{"campo": "ramo", "valor": "DIREITO PENAL"},
{"campo": "dispositivos_legais","valor": "Lei 8.742"},
{"campo": "classes_nivel2", "valor": "Responsabilidade Civil"},
{"campo": "nome_assunto", "valor": "aposentadoria"}
],
"modo": "fuzzy",
"topk": 5,
"operador": "or",
"retornar": ["titulo", "introducao", "normas", "caminho"],
"incluir_texto_completo": false,
"com_facets": false
}
```
### Campos disponíveis em `campos[].campo`
`nome_assunto` · `titulo_curto` · `breve_sintese` · `glossario` ·
`texto_completo` · `classes_path` · `ramo` · `classes_nivel1` ·
`classes_nivel2` · `classes_nivel3` · `dispositivos_legais` ·
`artigos` · `cod_assunto`
### Campos disponíveis em `retornar[]`
| Token | Descrição |
|-------|-----------|
| `titulo` | Nome principal do assunto |
| `titulo_curto` | Título abreviado |
| `introducao` | Síntese (1–2 parágrafos) |
| `definicao` | Glossário técnico completo |
| `normas` | Lista de leis/decretos |
| `artigos` | Artigos específicos |
| `caminho` | Hierarquia ("RAMO > Cat > Sub") |
| `ramo` | Ramo do Direito |
| `nivel1/2/3` | Categorias hierárquicas |
| `texto` | Texto completo consolidado |
| `cod_assunto` | Código numérico CNJ |
### Ramos do Direito disponíveis (filtro `ramo`)
`DIREITO PENAL` · `DIREITO CIVIL` · `DIREITO PROCESSUAL CIVIL` ·
`DIREITO PREVIDENCIÁRIO` · `DIREITO TRIBUTÁRIO` · `DIREITO ADMINISTRATIVO` ·
`DIREITO DO CONSUMIDOR` · `DIREITO DO TRABALHO` · `DIREITO CONSTITUCIONAL` ·
`DIREITO AMBIENTAL` · `DIREITO EMPRESARIAL` · `DIREITO DE FAMÍLIA` ·
`DIREITO ASSISTENCIAL` · `DIREITO ELEITORAL` · `DIREITO IMOBILIÁRIO`
---
## Schema da Resposta
```json
{
"total": 18,
"retornados": 5,
"took_ms": 74,
"modo": "fuzzy",
"operador": "or",
"resultados": [
{
"score": 24.5,
"campos_matched": ["ramo", "dispositivos_legais"],
"ficha": {
"id": "d2fb81f5...",
"titulo": "Benefício de Prestação Continuada (BPC)",
"introducao": "Benefício assistencial garantido a idosos e pessoas com deficiência...",
"normas": ["Lei 8.742/1993 (LOAS)", "Art. 20", "Decreto 6.214/2007"],
"caminho": "DIREITO ASSISTENCIAL > Assistência Social > BPC"
}
}
]
}
```
---
## Endpoint de Navegação: GET /grafo/filhos
**Retorna assuntos do mesmo nível e pastas filhas diretas de um nó da hierarquia.**
### Parâmetros
| Parâmetro | Tipo | Obrigatório | Descrição |
|-----------|------|-------------|-----------|
| `ancestor` | string | ✓ | Nome do nó ancestral (ex: "Crimes contra o Patrimônio") |
| `size` | integer | ✗ | Máximo de resultados (padrão: 50, max: 500) |
| `estruturado` | boolean | ✗ | Retornar resposta separada por tipo (padrão: false) |
### Comportamento
O endpoint retorna **APENAS**:
1. Assuntos do **mesmo nível hierárquico** do ancestor
2. **Pastas/categorias filhas diretas** (profundidade + 1)
**NÃO retorna** os assuntos dentro das pastas dos filhos (netos, bisnetos, etc.).
### Exemplo de Requisição
```bash
GET /grafo/filhos?ancestor=DIREITO DO CONSUMIDOR&size=50
```
### Schema da Resposta (modo padrão)
```json
{
"ancestor": "DIREITO DO CONSUMIDOR",
"total": 13,
"filhos": [
{
"id": "fb36b9c7...",
"nome_assunto": "DIREITO DO CONSUMIDOR",
"classes_profundidade": 1,
"classes_path": "DIREITO DO CONSUMIDOR",
"titulo_curto": "Direito do Consumidor",
"breve_sintese": "Assunto que abrange questões relativas à proteção...",
"dispositivos_legais": ["Lei nº 8.078/1990"]
},
{
"id": "0039f247...",
"nome_assunto": "Responsabilidade do Fornecedor",
"classes_profundidade": 2,
"classes_path": "DIREITO DO CONSUMIDOR > Responsabilidade do Fornecedor",
"titulo_curto": "Responsabilidade do Fornecedor",
"breve_sintese": "Trata da responsabilidade civil do fornecedor..."
},
{
"id": "0bcbb6ab...",
"nome_assunto": "Dever de Informação",
"classes_profundidade": 2,
"classes_path": "DIREITO DO CONSUMIDOR > Dever de Informação"
}
// ... mais 10 pastas de profundidade 2
]
}
```
### Schema da Resposta (modo estruturado)
```bash
GET /grafo/filhos?ancestor=DIREITO DO CONSUMIDOR&estruturado=true
```
```json
{
"ancestor": "DIREITO DO CONSUMIDOR",
"ancestor_profundidade": 1,
"total": 13,
"assuntos_mesmo_nivel": {
"total": 1,
"assuntos": [
{
"id": "fb36b9c7...",
"nome_assunto": "DIREITO DO CONSUMIDOR",
"classes_profundidade": 1,
"classes_path": "DIREITO DO CONSUMIDOR"
}
]
},
"pastas_com_filhos": {
"total": 12,
"pastas": [
{
"id": "0039f247...",
"nome_assunto": "Responsabilidade do Fornecedor",
"classes_profundidade": 2,
"classes_path": "DIREITO DO CONSUMIDOR > Responsabilidade do Fornecedor"
},
{
"id": "0bcbb6ab...",
"nome_assunto": "Dever de Informação",
"classes_profundidade": 2,
"classes_path": "DIREITO DO CONSUMIDOR > Dever de Informação"
}
// ... mais 10 pastas
]
}
}
```
### Caso de Uso
Ideal para construir interfaces de navegação em árvore, onde o usuário clica em uma pasta e vê apenas as subpastas diretas, não todos os conteúdos recursivamente.
```javascript
// Frontend - Navegação em árvore
async function loadChildren(nodeName) {
const response = await fetch(
`/grafo/filhos?ancestor=${nodeName}&estruturado=true`
);
const data = await response.json();
// Mostrar apenas as pastas clicáveis
return data.pastas_com_filhos.pastas;
}
```
---
## Exemplo — OpenAI Function Calling
```python
import requests
# Definição da tool
TOOL = {
"type": "function",
"function": {
"name": "buscar_assunto_juridico",
"description": (
"Busca assuntos jurídicos na base oficial do CNJ (5.184 assuntos). "
"Use para classificar processos, identificar legislação aplicável "
"ou obter a definição técnica de um instituto jurídico."
),
"parameters": {
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Termo jurídico ou descrição do caso"
},
"ramo": {
"type": "string",
"description": "Ramo do Direito (ex: DIREITO PENAL)"
},
"topk": {
"type": "integer",
"default": 3,
"description": "Número de resultados"
},
"retornar": {
"type": "array",
"items": {"type": "string"},
"default": ["titulo", "introducao", "normas"],
"description": "Campos a retornar"
}
},
"required": ["q"]
}
}
}
def buscar_assunto_juridico(q, ramo=None, topk=3, retornar=None):
campos = [{"campo": "ramo", "valor": ramo}] if ramo else []
r = requests.post("https://api.para-ai.com/busca-q", json={
"q": q,
"campos": campos,
"topk": topk,
"retornar": retornar or ["titulo", "introducao", "normas"],
})
return r.json()
```
---
## Exemplo — Anthropic Tool Use
```python
TOOL_ANTHROPIC = {
"name": "buscar_assunto_juridico",
"description": "Busca assuntos jurídicos na base CNJ.",
"input_schema": {
"type": "object",
"properties": {
"q": {"type": "string"},
"ramo": {"type": "string"},
"topk": {"type": "integer"},
"retornar":{"type": "array", "items": {"type": "string"}}
},
"required": ["q"]
}
}
```
---
## Casos de Uso Documentados
### 1. Classificar processo por texto da petição
```json
{"q": "ação de usucapião extraordinária imóvel rural posse 15 anos",
"topk": 3, "retornar": ["titulo", "caminho", "cod_assunto"]}
```
### 2. Buscar legislação de um tema
```json
{"campos": [{"campo": "ramo", "valor": "DIREITO ASSISTENCIAL"}],
"q": "benefício pessoa deficiência",
"retornar": ["titulo", "normas", "artigos"]}
```
### 3. Definição técnica para RAG
```json
{"q": "dano moral extrapatrimonial",
"topk": 1, "retornar": ["titulo", "definicao", "introducao"]}
```
### 4. Navegação hierárquica (drill-down)
**Listar pastas filhas diretas:**
```bash
GET /grafo/filhos?ancestor=Crimes contra o Patrimônio&size=20
```
**Resposta:**
- Assuntos do mesmo nível (irmãos)
- Pastas/categorias filhas diretas
- **NÃO** inclui assuntos dentro das pastas
**Navegação estruturada (para UIs):**
```bash
GET /grafo/filhos?ancestor=DIREITO PENAL&estruturado=true
```
**Casos de uso:**
- Construir árvores de navegação
- Breadcrumbs dinâmicos
- Interfaces de seleção hierárquica
- Sugestões de assuntos relacionados
### 5. Obter hierarquia completa
```bash
GET /hierarquia
```
Retorna a árvore completa de ramos → categorias → subcategorias em formato agregado.
---
## Comparação entre Endpoints de Navegação
| Endpoint | Retorna | Caso de Uso |
|----------|---------|-------------|
| `/hierarquia` | Árvore completa agregada | Visão geral, estatísticas |
| `/grafo/filhos` | Apenas nível atual + filhos diretos | Navegação incremental, UI |
| `/busca` | Busca full-text | Busca livre por palavras |
| `/busca-q` | Busca estruturada | Tool calling, RAG |
---
## Notas de Implementação
### Performance
- **Cache recomendado:** `/hierarquia` (raramente muda)
- **Taxa de limite:** 100 req/min por IP (ajustável)
- **Timeout:** 10s (aumentar para `/busca` com `texto_completo`)
### Paginação
```json
{
"page": 2,
"size": 20
}
```
Apenas em `/busca` (GET/POST). Outros endpoints usam `size` ou `topk`.
### Fuzzy Match
```json
{"modo": "fuzzy"} // Tolera erros de digitação (fuzziness AUTO)
{"modo": "exact"} // Match exato em campos keyword
```
---
## Changelog
### v1.0.1 (28/02/2026)
- ✨ Correção do endpoint `/grafo/filhos`: agora retorna apenas mesmo nível + filhos diretos
- ✨ Novo parâmetro `estruturado=true` para resposta separada por tipo
- 📝 Documentação expandida sobre navegação hierárquica
- 🐛 Fix: `/grafo/filhos` não retorna mais descendentes recursivos (netos, bisnetos)
### v1.0.0 (24/02/2026)
- 🚀 Release inicial
- Suporte a busca full-text e estruturada
- 5.184 assuntos jurídicos CNJ
- Endpoints REST completos
---
*v1.0.1 · 28/02/2026 · Para.AI*