Esquema
| Campo | Tipo | Descrição |
|---|---|---|
costId | UUIDv7 | Identificador único |
organizationId | UUIDv7 | FK para Organization |
feeId | UUIDv7 | FK para Fee |
tokenId | UUIDv7 | FK para Token |
costBatchId | UUIDv7? | FK para CostBatch |
costBatchWindowRef | string | Referência única da janela de agrupamento |
quantity | integer | Unidades consumidas |
unitAmount | decimal | Preço por unidade |
unitAmountCurrency | enum | Moeda do token |
subtotalAmount | decimal | quantity * unitAmount |
exchangeRate | decimal | Taxa de conversão |
exchangeRateProvider | string | Provedor da taxa |
totalAmount | decimal | Valor final na moeda da organização |
totalAmountCurrency | enum | Moeda da organização |
createdAt | datetime | Criação |
updatedAt | datetime | Última atualização |
O cálculo do custo segue o fluxo:
quantity * unitAmount = subtotalAmount (na moeda do token), depois subtotalAmount * exchangeRate = totalAmount (na moeda da organização). Se as moedas forem iguais, o exchangeRate é 1.0.Relacionamentos
- Belongs to Organization
- Belongs to Fee
- Belongs to Token
- Belongs to CostBatch (opcional)
Regras de Negócio
- Só é criado se a organização tem subscription ativa
- Token precisa estar ACTIVE
- Fee precisa ser compatível com a moeda da organização
- Taxa de câmbio: moeda do token → moeda da organização
costBatchWindowRefgerado a partir de hash(eventName, orgId, janela de tempo)- Agrupado para liquidação em lote via CostBatch