⟨/⟩ 30_Requirements/FR_003_AttributeExtraction.cs

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

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)} — привязка значения к странице формы и области
            """;
    }
}