{
  "id": "enum-partydocumenttype",
  "title": "Enum — PartyDocumentType",
  "description": "Tipo de documento de identificação da parte concedente.",
  "type": "enum-reference",
  "status": "implemented",
  "visibility": "public",
  "tags": [
    "sge/enums",
    "sge/concedente"
  ],
  "related": [
    "migration-12-granting-parties",
    "migration-12b-granting-party-registration-requests"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/app/Enums/PartyDocumentType.php",
    "https://github.com/sge-suite/sge/blob/master/tests/Unit/Enums/PartyDocumentTypeTest.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "> [!success] Estado\n> Implementado em `app/Enums/PartyDocumentType.php` e usado por `GrantingParty` na [Migration 12](doc:migration-12-granting-parties) e por `GrantingPartyRegistrationRequest` na [Migration 12B](doc:migration-12b-granting-party-registration-requests).\n\n## Contrato\n\n| Case   | Valor persistido | Rótulo |\n| ------ | ---------------- | ------ |\n| `CPF`  | `cpf`            | CPF    |\n| `CNPJ` | `cnpj`           | CNPJ   |\n\nO número é armazenado em `granting_parties.document_number` e `granting_party_registration_requests.document_number`, sempre normalizado e sem pontuação. Não criar colunas separadas para CPF e CNPJ.\n\n## Checklist de implementação\n\n- [x] Criar enum string e rótulos no código.\n- [x] Implementar `options()` e `values()`.\n- [x] Cobrir cases, valores, rótulos e opções com teste unitário.\n- [x] Adicionar cast em `GrantingParty`.\n- [x] Usar o enum no model vinculado à [migration de granting_parties](doc:migration-12-granting-parties).\n- [x] Validar dígitos e normalização de CPF/CNPJ no model.\n- [x] Testar os dois tipos e documentos inválidos na base backend.\n- [x] Permitir unidades distintas com o mesmo CNPJ, sem unicidade global.",
  "sections": [
    {
      "id": "contrato",
      "level": 2,
      "title": "Contrato",
      "text": "| Case   | Valor persistido | Rótulo | | ------ | ---------------- | ------ | | `CPF`  | `cpf`            | CPF    | | `CNPJ` | `cnpj`           | CNPJ   |  O número é armazenado em `granting_parties.document_number` e `granting_party_registration_requests.document_number`, sempre normalizado e sem pontuação. Não criar colunas separadas para CPF e CNPJ.",
      "line": 4
    },
    {
      "id": "checklist-de-implementacao",
      "level": 2,
      "title": "Checklist de implementação",
      "text": "- [x] Criar enum string e rótulos no código. - [x] Implementar `options()` e `values()`. - [x] Cobrir cases, valores, rótulos e opções com teste unitário. - [x] Adicionar cast em `GrantingParty`. - [x] Usar o enum no model vinculado à [migration de granting_parties](doc:migration-12-granting-parties). - [x] Validar dígitos e normalização de CPF/CNPJ no model. - [x] Testar os dois tipos e documentos inválidos na base backend. - [x] Permitir unidades distintas com o mesmo CNPJ, sem unicidade global.",
      "line": 13
    }
  ],
  "sourcePath": "content/enum-partydocumenttype.md",
  "visuals": [],
  "apiVersion": 1
}
