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