Regras de negócio · Identidade e acesso
RN-IDENTIDADE-001 · Titular da conta no cadastro conjunto
Condição: o cadastro de Pessoa inclui uma conta de acesso.
Resultado: a Pessoa deve ser física e ter papel USER ou ASSOCIATE; caso contrário, a API recusa o cadastro conjunto.
RN-IDENTIDADE-002 · Concessão de Perfil de Acesso
Condição: um operador cria ou altera uma conta e define seu Perfil de Acesso.
Resultado: somente uma conta pessoal com acesso global ou administração do sistema pode administrar usuários. Acesso global não pode conceder acesso global nem administração do sistema; a administração do sistema pode conceder esses perfis.
RN-IDENTIDADE-003 · Unicidade do vínculo de conta
Condição: uma nova conta é vinculada a uma Pessoa e a um e-mail.
Resultado: a API recusa a criação quando o e-mail ou a Pessoa já estão vinculados a outra conta.
RN-IDENTIDADE-004 · Credencial da conta Appwrite
Condição: a conta é provisionada com identidade Appwrite.
Resultado: a conta local guarda appwriteSubject e mantém passwordHash nulo. O Appwrite guarda a senha. A API não aceita essa conta no login nem na alteração local de senha.
RN-IDENTIDADE-005 · Confirmação do cadastro conjunto
Condição: o cadastro cria Pessoa, conta local e identidade Appwrite.
Resultado: falha no provisionamento desfaz a transação local. Se o provisionamento concluir e o commit local falhar, a API tenta excluir a identidade Appwrite criada.
RN-IDENTIDADE-006 · Autenticação local
Condição: uma conta tenta entrar por POST /v1/auth/login.
Resultado: a API emite JWT apenas quando a conta está ativa, não tem appwriteSubject, possui hash local e a senha está correta. Caso contrário, responde 401 para credenciais inválidas.
RN-IDENTIDADE-007 · Resolução da identidade Appwrite
Condição: a API recebe uma identidade Appwrite autenticada.
Resultado: procura a conta local primeiro pelo appwriteSubject. Sem correspondência, pode usar o e-mail normalizado apenas para conta legada ainda sem subject. A conta deve estar ativa e ter Perfil de Acesso.
RN-IDENTIDADE-008 · Token de integração
Condição: um usuário emite ou usa um token de integração.
Resultado: a emissão exige conta pessoal com Perfil de Acesso de Núcleo ou superior, sistema habilitado e expiração futura quando informada. O segredo completo é devolvido somente na criação; a API persiste seu hash. Token expirado, revogado, com segredo incorreto ou de titular inativo não autentica. O titular só lista e revoga os próprios tokens.
RN-IDENTIDADE-009 · Autorização por perfil e alcance
Condição: uma operação protegida exige Perfil de Acesso ou alcance efetivo.
Resultado: a API compara o perfil ao mínimo da rota. Ao resolver o alcance de uma conta pessoal, exige Pessoa vinculada e considera os vínculos aplicáveis. O serviço da operação decide o acesso final ao recurso.