124 lines
12 KiB
Markdown
124 lines
12 KiB
Markdown
---
|
||
code: DOC-221275
|
||
title: "FNR02 Модуль передачи PDF файлов в ИС Сканирование"
|
||
---
|
||
|
||
# FNR02 Модуль передачи PDF файлов в ИС Сканирование
|
||
|
||
Ссылка на описание требований смежной системы: [Постановка. Новый проект OCR фин. отчетность](project/Document/DOC-111205)
|
||
|
||
# Глоссарий
|
||
|
||
| Термин | **Определение** |
|
||
| --- | --- |
|
||
|
||
| ИС Сканирования, СС | Система сканирования, распознавания, хранения и классификации документов на базе Content AI |
|
||
| Форма-1 (Баланс) | Тип документа "Бухгалтерский баланс". Форма отчетности, содержащая активы и пассивы организации на определенную дату |
|
||
| Форма-2 (ОФР) | Тип документа "Отчет о финансовых результатах". Форма отчетности, содержащая данные о доходах, расходах и финансовом результате за период |
|
||
| Горячая папка | Механизм интеграции, при котором обмен данными между системами осуществляется через отслеживаемые сетевые папки "Входящие" (для отправки) и "Исходящие" (для получения результатов) |
|
||
| UID (Уникальный идентификатор) | Имя исходного файла, используемое для связывания результата распознавания (JSON) с исходным документом |
|
||
| Уверенность | Способ представления степени достоверности распознанного текста по каждому символу. Может быть реализован как побитовая маска или в виде процентного соотношения для всего поля |
|
||
|
||
**1.**
|
||
Текущий модуль берет подгруженные и сохраненные pdf файлы, присваивает им имена по маске: UUID+текущее имя файла
|
||
|
||
**2**
|
||
. Перекладывает файлы в горячую папку "Входящие"
|
||
|
||
**3**
|
||
. СС каждые 10 секунд проверяет папку Входящие, видит в ней новый файл UUID.pdf.
|
||
|
||
**4.**
|
||
СС начинает обработку файла:
|
||
|
||
1. 1. Создается пакет в проекте
|
||
FINANCE\_STATEMENT.
|
||
2. Выполняется предобработка пакета.
|
||
3. Выполняется классификация пакета - определяется первые страницы каждого документа.
|
||
4. Происходит сборка пакета по документам.
|
||
5. Выполняется подбор шаблона документов для распознавания, выбранные шаблоны накладываются на документы.
|
||
6. Выполняется распознавание документов согласно шаблонам, извлекаются нужные атрибуты, по каждому полю рассчитывается уверенность как среднее арифметическое побитовой маски с округлением до сотых (пример: поле Заявление, его уверенность - 01111101, среднее арифметическое = 0.67)
|
||
|
||
**5.**
|
||
СС выполняет скрипт преобразований данных для формирования json
|
||
|
||
**6.**
|
||
В экспортной папке "Исходящие" создается подпапка с UUID полученным от модуля.
|
||
|
||
**7**
|
||
Сформированный json с именем вида UUID.json ~~вместе с файлами документов~~
|
||
экспортируется в созданную подпапку UUID в родительской папке Исходящие. Для каждого документа - 1 json файл, а о
|
||
бработанный файл удаляется из папки Входящие.
|
||
|
||
структура json:
|
||
|
||
#### **7.1.** Корневой объект
|
||
|
||
| Параметр | | Тип | Формат | Обязательность | Описание | Правило формирования | Пример |
|
||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||
| `file_uid` | | string | `^[a-zA-Z0-9_-]+$` | да | Уникальный идентификатор исходного файла | Формируется из имени исходного файла без расширения. Допустимы латиница, цифры, символы `_` и `-` . Максимальная длина 255 символов | `"b94d2b95-ab16-4836-86bc-db87c6aaa242"` |
|
||
| `error` | | object | - | да | Объект с деталями ошибки | Содержит код, сообщение и детали ошибки. При отсутствии ошибок имеет значение `null` | см. таблицу `error` |
|
||
| | `code` | string | | да | Код ошибки. примеры кодов | | | | --- | --- | | `FILE_READ_ERROR` | Ошибка файла (поврежден, отсутствует доступ). Ошибка передается, если файл при обработке OCR не удается прочитать | | `INVALID_FORMAT` | Неподдерживаемый формат файла. Ошибка передается, если формат не соответствует pdf или jpeg | | `INVALID_DOCUMENT` | Не удалось определить тип документа. Ошибка передается, если не удалось наложить шаблон для распознавания | | `RECOGNITION_FAILED` | Ошибка OCR при распознавании текста. Ошибка передается, если более 80% всех полей не удалось распознать | | `UNKNOWN_ERROR` | Непредвиденная ошибка. Ошибка передается, если ни один из вышеперечисленных вариантов ошибки не подходит | | Системный код, однозначно идентифицирующий тип ошибки. Используется для автоматической обработки | `"RECOGNITION_FAILED"` |
|
||
| | `message` | string | | да | Краткое описание ошибки | Описание ошибки, не более 255 символов | `"Ошибка OCR при распознавании текста "` |
|
||
| `data_ocr` |
|
||
| | `label` | object | | да | Тип распознаваемого документа | Описание типа распознаваемого документа (Баланс/Отчет) и уверенности распознавания этого поля | { "form\_name": "Бухгалтерский баланс", "confidence": 0.98 } |
|
||
| | `organization` | object | | да | Имя организации | Описание имени организации и уверенности распознавания этого поля | { "full\_name": "Акционерное общество \"Объединенная зерновая компания\"", "confidence": 0.91 } |
|
||
| | `inn` | object | | да | ИНН организации | Описание ИНН организации и уверенности распознавания этого поля | { "inn": "7708632345"", "confidence": 0.91 } |
|
||
| | `units` | object | | да | Единицы измерения сумм | Описание единиц измерения и уверенности распознавания этого поля | { "measurement": "в тыс рублей", "confidence": 0.97 } |
|
||
| | `table_structure` | object | | да | Описание структуры таблицы | Описание структуры таблицы. Внутри массив rows | "rows": [{...}] см таблицу rows |
|
||
|
||
#### **7.1.1** Массив rows
|
||
|
||
| Поле | Тип | Обязательность | Описание | Формирование | Пример |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `row_index` | int | да | Порядковый номер строки | Отсчет начинается с 0 | 0 |
|
||
| `cells` | array | да | Ячейки строки | Описание массива с ячейками | "cells": [{...}] см таблицу cells |
|
||
|
||
#### **7.1.1.1** Массив cells
|
||
|
||
| Поле | Тип | Обязательность | Описание | Формирование | Пример |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `column_index` | int | да | Порядковый номер ячейки в строке | Отсчет начинается с 0 | 0 |
|
||
| `value` | string | да | Имя ячейки | Значение ячейки | "Наименование показателя" |
|
||
| `confidence` | float | да | Уверенность распознавания ячейки. Показатель, насколько OCR уверена в правильности распознанного значения. | Среднее арифметическое побитовой маски поля | "0.67" |
|
||
|
||
**8.**
|
||
Модуль забирает файлы из экспортной папки, анализирует значение UUID и находит по этому ключу запись в таблице **Consolidation\_package (json.file\_uid=Consolidation\_package
|
||
.uuid)**
|
||
и обрабатывает их согласно процессу маппинга:
|
||
|
||
Шапка таблицы:
|
||
|
||
таблица **Fin\_report\_header**
|
||
|
||
| | | | | |
|
||
| --- | --- | --- | --- | --- |
|
||
| Поле | Тип | Описание | Пример из файла | Источник заполнения |
|
||
| report\_id | BIGINT [pk] | Уникальный идентификатор отчета | 1001 | |
|
||
| package\_id | BIGINT | ID пакета документов | 500 | |
|
||
| company\_id | BIGINT | ID компании | 46063520 | |
|
||
| report\_type | varchar(20) | Тип формы: `BALANCE` / `OFR` | "BALANCE" (Ф1), "OFR" (Ф2) | `data_ocr.form_name` |
|
||
| reporting\_date | date | Отчетная дата | 2025-09-30 | |
|
||
| currency | varchar(3) | Код валюты по ISO | "RUB" | |
|
||
| unit | varchar(20) | Единица измерения | "тыс. руб." | `data_ocr.units` |
|
||
| okud\_code | varchar(10) | Код формы по ОКУД | "0710001" (Баланс), "0710002" (ОФР) | |
|
||
| okpo\_code | varchar(10) | Код ОКПО организации | "46063520" | |
|
||
| audit\_required | boolean | Требуется ли аудит | false | |
|
||
| created\_at | timestamp | Дата загрузки | 2025-10-29 14:30:00` | |
|
||
|
||
таблица **Company**
|
||
|
||
| | | | |
|
||
| --- | --- | --- | --- |
|
||
| Поле | Тип | Описание | Источник заполнения |
|
||
| company\_id | BIGINT | Уникальный идентификатор компании | |
|
||
| inn | VARCHAR(12) | ИНН организации | `data_ocr.inn` |
|
||
| kpp | VARCHAR(9) | КПП организации | |
|
||
| okpo | VARCHAR(10) | Код ОКПО | |
|
||
| okopf | VARCHAR(5) | Код ОКОПФ | |
|
||
| okfs | VARCHAR(2) | Код ОКФС | |
|
||
| fin\_report\_id | BIGINT | Ссылка на финансовую отчётность | |
|
||
| name | VARCHAR(300) | Наименование компании | `data_ocr.full_name` |
|
||
| status | VARCHAR(20) | Статус записи | |
|
||
| | | | |
|