personnelMachine
@mineflow/api-schemas / personnelMachine
Variable: personnelMachine
const personnelMachine: StateMachine<PersonnelContext,
| {
actorId: string;
type: "START_WATCH";
}
| {
actorId: string;
type: "END_WATCH";
}
| {
actorId: string;
type: "START_VACATION";
}
| {
actorId: string;
type: "END_VACATION";
}
| {
actorId: string;
type: "START_INTER_WATCH";
}
| {
actorId: string;
type: "END_INTER_WATCH";
}
| {
actorId: string;
type: "START_SICK_LEAVE";
}
| {
actorId: string;
type: "END_SICK_LEAVE";
}
| {
actorId: string;
reason: string;
type: "TERMINATE";
}, {
}, never, never, {
}, never,
| "active"
| "onWatch"
| "onVacation"
| "interWatch"
| "sickLeave"
| "terminated", string, NonReducibleUnknown, NonReducibleUnknown, EventObject, MetaObject, ToStateSchema<{
context: {
personnelId: "";
};
id: "personnel";
initial: "active";
states: {
active: {
on: {
START_INTER_WATCH: "interWatch";
START_SICK_LEAVE: "sickLeave";
START_VACATION: "onVacation";
START_WATCH: "onWatch";
TERMINATE: {
guard: "hasReason";
target: "terminated";
};
};
};
interWatch: {
on: {
END_INTER_WATCH: "active";
TERMINATE: {
guard: "hasReason";
target: "terminated";
};
};
};
onVacation: {
on: {
END_VACATION: "active";
TERMINATE: {
guard: "hasReason";
target: "terminated";
};
};
};
onWatch: {
on: {
END_WATCH: "active";
TERMINATE: {
guard: "hasReason";
target: "terminated";
};
};
};
sickLeave: {
on: {
END_SICK_LEAVE: "active";
TERMINATE: {
guard: "hasReason";
target: "terminated";
};
};
};
terminated: {
type: "final";
};
};
}>>;
Defined in: libs/hr/src/personnel/state-machine/personnel.machine.ts:32
FSM жизненного цикла сотрудника (HR Personnel).
Источник истины — entity (ADR-0022); машина — xstate v5 spec, re-export'ится
@mineflow/api-schemas для расчёта доступных действий по status сотрудника
в UI.
Состояния и переходы:
active(начальное) ⇄onWatch(START_WATCH/END_WATCH— заезд/отъезд на вахту)active⇄onVacation(START_VACATION/END_VACATION— отпуск)active⇄interWatch(START_INTER_WATCH/END_INTER_WATCH— межвахта)active⇄sickLeave(START_SICK_LEAVE/END_SICK_LEAVE— больничный)active | onWatch | onVacation | interWatch | sickLeave→TERMINATE→terminated(увольнение, под guardhasReason)terminated— терминальное состояние.