Skip to main contentA-REX Foundation

Diagramas · 02

Ciclo de vida do lote

Como um lote passa a existir, se move, muda de status, se transforma em outros lotes e deixa o livro-razão. Os únicos status fixos são 0 (ACTIVE) e 255 (RETIRED, terminal); tudo o que está entre eles é definido pelo emissor.

Estados e transições

stateDiagram-v2
    [*] --> ACTIVE : createBatch (ISSUER_ROLE)
    [*] --> ACTIVE : saída de transform
    ACTIVE --> ACTIVE : safeTransferFrom · burn · forcedTransfer
    ACTIVE --> Custom : setBatchStatus(1..254) (STATUS_ROLE)
    Custom --> Custom : setBatchStatus (STATUS_ROLE)
    Custom --> ACTIVE : setBatchStatus(0)
    ACTIVE --> RETIRED : setBatchStatus(255, reason)
    Custom --> RETIRED : setBatchStatus(255, reason)
    RETIRED --> RETIRED : apenas queima
    RETIRED --> [*] : totalSupply == 0
    note right of RETIRED
        Terminal. Sem cunhagem, sem transferência, sem transformação.
        Queimas continuam possíveis (baixa por perda, entrega).
    end note

Da pré-colheita ao produto processado

timeline
    title Um lote de trigo, do contrato a termo à farinha
    Pré-colheita : createBatch com producedAt = 0 (um contrato a termo ou um recebível de safra)
                : ExpiryHook pode bloquear transferências até a colheita (allowPreHarvest = false)
    Colheita : setBatchMetadata com o hash do documento de colheita
            : producedAt é definido por uma transform de reagrupamento ou na criação
    Armazenagem : AttestationHook exige a atestação do recibo de armazém
            : setFrozenTokens para um gravame; forcedTransfer em caso de inadimplemento
    Processamento : transform([trigo], [60 t]) → [farinha] (45 t) por TRANSFORMER_ROLE
               : evento BatchTransformed = TransformationEvent do EPCIS
    Entrega : DeliveryHook trava unidades; a liquidação é a transferência com data = deliveryId
             : setBatchStatus(255, "DELIVERED") ou queima pelo destinatário