Skip to content

Estados de Ciclo de Vida

Máquinas de estado para cada domínio com transições permitidas. Estados terminais não possuem transições de saída. Os métodos de transição validam movimentos permitidos e disparam eventos middag/{domain}/status_changed.

Entitlement

DeTransições Permitidas
activesuspended, expired, cancelled
suspendedactive, cancelled
expiredactive, cancelled
cancelled(terminal)

Quote

DeTransições Permitidas
draftsent, cancelled
sentviewed, accepted, rejected, expired
viewedaccepted, rejected, expired
acceptedpaid, cancelled
paidfulfilled
fulfilled(terminal)
rejected(terminal)
expired(terminal)
cancelled(terminal)

Environment

DeTransições Permitidas
provisioningactive, cancelled
activemaintenance, suspended, decommissioned
maintenanceactive
suspendedactive, decommissioned
decommissioned(terminal)

Service

Definido no enum ServiceStatus com allowedTransitions():

DeTransições Permitidas
proposalapproved, cancelled
approvedin_progress, cancelled
in_progresson_hold, delivered, cancelled
on_holdin_progress, cancelled
deliveredclosed, in_progress
closed(terminal)
cancelled(terminal)

Ticket

Definido no enum TicketStatus com allowedTransitions():

DeTransições Permitidas
openin_progress, waiting, cancelled
in_progresswaiting, resolved, cancelled
waitingin_progress, cancelled
resolvedclosed, in_progress
closed(terminal)
cancelled(terminal)

Contract

DeTransições Permitidas
draftactive, cancelled
activesuspended, expired, renewed, cancelled
suspendedactive, cancelled
expiredrenewed
renewed(terminal)
cancelled(terminal)

Aplicação de Transições

As transições de status são validadas nos serviços de domínio antes da persistência:

php
// Enum ServiceStatus
public function allowedTransitions(): array
{
    return match ($this) {
        self::Proposal => ['approved', 'cancelled'],
        self::Approved => ['in_progress', 'cancelled'],
        // ...
        self::Closed => [],
        self::Cancelled => [],
    };
}

Transições inválidas lançam InvalidArgumentException. O evento status_changed é disparado somente após uma transição bem-sucedida.

Relacionados