ÉPICO 1 — NÚCLEO DE IDENTIDADE E AUTENTICAÇÃO
Funcionalidade pai: Check-in de Usuários no Sistema
Persona principal: Usuário autenticado Versão: 1.7 (revisada) Data: 27/08/2026
1. Visão Geral do Épico
1.1 O que inclui
Este épico é a fundação de todo o fluxo de check-in de usuários no sistema Gemed. Ele contempla:
- Tela de login com documento único (CPF no Brasil) e senha
- Validação de credenciais do usuário
- Controle de tentativas de login com limite e bloqueio parametrizáveis
- Bloqueio temporário após número parametrizado de tentativas falhas (atualmente 5) por período parametrizado (atualmente 15 minutos)
- Fluxo de recuperação de senha via código de verificação (enviado por e-mail ou celular)
- Redefinição de senha com critérios de complexidade parametrizáveis
- Registro de histórico de senhas para política de não reutilização (quantidade parametrizável)
- Encerramento de sessão (logout)
1.2 Dependências
Este épico não possui dependências funcionais de outros épicos — é a base do sistema. Pode ser desenvolvido em paralelo com o E2 (Auto-cadastro Público), pois ambos utilizam a mesma estrutura de dados de usuário e a mesma lógica de armazenamento de senha. Desde a definição de RN-CIU-022 (autenticação automática pós-auto-cadastro), o E2 passa a depender do mecanismo de autenticação descrito na Seção 4.1 deste épico — ao concluir o wizard de auto-cadastro, o E2 invoca o mesmo processo de geração de sessão/token aqui documentado.
1.3 Paralelização
E2 (Auto-cadastro Público) pode ser construído simultaneamente, pois compartilha a mesma estrutura de dados e a mesma lógica de criptografia de senha.
2. Regras de Negócio
Este épico também aplica as regras transversais RN-CIU-005 (exclusão lógica), RN-CIU-006 (qualidade e histórico de senha), RN-CIU-007 (suporte multilíngue), RN-CIU-008 (comportamento de campos de input) e RN-CIU-022 (autenticação automática pós-auto-cadastro — o mecanismo de autenticação e roteamento pós-login descrito nas Seções 2 e 4.1 deste épico é o mesmo reutilizado pelo E2 ao final do wizard) — redação completa no documento guarda-chuva (Check-In de usuários no sistema), Seção 5.
RN-CIU-001 — Documento único como chave de identificação
O usuário é identificado de forma unívoca pelo seu documento único. No Brasil, o CPF é a chave de identificação. Em outros países, o sistema deve adaptar para o documento local equivalente (passaporte, SSN, etc.). O documento é exclusivo — um mesmo documento não pode pertencer a dois usuários diferentes. O login é feito com o documento único + senha.
RN-CIU-009 — Autenticação
A autenticação valida documento único + senha. O sistema localiza o usuário pelo documento informado e valida a senha utilizando mecanismo de hash + salt (detalhado na Seção 4.1). Usuários excluídos logicamente são tratados como inexistentes — a autenticação falha com mensagem genérica, sem revelar que o usuário foi excluído.
Após autenticação bem-sucedida, o sistema avalia os vínculos ativos do usuário:
- Se possui 1 vínculo ativo — entra direto na clínica, carrega perfil de acesso e monta menu lateral. Direciona para o cockpit do profissional conforme seu tipo (médico → Central do Médico, enfermeira → cockpit da enfermagem, etc.). 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.
- Se possui múltiplos vínculos ativos — direciona para a tela de seleção de clínica (Épico 6).
- Se possui 0 vínculos ativos — direciona para a página de Meu Perfil (Épico 4) com banner informativo (MSG-I01).
Nota (RN-CIU-022): este mesmo mecanismo de avaliação de vínculos é reaproveitado quando o E2 autentica automaticamente o profissional ao final do auto-cadastro. Como o usuário acabou de se cadastrar e ainda não foi convidado por nenhuma clínica, o caso típico é 0 vínculos ativos — resultando no direcionamento a Meu Perfil com o banner MSG-I01, conforme decisão confirmada em 27/08/2026.
RN-CIU-010 — Tentativas de login (parametrizável)
O sistema controla tentativas de login falhas de forma parametrizada. Os parâmetros são:
- Quantidade de tentativas (atualmente 5) — número máximo de tentativas falhas consecutivas antes do bloqueio
- Minutos de bloqueio (atualmente 15) — duração do bloqueio temporário em minutos
Quando o usuário atinge o limite de tentativas falhas, o sistema bloqueia novas tentativas pelo período parametrizado. A cada login bem-sucedido, o contador de tentativas é zerado. Após o bloqueio expirar, o usuário pode tentar novamente.
RN-CIU-016 — Sem validação de formato nem máscara no login
No fluxo de login, o sistema não aplica máscara visual nem validação de formato no campo de documento. O campo aceita qualquer texto digitado de forma livre — letras, números, símbolos, qualquer combinação. Isso evita dar pistas a quem está tentando acessar o sistema sobre:
- Se o documento tem formato válido (indicando que o sistema reconhece aquele CPF)
- Se o documento existe na base (diferenciando “formato inválido” de “credenciais incorretas”)
A única resposta para qualquer falha de login é a mensagem genérica MSG-E01 (ver Seção 10), sem distinguir a causa.
Esta regra está alinhada com a prática de segurança contra enumeração de usuários — o atacante não consegue descobrir quais CPFs estão cadastrados apenas observando o comportamento do formulário de login.
3. 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.
4. Descrição Funcional Detalhada
4.1 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 (aplicável a todos os inputs do sistema):
Todo campo de input possui um placeholder que é o nome do campo. Quando o usuário clica no campo para digitar, o placeholder some e se torna um label acima do campo (colado à borda superior do campo). Portanto, as descrições de campos não citam o label separadamente — o label é 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)
- 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
- Salt (varchar) — valor aleatório único por usuário usado no processo de hashing
Nota sobre exclusão lógica: ver RN-CIU-005 (documento guarda-chuva, Seção 5).
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 campo é um input text comum sem nenhum tipo de formatação ou restrição de caracteres.
-
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 direciona para:
-
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 (médico → Central do Médico, enfermeira → cockpit da enfermagem, etc.). 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 (Épico 6)
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
Decisão de design: 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”.
4.2 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. O campo aceita qualquer texto livre, igual ao campo de login)
- 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:
| 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”.
Decisão de design: 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.
5. 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 (TamanhoMinimo, MinimoCaracterEspecial, MinimoLetraMaiuscula, MinimoLetraMinuscula, MinimoNumero), 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.
6. 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
7. 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 |
8. 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 |
9. Integração com Backend
9.1 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 |
9.2 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) |
9.3 Mapeamento de Tabelas
| Tabela | Banco | Campos utilizados neste épico |
| Usuario | IpSeguranca | Id, Usuario (login=CPF), CPF, Nome, Apelido, CaminhoFoto, Hash, Salt, DataSenha, TentativasLogin, DHBloqueio, Token, RemovidoEm, UsuarioIdRemovido |
| UsuarioSenhaHistorico | IpSeguranca | UsuarioId, DataSenha, Hash, Salt |
| UsuarioCliente | IpSeguranca | UsuarioId, ClienteBDId, Situacao, RemovidoEm (consultado apenas para verificar vínculos ativos após login) |
| UsuarioSenhaParametros | IpSeguranca | QuantidadeTentativas, MinutosBloqueado, TamanhoMinimo, MinimoCaracterEspecial, MinimoLetraMaiuscula, MinimoLetraMinuscula, MinimoNumero, CaracteresEspeciais, MinutosValidadeNovaSolicitacao, QuantidadeMemoria |
10. Catálogo de Mensagens do Sistema (Multilíngue)
Todas as mensagens exibidas ao usuário neste épico, com suas traduções para os três idiomas suportados. As mensagens inline no documento (Seções 2 a 6) referenciam os IDs desta seção.
10.1 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.” |
10.2 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!“ |
10.3 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.” |
10.4 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” |
10.5 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.” |
10.6 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” |
11. Conformidade SBIS
ECF.17.19 — Mensagens do sistema
Estágio: 1 (Clínica/ambulatório) — obrigatório
Descrição do requisito: “Todas as mensagens sob controle do S-RES devem ser apresentadas em linguagem não técnica ao usuário, em português do Brasil. Mensagens técnicas (sistemas operacionais, banco de dados, componentes de segurança, etc) ou em outros idiomas e que possam ser tratadas pelo S-RES não devem ser apresentadas em seu conteúdo original.”
Como é atendido neste épico: Todas as mensagens exibidas ao usuário estão catalogadas na Seção 10 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. O front-end exibe apenas as mensagens amigáveis pré-definidas no catálogo.
12. Metadados do Épico
| Atributo | Valor |
| Prioridade | Must Have — fundação do sistema, sem este épico nenhum outro funciona |
| Complexidade | Média — fluxos bem definidos, tabelas já existem, parametrização via UsuarioSenhaParametros |
| Dependências | Nenhuma (épico base) |
| Regras transversais aplicadas | 5 (RN-CIU-005, 006, 007, 008, 022) |
| Paraleliza com | E2 (Auto-cadastro Público) — compartilha estrutura de dados e lógica de criptografia de senha |
| Consumido por | E2 — reutiliza o mecanismo de autenticação e roteamento pós-login (Seções 2 e 4.1) para autenticar automaticamente o profissional ao final do wizard de auto-cadastro (RN-CIU-022) |
| Histórias de usuário | 2 (US-CIU-003, US-CIU-009) |
| Critérios de aceitação | 19 |
| Fluxos de exceção | 6 (EX-E1.01 a EX-E1.06) |
| Endpoints | 4 |
| Telas | 2 (Login, Recuperação de Senha em 2 etapas) |
| Tabelas utilizadas | 4 (Usuario, UsuarioSenhaHistorico, UsuarioCliente, UsuarioSenhaParametros) |
| Mensagens catalogadas | 20 (8 erros, 2 sucessos, 1 informativa, 4 placeholders, 1 texto orientador, 6 rótulos) |