Skip to main contentA-REX Foundation

Diagramas · 02

Ciclo de vida del lote

Cómo nace un lote, se mueve, cambia de estado, se convierte en otros lotes y sale del registro. Los únicos estados fijos son 0 (ACTIVE) y 255 (RETIRED, final); los estados intermedios los 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
        Estado final. No admite acuñación, transferencia ni transform.
        Las quemas siguen permitidas (baja contable, entrega).
    end note

De la precosecha al producto procesado

timeline
    title Un lote de trigo, del contrato a término a la harina
    Precosecha : createBatch con producedAt = 0 (un contrato a término 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 fija con un transform de reagrupación o al crear el lote
    Almacenamiento : AttestationHook exige la atestación del certificado de depósito
                   : setFrozenTokens para un gravamen; forcedTransfer si hay 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 del receptor