> ## 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.

# Company

> Extensão de Organization para empresas de transporte

## Campos

| Campo            | Tipo        | Descrição                                              |
| ---------------- | ----------- | ------------------------------------------------------ |
| `companyId`      | `UUID`      | Identificador único                                    |
| `organizationId` | `UUID`      | Referência à organização                               |
| `cooperativeId`  | `UUID`      | Referência obrigatória à cooperativa administradora    |
| `anttCode`       | `String?`   | Código regulatório da ANTT                             |
| `createdBy`      | `UUID?`     | Usuário que criou o registro, quando aplicável         |
| `createdAt`      | `DateTime`  | Data de criação                                        |
| `updatedBy`      | `UUID?`     | Usuário que fez a última atualização, quando aplicável |
| `updatedAt`      | `DateTime`  | Data da última atualização                             |
| `deletedBy`      | `UUID?`     | Usuário que removeu o registro, quando aplicável       |
| `deletedAt`      | `DateTime?` | Data de remoção                                        |

## Relacionamentos

* Relaciona-se com [Organization](/data-modelling/tenant/organization) (1:1)
* Relaciona-se com [Cooperative](/data-modelling/tenant/cooperative) (N:1 via `cooperativeId`)
* Relaciona-se com múltiplos [Vehicle](/data-modelling/fleet/vehicle)
* Relaciona-se com múltiplos [DriverCompany](/data-modelling/fleet/driver-company) *(vínculos com motoristas — N:N via DriverCompany)*
* Relaciona-se com múltiplos [Route](/data-modelling/operations/route)
* Relaciona-se com múltiplos [Trip](/data-modelling/operations/trip)
* Relaciona-se com múltiplos [Employee](/data-modelling/tenant/employee)
* Relaciona-se com múltiplas [Membership](/data-modelling/tenant/membership) por `organizationId`
* Relaciona-se com múltiplos [Order](/data-modelling/sales/order)
* Relaciona-se com múltiplos [Promotional](/data-modelling/promotion/promotional)
* Relaciona-se com múltiplos [CreditGrant](/data-modelling/credit-grant/credit-grant)
* Relaciona-se com múltiplos [Payment](/data-modelling/billing/payment)
* Relaciona-se com múltiplos [Receivable](/data-modelling/billing/receivable)
* Relaciona-se com múltiplos [Transfer](/data-modelling/billing/transfer)
* Relaciona-se com [CompanyPaymentSettings](/data-modelling/billing/company-payment-settings) (1:1, opcional)

## Regras de Negócio

* Estende a `Organization` para empresas de transporte rodoviário.
* Toda empresa pertence obrigatoriamente a uma única cooperativa.
* A empresa é afiliada à cooperativa indicada por `cooperativeId`.
* A cooperativa pode administrar múltiplas empresas, mas não assume o `companyId` delas.
* É a proprietária da frota (veículos e motoristas).
* É dona dos vínculos de funcionários (`Employee`) originados por Memberships na sua Organization.
* Responsável por criar viagens (`Trip`) e vender passagens dos seus próprios itinerários.
* Responsável pelas promoções que exibe e pelos créditos que concede a Customers, inclusive quando a concessão usa regra de funcionário.
* É a unidade financeira do sistema: pagamentos, recebíveis, contas bancárias e transferências pertencem a uma empresa.
* A configuração externa de billing fica em [CompanyPaymentSettings](/data-modelling/billing/company-payment-settings).
* O campo `anttCode` armazena o código de registro na Agência Nacional de Transportes Terrestres.

## Integridade do vínculo

| Regra                 | Detalhe                                                                              |
| --------------------- | ------------------------------------------------------------------------------------ |
| FK                    | `cooperativeId` deve apontar para uma `Cooperative` existente e ativa.               |
| Tenant                | `organizationId` da Company é diferente do `organizationId` da Cooperative.          |
| Query por cooperativa | Telas da Cooperative devem listar empresas por `Company.cooperativeId`.              |
| Query operacional     | Telas da Company devem operar por `Company.companyId`.                               |
| Histórico             | Trocar `cooperativeId` não altera registros históricos que apontam para `companyId`. |

<Info>
  O vínculo Cooperative -> Company define administração e agrupamento. Ele não muda a regra de ownership operacional: frota, rotas, viagens, vendas e financeiro continuam no escopo da Company.
</Info>

## Example

```json theme={null}
{
  "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
  "organizationId": "0197a801-1690-7590-b3cf-19599b9be3e4",
  "cooperativeId": "0197a800-24e6-76a2-90ed-ff0f6fba7b0c",
  "anttCode": "ANTT-445566",
  "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "createdAt": "2026-07-03T13:20:00.000Z",
  "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "updatedAt": "2026-07-03T13:20:00.000Z",
  "deletedBy": null,
  "deletedAt": null
}
```
