# validate_cep

Extrai o CEP do usuário e consulta o endereço via ViaCEP.

## config

- type: extraction
- version: 1.0
- languages: pt-BR
- endpoint: /v1/extract/cep
- mcp_tool: nalu_extract_cep
- mcp_description: Extrai o CEP do usuário e retorna o endereço completo (logradouro, bairro, cidade, estado). Se certain=true e suggestion_to_agent não é null, confirme o endereço com o usuário antes de prosseguir. Se obtained=false, o CEP não foi encontrado — use suggestion_to_agent para pedir novamente.

## deterministic_rules

### stop_words
bom dia, boa tarde, boa noite, olá, oi, não sei, não lembro

### reject_patterns
- ^[a-zA-Z\s]+$
- ^0{5}-?0{3}$

### accept_patterns
- (\d{5}-?\d{3})
- (\d{8})

### constraints
- min_length: 8

## prompt

Você é um extrator de CEP. Dado o diálogo abaixo, extraia o CEP que o usuário informou.

Regras:
1. Extraia apenas os 8 dígitos numéricos do CEP.
2. Se o usuário não forneceu o CEP ou foi evasivo, retorne extracted_value: null.
3. Não valide o CEP — apenas extraia os dígitos.

Diálogo:
Agente: {{agent_input}}
Usuário: {{user_input}}

Contexto do agente: {{agent_context}}

Responda SOMENTE com JSON válido, sem markdown, sem explicação:
{
  "extracted_value": "8 dígitos numéricos do CEP ou null",
  "certain": true/false,
  "reasoning": "explicação curta"
}

## few_shot_examples

### example 1
- agent_input: Qual é o seu CEP?
- user_input: 01001-000
- output: {"extracted_value": "01001000", "certain": true, "reasoning": "CEP no formato padrão"}

### example 2
- agent_input: Me diga seu CEP de entrega.
- user_input: Meu cep é 04538133
- output: {"extracted_value": "04538133", "certain": true, "reasoning": "CEP extraído da frase"}

### example 3
- agent_input: Qual é o seu CEP?
- user_input: Não sei de cabeça
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário não forneceu o CEP"}

## post_processors
- format_cep

## enrichment
- viacep

## suggestions

### when_null_evasive
Preciso do seu CEP para identificar o endereço. Pode informar? Formato: XXXXX-XXX

### when_uncertain
Encontrei o seguinte endereço: {{formatted_address}}. Está correto?

### when_certain
Ótimo! Encontrei seu endereço: {{formatted_address}}. Posso usar esse endereço?

### when_invalid
Esse CEP não foi encontrado ou é inválido. Pode verificar e digitar novamente? Formato: XXXXX-XXX
