Пакет ввода

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

Агрегат модуля ввода: кадры страниц одной бумажной ИК, опознанная форма, значения полей и состояние в конвейере обработки.

⟨/⟩ Исходник

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

Единица передачи данных из ввода в обработку. Всё, что пользователь снял по одной информационной карте, уходит в очередь одним пакетом.

Пакет собирается без плана: пользователь снимает страницы подряд, а какой это вид ИК и по какой форме сделан бланк, определяет Сервис при обработке.

2. Состояния

Состояние Когда наступает
В очереди пакет поставлен на обработку или возвращён на повторную
Проверка обработан и взят пользователем в работу
Завершён по пакету создана информационная карта
Ошибка вид ИК не опознан и не указан пользователем

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

По этим же состояниям фильтруется очередь.

3. Опознание формы

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

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

Решение и его цена — в ADR-007 «Ввод без плана».

4. Обмен с моделью

Пакет сериализуется в JSON по структуре формы и отправляется модели вместе с кадрами; ответ сохраняется в пакете целиком и разбирается в значения полей. Интерфейс рендерит значения обратно на структуру формы — страницы, разделы, подписи полей.

Ключом в JSON служит код атрибута, а не подпись поля: подпись меняется от бланка к бланку, и по ней результат обратно не разложить. Форма задаёт структуру запроса и порядок, состав вида — имена.

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

Устройство самого запроса — ADR-009 «Обращение к модели распознавания».

5. Инварианты

Свойства

СвойствоТипОписание
IdGuidИдентификатор пакета.
NumberStringНомер пакета вида П-ГГГГММДД-NNN, присваивается при постановке в очередь.
QueuedAtDateTimeМомент постановки в очередь.
FormConfidenceNullable<Double>Уверенность определения вида ИК, 0..1; null — обработка не выполнялась.
RecognitionRequestJsonStringЗапрос к модели распознавания в том виде, в каком он отправлен.
RecognitionResultJsonStringОтвет модели распознавания целиком, как он получен.
RecognizedAtNullable<DateTime>Момент последней обработки; null — пакет ещё не обрабатывался.
CreatedByUserIdGuidОператор, сформировавший пакет (факт истории, не меняется).
AssignedToUserIdNullable<Guid>Оператор, взявший пакет в проверку; null — пакет свободен.
DeletedBooleanПакет помечен удалённым (мягкое удаление): скрыт из очереди, но запись и файлы сохранены — обратимо. Жёсткое удаление стирает запись и файлы физически и этим флагом не пользуется.
StatePacketStateСостояние пакета.
FramesIReadOnlyList<ImageFrame>Кадры пакета.
FormDocumentFormФорма документа, опознанная при обработке; null — вид ИК не определён. Задаёт состав страниц, по которым распределяются кадры.
RejectionsIReadOnlyList<FormRejection>Виды ИК, отклонённые пользователем, и указанный им верный вид — контекст повторной обработки.
ValuesIReadOnlyList<PacketFieldValue>Значения полей пакета: распознанные и введённые пользователем.

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

Документы