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)} — решение о разделении «кто ввёл» и «кто взял в работу»
""";
}
}