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

personnelMachine

@mineflow/api-schemas


@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 (увольнение, под guard hasReason)
  • terminated — терминальное состояние.