{
  "id": "concern-profilevalidationrules",
  "title": "Concern — ProfileValidationRules",
  "description": "Trait disponível para validar nome e e-mail de perfil; não usada pela tela de Segurança atual.",
  "type": "technical-reference",
  "status": "in-progress",
  "visibility": "public",
  "tags": [
    "sge/concerns",
    "sge/validacao",
    "sge/autorizacao"
  ],
  "related": [
    "model-user",
    "fase-02-conta-e-contexto"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/app/Concerns/ProfileValidationRules.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "## Contrato\n\nTrait que compõe regras para nome e e-mail do `User`. A tela de Perfil atual somente exibe o e-mail; a troca é implementada na página Livewire de Segurança, com confirmação do endereço, senha atual, vínculo ativo e avisos para os dois endereços. Este trait ainda não é reutilizado por esse formulário.\n\n| Método                       | Regras                                                                                     |\n| ---------------------------- | ------------------------------------------------------------------------------------------ |\n| `profileRules(?int $userId)` | Combina `nameRules()` e `emailRules($userId)`.                                             |\n| `nameRules()`                | obrigatório, string, máximo 255.                                                           |\n| `emailRules($userId)`        | obrigatório, string, e-mail, máximo 255 e único em `users`; ignora o próprio ID na edição. |\n\n## Checklist\n\n- [x] Centralizar regras de nome e e-mail.\n- [ ] Integrar o trait aos formulários que realmente editarem nome/e-mail; a troca atual em Segurança mantém regras próprias.\n- [ ] Criar testes diretos do trait para formato, duplicidade e normalização.\n- [ ] Separar regras de dados pessoais quando `user_personal_data` for editado pela aplicação.\n\n## Relacionamentos\n\n- [Model User](doc:model-user)\n- [Conta e contexto](doc:fase-02-conta-e-contexto)",
  "sections": [
    {
      "id": "contrato",
      "level": 2,
      "title": "Contrato",
      "text": "Trait que compõe regras para nome e e-mail do `User`. A tela de Perfil atual somente exibe o e-mail; a troca é implementada na página Livewire de Segurança, com confirmação do endereço, senha atual, vínculo ativo e avisos para os dois endereços. Este trait ainda não é reutilizado por esse formulário.  | Método                       | Regras                                                                                     | | ---------------------------- | ------------------------------------------------------------------------------------------ | | `profileRules(?int $userId)` | Combina `nameRules()` e `emailRules($userId)`.                                             | | `nameRules()`                | obrigatório, string, máximo 255.                                                           | | `emailRules($userId)`        | obrigatório, string, e-mail, máximo 255 e único em `users`; ignora o próprio ID na edição. |",
      "line": 1
    },
    {
      "id": "checklist",
      "level": 2,
      "title": "Checklist",
      "text": "- [x] Centralizar regras de nome e e-mail. - [ ] Integrar o trait aos formulários que realmente editarem nome/e-mail; a troca atual em Segurança mantém regras próprias. - [ ] Criar testes diretos do trait para formato, duplicidade e normalização. - [ ] Separar regras de dados pessoais quando `user_personal_data` for editado pela aplicação.",
      "line": 11
    },
    {
      "id": "relacionamentos",
      "level": 2,
      "title": "Relacionamentos",
      "text": "- [Model User](doc:model-user) - [Conta e contexto](doc:fase-02-conta-e-contexto)",
      "line": 18
    }
  ],
  "sourcePath": "content/concern-profilevalidationrules.md",
  "visuals": [],
  "apiVersion": 1
}
