Перейти к основному содержимому

assetMachine

@mineflow/api-schemas


@mineflow/api-schemas / assetMachine

Variable: assetMachine

const assetMachine: StateMachine<AssetContext,
| {
performedBy: string;
type: "SEND_TO_MAINTENANCE";
}
| {
performedBy: string;
type: "COMPLETE_MAINTENANCE";
}
| {
approvedBy: string;
type: "CONSERVE";
}
| {
approvedBy: string;
type: "REACTIVATE";
}
| {
approvedBy: string;
coApprovedBy: string;
type: "DECOMMISSION";
}, {
}, never, never, {
}, never, "operational" | "maintenance" | "conserved" | "decommissioned", string, NonReducibleUnknown, NonReducibleUnknown, EventObject, MetaObject, ToStateSchema<{
context: {
assetId: "";
};
id: "asset";
initial: "operational";
states: {
conserved: {
on: {
DECOMMISSION: {
guard: "isDoubleApproved";
target: "decommissioned";
};
REACTIVATE: "operational";
};
};
decommissioned: {
type: "final";
};
maintenance: {
on: {
COMPLETE_MAINTENANCE: "operational";
DECOMMISSION: {
guard: "isDoubleApproved";
target: "decommissioned";
};
};
};
operational: {
on: {
CONSERVE: "conserved";
DECOMMISSION: {
guard: "isDoubleApproved";
target: "decommissioned";
};
SEND_TO_MAINTENANCE: "maintenance";
};
};
};
}>>;

Defined in: eam/src/assets/state-machine/asset.machine.ts:35

FSM жизненного цикла единицы техники/оборудования (EAM Asset).

Источник истины — asset.entity.ts; машина — xstate v5 spec (ADR-0022), её же re-export'ит @mineflow/api-schemas для FSM-кнопок в UI: какие действия показать по текущему asset.status, считает useAvailableActions.

Состояния и переходы:

  • operational (начальное) → SEND_TO_MAINTENANCEmaintenance
  • operationalCONSERVEconserved
  • maintenanceCOMPLETE_MAINTENANCEoperational
  • conservedREACTIVATEoperational
  • operational | maintenance | conservedDECOMMISSIONdecommissioned (под guard isDoubleApproved)
  • decommissioned — терминальное (финальное) состояние.

Переход DECOMMISSION защищён двойным согласованием (см. isDoubleApproved). useAvailableActions guard'ы игнорирует — DECOMMISSION показывается всегда, финальную проверку делает бэк (409 при недопустимом переходе). NB: CONSERVE/ REACTIVATE/COMPLETE_MAINTENANCE идут через POST /eam/movements, а не через прямые эндпоинты /eam/assets — маппинг «событие → REST» держат write-хуки @mineflow/client-react, не этот пакет.