# CHECK-IN DE USUÁRIOS NO SISTEMA

Documento pai: Especificação Funcional de Software — Gemed Onco Versão: 1.1 Data: 27/08/2026

---

## 1. Objetivo

Definir e especificar todas as funcionalidades relacionadas ao check-in de usuários no sistema Gemed — o conjunto de fluxos que permite que um profissional crie sua conta, autentique-se, recupere seu acesso, seja convidado por clínicas e selecione onde trabalhar.

---

## 2. Escopo

### 2.1 Dentro do escopo

- Login com documento único e senha
- Controle de tentativas de login com bloqueio parametrizável
- Recuperação de senha via código de verificação
- Auto-cadastro público (conta global do usuário)
- Validação de documento e conselho profissional no cadastro
- Dados avançados opcionais conforme SBIS ECF.02.01
- Convite de profissionais por clínicas (a especificar — E3)
- Vínculo entre usuário e clínica (a especificar — E3)
- Seleção de clínica quando o usuário possui múltiplos vínculos (a especificar — E6)
- Meu Perfil — visualização e edição dos dados do usuário (a especificar — E4)

### 2.2 Fora do escopo

- Single Sign-On (SSO) externo
- Gestão de identidade federada
- Controle biométrico de acesso
- Criptografia de dados em repouso
- Gestão de perfis de acesso (RBAC) — tratado no Contexto de Segurança
- Gestão de sessão e timeout por inatividade — tratado no Contexto de Segurança

---

## 3. Personas

|Persona|Descrição|
|---|---|
|Profissional não cadastrado|Médico, enfermeira, farmacêutica ou outro profissional de saúde que ainda não possui conta no Gemed|
|Usuário autenticado|Profissional com conta ativa, autenticado no sistema|
|Administrador da clínica|Usuário com perfil de administrador que convida e vincula profissionais à sua clínica|
|Suporte técnico Gemed|Usuário N1/N2 que auxilia na resolução de conflitos de cadastro e conselho|

---

## 4. Épicos

|Épico|Título|Status|Versão|Dependências|
|---|---|---|---|---|
|E1|Núcleo de Identidade e Autenticação|✅ Finalizado|v1.5|Nenhuma (épico base)|
|E2|Auto-cadastro Público|✅ Finalizado|v1.2|E1|
|E3|Convite e Vínculo|⏳ A especificar|—|E1, E2|
|E4|Meu Perfil|⏳ A especificar|—|E1, E2|
|E6|Seleção de Clínica|⏳ A especificar|—|E1|

### 4.1 Resumo dos épicos finalizados

E1 — Núcleo de Identidade e Autenticação (v1.5): Tela de login com documento único + senha, sem máscara nem validação de formato (anti-enumeração). Controle de tentativas parametrizável (QuantidadeTentativas = 5, MinutosBloqueado = 15). Recuperação de senha em 2 etapas com código de 6 dígitos, dupla verificação de documento e critérios de complexidade parametrizados. Mensagens multilíngues (pt-BR, en-US, es-419). 2 histórias de usuário, 19 critérios de aceitação, 6 fluxos de exceção, 4 endpoints, 4 tabelas.

E2 — Auto-cadastro Público (v1.2): Wizard de 3 etapas (dados básicos com complemento profissional condicional, dados avançados opcionais, definição de senha). Validação de CPF com dígitos verificadores. Verificação de duplicidade de CPF e conselho em tempo real. Estrutura genérica de conselho profissional (tipo, número, UF). Identificação de tipo de profissional de saúde (médico, enfermeira, farmacêutica, psicólogo, etc.). Documentos condicionais por nacionalidade. Dados avançados opcionais conforme SBIS ECF.02.01. Máscara de celular parametrizada por país. Conflito de conselho não bloqueia o cadastro — permite concluir sem conselho. 2 histórias de usuário, 22 critérios de aceitação, 6 fluxos de exceção, 4 endpoints, 4 tabelas.

---

## 5. Regras de Negócio Transversais

Regras que se aplicam a mais de um épico do Check-in de Usuários. A redação completa de cada uma vive aqui — os épicos não a repetem, apenas referenciam o ID (RN-CIU-XXX). Regras que pertencem a um único épico foram movidas para lá (ver tabela de referência ao final desta seção).

### RN-CIU-005 — Exclusão lógica (sem campo Status)

O conceito de campo Status foi abolido das tabelas IpSeguranca. A exclusão lógica utiliza a estrutura padrão da infraestrutura:

- RemovidoEm (datetimeoffset) — registra a data e hora da exclusão
- UsuarioIdRemovido (uniqueidentifier) — identifica quem fez a exclusão

