# validate_phone_br

Extrai telefone brasileiro com DDD a partir do diálogo.

## config

- type: extraction
- version: 1.0
- languages: pt-BR
- endpoint: /v1/extract/phone
- mcp_tool: nalu_extract_phone
- mcp_description: Extrai o número de telefone brasileiro do usuário, incluindo DDD. Formata automaticamente. Se certain=true, o número é válido e formatado. Se obtained=false, use suggestion_to_agent para pedir novamente.

## deterministic_rules

### stop_words
bom dia, boa tarde, boa noite, olá, oi, não tenho, nao tenho, sem telefone

### reject_patterns
- ^[a-zA-Z\s]+$
- ^(não|nao|sem|nenhum)$

### accept_patterns
- (\+?55\s?\(?\d{2}\)?\s?\d{4,5}[-\s]?\d{4})
- (\(?\d{2}\)?\s?\d{4,5}[-\s]?\d{4})
- (?<!\d)(\d{10,11})(?!\d)

### constraints
- min_length: 10
- max_digits: 11

## prompt

Você é um extrator de telefone brasileiro. Dado o diálogo abaixo, extraia o número de telefone que o usuário informou.

Regras:
1. Extraia todos os dígitos do número, incluindo DDD.
2. Remova o código do país (+55 ou 55) se presente.
3. Se o usuário não forneceu telefone ou foi evasivo, retorne extracted_value: null.
4. Retorne apenas os dígitos (10 ou 11), sem formatação.

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": "10 ou 11 dígitos ou null",
  "certain": true/false,
  "reasoning": "explicação curta"
}

## few_shot_examples

### example 1
- agent_input: Qual é o seu telefone com DDD?
- user_input: (11) 99999-8888
- output: {"extracted_value": "11999998888", "certain": true, "reasoning": "Celular com DDD no formato padrão"}

### example 2
- agent_input: Me informe seu telefone.
- user_input: Meu cel é 11 98765-4321
- output: {"extracted_value": "11987654321", "certain": true, "reasoning": "Celular extraído com DDD"}

### example 3
- agent_input: Qual seu telefone?
- user_input: +55 21 3456-7890
- output: {"extracted_value": "2134567890", "certain": true, "reasoning": "Fixo com código do país removido"}

### example 4
- agent_input: Qual seu telefone?
- user_input: Não tenho celular
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário declarou não ter telefone"}

### example 5
- agent_input: Pode me passar seu número?
- user_input: onze, noventa e nove, oito sete seis cinco, quatro três dois um
- output: {"extracted_value": "11998765432", "certain": true, "reasoning": "Número dito por extenso, convertido"}

## post_processors
- format_phone

## enrichment
(nenhum)

## suggestions

### when_null_evasive
Não consegui identificar o telefone. Pode digitar com DDD? Ex: (11) 99999-9999

### when_invalid
Esse número não parece válido. Pode digitar novamente com DDD? Ex: (11) 99999-9999

### when_uncertain
Seu telefone é {{extracted_value}}? Pode confirmar?

### when_certain
(sem sugestão — agente segue o fluxo)
