using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Requirements
{
/// <summary>Определение вида ИК, выделение полей и извлечение атрибутов — задача 3 ТЗ.</summary>
public class FR_003_AttributeExtraction : IFunctionalRequirementDocument
{
public static string _refName = "FR-003 «Сегментация и извлечение атрибутов»";
public string Name => "FR-003. Сегментация и извлечение атрибутов";
public string Description =>
@"Сервис должен сегментировать изображение информационной карты, выделять поля данных, извлекать их значения и определять вид ИК.";
public string Version => "0.2";
public string Status => "draft";
public string[] Comments => new string[0];
public static string S1_Requirement = """
## Требование
По результатам распознавания Сервис:
- определяет **вид ИК и форму бланка** — по макету и составу полей; это основа всего
разбора: пока форма не опознана, состав страниц и полей неизвестен;
- **распределяет кадры по страницам** опознанной формы; кадр, не отнесённый ни к одной
странице, считается лишним и не распознаётся;
- выделяет **области полей данных** на изображении;
- извлекает **значения атрибутов** по разделам ИК: библиографическое описание, материальная основа,
мероприятия стабилизации, данные экспертизы;
- извлекает **идентифицирующую информацию** — шифр, инвентарный номер, дату (см. ниже).
""";
public static string S15_IdentifiersFallback = """
## Извлечение идентификации
Шифр, инвентарный номер и дата вписаны на самой форме ИК, поэтому Сервис извлекает их
из кадров наравне с остальными полями. При вводе пользователь ничего не вводит: блока
идентификации на экране ввода нет.
Правила:
- извлечённое значение несёт уверенность распознавания и предъявляется пользователю
на проверке карты, где его можно исправить;
- **исправленное пользователем не перезаписывается** повторной обработкой: человек видел
бумагу, машина видела кадр;
- если извлечь значение не удалось, поле остаётся пустым — пакет из-за этого
не отбраковывается, пользователь вносит значение сам;
- карта не создаётся, пока не заполнены обязательные поля; чем именно они заполнены —
распознаванием или руками — роли не играет.
""";
public static string S2_ValueSource = """
## Источник значения
Для каждого извлечённого значения Сервис сохраняет **источник** — кадр изображения и координаты
области, из которой значение получено.
Это требование не косметическое: без источника вкладка проверки полей вырождается в слепое
редактирование, потому что оператор не может сверить значение с изображением, не разыскивая его глазами.
Привязка ведётся к **странице формы**, а не к порядковому номеру кадра: порядок кадров
меняется при удалении и пересъёмке, страница задана составом опознанной формы.
""";
public static string S99_Related = $"""
## Связанные артефакты
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_007_InputWithoutPlan)} — решение о вводе без плана
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_005_FieldValueSourceBinding)} — привязка значения к странице формы и области
""";
}
}