Minha conta
Aqui você mantém seus próprios dados — pessoais, médicos e de segurança — e os códigos internos que usa em cada unidade. É a experiência de tela do que o backend documenta em Perfil próprio — API e em Código interno — API.

Para quem é (personas)
| Persona | Quem é | O que faz aqui |
|---|---|---|
| Qualquer pessoa autenticada | todo usuário do Portal, independentemente do papel | mantém nome, contato, dados médicos, senha, MFA e e-mail de recuperação |
| Gestor (modo "outro usuário") | quem abre /account/<uuid> de outra pessoa | vê e edita alguns dados de terceiros — com restrições, ver Modo gestor abaixo |
Histórias das personas
💬 Como usuário do Portal, quero corrigir meu telefone e trocar minha senha sem precisar pedir para o administrador, porque são dados só meus.
- Qualquer pessoa autenticada: "Troquei de celular e preciso atualizar meu telefone de contato e reconfigurar o MFA — faço tudo isso em Minha conta, sem depender de outro perfil."
Como acessar
- Clique no seu avatar, no canto superior direito, e escolha Minha conta.
| Caminho na tela | Rota |
|---|---|
| Avatar (topo direito) › Minha conta | /account → redireciona para /account/me |
| Aba Dados pessoais | /account/me/personal |
| Aba Dados médicos | /account/me/professional |
| Aba Segurança | /account/me/security |
| Aba Códigos internos | /account/me/internal-codes |
:::info Quem vê esta opção
O item Minha conta não tem nenhum gate de permissão — está disponível para qualquer pessoa
autenticada, inclusive durante o fluxo de cadastro obrigatório de MFA (nesse caso, o menu do
avatar mostra só Sair, sem as outras opções). O comando de navegação é
this.router.navigate(['/account']), direto no código do topbar
(toolbar.component.ts:122).
:::
Permissões que liberam cada ação
| Ação | Permissão necessária |
|---|---|
| Ver e editar os próprios dados pessoais/médicos/segurança | nenhuma — é sempre sobre o próprio usuário (subject do token) |
Ver/editar dados de outro usuário em /account/:userId | quem navegou até lá já precisa ter alguma permissão de gestão sobre esse usuário — a própria tela /account/:userId não checa uma permissão adicional além de estar autenticado (authGuard); ela confia em quem a abriu |
| Ver/editar códigos internos de outro usuário | internal-code:write na unidade — ver Código interno — API |
Caminho principal
1. Dados pessoais
Nome, e-mail (somente leitura — trocar e-mail é um fluxo separado de verificação), CPF, telefone,
data de nascimento e foto. Essas seções são as mesmas para qualquer papel — confirmamos a mesma
tela, com os mesmos campos, tanto com o perfil administrator (acima) quanto com doctor, que na
tela de Gerenciar usuários tem acesso bem mais restrito:

2. Dados médicos
CRM/licença profissional e estado de registro.

3. Segurança
Troca de senha, verificação de e-mail, e-mail de recuperação e configuração/reset de MFA. O fluxo de configuração de MFA (QR Code, chave manual, código de 6 dígitos) já está documentado em MFA — Autenticação; esta página não repete os passos, só confirma que o ponto de entrada é a aba Segurança de Minha conta.

4. Códigos internos
Cadastre um identificador curto (não-UUID) para você mesmo em qualquer unidade à qual pertença, ou
para outro usuário se tiver internal-code:write naquela unidade.

Modo gestor (contas de terceiros)
A rota /account/:userId (qualquer UUID no lugar de me) existe para um gestor abrir a conta de
outro usuário. Mas nem toda seção acompanha esse modo — confirmado em código
(account-user.resolver.ts:13-26 e no teste dedicado
account-manager-mode.spec.ts):
:::danger Achado confirmado em código (não reproduzido ao vivo)
As seções Códigos internos, Favoritos, Busca padrão e as mutações de MFA são
caller-scoped no BFF — ou seja, o backend deriva o usuário a partir do próprio token, ignorando
qualquer userId da URL. Renderizá-las no modo gestor faria a pessoa acreditar que está vendo e
editando os dados de outra pessoa, quando na verdade estaria sobrescrevendo os próprios dados
— um botão "Desativar MFA", por exemplo, derrubaria o TOTP de quem clicou, não do usuário-alvo.
Por isso essas seções só existem no modo próprio (isSelf(routeUserId)); no modo gestor elas
simplesmente não aparecem. As abas Dados pessoais, Dados médicos e o restante de
Segurança continuam funcionando em modo gestor.
A confirmar — responsável: time de frontend; data: 24/09/2026: não identificamos, neste
levantamento, qual tela navega para /account/:userId (não é a lista de Usuários, que edita
inline por modal) — o achado acima vem da leitura do código e do teste
account-manager-mode.spec.ts, não de navegação ao vivo.
:::
Validações
| Situação | Onde é validada | Comportamento |
|---|---|---|
| Nome em branco | Frontend | Botão Salvar desabilitado |
| Senha nova fora da política | Frontend | Mensagem de regra abaixo do campo, passwordStrengthValidator |
| Senha atual incorreta ao trocar senha | Backend | Toast de erro, campo permanece preenchido para nova tentativa |
| E-mail de recuperação inválido | Frontend | Mensagem de e-mail inválido |
Caminhos alternativos e falhas
| Situação | O que acontece | Como recuperar |
|---|---|---|
| Sessão expira enquanto edita | Próxima ação redireciona para o login | Faça login de novo; dados não salvos se perdem |
| Tentar ver Códigos internos/Favoritos/Busca padrão em modo gestor | A seção não aparece — mensagem ACCOUNT.MANAGER_MODE_UNAVAILABLE | Peça para a própria pessoa acessar /account/me |
Informações técnicas
Rota da tela: /account/me/* (modo próprio), /account/:userId/* (modo gestor, cobertura
parcial) · Acesso: autenticado; sem permissão adicional no modo próprio
Rotas de API consumidas: GET/PATCH /users/me, PUT /users/me/professional-license,
GET /users/me/security, POST /users/me/email-verification,
PATCH/DELETE /users/me/recovery-email, POST /users/internal-codes,
GET /users/:userId/internal-codes, PATCH/DELETE /users/internal-codes/:internalCodeId.
→ Detalhe das rotas: Perfil próprio (Back), Código interno (Back)
Relacionado
- ⚙️ API: Perfil próprio, Código interno
- 🔐 MFA — Autenticação — passo a passo de cadastro do MFA
- 📂 Módulo: Usuários — visão geral
- 🔁 Próximo passo: Preferências pessoais