technical-reference · in-progress
Model — User
Conta autenticável, relações, notificações de senha, autoria no Activity Log e identificação administrável.
Responsabilidade atual
Model autenticável do Laravel. Usa HasFactory, LogsActivity e Notifiable, representa a conta de login e fornece as iniciais para a interface.
| Elemento | Estado atual |
|---|---|
| atributos fillable | name, cpf, email, password, via #[Fillable]. |
| atributos ocultos | password, remember_token, via #[Hidden]. |
| casts | cpf → Cast — CpfCast (CpfCast); password → hashed. |
initials() | Usa Str::initials() e retorna primeira/última inicial quando há mais de uma. |
| relações | personalData() é um perfil opcional um-para-um; affiliations() retorna os vínculos institucionais; notificações nativas são fornecidas por Notifiable. |
Auditoria e e-mail
LogsActivity registra alterações dos campos fillable, exceto password. A mudança de senha gera password_changed sem valor anterior, senha nova ou hash. sendPasswordResetNotification() usa QueuedPasswordReset, enfileirada após o commit e criptografada; recuperação não cria linhas em email_messages ou email_delivery_attempts.
A consulta administrativa do Activity Log inclui uma conta somente quando ela possui vínculos administrativos, e mostra atividades elegíveis da própria conta e dos vínculos relacionados. O histórico de e-mails usa o snapshot do registro afetado em scope_context; não infere autorização pelo e-mail do destinatário nem pelo último vínculo selecionado. Ambas as telas exigem o vínculo ativo e selecionado de Administrador do Sistema.
UserPersonalData registra seus atributos fillable (user_id, dados pessoais/profissionais e address_id) e também emancipation_verified_at, que não é fillable porque representa estado controlado pela aplicação. Esse campo é incluído explicitamente no Activity Log com valores anteriores e novos. id, created_at e updated_at ficam fora do registro. A cobertura é verificada por DatabaseAuditTest.
Delimitação de responsabilidade
users mantém autenticação, CPF e e-mail de login. O Administrador do Sistema pode editar nome, CPF e e-mail pela interface administrativa; a alteração do endereço de login envia avisos ao endereço anterior e ao novo. user_personal_data guarda dados pessoais atuais e campos profissionais opcionais do supervisor em um perfil compartilhado pela conta. Cadastro e login não exigem esse perfil; o supervisor preencherá ou confirmará seus dados profissionais no futuro formulário, com edição autorizada pelo tipo de vínculo.
Checklist
- Configurar autenticação Eloquent para
User. - Ocultar senha e remember token.
- Aplicar cast de senha com hash automático.
- Aplicar
CpfCastno estado atual. - Criar relações com
AffiliationeUserPersonalDatae habilitar notificações nativas do Laravel. A conta não possui relação direta comEmailMessage; seu histórico é separado. - Manter CPF em
$fillable, docblock e casts deUser. - Testar conta sem dados pessoais completos.
- Testar conta com múltiplos vínculos em PostgreSQL.
- Permitir a administração de nome, CPF e e-mail de login por
UserController, preservando as notificações de troca de e-mail e a auditoria sem senha. - Testar recuperação enfileirada sem persistir token ou corpo nas tabelas próprias de e-mail.
- Registrar no Activity Log os campos pessoais e profissionais alterados de
UserPersonalData, com valores anteriores/novos e autoria do vínculo ativo.