Um registro é considerado ativo quando RemovidoEm é nulo. Um registro é considerado excluído quando RemovidoEm possui uma data/hora preenchida. Todas as consultas, validações e verificações de duplicidade consideram apenas registros ativos.

Usada por: (CIU-E1) — verificação de login e de recuperação de senha; (CIU-E2) — verificação de duplicidade de CPF e de conselho profissional.

### RN-CIU-006 — Qualidade e histórico de senha parametrizados

Os seguintes parâmetros de qualidade e histórico de senha são parametrizáveis via tabela UsuarioSenhaParametros (IpSeguranca):

|Parâmetro|Descrição|Valor atual|
|---|---|---|
|TamanhoMinimo|Mínimo de caracteres na senha|8|
|MinimoCaracterEspecial|Mínimo de caracteres especiais|1|
|MinimoLetraMaiuscula|Mínimo de letras maiúsculas|1|
|MinimoLetraMinuscula|Mínimo de letras minúsculas|1|
|MinimoNumero|Mínimo de números (dígitos)|1|
|CaracteresEspeciais|Caracteres especiais válidos aceitos|!@#$%^&*-_+=?;:\||
|MinutosValidadeNovaSolicitacao|Validade do código de recuperação (minutos)|15|
|QuantidadeMemoria|Quantidade de senhas anteriores guardadas (0 = não guarda)|7|

Nota: os parâmetros de tentativas de login e bloqueio (QuantidadeTentativas, MinutosBloqueado) não fazem parte desta regra — são específicos do fluxo de login e estão em RN-CIU-010 (CIU-E1).

Usada por: (CIU-E1) — redefinição de senha na recuperação; (CIU-E2) — definição de senha no auto-cadastro.

### RN-CIU-007 — Suporte multilíngue

O sistema suporta três idiomas: pt-BR (português do Brasil), en-US (inglês) e es-419 (espanhol latino-americano). Todas as mensagens exibidas ao usuário são catalogadas com IDs (MSG-E01, MSG-S01, etc.) e traduzidas para os três idiomas. As mensagens inline nos documentos referenciam os IDs do catálogo.

Usada por: (CIU-E1) e (CIU-E2) — catálogos de mensagens (Seção 10 de cada épico).

### RN-CIU-008 — Comportamento de campos de input

Todo campo de input possui um placeholder que é o nome do campo (apenas o nome, sem verbos de comando). 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). O label é sempre igual ao placeholder.

Usada por: (CIU-E1) e (CIU-E2) — todos os campos de todas as telas.

### Regras específicas de um único épico

As regras abaixo pertencem a um único épico — a redação completa está no documento do épico correspondente. Aqui consta apenas a referência, para não duplicar conteúdo.

|RN|Título|Épico dono|
|---|---|---|
|RN-CIU-001|Documento único como chave de identificação|(CIU-E1), Seção 2|
|RN-CIU-002|Unicidade global do usuário|(CIU-E2), Seção 2|
|RN-CIU-010|Tentativas de login (parametrizável)|(CIU-E1), Seção 2|
|RN-CIU-016|Anti-enumeração no login|(CIU-E1), Seção 2|
|RN-CIU-017|Estrutura genérica de conselho profissional|(CIU-E2), Seção 2|
|RN-CIU-020|Máscara de celular parametrizada por país|(CIU-E2), Seção 2|
|RN-CIU-021|Documentos condicionais por nacionalidade|(CIU-E2), Seção 2|

---

## 6. Convenções de Documentação

### Estrutura de cada épico

Cada épico segue a estrutura:

1. Visão Geral (o que inclui, dependências, paralelização)
2. Regras de Negócio (em linguagem de negócio, sem referências a campos de banco)
3. Histórias de Usuário
4. Descrição Funcional Detalhada (layout, comportamento, estados visuais, decisões de design, detalhes técnicos)
5. Critérios de Aceitação (formato Dado/Quando/Então)
6. Fluxos de Exceção (gatilho, comportamento, recuperação)
7. Validações de Campos (tabela)
8. Mapeamento de Componentes de Interface (tabela com tokens do Design System)
9. Integração com Backend (endpoints, mapeamento de tabelas)
10. Catálogo de Mensagens (multilíngue, com IDs)
11. Conformidade SBIS
12. Metadados do Épico

### Numeração

- Regras de negócio: RN-CIU-XXX (CIU = Check-in de Usuários)
- Histórias de usuário: US-CIU-XXX
- Critérios de aceitação: CA-XXX.X
- Fluxos de exceção: EX-XXX (numeração global entre épicos — o usuário renumera)
- Mensagens: MSG-EXX (erro), MSG-SXX (sucesso), MSG-IXX (informativa), MSG-PXX (placeholder), MSG-TXX (texto orientador), MSG-BXX (botão/link), MSG-CXX (checkbox)

