Saltar al contenido principal

Funcionamiento de la máquina de estados de Seat

Seat state machine diagram

La máquina de estado recive un event y decide qué hacer en función de su estado actual.

dispatchStatusEvent(event: StatusEvents) {
const enrollmentStateMachine: {
[Type in StatusType]:
| {
[Event in StatusEvents]?: StatusType;
}
| null;
} = {
DOC_PENDING: {
RECEIVE_DOC: 'REVIEW_DOC',
NULL: 'NULLED',
},
REVIEW_DOC: {
SEND_MANDATE: 'MANDATE_SENT',
B2B_READY: 'TRAMIT_READY',
NULL: 'NULLED',
},
MANDATE_SENT: {
MANDATE_SIGNED: 'TRAMIT_READY',
NULL: 'NULLED',
},
TRAMIT_READY: {
TRAMIT_START: 'TRAMIT_PRESENTED',
NULL: 'NULLED',
},
TRAMIT_PRESENTED: {
TRAMIT_SUCCESS: 'SHIPPED',
NULL: 'NULLED',
},
TRAMIT_COMPLETED: {
SHIPMENT_SENT: 'SHIPPED',
},
SHIPPED: {
SHIPMENT_DELIVERED: 'DELIVERED',
},
DELIVERED: null, // Final
NULLED: null, // Final
};

if (enrollmentStateMachine[this.status]?.[event]) {
this.status = enrollmentStateMachine[this.status]?.[event] as StatusType;
}
}

Algunos estados son finales, por lo que no se pueden transicionar. Pese a que la máquina de estados es capaz de gestionar el estado de la entidad, el estado se puede sobreescribir actualizando la entidad.