using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd.Ui.Pages;
using Ban.Sdaid.Icd.Domain.Export;
namespace Ban.Sdaid.Icd.Requirements
{
/// <summary>Формирование файла для загрузки в АБИС — задача 7 ТЗ.</summary>
public class FR_007_AbisExport : IFunctionalRequirementDocument
{
public static string _refName = "FR-007 «Выгрузка в АБИС»";
public string Name => "FR-007. Выгрузка информационных карт в АБИС";
public string Description =>
@"Сервис должен формировать файл текстового формата, пригодный для загрузки в АБИС заказчика, при создании информационной карты.";
public string Version => "0.2";
public string Status => "draft";
public string[] Comments => new[]
{
"2026-08-28. По CR «Выгрузка в АБИС без отбора выборки»: файл формируется при создании карты, отбор выборки вручную отменён.",
};
public static string S1_Requirement = $"""
## Требование
Сервис формирует файл для загрузки в АБИС **при создании информационной карты**.
Отдельного действия пользователь не выполняет: отбор выборки и работа с файлом обмена
не относятся к работе библиотечного специалиста.
Каждое формирование файла фиксируется — момент, состав карт, формат и место файла
в хранилище ({SdaidAnchors.RefTo<CardExportSpec>()}). Записи видны
в {SdaidAnchors.RefTo<ExportLogPage>()}: по ним понятно, что и когда выгружено,
и повторная передача по недосмотру исключена.
**Граница ответственности — файл.** Сервис файл кладёт, а не отправляет: загрузка его
в АБИС выполняется вне Сервиса и им не наблюдается. Поэтому отметка о выгрузке означает
«файл сформирован», и другого состояния у карты нет.
**Идентификатора документа АБИС в файле нет.** Сервис экземпляр фонда не опознаёт —
это возможная доработка, — поэтому карта не знает, какой записи АБИС она соответствует.
Сопоставление выполняет принимающая сторона — по шифру и инвентарному номеру, которые
обязательны и потому есть в каждой карте.
Решение и отвергнутые варианты —
{SdaidAnchors.RefTo<Ban.Sdaid.Icd.Arch.Adr.ADR_013_ExportFileOnCardCreation>()}.
""";
public static string S2_Manual = $"""
## Формирование файла вручную
Файл может понадобиться заново: прежний утрачен или испорчен, либо не сформировался
из-за сбоя. Тогда его формирует администратор из реестра карт
({SdaidAnchors.RefTo<InformationCardsPage>()}), отобрав нужные карты фильтрами.
Это **административное действие**, а не обычный ход работы. Карты, для которых файл
не сформирован, видны в реестре фильтром состояния выгрузки — отсутствие записи
о выгрузке и есть признак того, что с картой нужно что-то сделать.
Создание карты при сбое формирования файла не отменяется: работа оператора не должна
пропадать из-за того, что файл не записался.
""";
public static string S3_OpenQuestion = """
## Открытый вопрос
Конкретный формат выгрузки не задан: в ТЗ сказано лишь «текстовый формат, пригодный
для загрузки в АБИС». До уточнения у заказчика формат считается открытым вопросом
видения (OQ-V-4).
От ответа зависит устройство решения. Если формат допускает файл на одну карту, всё
описанное работает как есть. Если требуется пачка, добавляется сборка накопленных карт
в общий файл по расписанию — и только тогда у Сервиса появляется работа, которую никто
не инициировал.
""";
}
}