> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devmob.app.br/llms.txt
> Use this file to discover all available pages before exploring further.

# ExportJob

> Solicitação de exportação, status e arquivo final gerado

O `ExportJob` representa uma solicitação de exportação. Ele registra o recurso exportado, o escopo autorizado, as colunas e filtros escolhidos, o status do processamento e o arquivo final gerado em storage.

## Campos

| Campo               | Tipo                     | Descrição                                                                                                    |
| ------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------ |
| `exportJobId`       | `UUID`                   | Identificador único                                                                                          |
| `exportScheduledId` | `UUID?`                  | Agendamento que originou o job, quando aplicável                                                             |
| `organizationId`    | `UUID?`                  | Organização relacionada ao job                                                                               |
| `companyId`         | `UUID?`                  | Empresa relacionada ao job                                                                                   |
| `cooperativeId`     | `UUID?`                  | Cooperativa relacionada ao job                                                                               |
| `requestedByUserId` | `UUID`                   | Usuário que solicitou a exportação                                                                           |
| `resource`          | `String`                 | Chave do recurso exportado, correspondente a [ExportResource](/data-modelling/data-transfer/export-resource) |
| `scopeType`         | `DataTransferScopeType`  | Escopo principal da exportação                                                                               |
| `format`            | `DataTransferFileFormat` | Formato do arquivo gerado                                                                                    |
| `columns`           | `String[]`               | Colunas solicitadas para o arquivo                                                                           |
| `filters`           | `Json`                   | Filtros aplicados à consulta                                                                                 |
| `fileKey`           | `String?`                | Chave do arquivo final em storage                                                                            |
| `fileName`          | `String?`                | Nome sugerido para download                                                                                  |
| `contentType`       | `String?`                | MIME type do arquivo final                                                                                   |
| `sizeBytes`         | `Int?`                   | Tamanho do arquivo final em bytes                                                                            |
| `totalRows`         | `Int?`                   | Total de linhas escritas no arquivo                                                                          |
| `failureReason`     | `String?`                | Motivo de falha quando o job termina em `FAILED`                                                             |
| `status`            | `ExportJobStatus`        | Status da exportação                                                                                         |
| `expiresAt`         | `DateTime?`              | Data limite de disponibilidade do arquivo                                                                    |
| `startedAt`         | `DateTime?`              | Data em que o worker iniciou a exportação                                                                    |
| `finishedAt`        | `DateTime?`              | Data em que o job chegou a um status terminal                                                                |
| `createdAt`         | `DateTime`               | Data de criação                                                                                              |
| `updatedAt`         | `DateTime`               | Data da última atualização                                                                                   |
| `deletedAt`         | `DateTime?`              | Data de remoção lógica                                                                                       |

## Relacionamentos

* Relaciona-se com [Organization](/data-modelling/tenant/organization), quando o escopo exigir organização.
* Relaciona-se com [Company](/data-modelling/tenant/company), quando o escopo for `COMPANY`.
* Relaciona-se com [Cooperative](/data-modelling/tenant/cooperative), quando o escopo for `COOPERATIVE`.
* Relaciona-se com [User](/data-modelling/identity/user) por `requestedByUserId`.
* Referencia [ExportResource](/data-modelling/data-transfer/export-resource) por `resource`.
* Relaciona-se com [ExportScheduled](/data-modelling/data-transfer/export-scheduled), quando o job foi gerado por agendamento.

## Regras de Negócio

* `resource` deve existir como catálogo ativo em [ExportResource](/data-modelling/data-transfer/export-resource).
* `exportScheduledId` deve ser preenchido somente quando o job nasce de um [ExportScheduled](/data-modelling/data-transfer/export-scheduled).
* `scopeType` define quais identificadores de escopo são obrigatórios. Por exemplo, `COOPERATIVE` exige `cooperativeId`.
* `columns` deve ser subconjunto das colunas permitidas no catálogo.
* `filters` deve respeitar os campos e operadores permitidos no catálogo.
* `fileKey`, `fileName`, `contentType`, `sizeBytes`, `totalRows` e `expiresAt` são preenchidos quando o arquivo final é gerado.
* URLs assinadas para download não devem ser persistidas. Elas são derivadas de `fileKey`.
* `EXPIRED` indica que o arquivo não deve mais ser disponibilizado para download.
* Remoção lógica preserva histórico do job, mas não substitui a política de retenção do arquivo.

## Enums

### DataTransferScopeType

| Valor          | Descrição                           |
| -------------- | ----------------------------------- |
| `ORGANIZATION` | Operação limitada a uma organização |
| `COMPANY`      | Operação limitada a uma empresa     |
| `COOPERATIVE`  | Operação limitada a uma cooperativa |
| `BACKOFFICE`   | Operação administrativa             |

### DataTransferFileFormat

| Valor  | Descrição      |
| ------ | -------------- |
| `CSV`  | Arquivo CSV    |
| `XLSX` | Planilha Excel |

### ExportJobStatus

| Valor       | Descrição                                           |
| ----------- | --------------------------------------------------- |
| `PENDING`   | Job criado, ainda sem publicação para processamento |
| `QUEUED`    | Job publicado para processamento assíncrono         |
| `RUNNING`   | Worker gerando o arquivo                            |
| `COMPLETED` | Arquivo gerado e disponível                         |
| `FAILED`    | Exportação abortada antes da conclusão              |
| `EXPIRED`   | Arquivo final expirado para download                |
| `CANCELED`  | Job cancelado antes de terminar                     |

## Example

```json theme={null}
{
  "exportJobId": "0197f604-49fe-7b73-bb81-df2e93a7e47d",
  "exportScheduledId": "0197f605-98dd-71e8-9666-0d9f6c719b95",
  "organizationId": "0197a801-1690-7590-b3cf-19599b9be3e4",
  "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
  "cooperativeId": null,
  "requestedByUserId": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "resource": "order",
  "scopeType": "COMPANY",
  "format": "CSV",
  "columns": ["code", "status", "totalAmount", "createdAt"],
  "filters": {
    "createdAt": {
      "operator": "BETWEEN",
      "value": ["2026-07-01", "2026-07-04"]
    }
  },
  "fileKey": "data-transfer/exports/0197f604-49fe-7b73-bb81-df2e93a7e47d/orders.csv",
  "fileName": "pedidos-2026-07-01-2026-07-04.csv",
  "contentType": "text/csv",
  "sizeBytes": 94208,
  "totalRows": 840,
  "failureReason": null,
  "status": "COMPLETED",
  "expiresAt": "2026-07-11T12:20:00.000Z",
  "startedAt": "2026-07-04T12:19:00.000Z",
  "finishedAt": "2026-07-04T12:20:00.000Z",
  "createdAt": "2026-07-04T12:18:45.000Z",
  "updatedAt": "2026-07-04T12:20:00.000Z",
  "deletedAt": null
}
```