### Separação de preocupações

- Regras de Negócio: descrevem o que o sistema faz, em linguagem de negócio. Sem nomes de tabelas, campos ou mecanismos técnicos.
- Descrição Funcional: descreve como o sistema funciona, incluindo detalhes técnicos (campos de banco, mecanismos de hash/salt, etc.).
- Mapeamento de Tabelas: lista as tabelas e campos utilizados, com o banco de dados correspondente.

---

## 7. Bancos de Dados Utilizados

|Banco|Descrição|Uso no Check-in|
|---|---|---|
|IpSeguranca|Segurança e configuração|Tabelas Usuario, UsuarioSenhaHistorico, UsuarioSenhaParametros, UsuarioCliente|
|IpTerminologia|Tabelas de domínio|Listas de tipos de conselho, tipos de profissional, especialidades, CBO|

### Tabelas existentes utilizadas

|Tabela|Banco|Épicos|
|---|---|---|
|Usuario|IpSeguranca|E1, E2|
|UsuarioSenhaHistorico|IpSeguranca|E1, E2|
|UsuarioSenhaParametros|IpSeguranca|E1, E2|
|UsuarioCliente|IpSeguranca|E1, E2|

### Campos e tabelas a criar (pendências de BD)

- Campos de dados avançados (SBIS ECF.02.01): nome da mãe, sexo, gênero, raça/cor, nacionalidade, naturalidade, endereço, documentos nacionais, passaporte, CNS — não existem na tabela Usuario atual. Propor criação de campos ou tabela complementar na Seção 4 do documento guarda-chuva.
- Estrutura genérica de conselho (tipo, número, UF) e tipo de profissional — podem exigir novos campos ou tabela separada.
- Tabelas de terminologia (tipos de conselho, tipos de profissional, especialidades, CBO) — verificar existência e estrutura no banco IpTerminologia.

---

## 8. Conformidade SBIS — Visão Geral

|Requisito|Estágio|Descrição|Épicos que atendem|
|---|---|---|---|
|ECF.02.01|1 (obrigatório)|Identificação dos profissionais — campos presentes no formulário|E2|
|ECF.02.02|1 (obrigatório)|Duplicidade de cadastros — validação por CPF e conselho|E2|
|NGS1.02.01|1 (obrigatório)|Método de autenticação — usuário + senha, validação no servidor|E1|
|NGS1.02.02|1 (obrigatório)|Proteção dos parâmetros de autenticação — hash de no mínimo 160 bits|E1|
|NGS1.02.03|1 (obrigatório)|Qualidade da senha — mínimo 8 caracteres, 1 alfabético, 1 numérico|E1, E2|
|NGS1.02.11|1 (obrigatório)|Igualdade de senhas — nova senha diferente da atual e da imediatamente anterior|E1|
|NGS1.02.12|1 (obrigatório)|Obtenção de nova senha — opção "esqueci a senha" na tela de login|E1|
|NGS1.02.13|1 (obrigatório)|Controle de tentativas de login — bloqueio após máximo configurável (≤10)|E1|
|NGS1.02.16|1 (obrigatório)|Informações em autenticação inválida — mensagem genérica sem revelar motivo|E1|
|NGS1.02.17|1 (obrigatório)|Revelação de credenciais — máscara de caracteres, sem memorização|E1, E2|
|NGS1.02.19|2 (recomendado)|Uso de SALT — novo salt para cada senha|E1, E2|
|ECF.17.19|1 (obrigatório)|Mensagens do sistema — linguagem não técnica em português do Brasil|E1, E2|

---

## 9. Metadados

| Atributo                       | Valor                                                        |
| ------------------------------ | ------------------------------------------------------------ |
| Funcionalidade pai             | Check-in de Usuários no Sistema                              |
| Épicos finalizados             | 2 (E1 v1.5, E2 v1.2)                                         |
| Épicos pendentes               | 3 (E3, E4, E6)                                               |
| Regras de negócio transversais (redação completa nesta seção) | 4 (RN-CIU-005, 006, 007, 008)                                |
| Regras de negócio específicas de épico (referenciadas aqui)   | 7 (RN-CIU-001, 002, 010, 016, 017, 020, 021)                  |
| Requisitos SBIS aplicáveis     | 12                                                           |
| Bancos utilizados              | 2 (IpSeguranca, IpTerminologia)                              |
| Tabelas existentes utilizadas  | 4                                                            |
| Pendências de BD               | 3 grupos (dados avançados, conselho genérico, terminologias) |
| Idiomas suportados             | 3 (pt-BR, en-US, es-419)                                     |