Tela: Criar Novo Formando (/Formandos/Create)
? Tela: Criar Novo Formando
Rota: /Formandos/Create
Tipo: Formulário extenso de cadastro
Permissão necessária: Administrador
?? Visão Geral da Tela
Formulário completo para cadastro manual de um novo formando com 9 seções organizadas, validação client-side e funcionalidades de preenchimento automático.
?? Elementos da Interface
1. Cabeçalho
- Título: "Cadastrar Novo Formando"
- Subtítulo: "Preencha os dados do formando"
- Botão Voltar: Retorna para listagem de formandos
2. Alertas de Feedback
- Erro (TempData): Alert vermelho dismissível
- Sucesso (JS): Alert verde com redirect automático
3. Seção 1: Dados da Turma
- Turma * (select): Dropdown com autocomplete (Choices.js)
- Status Inicial (select): Pendente ou Aprovado (padrão: Aprovado)
4. Seção 2: Dados Pessoais
Campos obrigatórios marcados com asterisco vermelho:
- Nome Completo * (input text)
- Nome Social (input text, opcional)
- Data de Nascimento * (input date)
- CPF * (input text com máscara 000.000.000-00)
- RG * (input text)
- Órgão Emissor (input text, ex: SSP/SP)
- Sexo * (select: Masculino, Feminino)
- Gênero (input text, opcional)
- Tipo de Formando * (select: Formando, Comissão) + texto de ajuda
- Estado Civil (select: Solteiro, Casado, Divorciado, Viúvo, União Estável)
- Nacionalidade (input text, padrão: "Brasileira")
- Naturalidade - Cidade (input text)
- Naturalidade - UF (input text, maxlength 2)
- Foto de Perfil (input file, formatos: JPG/PNG, max 5MB)
5. Seção 3: Dados de Contato
- E-mail * (input email)
- Celular * (input text com máscara (00) 00000-0000)
- Telefone Residencial (input text com máscara (00) 0000-0000)
6. Seção 4: Endereço
- CEP * (input text com máscara 00000-000) + Botão "Buscar CEP" (ViaCEP API)
- Rua * (input text, preenchido via CEP)
- Número * (input text)
- Complemento (input text)
- Bairro * (input text, preenchido via CEP)
- Cidade * (input text, preenchido via CEP)
- UF * (input text, maxlength 2, preenchido via CEP)
7. Seção 5: Dados de Filiação
- Nome da Mãe (input text)
- Status da Mãe (select: Viva, Falecida)
- Nome do Pai (input text)
- Status do Pai (select: Vivo, Falecido)
8. Seção 6: Responsável Financeiro
Botões de preenchimento automático:
- ?? Próprio Formando: Preenche com dados do formando (nome, CPF, telefone, e-mail)
- ?? Pai: Preenche com nome do pai (demais campos ficam vazios)
- ?? Mãe: Preenche com nome da mãe (demais campos ficam vazios)
- ?? Importar do Responsáveis: Abre modal para buscar responsáveis cadastrados
Campos:
- Nome * (input text)
- CPF * (input text com máscara)
- Telefone (input text com máscara)
- E-mail (input email)
9. Seção 7: Responsável Legal (se menor de idade)
Botão de importação:
- ?? Importar do Responsáveis: Abre modal para buscar responsáveis cadastrados
Campos:
- Nome (input text)
- CPF (input text com máscara)
- Telefone (input text com máscara)
- Parentesco (input text, ex: Pai, Mãe, Tio)
10. Seção 8: Observações
- Observações (textarea, 4 rows, opcional)
11. Botões de Ação (rodapé fixo)
- Cancelar: Botão secundário (redireciona para Index)
- Cadastrar Formando: Botão primário com spinner (estados: normal / processando)
? Funcionalidades Interativas
Máscaras de Entrada
- CPF: 000.000.000-00
- Telefone Celular: (00) 00000-0000
- Telefone Fixo: (00) 0000-0000
- CEP: 00000-000
Busca de CEP (ViaCEP)
- Ao clicar em "Buscar CEP" ou blur do campo CEP
- Valida se CEP tem 8 dígitos
- Faz requisição para ViaCEP API
- Preenche automaticamente: Rua, Bairro, Cidade, Estado, Complemento
- Foca no campo "Número" após preenchimento
Autocomplete de Turma (Choices.js)
- Busca em tempo real por nome ou código da turma
- Placeholder: "Selecione ou busque uma turma..."
- Search placeholder: "Digite o nome da turma ou código..."
Preenchimento Automático do Responsável Financeiro
Botão "Próprio Formando":
- Valida se nome completo foi preenchido
- Copia: Nome, CPF, Telefone, E-mail
- Feedback visual: Botão muda para verde "Preenchido!" por 2 segundos
- Alert de sucesso por 3 segundos
Botões "Pai" e "Mãe":
- Valida se nome do pai/mãe foi preenchido na seção de filiação
- Copia apenas o nome
- Limpa demais campos (CPF, telefone, e-mail)
- Feedback visual: Botão muda cor por 2 segundos
- Foca no campo CPF para continuar preenchimento
Modal de Importação de Responsável
Funcionalidades:
- Campo de busca com debounce de 500ms
- Requisição para /Guardians/Search?search=...
- Loading state durante requisição
- Tabela com: Nome, Email, CPF, Telefone, Botão Selecionar
- Empty state se não encontrar resultados
- Ao selecionar: preenche campos e fecha modal
Validação de Formulário
- Validação HTML5 nativa (required, email, date, etc.)
- Validação client-side antes do envio
- Mensagens de erro inline abaixo de cada campo
Envio AJAX do Formulário
- preventDefault() do evento submit
- FormData com todos os campos
- TipoFormando padrão: "formando" se não preenchido
- Header: X-Requested-With: XMLHttpRequest
- Estados do botão: Normal ? Loading ? Sucesso/Erro
?? Notificações e Feedback
- Sucesso: Alert verde "Formando cadastrado com sucesso! Redirecionando..." + redirect após 1.2s
- Erro: Alert vermelho com mensagem específica do servidor
- Validação: Alert amarelo "Preencha todos os campos obrigatórios"
- CEP não encontrado: Alert "CEP não encontrado"
- CEP inválido: Alert "CEP inválido"
?? Regras de Negócio
- Nome completo deve ter pelo menos 3 caracteres
- E-mail deve ser único dentro do tenant
- CPF deve ser válido (formato 000.000.000-00)
- Data de nascimento não pode ser futura
- Turma é obrigatória
- Responsável financeiro é obrigatório (nome e CPF)
- Foto de perfil: max 5MB, formatos JPG/PNG
?? Integração com API
Cadastro: POST /Formandos/Create (multipart/form-data)
Buscar CEP: GET https://viacep.com.br/ws/{cep}/json/
Buscar Responsáveis: GET /Guardians/Search?search={termo}
?? Responsividade
Desktop: Layout em 1 coluna com cards organizados
Mobile: Cards empilhados, botões de preenchimento automático em linha única