using System;
using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Arch.Adr
{
/// <summary>Решение: пакет формируется свободно (произвольный набор кадров без плана); вид ИК и роли кадров определяются при обработке.</summary>
public class ADR_010_FreeFramePacketWithoutPlan : IAdrDocument
{
public string Name => "ADR-010. Свободное формирование пакета без плана ввода (замещено)";
public string Description =>
@"Отказ от планов съёмки: оператор снимает произвольное число кадров, вид ИК и роли определяются при обработке.";
public string Version => "1.0";
public string Status => "superseded";
public string[] Comments => new[]
{
"2026-08-14. Принято взамен ADR-001 (план ввода по виду ИК).",
"2026-08-18. Перенумеровано с ADR-006 (номер занят решением о структуре данных карты) и замещено ADR-007: та же идея отказа от плана, но привязка кадра — страница формы, а не роль изображения.",
};
public Type? Supersedes => typeof(ADR_001_InputPlanDrivenByCardKind);
public static string S1_Context = """
## Контекст
Ввод по плану (ADR-001) навязывал оператору заранее заданную последовательность: выбрать план по виду
ИК, снимать кадры в предписанных видах, вводить идентификаторы. На потоке это трение: оператор должен
заранее знать вид документа и держать в голове регламент, а соседние карты в архиве — разных видов.
При этом определение вида ИК и извлечение полей всё равно выполняются автоматически при обработке
(FR-003 — «определяет вид ИК по макету формы и составу полей»). Значит, требовать эти сведения от
оператора на вводе — дублирование работы, которую сделает система.
""";
public static string S2_Decision = """
## Решение
**Пакет формируется свободно.** Оператор снимает произвольное число кадров без ограничений и без плана —
набор кадров и есть пакет. Порядок кадров — порядок съёмки (можно переставлять и удалять).
**Роли кадров на вводе не задаются.** Вид (роль) каждого кадра определяет система при обработке; до этого
роль не назначена. Ключ хранения — по порядковому номеру, без роли (ADR-002).
**Идентификаторы на вводе не вводятся.** Шифр, инвентарный номер и прочее извлекаются при обработке
(позже — отдельным сервисом извлечения полей); ручной ввод на форме съёмки убран.
**План ввода как сущность удаляется** — из домена, контракта и справочника. Форма ввода не выбирает план.
""";
public static string S3_Rationale = """
## Обоснование
Планы имели смысл, если бы оператор задавал контекст, недоступный системе. Но вид ИК система определяет
сама по изображению, а идентификаторы — извлекает. Единственное, что действительно нужно от оператора, —
**качественные кадры документа**; всё остальное лучше получить автоматически, чем вводить руками на потоке.
Отказ упрощает и интерфейс (нет плана, степпера, форм идентификаторов), и контракт (пакет = кадры), и
домен (уходят `InputPlan`/`InputOperation`).
""";
public static string S4_Consequences = """
## Следствия
- Форма ввода — свободная съёмка: область захвата (камера/диск/ссылка) и накопитель кадров.
- Роль кадра становится **результатом обработки**, а не вводом оператора; привязка распознанных значений
к виду кадра сохраняется (ADR-005) — вид присваивает система.
- Справочник планов ввода и endpoint его выдачи не нужны.
- «Материалы вне плана» как понятие исчезают: все кадры равнозначны.
- Определение вида ИК и извлечение атрибутов (в т.ч. идентификаторов) — ответственность этапа обработки
(FR-003), вне процесса формирования пакета.
""";
public static string S99_Related = $"""
## Связанные артефакты
- {nameof(Ban.Sdaid.Icd.Requirements.FR_008_FreePacketComposition)} — свободное формирование пакета кадров.
- {nameof(Ban.Sdaid.Icd.Requirements.FR_003_AttributeExtraction)} — определение вида ИК и извлечение атрибутов при обработке.
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_002_PacketIdentityAndFileKeys)} — ключ хранения без роли.
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_005_FieldValueSourceBinding)} — привязка значения к виду кадра (вид присваивает система).
""";
}
}