using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Domain
{
/// <summary>
/// Единственный ограниченный контекст Сервиса — оцифровка информационных карт. Держит общую
/// схему данных: все доменные сущности и связи между ними. Описание каждой сущности —
/// в её собственном документе.
/// </summary>
public class BC_Icd : IBoundedContextModuleDocument
{
public string Name => "Оцифровка информационных карт";
public string Description =>
@"Ограниченный контекст Сервиса: общая схема данных и её границы. Внутри контекста язык единый — термин значит одно и то же во всех частях модели.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new string[0];
public static string S1_Scope = """
## Границы контекста
Сервис — **один ограниченный контекст**. Язык внутри него единый: шифр, документ,
информационная карта, форма документа, пакет ввода значат одно и то же в любой части модели,
и модель у них одна на всех. Поэтому схема данных тоже одна — она приведена ниже
и охватывает все сущности Сервиса.
Настоящая граница контекста проходит **снаружи**, по стыку с АБИС. Там другая модель,
другой владелец и другой язык: то, что в АБИС называется документом, — библиографическая
запись со своей структурой. Обмен идёт через контракт — файл выгрузки на выходе, —
а не прямым обращением к чужой модели.
Из этого следует состав контекста: **сущность принадлежит Сервису, если Сервис её создаёт
и изменяет**. Исключений нет: чужих данных Сервис у себя не держит. Приём реестров из АБИС
и привязка карты к экземпляру фонда в состав не входят — вместе с ними из модели ушёл
экземпляр фонда, единственная сущность, которая была проекцией чужой записи.
""";
public static string S2_Grouping = """
## Группировка сущностей
Сущности разложены по папкам по фазам жизненного цикла данных — это **навигационная
группировка внутри одного контекста**, а не отдельные контексты: границ языка между
папками нет, ссылки между сущностями прямые.
| Папка | Что содержит | Кто порождает данные |
|---|---|---|
| `Capture/` | пакет ввода, кадры изображений, отклонения вида, значения полей | пользователь при вводе и обработка |
| `Processing/` | области-источники на кадре | автоматическая обработка |
| `Cards/` | информационная карта, документы карты и их атрибуты; виды документов с составом атрибутов, типы значений и формы | создание карты по итогам проверки; справочная часть ведётся администратором |
| `Export/` | выгрузка: сформированный файл для АБИС и его состав | создание карты; реже — администратор повторно |
| `Access/` | пользователи, группы, функции, ключи claim, токены сессии | администратор (доступ) и вход/выход |
Состав документа тоже описан парой: **вид документа** и его атрибуты — то, что бывает;
**документ карты** и его атрибуты — то, что заполнено. Каждый уровень заполненного
ссылается на свой уровень описания.
""";
public static string S3_Schema = """
## Схема данных
Диаграмма ниже строится генератором из самих классов: показаны все сущности контекста,
их свойства и связи. Разойтись с моделью она не может — она из неё выведена.
Перечисления (источники кадра, состояния пакета, виды типов значений, происхождение
значения, свойства ядра карты) на схему не выносятся: они описаны в документах тех сущностей, где используются.
""";
}
}