using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd.Ui.Pages;
namespace Ban.Sdaid.Icd.Epics.PacketProcessing.UseCases
{
/// <summary>Use-case: проверка обработанного пакета и создание информационной карты.</summary>
public class VerifyPacketUseCase : IUseCaseDocument, IHasStructuralLinks
{
public static string _refName = "сценарий «Проверка пакета»";
public string Name => "Проверка пакета и создание ИК";
public string Description =>
@"Пользователь проверяет исходные данные пакета и результаты распознавания на двух вкладках и создаёт электронную информационную карту.";
public string Version => "0.3";
public string Status => "draft";
public string[] Comments => new[]
{
"2026-08-18. Переписан под две вкладки: этапов с подтверждением больше нет.",
"2026-08-26. По CR «Обязательные поля ИК»: выделение обязательных полей и откладывание проверки.",
};
public string PrimaryActor => "Хранитель";
public SdaidLink[] Links => new[]
{
Rel.Realizes<EPIC_PacketProcessing>(),
Rel.Uses<ProcessingQueuePage>(),
};
public static string S1_Given = """
## Given
- Пакет прошёл обработку: изображения нормализованы, текст распознан, вид ИК и форма
определены, кадры распределены по страницам формы, значения извлечены.
- Пользователь авторизован и находится в очереди обработки.
""";
public static string S2_When = """
## When
1. Пользователь берёт пакет в работу — выбором из очереди либо кнопкой «Взять в работу»,
выдающей первый свободный.
2. На вкладке «Пакет ввода» он сверяет опознанный вид ИК и распределение кадров
по страницам формы: открывает кадр в полном размере, сравнивает оригинал
с обработанным, при необходимости переназначает страницу, переснимает или удаляет кадр,
доснимает недостающую страницу.
3. Убедившись, что исходные данные верны, переходит на вкладку «Проверка карты».
4. Там он сверяет значения полей с изображением: выбор поля показывает страницу-источник
с подсвеченной областью, лупа помогает разобрать рукописный текст. Значения правит;
правка сохраняется в пакете сразу. Обязательные поля выделены, незаполненные среди них
видны без открытия каждого раздела.
5. Проверяет состав экспертов, при необходимости добавляя специалиста в справочник.
6. Нажимает «Создать ИК»: Сервис создаёт карту и тут же формирует по ней файл
для загрузки в АБИС.
""";
public static string S3_Then = """
## Then
- Создана электронная информационная карта: значения атрибутов, связь с пакетом-первоисточником,
ядро для поиска.
- Сформирован файл для загрузки в АБИС; запись о выгрузке видна в журнале.
- Пакет переведён в состояние «завершён» и больше не правится.
- Пользователю предложено взять в работу следующий пакет.
""";
public static string S4_Alternatives = """
## Альтернативы и ошибки
| Ситуация | Поведение |
|---|---|
| Вид ИК определён неверно | Пользователь отклоняет его действием «Вид ИК не распознан» и может указать верный; пакет уходит в очередь с этим контекстом, пользователь берёт следующий |
| Вид ИК не опознан и верный неизвестен | Пакет помечается ошибочным и остаётся в очереди с этим признаком |
| Правка кадров, влияющих на разбор | Результаты распознавания недействительны; пакет ставится в очередь командой пользователя |
| Правка лишнего кадра | Повторная обработка не требуется: в разборе он не участвовал |
| Страница не снята и доснять нечем | Проверка продолжается: поля этой страницы пользователь вносит вручную |
| Не заполнены обязательные поля | Создание карты недоступно, недостающие поля названы; пользователь дозаполняет их либо откладывает проверку |
| Сведений для дозаполнения нет под рукой | Пользователь уходит действием «Взять следующий»: правки уже сохранены, пакет остаётся за ним в состоянии «Проверка». Возврат — выбором пакета в очереди, проверка продолжается с того же места |
| Пакет нужно оставить | Возвращается в очередь; внесённые правки сохраняются, пакет освобождается |
""";
public static string S5_Trace = $"""
## Трассировка
| Шаг | Экран | Домен |
|---|---|---|
| Очередь и взятие в работу | {nameof(ProcessingQueuePage)} | Пакет ввода |
| Вкладка «Пакет ввода» | {nameof(ProcessingQueuePage)} | Кадр изображения, Отклонение вида ИК |
| Вкладка «Проверка карты» | {nameof(ProcessingQueuePage)} | Распознанное поле, Экземпляр фонда |
| Создание карты | {nameof(ProcessingQueuePage)} | Информационная карта |
Основание — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_008_PacketStatesAndTwoTabs)};
место незавершённой работы — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_012_UnfinishedCardLivesInPacket)}.
""";
}
}