{
  "id": "casts",
  "title": "Casts",
  "description": "Índice dos casts Eloquent que transformam dados entre entrada, domínio e banco.",
  "type": "technical-hub",
  "status": "in-progress",
  "visibility": "public",
  "tags": [
    "sge/desenvolvimento",
    "sge/casts",
    "sge/checklist"
  ],
  "related": [
    "cast-cpfcast",
    "cast-phonecast",
    "componentes-tecnicos",
    "helpers",
    "migration-02-user-personal-data"
  ],
  "sourceRefs": [],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "## Inventário\n\n- [`CpfCast`](doc:cast-cpfcast) — valida e persiste CPF somente com dígitos.\n- [`PhoneCast`](doc:cast-phonecast) — valida telefone fixo ou celular com DDD e persiste somente os dígitos.\n\n## Checklist comum\n\n- [ ] Definir comportamento de `null`, vazio, formato inválido e valor já normalizado.\n- [ ] Separar normalização de apresentação: banco guarda formato canônico, tela formata.\n- [ ] Definir a exceção lançada e a camada que a converte em erro de validação.\n- [ ] Garantir que serialização não exponha dados além do necessário.\n- [ ] Criar testes para `get()`, `set()`, nulo, formato mascarado, formato limpo e inválido.\n- [ ] Registrar o Model que usa o cast e a migration da coluna.\n\n## Navegação\n\n- [Componentes técnicos](doc:componentes-tecnicos)\n- [Helpers](doc:helpers)\n- [Migration de dados pessoais](doc:migration-02-user-personal-data)",
  "sections": [
    {
      "id": "inventario",
      "level": 2,
      "title": "Inventário",
      "text": "- [`CpfCast`](doc:cast-cpfcast) — valida e persiste CPF somente com dígitos. - [`PhoneCast`](doc:cast-phonecast) — valida telefone fixo ou celular com DDD e persiste somente os dígitos.",
      "line": 1
    },
    {
      "id": "checklist-comum",
      "level": 2,
      "title": "Checklist comum",
      "text": "- [ ] Definir comportamento de `null`, vazio, formato inválido e valor já normalizado. - [ ] Separar normalização de apresentação: banco guarda formato canônico, tela formata. - [ ] Definir a exceção lançada e a camada que a converte em erro de validação. - [ ] Garantir que serialização não exponha dados além do necessário. - [ ] Criar testes para `get()`, `set()`, nulo, formato mascarado, formato limpo e inválido. - [ ] Registrar o Model que usa o cast e a migration da coluna.",
      "line": 6
    },
    {
      "id": "navegacao",
      "level": 2,
      "title": "Navegação",
      "text": "- [Componentes técnicos](doc:componentes-tecnicos) - [Helpers](doc:helpers) - [Migration de dados pessoais](doc:migration-02-user-personal-data)",
      "line": 15
    }
  ],
  "sourcePath": "content/casts.md",
  "visuals": [],
  "apiVersion": 1
}
