Épico 1 — Núcleo de Identidade e Autenticação — Especificação (v2.0)
Documentos deste épico: 01 - Definição (v2.0) · 02 - Especificação (v2.0) · Protótipo (Seção 3): pendente, ainda não produzido · 04 - Mapeamento de Banco de Dados (v2.0). Este épico faz parte do documento guarda-chuva Check-in de Usuários.
SEÇÃO 2 — ESPECIFICAÇÃO
Histórias de Usuário
US-CIU-003 — Login com documento único Como usuário autenticado, quero fazer login com meu CPF e senha, para acessar o sistema e iniciar meu trabalho na clínica.
US-CIU-009 — Recuperação de senha Como usuário que esqueceu a senha, quero recuperá-la via e-mail ou celular com código de verificação, para voltar a acessar o sistema sem precisar de suporte.
Descrição Funcional Detalhada
Tela de Login
Propósito: Autenticar o usuário no sistema via documento único + senha.
Layout (mobile first):
- Logo do Gemed centralizado no topo
- Campo de texto “Usuário” — input sem máscara, placeholder MSG-P01
- Campo de senha “Senha” — input com toggle de visibilidade (ícone olho), placeholder MSG-P02
- Botão primário “Entrar” (MSG-B01) — largura total, cor primary-pure (#00E676)
- Link terciário “Esqueci minha senha” (MSG-B02) — abaixo do botão, alinhado ao centro
- Link terciário “Cadastrar-se” (MSG-B03) — abaixo, alinhado ao centro
Comportamento de campos (RN-CIU-008, transversal): todo campo de input possui um placeholder que é o nome do campo; ao ganhar foco, o placeholder vira label acima do campo. As descrições abaixo não citam o label separadamente — é sempre igual ao placeholder.
Mecanismo de autenticação (detalhe técnico):
- O sistema recebe o documento e a senha digitada pelo usuário.
- O sistema localiza o registro na tabela Usuario pelo documento informado (considerando apenas registros com RemovidoEm nulo — exclusão lógica, RN-CIU-005).
- Se o registro não existe (ou foi excluído logicamente), a autenticação falha com mensagem genérica (RN-CIU-016).
- Se o registro existe, o sistema utiliza o Salt armazenado na tabela Usuario para gerar o Hash da senha digitada.
- O sistema compara o Hash gerado com o Hash armazenado na tabela Usuario.
- Se os hashes coincidem, a autenticação é bem-sucedida.
- Se os hashes não coincidem, a autenticação falha com mensagem genérica (RN-CIU-016).
A senha é armazenada exclusivamente como hash + salt — nunca em texto plano. Os campos utilizados na tabela Usuario são Hash (varchar, hash da senha gerado com o salt) e Salt (varchar, valor aleatório único por usuário usado no processo de hashing). Este é o mesmo mecanismo reaproveitado pelo E2 (auto-cadastro) e pelo E3 (conclusão de cadastro por convite) ao autenticar automaticamente o profissional (RN-CIU-022).
Comportamento:
- O campo de documento aceita qualquer texto de forma livre — letras, números, símbolos, qualquer combinação. Não aplica máscara, não valida formato, não restringe entrada (RN-CIU-016).
- O botão “Entrar” fica desabilitado (disabled) enquanto ambos os campos estiverem vazios.
- Ao submeter, o botão exibe estado loading (spinner) e fica desabilitado.
- Em caso de erro, exibe toast error abaixo do botão “Entrar” com a mensagem MSG-E01.
- Após atingir o limite de tentativas falhas (parametrizado em QuantidadeTentativas, atualmente 5), exibe toast error MSG-E02 e o botão “Entrar” fica desabilitado pelo período parametrizado.
- Em caso de sucesso, o sistema primeiro verifica se há convite pendente (
convitesPendentes> 0 na resposta do login). Se houver, direciona para a tela de aceite do vínculo (E3), independentemente do número de vínculos ativos. Se não houver, direciona conforme os vínculos ativos (RN-CIU-009):- 0 vínculos ativos: página de Meu Perfil com banner MSG-I01
- 1 vínculo ativo: direto para o cockpit do profissional conforme seu tipo. Se o tipo de profissional não tiver um cockpit específico definido, o sistema carrega apenas o perfil e o menu lateral, sem uma tela ativa.
- Múltiplos vínculos ativos: tela de seleção de clínica (E6)
Estados visuais:
- Default: campos vazios, botão desabilitado
- Focus: borda do input muda para border-medium (2px) solid neutral-darker (#01013B). Todo texto em edição exibe cor neutral-dark (#012856).
- Loading: botão com spinner, todos os campos desabilitados
- Error: toast error exibido abaixo do botão “Entrar”, campos permanecem preenchidos (exceto senha que é limpa)
- Blocked: botão desabilitado com mensagem de bloqueio temporário
Motivador: a tela de login é minimalista e mobile first porque é a porta de entrada usada diariamente. Campos grandes (input-height: 56px) facilitam o uso no celular. A ausência de máscara e restrição no campo de documento (RN-CIU-016) evita dar pistas a atacantes sobre o formato esperado ou a existência do documento na base. O campo aceita qualquer entrada para não diferenciar “formato inválido” de “documento não encontrado”.
Tela de Recuperação de Senha
Propósito: Permitir que o usuário recupere o acesso via código de verificação enviado por e-mail ou celular.
Fluxo em 2 etapas:
Etapa 1 — Solicitação
- Campo de documento (input text, sem máscara, sem validação de formato — RN-CIU-016)
- Texto orientador: MSG-T01
- Botão “Enviar código” (MSG-B04)
- Comportamento: ao enviar, o sistema verifica se o documento existe na tabela Usuario (considerando apenas registros com RemovidoEm nulo). Se existe, gera um código de 6 dígitos e envia por e-mail e/ou celular (conforme dados cadastrados na tabela Usuario — campos eMail e Telefone). Se não existe, exibe a mesma mensagem de sucesso para não revelar que o documento não existe: MSG-S01.
- Após enviar, direciona para a etapa 2
Etapa 2 — Verificação e nova senha
- Campo de login/documento (input text, sem máscara — o usuário deve reinformar o documento para dupla verificação, garantindo que quem está redefinindo a senha é o mesmo que solicitou o código)
- Campo de código (input text, 6 dígitos, placeholder MSG-P04)
- Campo de nova senha (input password, com toggle de visibilidade e indicador de força)
- Campo de confirmar senha (input password, com toggle de visibilidade)
- Indicador de força da senha (barra progress que muda de cor: vermelho → amarelo → verde conforme critérios atendidos)
- Lista de critérios de complexidade (checkbox visuais que marcam automaticamente conforme a senha atende cada critério)
- Botão “Redefinir senha” (MSG-B05, desabilitado até documento preenchido, código com 6 dígitos, senha válida e confirmação igual)
- Link “Reenviar código” (MSG-B06)
- Comportamento: ao redefinir, o sistema valida que o documento informado corresponde ao documento que solicitou o código na etapa 1, valida o código, atualiza Hash + Salt em Usuario, registra a senha anterior em UsuarioSenhaHistorico, exibe toast success MSG-S02 e redireciona para a tela de login
- Se o documento informado na etapa 2 não corresponder ao documento da etapa 1, exibe toast error MSG-E07
Critérios de complexidade da nova senha — parametrizados via tabela UsuarioSenhaParametros (IpSeguranca), conforme RN-CIU-006 (guarda-chuva):
| Parâmetro (campo na tabela) | Descrição | Valor atual |
|---|---|---|
| TamanhoMinimo | Quantidade mínima de caracteres na senha | 8 |
| MinimoCaracterEspecial | Quantidade mínima de caracteres especiais | 1 |
| MinimoLetraMaiuscula | Quantidade mínima de letras maiúsculas | 1 |
| MinimoLetraMinuscula | Quantidade mínima de letras minúsculas | 1 |
| MinimoNumero | Quantidade mínima de números (dígitos) | 1 |
| CaracteresEspeciais | Caracteres especiais válidos aceitos | !@#$%^&*-_+=?;:| |
O sistema consulta estes parâmetros em tempo real ao validar a nova senha. A interface de critérios visuais (checkbox que marcam automaticamente) deve refletir os valores parametrizados — se o administrador alterar MinimoCaracterEspecial para 2, a interface passa a exigir e exibir “2 caracteres especiais”.
Motivador: o fluxo de recuperação não revela se o documento existe (mesma prática do login — RN-CIU-016). O código tem 6 dígitos por ser um padrão familiar (SMS OTP). A etapa 2 exige o campo de login para dupla verificação — garante que quem está redefinindo a senha é o mesmo que solicitou o código, evitando ataques de session hijacking no fluxo de recuperação. A redefinição exige os critérios de complexidade parametrizados na tabela UsuarioSenhaParametros para manter consistência com o auto-cadastro (E2). O histórico de senhas em UsuarioSenhaHistorico permite implementar política de não reutilização de senhas recentes.
Critérios de Aceitação
US-CIU-003 — Login com documento único
CA-003.1: Dado que estou na tela de login, quando informo CPF e senha corretos, então o sistema me autentica e direciona para a próxima tela conforme o número de vínculos ativos (Meu Perfil, seleção de clínica ou cockpit do profissional).
CA-003.2: Dado que informei CPF ou senha incorretos, quando submeto, então o sistema exibe a mensagem MSG-E01 sem distinguir qual campo está errado.
CA-003.3: Dado que falhei o número parametrizado de vezes seguidas (QuantidadeTentativas, atualmente 5), quando tento novamente, então o sistema bloqueia pelo período parametrizado (MinutosBloqueado, atualmente 15 minutos) e exibe a mensagem MSG-E02.
CA-003.4: Dado que o bloqueio expirou, quando tento novamente com credenciais corretas, então o sistema me autentica normalmente e zera o contador TentativasLogin.
CA-003.5: Dado que o campo de documento não tem máscara nem validação de formato, quando digito o CPF sem pontos e traços, então o sistema aceita e processa normalmente.
CA-003.6: Dado que tenho 0 vínculos ativos, quando faço login com sucesso, então sou direcionado para a página de Meu Perfil com o banner MSG-I01 visível.
CA-003.7: Dado que tenho 1 vínculo ativo, quando faço login com sucesso, então entro direto na clínica e sou direcionado para o cockpit do meu tipo de profissional. Se não houver cockpit específico para meu tipo, o sistema carrega apenas o perfil e o menu lateral, sem tela ativa.
CA-003.8: Dado que tenho múltiplos vínculos ativos, quando faço login com sucesso, então sou direcionado para a tela de seleção de clínica.
CA-003.9: Dado que o campo RemovidoEm do usuário está preenchido (exclusão lógica), quando tento logar, então o sistema exibe a mensagem MSG-E01 sem revelar que o usuário foi excluído.
CA-003.10: Dado que o toast error aparece abaixo do botão “Entrar”, quando informo credenciais inválidas, então o toast é exibido na posição abaixo do botão, não no topo da tela.
US-CIU-009 — Recuperação de senha
CA-009.1: Dado que informei um documento cadastrado (RemovidoEm nulo), quando solicito recuperação, então recebo um código de 6 dígitos por e-mail ou celular.
CA-009.2: Dado que informei um documento não cadastrado, quando solicito recuperação, então o sistema exibe a mensagem MSG-S01 (sem revelar que não existe).
CA-009.3: Dado que recebi o código, quando informo o documento novamente na etapa 2, o código correto dentro do prazo de validade e uma nova senha que atende todos os critérios parametrizados em UsuarioSenhaParametros, então a senha é redefinida, o registro é salvo em UsuarioSenhaHistorico e posso fazer login com a nova senha.
CA-009.4: Dado que informei um código incorreto, quando tento redefinir, então o sistema exibe a mensagem MSG-E03 e não redefine a senha.
CA-009.5: Dado que informei uma senha que não atende os critérios de complexidade parametrizados em UsuarioSenhaParametros, quando tento redefinir, então o botão “Redefinir senha” permanece desabilitado.
CA-009.6: Dado que informei senhas diferentes nos campos “nova senha” e “confirmar senha”, quando saio do campo, então o sistema exibe a mensagem MSG-E05.
CA-009.7: Dado que o código de recuperação expirou (prazo parametrizado em MinutosValidadeNovaSolicitacao, atualmente 15 minutos), quando tento redefinir, então o sistema exibe a mensagem MSG-E04.
CA-009.8: Dado que QuantidadeMemoria está parametrizado (atualmente 7), quando tento redefinir com uma senha igual a uma das últimas 7 senhas armazenadas em UsuarioSenhaHistorico, então o sistema exibe a mensagem MSG-E06.
CA-009.9: Dado que QuantidadeMemoria está definido como 0, quando redefino a senha, então o sistema não armazena histórico em UsuarioSenhaHistorico e não valida senhas anteriores — qualquer senha que atenda os critérios de complexidade é aceita.
CA-009.10: Dado que informei um documento diferente na etapa 2 daquele informado na etapa 1, quando tento redefinir, então o sistema exibe a mensagem MSG-E07 e não redefine a senha.
Fluxos de Exceção
EX-E1-01 — Serviço de autenticação indisponível Gatilho: back-end de autenticação não responde. Comportamento: toast error MSG-E08 exibido abaixo do botão “Entrar”. Botão volta ao estado default. Recuperação: usuário tenta novamente após alguns instantes.
EX-E1-02 — Código de recuperação expirado Gatilho: usuário informa código de recuperação após o prazo de validade parametrizado em MinutosValidadeNovaSolicitacao (atualmente 15 minutos). Comportamento: mensagem inline MSG-E04. Recuperação: usuário clica em “Reenviar código” (MSG-B06) e recebe um novo.
EX-E1-03 — Usuário com exclusão lógica (RemovidoEm preenchido) Gatilho: usuário tenta logar mas o campo RemovidoEm na tabela Usuario está preenchido (registro excluído logicamente). Comportamento: mensagem genérica MSG-E01 (não revela que o usuário foi excluído — RN-CIU-016). Recuperação: usuário deve contatar o suporte Gemed ou o administrador da clínica.
EX-E1-04 — Nova senha igual a senha recente Gatilho: usuário tenta redefinir senha com um valor igual a uma das últimas senhas armazenadas em UsuarioSenhaHistorico (quantidade controlada por QuantidadeMemoria). Comportamento: toast error MSG-E06. Recuperação: usuário define uma senha diferente que atenda os critérios de complexidade.
EX-E1-05 — Caractere especial não permitido Gatilho: usuário utiliza um caractere especial que não está na lista parametrizada em CaracteresEspeciais. Comportamento: o critério “Caracteres especiais” na lista visual não é marcado como atendido, e o botão “Redefinir senha” permanece desabilitado. Recuperação: usuário utiliza apenas caracteres da lista parametrizada (atualmente: !@#$%
EX-E1-06 — Documento divergente na etapa 2 de recuperação Gatilho: usuário informa um documento na etapa 2 diferente do documento informado na etapa 1 da recuperação de senha. Comportamento: toast error MSG-E07. Botão “Redefinir senha” permanece desabilitado. Recuperação: usuário informa o mesmo documento utilizado na etapa 1.
Validações de Campos
| Campo | Tela | Tipo | Obrigatório | Formato/Regra | Mensagem de erro |
|---|---|---|---|---|---|
| Documento (login) | Login | Texto sem máscara | Sim | Aceita qualquer texto livre — sem validação de formato (RN-CIU-016) | N/A — erro genérico MSG-E01 |
| Senha (login) | Login | Password | Sim | Não vazio | N/A — erro genérico MSG-E01 |
| Documento (recuperação etapa 1) | Recuperação Etapa 1 | Texto sem máscara | Sim | Aceita qualquer texto livre — sem validação de formato (RN-CIU-016) | N/A — mensagem genérica MSG-S01 |
| Documento (recuperação etapa 2) | Recuperação Etapa 2 | Texto sem máscara | Sim | Deve ser igual ao documento informado na etapa 1 | MSG-E07 |
| Código de recuperação | Recuperação Etapa 2 | Texto numérico | Sim | Exatamente 6 dígitos | MSG-E03 |
| Nova senha | Recuperação Etapa 2 | Password | Sim | TamanhoMinimo (8) + MinimoCaracterEspecial (1) + MinimoLetraMaiuscula (1) + MinimoLetraMinuscula (1) + MinimoNumero (1) + CaracteresEspeciais — todos parametrizados em UsuarioSenhaParametros | Indicador visual de critérios não atendidos |
| Confirmar senha | Recuperação Etapa 2 | Password | Sim | Deve ser igual ao campo Nova Senha | MSG-E05 |
Mapeamento de Componentes de Interface
| Componente | Variante | Estado(s) | Tokens aplicados | Onde aparece |
|---|---|---|---|---|
| Input (text) | Bordered | default, focus, error, disabled | input-height: 56px, radius-m (8px), neutral-light border (#BECADC), neutral-darker focus border (#01013B), texto em edição neutral-dark (#012856) | Documento (login), Documento (recuperação etapa 1 e 2), Código |
| Input (password) | Bordered com toggle | default, focus, error | Mesmos tokens do input text + ícone olho clicável (toggle de visibilidade) | Senha (login), Nova senha, Confirmar senha |
| Button | Primary | default, hover, loading, disabled | btn-height: 40px, primary-pure bg (#00E676), base-pure text (#FFFFFF), radius-m (8px) | Entrar (MSG-B01), Enviar código (MSG-B04), Redefinir senha (MSG-B05) |
| Button | Tertiary | default, hover | Transparent bg, primary-pure text (#00E676) | Esqueci minha senha (MSG-B02), Cadastrar-se (MSG-B03), Reenviar código (MSG-B06) |
| Toast | Default, Success, Error | animation: toast-in (300ms) | neutral-dark bg (#012856) / secondary-dark bg (#0091EA) / error-pure bg (#F44336) | Feedback de login (abaixo do botão “Entrar”), recuperação, bloqueio |
| Progress | Linear | default | radius-pill, neutral-lighter track (#E5EAF0), primary-pure bar (#00E676) | Indicador de força de senha |
| Checkbox | Default | default, checked, disabled | 20px box, primary-pure (#00E676) quando checked | Lista de critérios de complexidade da senha |
Integração com Backend
Autenticação
| Função | Método | Path | Request Body | Response Body | Códigos HTTP |
|---|---|---|---|---|---|
| Login | POST | /api/auth/login | { documento: string, senha: string } | { token: string, usuario: { id: uuid, nome: string, apelido: string, caminhoFoto: string }, vinculos: [{ clienteBDId: uuid, clienteNome: string, clienteLogo: string, situacao: string }], convitesPendentes: number } | 200 (sucesso), 401 (credenciais inválidas), 423 (bloqueado por tentativas) |
| Logout | POST | /api/auth/logout | { token: string } | { success: true } | 200 |
Recuperação de Senha
| Função | Método | Path | Request Body | Response Body | Códigos HTTP |
|---|---|---|---|---|---|
| Solicitar recuperação | POST | /api/auth/recuperar-senha | { documento: string } | { success: true } (sempre retorna sucesso, mesmo se documento não existir) | 200 |
| Redefinir senha | POST | /api/auth/redefinir-senha | { documento: string, codigo: string, novaSenha: string } | { success: true } | 200 (sucesso), 400 (código inválido, código expirado, documento divergente, senha reutilizada, critérios não atendidos) |
O mapeamento das tabelas consultadas por estes endpoints está na Seção 4 (Mapeamento de Banco de Dados), não repetido aqui (Lição #10 da Skill Designer).
Catálogo de Mensagens do Sistema e Termos de Interface (i18n)
Todas as mensagens exibidas ao usuário neste épico, com suas traduções para os três idiomas suportados (RN-CIU-007, transversal). As mensagens inline no documento (acima) referenciam os IDs desta seção.
Mensagens de erro
| ID | Contexto | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-E01 | Falha de login (qualquer causa) | “Usuário ou senha inválidos." | "Invalid username or password." | "Usuario o contraseña inválidos.” |
| MSG-E02 | Bloqueio por tentativas | ”Muitas tentativas. Tente novamente em [X] minutos." | "Too many attempts. Try again in [X] minutes." | "Demasiados intentos. Inténtelo de nuevo en [X] minutos.” |
| MSG-E03 | Código de recuperação inválido | ”Código inválido." | "Invalid code." | "Código inválido.” |
| MSG-E04 | Código de recuperação expirado | ”Código expirado. Solicite um novo código." | "Code expired. Request a new code." | "Código expirado. Solicite un nuevo código.” |
| MSG-E05 | Senhas não coincidem | ”As senhas não coincidem." | "Passwords do not match." | "Las contraseñas no coinciden.” |
| MSG-E06 | Nova senha igual a recente | ”A nova senha não pode ser igual a uma senha utilizada recentemente." | "The new password cannot be the same as a recently used password." | "La nueva contraseña no puede ser igual a una contraseña utilizada recientemente.” |
| MSG-E07 | Documento divergente na etapa 2 | ”Documento não corresponde ao informado na solicitação." | "Document does not match the one provided in the request." | "El documento no coincide con el informado en la solicitud.” |
| MSG-E08 | Serviço indisponível | ”Não foi possível conectar ao servidor. Tente novamente em alguns instantes." | "Could not connect to the server. Please try again in a few moments." | "No fue posible conectar al servidor. Inténtelo de nuevo en unos momentos.” |
Mensagens de sucesso
| ID | Contexto | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-S01 | Recuperação solicitada (sempre exibida, mesmo se documento não existe) | “Se o documento estiver cadastrado, você receberá um código de verificação." | "If the document is registered, you will receive a verification code." | "Si el documento está registrado, recibirá un código de verificación.” |
| MSG-S02 | Senha redefinida | ”Senha redefinida com sucesso!" | "Password successfully reset!" | "¡Contraseña restablecida con éxito!” |
Mensagens informativas
| ID | Contexto | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-I01 | Banner — sem vínculo ativo | ”Você não está vinculado a nenhuma clínica ativa. Aguarde um convite ou entre em contato com o administrador da clínica onde você trabalha." | "You are not linked to any active clinic. Wait for an invitation or contact the administrator of the clinic where you work." | "No está vinculado a ninguna clínica activa. Espere una invitación o comuníquese con el administrador de la clínica donde trabaja.” |
Placeholders
| ID | Campo | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-P01 | Campo “Usuário” (login) | “Digite seu login" | "Enter your login" | "Ingrese su login” |
| MSG-P02 | Campo “Senha” (login) | “Senha" | "Password" | "Contraseña” |
| MSG-P03 | Campo “Documento” (recuperação etapa 1) | “Digite seu login" | "Enter your login" | "Ingrese su login” |
| MSG-P04 | Campo “Código” (recuperação etapa 2) | “Código" | "Código" | "Código” |
Textos orientadores
| ID | Contexto | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-T01 | Recuperação — texto orientador etapa 1 | ”Informe seu login. Enviaremos um código de verificação para o e-mail ou celular cadastrado." | "Enter your login. We will send a verification code to your registered email or phone." | "Ingrese su login. Enviaremos un código de verificación a su correo electrónico o teléfono registrado.” |
Rótulos de botões e links
| ID | Elemento | pt-BR | en-US | es-419 |
|---|---|---|---|---|
| MSG-B01 | Botão primário (login) | “Entrar" | "Sign in" | "Ingresar” |
| MSG-B02 | Link (login) | “Esqueci minha senha" | "Forgot my password" | "Olvidé mi contraseña” |
| MSG-B03 | Link (login) | “Cadastrar-se" | "Sign up" | "Registrarse” |
| MSG-B04 | Botão (recuperação etapa 1) | “Enviar código" | "Send code" | "Enviar código” |
| MSG-B05 | Botão (recuperação etapa 2) | “Redefinir senha" | "Reset password" | "Restablecer contraseña” |
| MSG-B06 | Link (recuperação etapa 2) | “Reenviar código" | "Resend code" | "Reenviar código” |
Conformidade SBIS (detalhamento)
NGS1.02.01 — Método de autenticação (estágio 1, obrigatório) — autenticação por documento único + senha, validada exclusivamente no servidor (Mecanismo de autenticação, acima); o cliente nunca decide sozinho se as credenciais são válidas.
NGS1.02.02 — Proteção dos parâmetros de autenticação (estágio 1, obrigatório) — a senha nunca é armazenada em texto plano: apenas Hash + Salt (Mecanismo de autenticação, acima), com salt único por usuário.
NGS1.02.03 — Qualidade da senha (estágio 1, obrigatório) — critérios de complexidade parametrizados em UsuarioSenhaParametros (TamanhoMinimo, MinimoCaracterEspecial, MinimoLetraMaiuscula, MinimoLetraMinuscula, MinimoNumero), que atendem e superam o mínimo exigido (8 caracteres, 1 alfabético, 1 numérico).
NGS1.02.11 — Igualdade de senhas (estágio 1, obrigatório) — QuantidadeMemoria (UsuarioSenhaParametros) impede reutilizar uma das últimas N senhas, verificado contra UsuarioSenhaHistorico na redefinição (EX-E1-04).
NGS1.02.12 — Obtenção de nova senha (estágio 1, obrigatório) — link “Esqueci minha senha” (MSG-B02) na tela de login, levando ao fluxo de recuperação em 2 etapas.
NGS1.02.13 — Controle de tentativas de login (estágio 1, obrigatório) — bloqueio parametrizado (QuantidadeTentativas, atualmente 5, dentro do limite ≤10 exigido) por período parametrizado (MinutosBloqueado, RN-CIU-010).
NGS1.02.16 — Informações em autenticação inválida (estágio 1, obrigatório) — mensagem genérica MSG-E01 para qualquer causa de falha, sem revelar qual campo está incorreto ou se o usuário existe (RN-CIU-016).
NGS1.02.17 — Revelação de credenciais (estágio 1, obrigatório) — campo de senha com máscara de caracteres e toggle de visibilidade; o formulário não memoriza nem exibe credenciais digitadas anteriormente.
NGS1.02.19 — Uso de SALT (estágio 2, recomendado) — salt aleatório único gerado por usuário (Mecanismo de autenticação, acima).
ECF.17.19 — Mensagens do sistema (estágio 1, obrigatório) — todas as mensagens exibidas ao usuário estão catalogadas acima em linguagem não técnica, em português do Brasil, com suporte multilíngue para en-US e es-419. Mensagens técnicas de banco de dados, infraestrutura ou componentes de segurança são capturadas pelo back-end e nunca exibidas ao usuário.
Histórico de Versões
- v1.0 a v1.9 (07/08/2026 a 27/08/2026) — histórico completo preservado no documento original legado
(CIU-E1) Identidade e autenticação v1.9.md, arquivado emHistórico/. - v2.0 (30/08/2026) — Arquivo criado pela reconstrução do documento único
(CIU-E1) Identidade e autenticação v1.9.mdno modelo padrão Seção 1-4 (ver 01-Definição, Histórico de Versões, para o detalhamento completo da reorganização). Nesta seção especificamente: Fluxos de Exceção renumerados de “EX-E1.0X” para “EX-E1-0X”; Conformidade SBIS expandida com o detalhamento de todos os 9 requisitos NGS1.02.XX/ECF.17.19 identificados na Seção 1 (antes só ECF.17.19 tinha “como atendido” documentado — os demais só apareciam listados, sem detalhe, na tabela de SBIS do guarda-chuva); nenhuma regra de negócio, critério de aceitação ou fluxo de exceção teve seu conteúdo alterado.