Пакет ввода
Агрегат модуля ввода: кадры страниц одной бумажной ИК, опознанная форма, значения полей и состояние в конвейере обработки.
1. Назначение
Единица передачи данных из ввода в обработку. Всё, что пользователь снял по одной информационной карте, уходит в очередь одним пакетом.
Пакет собирается без плана: пользователь снимает страницы подряд, а какой это вид ИК и по какой форме сделан бланк, определяет Сервис при обработке.
2. Состояния
| Состояние | Когда наступает |
|---|---|
| В очереди | пакет поставлен на обработку или возвращён на повторную |
| Проверка | обработан и взят пользователем в работу |
| Завершён | по пакету создана информационная карта |
| Ошибка | вид ИК не опознан и не указан пользователем |
Состояния заменили прежнюю модель, где статус выводился из последнего подтверждённого этапа обработки: этапов было пять, теперь у проверки две вкладки — исходные данные и проверка карты, — и выводить статус стало не из чего.
По этим же состояниям фильтруется очередь.
3. Опознание формы
Форма документа проставляется обработкой вместе с уверенностью её определения. Пока форма не опознана, разобрать значения невозможно: состав страниц и полей берётся из неё.
Если пользователь считает, что вид определён неверно, он отклоняет его и может указать верный. Отклонение сохраняется в пакете и уходит в повторную обработку как контекст: какая форма отвергнута и какую считать верной. Пакет, у которого форма не опознана и не указана, переходит в состояние ошибки.
Решение и его цена — в ADR-007 «Ввод без плана».
4. Обмен с моделью
Пакет сериализуется в JSON по структуре формы и отправляется модели вместе с кадрами; ответ сохраняется в пакете целиком и разбирается в значения полей. Интерфейс рендерит значения обратно на структуру формы — страницы, разделы, подписи полей.
Ключом в JSON служит код атрибута, а не подпись поля: подпись меняется от бланка к бланку, и по ней результат обратно не разложить. Форма задаёт структуру запроса и порядок, состав вида — имена.
Запрос и ответ хранятся полями пакета, а не отдельными сущностями: у них нет собственной жизни, они читаются только вместе с пакетом. Повторная обработка переписывает результат прежней — история прогонов пока не нужна.
Устройство самого запроса — ADR-009 «Обращение к модели распознавания».
5. Инварианты
- Пакет не создаётся пустым: как минимум один кадр.
- Число кадров не превышает предела, заданного настройкой; по умолчанию пять.
- Номер присваивается один раз и не меняется.
- Автор ввода и исполнитель проверки — разные атрибуты.
- Правка состава или разметки кадров возвращает пакет в очередь: результаты распознавания перестают соответствовать исходным данным.
- Форма фиксируется у пакета, а не у карты: это обстоятельство ввода, а не свойство готового документа.
- Значения полей принадлежат пакету, а не карте: уверенность, распознанный набор, кадр и область — данные о распознавании, а не о результате.
- Удаление пакета — двух видов: мягкое (флаг
Deleted, пакет скрыт из очереди, запись и файлы сохранены — обратимо) и жёсткое (окончательное: запись удаляется каскадом вместе с кадрами и значениями, файлы кадров стираются из хранилища — необратимо). По умолчанию пользователю доступно мягкое; жёсткое — только по праву (claim; модель доступа — ADR-011).
Свойства
| Свойство | Тип | Описание |
|---|---|---|
Id | Guid | Идентификатор пакета. |
Number | String | Номер пакета вида П-ГГГГММДД-NNN, присваивается при постановке в очередь. |
QueuedAt | DateTime | Момент постановки в очередь. |
FormConfidence | Nullable<Double> | Уверенность определения вида ИК, 0..1; null — обработка не выполнялась. |
RecognitionRequestJson | String | Запрос к модели распознавания в том виде, в каком он отправлен. |
RecognitionResultJson | String | Ответ модели распознавания целиком, как он получен. |
RecognizedAt | Nullable<DateTime> | Момент последней обработки; null — пакет ещё не обрабатывался. |
CreatedByUserId | Guid | Оператор, сформировавший пакет (факт истории, не меняется). |
AssignedToUserId | Nullable<Guid> | Оператор, взявший пакет в проверку; null — пакет свободен. |
Deleted | Boolean | Пакет помечен удалённым (мягкое удаление): скрыт из очереди, но запись и файлы сохранены — обратимо. Жёсткое удаление стирает запись и файлы физически и этим флагом не пользуется. |
State | PacketState | Состояние пакета. |
Frames | IReadOnlyList<ImageFrame> | Кадры пакета. |
Form | DocumentForm | Форма документа, опознанная при обработке; null — вид ИК не определён. Задаёт состав страниц, по которым распределяются кадры. |
Rejections | IReadOnlyList<FormRejection> | Виды ИК, отклонённые пользователем, и указанный им верный вид — контекст повторной обработки. |
Values | IReadOnlyList<PacketFieldValue> | Значения полей пакета: распознанные и введённые пользователем. |
Структурные связи
Используется
- Запрос на изменение CR 2026-08-25. Обязательные поля информационной карты
- Экран Очередь обработки
- API-контракт Endpoint: GetFrameContent
- Handler Handler: DeleteInputPacket (мягкое)
- Handler Handler: ForceDeleteInputPacket (жёсткое)
- Handler Handler: GetInputQueue
- Handler Handler: SubmitInputPacket