⟨/⟩ 60_Epics/PacketProcessing/UseCases/StateMachines/InputPacketStateMachine.cs

86 строк · в начало

using Ban.Sdaid.Notation.Documents;

namespace Ban.Sdaid.Icd.Epics.PacketProcessing.UseCases.StateMachines
{
    /// <summary>Жизненный цикл пакета ввода: от постановки в очередь до создания ИК.</summary>
    public class InputPacketStateMachine : IStateMachineDocument
    {
        public static string _refName = "состояния пакета ввода";

        public string Name => "Жизненный цикл пакета ввода";

        public string Description =>
            @"Четыре состояния пакета и переходы между ними. Состояние хранится и меняется явными действиями пользователя и обработки.";

        public string Version => "0.2";
        public string Status => "draft";
        public string[] Comments => new string[0];

        public static string S1_Diagram = """
            ## Диаграмма состояний

            ```mermaid
            stateDiagram-v2
                [*] --> Queued: завершён ввод карты
                Queued --> Queued: обработка выполнена, вид опознан
                Queued --> Failed: вид ИК не опознан
                Queued --> Checking: пользователь взял в работу

                Checking --> Queued: вернул в очередь
                Checking --> Queued: правка кадров, «поставить в очередь»
                Checking --> Queued: отклонил вид с подсказкой
                Checking --> Failed: отклонил вид, верный неизвестен
                Checking --> Completed: создана информационная карта

                Failed --> Queued: указан верный вид ИК
                Completed --> [*]
            ```
            """;

        public static string S2_States = """
            ## Состояния

            | Состояние | Смысл | Чей ход |
            |---|---|---|
            | В очереди | ждёт обработки или повторной обработки | Сервис |
            | Проверка | обработан и взят пользователем в работу | пользователь |
            | Завершён | по пакету создана информационная карта | — |
            | Ошибка | вид ИК не опознан и не указан пользователем | пользователь |

            Обработка не выводит пакет из очереди: она заполняет опознанную форму, уверенность
            и распознанные значения, а пакет остаётся доступным для взятия в работу. Отдельного
            состояния «обрабатывается» нет — оно ничего не меняло бы в работе пользователя.
            """;

        public static string S3_Transitions = $"""
            ## Переходы

            **Ввод завершён** — пакет попадает в очередь автоматически, отдельного действия
            постановки не требуется.

            **Взятие в работу** переводит в проверку и закрепляет пакет за пользователем. Возврат
            в очередь освобождает его.

            **Правка кадров** — удаление, пересъёмка, переназначение страницы — делает результаты
            распознавания недействительными. Пакет возвращается в очередь по команде пользователя;
            Сервис этого сам не делает, иначе каждое движение кадра запускало бы обработку заново.

            **Отклонение вида ИК** возвращает пакет в очередь с контекстом: какой вид отвергнут
            и какой считать верным. Если верный вид пользователю неизвестен и опознать нечего,
            пакет переходит в ошибку.

            **Создание карты** завершает пакет. Дальше он не правится: править нечего, карта уже
            создана и живёт своей жизнью.

            Основание — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_008_PacketStatesAndTwoTabs)}.
            """;

        public static string S99_Related = $"""
            ## Связанные артефакты

            - {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_008_PacketStatesAndTwoTabs)} — решение о четырёх состояниях и двух вкладках проверки
            - {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_007_InputWithoutPlan)} — решение о вводе без плана
            """;
    }
}