assetMachine
@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_MAINTENANCE→maintenanceoperational→CONSERVE→conservedmaintenance→COMPLETE_MAINTENANCE→operationalconserved→REACTIVATE→operationaloperational | maintenance | conserved→DECOMMISSION→decommissioned(под guardisDoubleApproved)decommissioned— терминальное (финальное) состояние.
Переход DECOMMISSION защищён двойным согласованием (см. isDoubleApproved).
useAvailableActions guard'ы игнорирует — DECOMMISSION показывается всегда,
финальную проверку делает бэк (409 при недопустимом переходе). NB: CONSERVE/
REACTIVATE/COMPLETE_MAINTENANCE идут через POST /eam/movements, а не через
прямые эндпоинты /eam/assets — маппинг «событие → REST» держат write-хуки
@mineflow/client-react, не этот пакет.