⟨/⟩ 30_Requirements/FR_009_PacketQueue.cs

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

using Ban.Sdaid.Notation.Documents;

namespace Ban.Sdaid.Icd.Requirements
{
    /// <summary>Очередь пакетов, отбор в работу и распределение между операторами.</summary>
    public class FR_009_PacketQueue : IFunctionalRequirementDocument
    {
        public static string _refName = "FR-009 «Очередь обработки»";

        public string Name => "FR-009. Очередь обработки пакетов";

        public string Description =>
            @"Сервис должен вести очередь пакетов обработки с отбором по этапам, поиском и назначением пакета оператору.";

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

        public static string S1_Requirement = """
            ## Требование

            Очередь показывает пакеты с их состоянием, опознанным видом ИК, уверенностью распознавания
            и принадлежностью.

            Доступны: поиск по номеру пакета, шифру, инвентарному номеру и заглавию; отбор по состояниям
            (множественный выбор), отбор «только мои», сброс фильтров.

            Состояний четыре: **в очереди**, **проверка**, **завершён**, **ошибка**. Индикатор отвечает
            на вопрос «чья очередь ходить»: ждёт обработки, ждёт действий пользователя, завершён либо
            требует разбора.
            """;

        public static string S2_Assignment = """
            ## Назначение пакета оператору

            Различаются два разных факта, которые нельзя смешивать в одном поле:

            - **кто ввёл пакет** — оператор ввода, факт истории, не меняется;
            - **кто взял пакет в проверку** — исполнитель; пока не взят, пакет свободен.

            Пользователь берёт пакет в работу вручную из карточки либо кнопкой «Взять в работу» в очереди —
            она выдаёт первый свободный пакет из очереди. Взятый пакет можно вернуть; правки, внесённые
            до возврата, сохраняются, пакет освобождается для другого пользователя.

            Править пакет может только тот, кто держит его в работе: это защищает от параллельного разбора
            одного пакета двумя пользователями.
            """;

        public static string S3_Reprocessing = """
            ## Повторная обработка

            Пакет возвращается в очередь в двух случаях.

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

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

            Пакет, в котором не опознан ни один вид и пользователь верного не знает, переходит
            в состояние ошибки и остаётся в очереди с этим признаком; отдельного списка разбора нет.

            Новые результаты распознавания **не затирают** значения, внесённые пользователем.
            """;

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

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