⟨/⟩ 60_Epics/CardInput/UseCases/InputCard/InputCardUseCase.cs

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

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

namespace Ban.Sdaid.Icd.Epics.CardInput.UseCases
{
    /// <summary>Use-case: ввод одной информационной карты — съёмка страниц подряд, без плана.</summary>
    public class InputCardUseCase : IUseCaseDocument, IHasStructuralLinks
    {
        public static string _refName = "сценарий «Ввод информационной карты»";

        public string Name => "Ввод информационной карты";

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

        public string Version => "0.1";
        public string Status => "draft";

        public string[] Comments => new[]
        {
            "2026-08-18. Заменил сценарий ввода по плану: планы упразднены.",
        };

        public string PrimaryActor => "Хранитель";

        public SdaidLink[] Links => new[]
        {
            Rel.Realizes<EPIC_CardInput>(),
            Rel.Uses<InputDataPage>(),
        };

        public static string S1_Given = """
            ## Given

            - Пользователь авторизован и находится на экране ввода данных.
            - На рабочем месте доступна камера либо готовы файлы изображений.
            - Перед пользователем — бумажная форма информационной карты.
            """;

        public static string S2_When = """
            ## When

            1. Пользователь снимает первую страницу карты камерой рабочего места (живое превью
               и кнопка съёмки) либо загружает её файлом с диска или по ссылке. Кадр попадает в пакет и получает очередной номер.
            2. Так же добавляются остальные страницы карты — подряд, без выбора плана и без указания,
               что за страница снята.
            3. При необходимости пользователь исправляет собранное: меняет порядок кадров
               перетаскиванием, открывает кадр на просмотр, переснимает неудачный, удаляет лишний.
            4. Пользователь нажимает «Сохранить и перейти к следующей».
            """;

        public static string S3_Then = """
            ## Then

            - Создан пакет ввода, ему присвоен номер вида `П-ГГГГММДД-NNN`, кадрам назначены ключи
              хранения по порядку в пакете.
            - Пакет поставлен в очередь обработки автоматически и виден в списке созданных за смену.
            - Экран очищен под следующую карту; выбранный способ ввода изображений сохранён.
            - Вид ИК, форма бланка и соответствие кадров страницам определяются при обработке —
              на вводе они неизвестны и не запрашиваются.
            """;

        public static string S4_Alternatives = """
            ## Альтернативы и ошибки

            | Ситуация | Поведение |
            |---|---|
            | Камера недоступна (нет устройства или доступа) | Кадры добавляются с диска или по ссылке; съёмка остаётся недоступной до устранения причины |
            | Ни одного кадра не добавлено | Завершение ввода недоступно: пакет не может быть пустым |
            | Достигнут предел числа кадров | Кадр не добавляется, показывается сообщение о пределе; лишний кадр можно удалить или переснять нужной страницей |
            | Кадр снят неудачно | Кадр переснимается или удаляется до завершения ввода |
            | Снята лишняя страница | Кадр можно оставить: при обработке он не будет отнесён к странице формы и в разбор не пойдёт |
            | Страница пропущена | Ввод завершается как есть; недостающую страницу доснимают на проверке либо заполняют её поля вручную |
            """;

        public static string S5_Trace = $"""
            ## Трассировка

            | Шаг | Экран | Домен |
            |---|---|---|
            | Съёмка и загрузка кадров | {nameof(InputDataPage)} | Кадр изображения |
            | Правка состава до завершения | {nameof(InputDataPage)} | Кадр изображения |
            | Завершение ввода карты | {nameof(InputDataPage)} | Пакет ввода |

            Основание отказа от плана — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_007_InputWithoutPlan)}.
            """;
    }
}