# validate_cnpj

Extrai e valida CNPJ brasileiro — numérico (formato atual) e alfanumérico (novo formato IN RFB 2229/2024).

## config

- type: extraction
- version: 1.1
- languages: pt-BR
- endpoint: /v1/extract/cnpj
- mcp_tool: nalu_extract_cnpj
- mcp_description: Extrai e valida CNPJ brasileiro — suporta formato numérico clássico e o novo formato alfanumérico (IN RFB 2229/2024). Valida dígitos verificadores com mod 11. Formata como XX.XXX.XXX/XXXX-XX. Os dois últimos caracteres são sempre dígitos numéricos. 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, não sei, sem cnpj

### reject_patterns
- ^[a-zA-Z\s]+$
- ^(.)\1{13}$

### accept_patterns
- ([A-Z0-9]{2}\.?[A-Z0-9]{3}\.?[A-Z0-9]{3}\/?[A-Z0-9]{4}-?\d{2})
- ([A-Z0-9]{12}\d{2})

### constraints
- min_length: 14
- value_pattern: ^[A-Z0-9.\-/\s]{14,18}$

## prompt

Você é um extrator de CNPJ. Dado o diálogo abaixo, extraia o CNPJ que a empresa informou.

O CNPJ pode ser numérico (ex: 11.222.333/0001-81) ou alfanumérico no novo formato (ex: AB.CDE.FGH/0001-23), com 14 caracteres no total. Os dois últimos caracteres são sempre dígitos numéricos.

Regras:
1. Extraia os 14 caracteres do CNPJ (letras maiúsculas + dígitos), sem pontuação ou separadores.
2. Se o CNPJ tiver letras, mantenha-as em maiúsculas.
3. Se o usuário não forneceu CNPJ ou foi evasivo, retorne extracted_value: null.
4. Não valide o CNPJ — apenas extraia os caracteres.

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

Contexto do agente: {{agent_context}}

Responda SOMENTE com JSON válido, sem markdown:
{
  "extracted_value": "14 caracteres do CNPJ sem formatação ou null",
  "certain": true/false,
  "reasoning": "explicação curta"
}

## few_shot_examples

### example 1
- agent_input: Qual o CNPJ da empresa?
- user_input: 11.222.333/0001-81
- output: {"extracted_value": "11222333000181", "certain": true, "reasoning": "CNPJ no formato padrão"}

### example 2
- agent_input: Informe o CNPJ.
- user_input: é 11222333000181
- output: {"extracted_value": "11222333000181", "certain": true, "reasoning": "CNPJ sem formatação"}

### example 5
- agent_input: Qual o CNPJ da empresa?
- user_input: AB.CDE.FGH/0001-23
- output: {"extracted_value": "ABCDEFGH000123", "certain": true, "reasoning": "CNPJ alfanumérico novo formato"}

### example 3
- agent_input: Qual o CNPJ da empresa?
- user_input: não tenho aqui agora
- output: {"extracted_value": null, "certain": false, "reasoning": "Usuário não forneceu o CNPJ"}

### example 4
- agent_input: CNPJ da empresa?
- user_input: 11.111.111/1111-11
- output: {"extracted_value": "11111111111111", "certain": true, "reasoning": "CNPJ extraído — validação de dígitos feita pelo pós-processador"}

## post_processors
- validate_cnpj_digit

## suggestions

### when_null_evasive
Preciso do CNPJ da empresa para continuar. Pode informar? (formato: XX.XXX.XXX/XXXX-XX — numérico ou alfanumérico)

### when_invalid
Esse CNPJ parece estar incorreto. Pode verificar? São 14 dígitos (XX.XXX.XXX/XXXX-XX).

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