⟨/⟩ 30_Requirements/FR_005_Verification.cs

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

using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd.Ui.Pages;

namespace Ban.Sdaid.Icd.Requirements
{
    /// <summary>Проверка результатов распознавания оператором — задача 5 ТЗ.</summary>
    public class FR_005_Verification : IFunctionalRequirementDocument
    {
        public static string _refName = "FR-005 «Верификация»";

        public string Name => "FR-005. Верификация и корректировка данных";

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

        public string Version => "0.3";
        public string Status => "draft";
        public string[] Comments => new[]
        {
            "2026-08-26. По CR «Обязательные поля ИК»: выделение обязательных полей и откладывание проверки.",
        };

        public static string S1_Tabs = """
            ## Две вкладки проверки

            Проверка пакета ведётся на двух вкладках.

            | Вкладка | Что проверяется |
            |---|---|
            | Пакет ввода | состав кадров, опознанный вид ИК и соответствие кадров страницам формы |
            | Проверка карты | значения полей рядом с изображением, их правка и создание карты |

            Подтверждения этапов нет: пользователь либо создаёт информационную карту, либо
            возвращает пакет в очередь.
            """;

        public static string S2_SourceTab = """
            ## Вкладка «Пакет ввода»

            Показывается опознанный вид ИК, форма бланка и состав её страниц. Напротив каждой
            страницы — кадр, который Сервис ей сопоставил, либо предложение доснять недостающий.

            Пользователю доступно:

            - **просмотр кадра** в полном размере, с лупой и переключателем «оригинал / обработанное»;
            - **пересъёмка** и повторная загрузка кадра;
            - **удаление** кадра;
            - **переназначение страницы**: указать, что кадр относится к другой странице формы,
              либо снять назначение;
            - **досъёмка** страницы, для которой кадра нет.

            Кадр, не отнесённый ни к одной странице, — лишний: он не распознаётся, а его удаление
            и исключение повторной обработки не требуют.

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

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

        public static string S3_CardTab = $"""
            ## Вкладка «Проверка карты»

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

            Значения можно править. **Распознанное сохраняется**: рядом с исправленным значением
            видно, что прочла модель. Повторная обработка не затирает внесённое пользователем.

            Выбор поля показывает страницу-источник с подсвеченной областью, из которой получено
            значение; лупа позволяет разобрать рукописный текст, не открывая кадр отдельно.

            **Экземпляр фонда не подбирается.** Привязка карты к экземпляру в состав Сервиса
            не входит — это возможная доработка. Карта уходит в АБИС без идентификатора документа,
            а сопоставление идёт по шифру и инвентарному номеру: они обязательны и в карте есть
            всегда.

            **Состав экспертов** сверяется со справочником; отсутствующего эксперта можно внести
            в справочник, не покидая проверки.

            **Обязательные поля выделены** так, чтобы незаполненное было видно сразу, без открытия
            каждого раздела. Какие атрибуты обязательны, задаёт состав вида документа; перечень —
            {SdaidAnchors.RefTo<Ban.Sdaid.Icd.Domain.Cards.Template.RequiredAttributes>()}.

            **Создание карты** завершает проверку. Оно недоступно, пока не заполнены обязательные
            поля состава: это единственный контроль полноты — состав кадров на него не влияет.

            **Проверку можно отложить.** Правка значения сохраняется в пакете сразу, как её внесли,
            отдельного действия сохранения нет. Пользователь, которому не хватает сведений, уходит
            действием **«Взять следующий»**: пакет остаётся за ним в состоянии «Проверка», и он
            возвращается к нему через очередь, когда сведения найдутся. Решение о том, где живёт
            незавершённая работа, — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_012_UnfinishedCardLivesInPacket)}.
            """;

        public static string S9_Prototype = $"""
            ## Прототип интерфейса

            Требование реализуется на экране {SdaidAnchors.RefTo<ProcessingQueuePage>()}: слева очередь пакетов
            с фильтром по состояниям, справа — две вкладки проверки выбранного пакета.

            {SdaidHtml.LinkTo<ProcessingQueuePage>("queue.html", "Открыть прототип в новой вкладке")}

            {SdaidHtml.IframeOf<ProcessingQueuePage>("queue.html", 720)}
            """;

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

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