Campos
| Campo | Tipo | Descrição |
|---|---|---|
cooperativeId | UUID | Identificador único |
organizationId | UUID | Referência à organização |
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 (1:1)
- Relaciona-se com múltiplos Company (1:N via
Company.cooperativeId)
Relacionamento com Company
| Aspecto | Regra |
|---|---|
| Cardinalidade | Uma Cooperative pode ter zero ou mais Company. |
| Chave de vínculo | Company.cooperativeId referencia Cooperative.cooperativeId. |
| Obrigatoriedade | A Company sempre precisa de uma cooperativa. A Cooperative pode existir antes de ter empresas. |
| Consulta principal | Listagens de empresas afiliadas filtram Company.cooperativeId = Cooperative.cooperativeId. |
| Remoção | Uma cooperativa com empresas ativas não deve ser removida sem bloquear, migrar ou encerrar essas empresas. |
Regras de Negócio
- Estende a
Organizationpara cooperativas administradoras de empresas. - Uma cooperativa agrupa empresas afiliadas que operam o transporte.
- Cooperativa não participa do fluxo de billing.
- Usuários podem ter Membership na organização da cooperativa para administrar o seu contexto operacional.
- Recursos operacionais e financeiros continuam pertencendo às empresas afiliadas, não à cooperativa.
- Administração cross-company deve sempre ser resolvida pelo vínculo
Company.cooperativeId.