diff --git a/model/data-model-v5.25.dbml b/model/data-model-v5.25.dbml index 91c3ab1..627ced6 100644 --- a/model/data-model-v5.25.dbml +++ b/model/data-model-v5.25.dbml @@ -897,12 +897,12 @@ Table stored_file { status file_status [not null] version_no int [not null, default: 1, note: 'ADD ТЗ 8.2: версия при замене'] superseded_by_file_id uuid [ref: > stored_file.id, note: 'ссылка на файл-замену; статус SUPERSEDED. Замена — файл ЦЕЛИКОМ со всеми документами в нём (решение 01.10)'] - is_scan boolean [note: 'v5.25: только PDF — признак скана по отсутствию текстового слоя при загрузке; true = скан (нет текстового слоя); false = цифровой, в т. ч. скрытый OCR-слой — допущение §14; NULL для не-PDF'] current_recognition_job_id uuid [ref: > recognition_job.id, note: 'авторитетный прогон; его результат породил актуальные document'] uploaded_by uuid [ref: > app_user.id] uploaded_at timestamptz updated_at timestamptz consolidation_id uuid [ref: > consolidation.id, note: 'v5.18: консолидация (период ГК), в контексте которой загружен файл — основа «рабочего стола консоли» (полный состав — context/05-domain-rules.md §9.5 п. 11), общего для версий периода; NULL — без контекста. Пишется при загрузке; при автозамене файл без контекста наследует значение заменённого'] + is_scan boolean [note: 'v5.25 (добавлена последней колонкой, как её добавляет миграция 0012): только PDF — признак скана по отсутствию текстового слоя при загрузке; true = скан (нет текстового слоя); false = цифровой, в т. ч. скрытый OCR-слой — допущение §14; NULL для не-PDF'] Indexes { (legal_entity_id, status) (legal_entity_id, consolidation_id) [note: 'v5.18: основа рабочего стола консоли для ЮЛ (§9.5 п. 11)'] @@ -977,7 +977,6 @@ Table recognition_job { error_code varchar [note: 'UNSUPPORTED_FORMAT | UNREADABLE | TIMEOUT | SCHEMA_MISMATCH | …'] error_message text result_s3_object_id uuid [ref: > s3_object.id, note: 'нормализованный JSON в results — единственная ссылка на результат (v5.13)'] - raw_s3_object_id uuid [ref: > s3_object.id, note: 'v5.25: сырой ответ ИС Сканирование, роль raw; заполняется при приёме результата image pipeline (отменяет решение v5.13 «в БД не регистрируется»)'] result_schema_version varchar [note: 'версия схемы JSON результата (ARCH-008/009)'] group_schema jsonb [note: 'v5.13 (вместо osv_group_schema): схема группировок шапки ОСВ по листам — [{\"locator\":\"sheet:ОСВ 58\",\"groups\":[{\"type\":\"ACCOUNT\"},{\"type\":\"COUNTERPARTY\",\"has_inn\":true},{\"type\":\"CONTRACT\"}]}]; только для tabular'] metrics jsonb [note: 'duration_ms, pages, rows, warnings (v5.19 / контракт 2.0: предупреждения уровня файла — структуры {code, severity, message, locator?}; error уровня файла блокирует RECOGNIZED документов файла)'] @@ -985,6 +984,7 @@ Table recognition_job { fields_low_confidence int [note: 'v5.7: значений с confidence < 100 (ТЗ 6.2) — заполняется при маппинге результата'] fields_unrecognized int [note: 'v5.7: значений с is_recognized = false'] statements_version varchar [note: 'v5.19: service.statements_version результата — коммит копии общего кода arm_statements; при пересчёте после правки сравнивается с копией ядра (расхождение — document_issue info)'] + raw_s3_object_id uuid [ref: > s3_object.id, note: 'v5.25 (добавлена последней колонкой, как её добавляет миграция 0012): сырой ответ ИС Сканирование, роль raw; заполняется при приёме результата image pipeline (отменяет решение v5.13 «в БД не регистрируется»)'] Indexes { (file_id, attempt) [unique] } Note: 'РЕШЕНИЕ v5.4: единственная точка обмена с NATS. Запись = outbox: создаётся в queued в одной транзакции с stored_file, фоновый публикатор переводит в published (при сбое публикации — повтор по queued старше N сек); результат приходит по NATS, дедуп по result_msg_id UNIQUE; redelivery после max_deliver → status=dlq, replay = сброс в queued с attempt+1. Ядро маппит JSON из S3 в document → osv_entry / financial_statement_*' }