Форма документа

Доменная сущность Версия: 0.1 draft

Описание бумажного бланка: страницы, разделы и размещённые в них поля с подписями и местом на листе.

⟨/⟩ Исходник

1. Назначение

Форма — бумажный бланк, описанный данными. Она отвечает на вопрос, как выглядит лист: какие поля где напечатаны и как подписаны. Что при этом хранится и обязательно ли поле — знание вида документа.

Одному виду документа соответствует несколько форм — по числу редакций бланка в обращении. По образцам заказчика только у ИК издания их три: они отличаются заголовками и подписями полей, а состав почти совпадает.

Форма работает в обе стороны: описывает и печать документа, и разметку бумажного бланка при распознавании — где какое поле искать.

2. Почему у формы нет версий

Значение опознаётся кодом атрибута и не зависит от того, где поле напечатано. Поэтому изменение бланка не задевает созданные документы, и версионировать форму не нужно: другой бланк — просто другая форма.

Это следствие раздельного описания состава и формы. Пока состав задавался бланком, версии были обязательны — иначе правка задним числом меняла бы смысл готовых документов.

3. Что попадает в форму

В форму входят не все атрибуты состава: служебные данные Сервиса на бумаге отсутствуют. Обратное невозможно, причём не по договорённости, а по устройству модели: поле ссылается на атрибут вида документа, поэтому атрибута, которого в составе вида нет, в форме быть не может.

Явная связь формы с видом при этом не лишняя, хотя вид выводится и из полей. Она отвечает на вопрос «какие формы есть у этого вида» без обхода всех полей, позволяет завести форму до наполнения её полями и делает проверяемым инвариант: все поля формы ссылаются на атрибуты того же вида, что указан у формы.

Порядок страниц и разделов воспроизводит бумажную форму: пользователь проверяет документ, сверяясь с изображением, и расхождение порядка сбивает работу.

Формы без страниц не бывает: бланк — это лист, и описание бланка без единого листа не описывает ничего. Завести форму до наполнения её полями можно, до наполнения страницами — нет.

Свойства

СвойствоТипОписание
IdGuidИдентификатор формы.
NameStringНаименование бланка, как оно напечатано в заголовке формы.
IsActiveBooleanДоступна ли форма для выбора при вводе.
DocumentKindDocumentKindВид документа, который представлен этой формой.
PagesIReadOnlyList<FormPage>Страницы бланка.

Связанные артефакты

Документы