Diagramas · 04
Linhagem por meio de transform
transform é a única forma de criar um lote a partir de um lote. Ele queima as entradas, cunha as saídas e registra os lotes-pai; BatchTransformed corresponde um a um a um TransformationEvent do EPCIS 2.0.
Divisão, união e processamento são uma única operação
flowchart LR
subgraph SPLIT["Reagrupamento (divisão) · sem papel necessário · mesma commodity e unidade · quantidade conservada"]
W1["#1 trigo 250 t"] --> W2["#2 trigo 60 t"]
W1 --> W3["#3 trigo 40 t"]
end
subgraph MERGE["Reagrupamento (união)"]
M1["#4 café 10 t"] --> M3["#6 café 25 t"]
M2["#5 café 15 t"] --> M3
end
subgraph PROC["Processamento · TRANSFORMER_ROLE · a commodity ou a quantidade muda"]
P1["#2 trigo 60 t"] --> P2["#7 farinha 45 t"]
endOs lotes-pai são consultáveis on-chain
flowchart TB
F7["parentsOf(7) → [2]"] --> F2["parentsOf(2) → [1]"] --> F1["parentsOf(1) → []"]Um recolhimento percorre parentsOf para trás até a origem e os eventos BatchTransformed para a frente até cada lote derivado. Uma auditoria de balanço de massa compara as quantidades de entrada e de saída de cada etapa de processamento com a razão certificada.
Regras que a referência impõe
| Regra | Onde |
|---|---|
As entradas devem existir, não estar baixadas e estar em poder de from (ou do chamador aprovado por from) | transform, _update |
| O reagrupamento (mesma commodity, mesma unidade, Σ entrada = Σ saída) não exige papel | verificação isRebatch |
Qualquer outro caso exige TRANSFORMER_ROLE | transform |
Toda saída registra parents = inputIds e issuer = msg.sender | armazenamento |
Os hooks veem OP_TRANSFORM para entradas e saídas | contexto de _update |