# validate_email

Extrai email do usuário com correção automática de typos em domínios comuns.

## config

- type: extraction
- version: 1.0
- languages: pt-BR, en-US, es-ES
- endpoint: /v1/extract/email
- mcp_tool: nalu_extract_email
- mcp_description: Extrai o email do usuário com correção automática de typos em domínios comuns (gmail, hotmail, outlook). Se houve correção, certain=false e suggestion_to_agent pede confirmação. Se certain=true, o email está confirmado. Se obtained=false, use a sugestão para re-pedir.

## deterministic_rules

### stop_words
bom dia, boa tarde, boa noite, olá, oi, não tenho, não uso email

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

### accept_patterns
- ([a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,})

### constraints
- min_length: 5
- must_have_alpha: true

## prompt

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

Regras:
1. Extraia o email exatamente como o usuário digitou.
2. Se o usuário não forneceu email ou foi evasivo, retorne extracted_value: null.
3. Converta para letras minúsculas.
4. Não corrija typos — retorne o email como está.

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": "email extraído ou null",
  "certain": true/false,
  "reasoning": "explicação curta"
}

## few_shot_examples

### example 1
- agent_input: Qual é o seu email?
- user_input: joao.silva@gmail.com
- output: {"extracted_value": "joao.silva@gmail.com", "certain": true, "reasoning": "Email válido informado diretamente"}

### example 2
- agent_input: Me passe seu email.
- user_input: Pode ser, é maria@gamil.com
- output: {"extracted_value": "maria@gamil.com", "certain": true, "reasoning": "Email extraído do meio da frase"}

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

### example 4
- agent_input: Pode me informar seu email?
- user_input: pedro arroba hotmail ponto com
- output: {"extracted_value": "pedro@hotmail.com", "certain": true, "reasoning": "Email dito por extenso convertido"}

### example 5
- agent_input: Qual é o email para contato?
- user_input: ana.costa@outlook.con
- output: {"extracted_value": "ana.costa@outlook.con", "certain": false, "reasoning": "Possível typo em .con"}

## post_processors
- correct_email_typos

## enrichment
(nenhum)

## suggestions

### when_null_evasive
Preciso do seu email para continuar. Pode informar?

### when_corrected
Seu email é {{extracted_value}}? (identificamos um possível erro de digitação em '{{original}}')

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

### when_invalid
Esse email não parece válido. Pode digitar novamente?

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