Skip to main contentA-REX Core

Diagramas · 02

Ciclo de vida del lote

Cómo un lote llega a existir, se mueve, cambia de estado, se convierte en otros lotes y abandona el registro. Los únicos estados fijos son 0 (ACTIVE) y 255 (RETIRED, terminal); todo lo intermedio lo define el emisor.

Estados y transiciones

stateDiagram-v2
    [*] --> ACTIVE : createBatch (ISSUER_ROLE)
    [*] --> ACTIVE : salida 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 : solo burn
    RETIRED --> [*] : totalSupply == 0
    note right of RETIRED
        Terminal. Sin acuñación, sin transferencia, sin transform.
        Las quemas siguen siendo posibles (baja contable, entrega).
    end note

De la precosecha al bien procesado

timeline
    title Un lote de trigo, del contrato a plazo a la harina
    Precosecha : createBatch con producedAt = 0 (un contrato a plazo o un derecho de cobro sobre la cosecha)
               : ExpiryHook puede bloquear las transferencias hasta la cosecha (allowPreHarvest = false)
    Cosecha : setBatchMetadata con el hash del documento de cosecha
            : producedAt se establece mediante un transform de reagrupación o en la creación
    Almacenamiento : AttestationHook exige la atestación del recibo de almacén
                   : setFrozenTokens para un gravamen; forcedTransfer en caso de incumplimiento
    Procesamiento : transform([trigo], [60 t]) → [harina] (45 t) por TRANSFORMER_ROLE
                  : evento BatchTransformed = TransformationEvent de EPCIS
    Entrega : DeliveryHook bloquea las unidades; la liquidación es la transferencia con data = deliveryId
            : setBatchStatus(255, "DELIVERED") o burn por parte del receptor