- ASP.NET Core 9 Razor Pages + Minimal API hybrid - 14 validators (CPF, CEP, CNPJ, email, phone, name, yes-no, birthdate, handoff, cancel-intent, company-name, plate-br, postal-code, validate_reply) - OAuth login (Google, Microsoft, GitHub) + cookie auth - MongoDB usage tracking + CEP cache collection - Stripe checkout with inline PriceData (no Price IDs) - MCP server for Claude Code / Cursor integration - Playground (10 calls/IP/day, no auth) - Docs: Quickstart, API Reference, N8N, MCP, Créditos, Erros, Fluxos - Credit system: 3 cr standard validators, 5 cr validate_reply - SmartSuggestion: contextual re-ask via IA when obtained=false - Per-IP rate limiting + daily cap + shared-IP abuse detection - Lightbox for comic images - Validadores page split: Brasileiros / Universais + Em breve Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
56 lines
3.4 KiB
C#
56 lines
3.4 KiB
C#
using Microsoft.AspNetCore.Mvc.RazorPages;
|
|
|
|
namespace Nalu.Web.Pages.Validadores;
|
|
|
|
public class IndexModel : PageModel
|
|
{
|
|
public record ComingSoonItem(string Icon, string Slug, string Description);
|
|
|
|
public IReadOnlyList<ValidatorCard> Brazilian { get; } =
|
|
[
|
|
new("🆔", "validate_cpf", "Valida CPF com mod 11. Formata XXX.XXX.XXX-XX.", 3),
|
|
new("📮", "validate_cep", "Extrai CEP e retorna endereço enriquecido.", 3),
|
|
new("📱", "validate_phone_br", "Extrai telefone com DDD. Valida DDDs ANATEL.", 3),
|
|
new("🏢", "validate_cnpj", "Valida CNPJ com mod 11. Formata XX.XXX.XXX/XXXX-XX.", 3),
|
|
new("🚗", "validate_plate_br", "Placa Mercosul e formato antigo. Aceita por extenso.", 3),
|
|
];
|
|
|
|
public IReadOnlyList<ValidatorCard> Universal { get; } =
|
|
[
|
|
new("✉️", "validate_email", "Extrai email e corrige typos de domínio (gmail→gmail.com).", 3),
|
|
new("🌍", "validate_postal_code", "Código postal internacional (não CEP).", 3),
|
|
new("🔤", "validate_full_name", "Extrai nome completo, ignora saudações e títulos.", 3),
|
|
new("☑️", "validate_yes_no", "Detecta sim/não em qualquer idioma e forma indireta.", 3),
|
|
new("🎂", "validate_birthdate", "Data de nascimento em qualquer formato. Detecta menores.", 3),
|
|
new("🤝", "validate_handoff", "Detecta intenção de falar com humano. Classifica urgência.", 3),
|
|
new("🚫", "validate_cancel_intent", "Diferencia cancelamento de serviço vs operação atual.", 3),
|
|
new("🏢", "validate_company_name", "Extrai nome de empresa. Detecta sufixos legais.", 3),
|
|
new("🧠", "validate_reply", "Analisa contexto conversacional. Detecta contrapropostas, handoffs, cancelamentos.", 5, IsNew: true),
|
|
];
|
|
|
|
public IReadOnlyList<ComingSoonItem> ComingSoonUniversal { get; } =
|
|
[
|
|
new("📅", "date-relative", "\"amanhã\", \"semana que vem\", \"dia 15\""),
|
|
new("🕐", "time", "\"de tardezinha\", \"lá pelas 3\", \"after lunch\""),
|
|
new("📍", "address-full", "Endereço completo extraído e estruturado"),
|
|
new("💰", "currency-amount", "Valores monetários em qualquer moeda"),
|
|
new("🔢", "number-in-context", "Números que mudam de sentido pelo contexto"),
|
|
new("👥", "count-people", "\"eu e minha esposa\" → 2 pessoas"),
|
|
new("⭐", "rating", "\"uns 7 eu acho\" → nota 7"),
|
|
new("😤", "sentiment", "Detecta insatisfação antes do handoff"),
|
|
new("🎯", "preference", "\"o do meio\" → extrai opção B"),
|
|
new("✅", "confirmation-with-changes", "\"sim mas é 200\" → confirma parcial"),
|
|
];
|
|
|
|
public IReadOnlyList<ComingSoonItem> ComingSoonBrazilian { get; } =
|
|
[
|
|
new("💰", "amount-brl", "Valores em R$ com contexto"),
|
|
new("🔑", "pix-key", "Chave Pix (CPF, email, telefone, aleatória)"),
|
|
new("📋", "renavam", "RENAVAM de veículo"),
|
|
new("📋", "ie-by-state", "Inscrição Estadual com validação por UF"),
|
|
new("📋", "pis-nis", "PIS/NIS/PASEP"),
|
|
];
|
|
|
|
public void OnGet() { }
|
|
}
|