⟨/⟩ 60_Epics/PacketProcessing/UseCases/VerifyPacket/VerifyPacketUseCase.cs

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

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)}.
            """;
    }
}