# validate_plate_br

Extrai placa de veículo brasileira — formato Mercosul (ABC1D23) e formato antigo (ABC1234).

## config

- type: extraction
- version: 1.0
- languages: pt-BR
- endpoint: /v1/extract/plate-br
- mcp_tool: nalu_extract_plate_br
- mcp_description: Extrai placa de veículo brasileiro do diálogo. Suporta formato Mercosul (ABC1D23) e formato antigo (ABC-1234). Normaliza e valida. Retorna JSON com plate e format. Validador específico para o Brasil.

## deterministic_rules

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

### reject_patterns
- ^[0-9\s]+$
- ^[a-zA-Z\s]{1,3}$

### accept_patterns
- ([A-Za-z]{3}\d[A-Za-z]\d{2})
- ([A-Za-z]{3}[-\s]?\d{4})

### constraints
- min_length: 7

## prompt

Você é um extrator de placa de veículo brasileiro. Dado o diálogo abaixo, extraia a placa informada.

Regras:
1. Extraia a placa normalizando para maiúsculas e sem separadores.
2. Suporte Mercosul: 3 letras + 1 dígito + 1 letra + 2 dígitos (ex: ABC1D23).
3. Suporte formato antigo: 3 letras + 4 dígitos (ex: ABC1234).
4. Se dita por extenso ("a bê cê, um, dê, dois três"), converta para ABC1D23.
5. Se o usuário não forneceu placa, retorne extracted_value: null.

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

Contexto do agente: {{agent_context}}

Responda SOMENTE com JSON válido, sem markdown:
{
  "extracted_value": "placa sem separadores em maiúsculas ou null (pós-processador FormatPlate converte para JSON: {\"plate\":\"...\",\"format\":\"mercosul|old\"})",
  "certain": true/false,
  "reasoning": "explicação curta"
}

## few_shot_examples

### example 1
- agent_input: Qual a placa do veículo?
- user_input: ABC1D23
- output: {"extracted_value": "ABC1D23", "certain": true, "reasoning": "Placa Mercosul no formato padrão"}

### example 2
- agent_input: Me informe a placa.
- user_input: abc-1234
- output: {"extracted_value": "ABC1234", "certain": true, "reasoning": "Placa antiga normalizada para maiúsculas"}

### example 3
- agent_input: Me passe a placa do carro.
- user_input: a placa é a bê cê um dois três quatro
- output: {"extracted_value": "ABC1234", "certain": true, "reasoning": "Placa dita por extenso convertida"}

### example 4
- agent_input: Qual a placa?
- user_input: não lembro de cabeça
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário não forneceu a placa"}

### example 5
- agent_input: Qual a placa do veículo?
- user_input: QRS2T45
- output: {"extracted_value": "QRS2T45", "certain": true, "reasoning": "Placa Mercosul válida"}

NOTE: The LLM must return the raw normalized plate string (e.g. "ABC1D23"). The FormatPlate post-processor transforms it to JSON: {"plate":"ABC1D23","format":"mercosul"}. The final API response will contain the JSON string in extracted_value.

## post_processors
- format_plate

## suggestions

### when_null_evasive
Preciso da placa do veículo para continuar. Pode informar? Formatos: ABC1D23 (Mercosul) ou ABC-1234 (antigo)

### when_uncertain
A placa é {{plate}}? Pode confirmar?

### when_invalid
Não consegui identificar a placa. Pode digitar no formato ABC1D23 (Mercosul) ou ABC-1234 (antigo)?
