{
  "id": "migration-base-03-jobs",
  "title": "Migration base 03 — jobs",
  "description": "Estado atual das filas, lotes e falhas de Jobs do Laravel.",
  "type": "migration-reference",
  "status": "implemented",
  "visibility": "public",
  "tags": [
    "sge/migrations",
    "sge/filas",
    "sge/banco-de-dados"
  ],
  "related": [
    "migration-07-email-delivery-attempts"
  ],
  "sourceRefs": [
    "https://github.com/sge-suite/sge/blob/master/database/migrations/0001_01_01_000002_create_jobs_table.php"
  ],
  "authors": [],
  "updated": null,
  "diagram": null,
  "body": "> [!success] Estado\n> Implementada no arquivo `0001_01_01_000002_create_jobs_table.php`. É a base para envio de e-mails, importações e lotes documentais demorados. A geração DOCX unitária é síncrona e temporária para permitir download sem armazenamento definitivo.\n\n## Tabelas criadas\n\n| Tabela        | Campos principais                                                                                  |\n| ------------- | -------------------------------------------------------------------------------------------------- |\n| `jobs`        | `id`, `queue` indexada, `payload`, `attempts`, `reserved_at`, `available_at`, `created_at`.        |\n| `job_batches` | `id`, nome, totais, pendências, falhas, opções e timestamps Unix do lote.                          |\n| `failed_jobs` | `id`, `uuid` único, conexão, fila, payload, exception e `failed_at`; índice por conexão/fila/data. |\n\n## Uso no SGE\n\nJobs de e-mail devem combinar esta infraestrutura com [`email_delivery_attempts`](doc:migration-07-email-delivery-attempts), que é o histórico de negócio. `failed_jobs` sozinho não substitui o registro da tentativa nem deve receber segredos no payload/exceção.\n\n## Rollback atual\n\n`down()` remove `jobs`, `job_batches` e `failed_jobs` com `dropIfExists()`.\n\n## Checklist\n\n- [x] Criar filas, lotes e falhas.\n- [x] Indexar fila e falhas para consulta operacional.\n- [ ] Definir conexão/queue para e-mail, lotes documentais e importação.\n- [ ] Configurar retry, backoff, timeout e limite de tentativas por tipo de Job.\n- [ ] Sanitizar payload/exceções para não persistir tokens ou credenciais.\n- [ ] Testar idempotência e reprocessamento dos Jobs de domínio.",
  "sections": [
    {
      "id": "tabelas-criadas",
      "level": 2,
      "title": "Tabelas criadas",
      "text": "| Tabela        | Campos principais                                                                                  | | ------------- | -------------------------------------------------------------------------------------------------- | | `jobs`        | `id`, `queue` indexada, `payload`, `attempts`, `reserved_at`, `available_at`, `created_at`.        | | `job_batches` | `id`, nome, totais, pendências, falhas, opções e timestamps Unix do lote.                          | | `failed_jobs` | `id`, `uuid` único, conexão, fila, payload, exception e `failed_at`; índice por conexão/fila/data. |",
      "line": 4
    },
    {
      "id": "uso-no-sge",
      "level": 2,
      "title": "Uso no SGE",
      "text": "Jobs de e-mail devem combinar esta infraestrutura com [`email_delivery_attempts`](doc:migration-07-email-delivery-attempts), que é o histórico de negócio. `failed_jobs` sozinho não substitui o registro da tentativa nem deve receber segredos no payload/exceção.",
      "line": 12
    },
    {
      "id": "rollback-atual",
      "level": 2,
      "title": "Rollback atual",
      "text": "`down()` remove `jobs`, `job_batches` e `failed_jobs` com `dropIfExists()`.",
      "line": 16
    },
    {
      "id": "checklist",
      "level": 2,
      "title": "Checklist",
      "text": "- [x] Criar filas, lotes e falhas. - [x] Indexar fila e falhas para consulta operacional. - [ ] Definir conexão/queue para e-mail, lotes documentais e importação. - [ ] Configurar retry, backoff, timeout e limite de tentativas por tipo de Job. - [ ] Sanitizar payload/exceções para não persistir tokens ou credenciais. - [ ] Testar idempotência e reprocessamento dos Jobs de domínio.",
      "line": 20
    }
  ],
  "sourcePath": "content/migration-base-03-jobs.md",
  "visuals": [],
  "apiVersion": 1
}
