arm-ka-docs/source/tz/АРМ КА.Техническое задание - 06_7. Функциональные требования - 01_FNR01 Модуль загрузки документов и создания записи - 01_Парсинг ОСВ.md

278 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
code: DOC-260010
title: "Парсинг ОСВ"
---
# Парсинг ОСВ
Виды ОСВ
01 счет
| | | | | | |
| --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | Значения |
| 0 | 01 | | | | Общие суммы по счету 01 |
| 1 | | 01.01 | | | Общие суммы по счету 01.01 |
| 2 | | | Основное подразделение | | Общие суммы по счету 01.01 по подразделу "Основное подразделение" |
| 3 | | | | Автоматичес идентификационная система TRANSAS Т105 | Сумма по текущей строке |
| 3 | | | | Блок ваерный D 590 L 175 | Сумма по текущей строке |
| 3 | | | | Блок ваерный D 590 L 175 | Сумма по текущей строке |
03 счет
58 счет
В 58 счете не нашел ИНН компаний, только названия
| | | | | | |
| --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | Значения |
| 0 | 58 | | | | Общие суммы по счету 58 |
| 1 | | 58.03 | | | Общие суммы по счету 58.03 |
| 2 | | | Основное подразделение | | Общие суммы по счету 58.03 по подразделу "Основное подразделение" |
| 3 | | | | МАЛКИНСКОЕ-ХОЛДИНГ ООО | Сумма по текущей строке |
| 3 | | | | Перекальский Александр Юрьевич | Сумма по текущей строке |
| 3 | | | | ПРОЛИВ ООО | Сумма по текущей строке |
| 1 | | 58.06 | | | Общие суммы по счету 58.06 |
| 2 | | | Основное подразделение | | Суммы по счету 58.06 по подразделу "Основное подразделение" |
| 3 | | | | Перекальский Александр Юрьевич | Сумма по текущей строке |
| 3 | | | | ПРОЛИВ ООО | Сумма по текущей строке |
60 счет
| | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | | Валюта | Значения |
| 0 | 60, Расчеты с поставщиками и подрядчиками | | | | | БУ | Общие суммы по счету 60 |
| 1 | | 60.01, Расчеты с поставщиками и подрядчиками | | | | БУ | Общие суммы по счету 60.01 (суммы по счетам с уровнем 2, или суммы по счетам с уровнем 3) |
| 2 | | | Основное подразделение | | | БУ | Сумма по счету 60.01 по подразделу "Основное подразделение" |
| 3 | | | | GOLDEN CENTRE TRADING LIMITED, CHEUNG KONG CENTER, LEVEL 19, 2 QUEENS ROAD CENTRAL, HONG KONG, HK | | БУ | Сумма по текущей строке |
| 2 | | | Тенор | | | БУ | Сумма по счету 60.01 по подразделу "Тенор" |
| 3 | | | | Баграм-Сервис | | БУ | Сумма по текущей строке |
| 1 | | 60.32, Расчеты по авансам выданным (в у.е.) | | | | БУ | Общие суммы по счету 60.32 (суммы по счетам с уровнем 2, или суммы по счетам с уровнем 3) |
| 2 | | | Основное подразделение | | | БУ | Сумма по счету 60.32 по подразделу "Основное подразделение" |
| 3 | | | | Абсолют Страхование ООО | | БУ | Сумма по текущей строке (берется только строка БУ для расчета, валюта дублирует сумму)) |
| 4 | | | | | USD | БУ | Сумма по строке в рублях |
| 4 | | | | | Вал. | Сумма по строке в валюе |
62 счет
| | | | | |
| --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | Значения |
| 0 | 62 | | | Общие суммы по счету 62 |
| 1 | | 62.01 | | Общие суммы по счету 62.01 (суммы по счетам с уровнем 2) |
| 2 | | | Баляев Сергей Николаевич | Сумма по текущей строке |
66 счет
| | | | | | | |
| --- | --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | | Значения |
| 0 | 66, Расчеты по краткосрочным кредитам и займам | | | | | Общие суммы по счету 66 |
| 1 | | 66.01, Краткосрочные кредиты | | | | Общие суммы по счету 66.01 (суммы по счетам с уровнем 2, или суммы по счетам с уровнем 3) |
| 2 | | | Судно Вильгельм Торстейнссон | | | Сумма по счету 66.01 по подразделу "Основное подразделение" |
| 3 | | | | Банк ВТБ ПАО | | Общая сумма по компании Банк ВТБ ПАО (суммы по счетам с уровнем 4) |
| 4 | | | | | Кредитный договор № КС-ЦУ-702730/2022/00014 | Сумма по строке |
| 4 | | | | | Кредитный договор № КС-ЦУ-702730/2022/00015 | Сумма по строке |
67 счет
| | | | | | | |
| --- | --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | | Значения |
| 0 | 67 | | | | | Общие суммы по счету 67 |
| 1 | | 67.01 | | | | Общие суммы по счету 67.01 (суммы по счетам с уровнем 2) |
| 2 | | | Основное подразделение | | | Сумма по счету 67.01 по подразделу "Основное подразделение" |
| 3 | | | | БАНК ВТБ (ПАО) | | Общая сумма по компании |
76 счет
| | | | | |
| --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | Значения |
| 0 | 76 | | | Общие суммы по счету 76 |
| 1 | | 76.03 | | Общие суммы по счету 76.03 (суммы по счетам с уровнем 2) |
| 2 | | | БАНК ВТБ (ПАО) | Сумма по текущей строке |
Счет 80
Счет 83
Счет 90
| | | | | | | |
| --- | --- | --- | --- | --- | --- | --- |
| Уровень (отступ) | | | | | | Значения |
| 0 | 90 | | | | | Общие суммы по счету 90 |
| 1 | | 90.01 | | | | Общие суммы по счету 90.01 (суммы по счетам с уровнем 2, или суммы по счетам с уровнем 3) |
| 2 | | | 90.01.1 | | | Сумма по счету 90.01.1 (суммы по счетам с уровнем 3) |
| 3 | | | | Автоуслуги (т) | БУ | Сумма по строке |
| 3 | | | | 20% | Кол. | Сумма по строке |
### Определение и обработка строк ОСВ
1. Система считывает шапку ОСВ до начала табличной части и определяет перечень группировок, указанных в отчете. Группировки могут быть указаны отдельными строками (вариант 1), либо одной строкой (вариант 2).
2. Каждое найденное значение группировки приводится к одному из допустимых типов:
Типы группировок
| Значение в шапке ОСВ | Тип |
| --- | --- |
| Счет, Счета | ACCOUNT |
| Подразделение, Подразделения | DEPARTMENT |
| Контрагент, Контрагенты | COUNTERPARTY |
| Договор, Договоры, Договоры Контрагентов | CONTRACT |
| Другие значение, не подходящие под значения выше | OTHER |
3. Система сохраняет порядок группировок, указанный в шапке.
```
Например:
Подразделения, Контрагенты, Договоры
1 → DEPARTMENT
2 → COUNTERPARTY
3 → CONTRACT
```
4. Значение ИНН не является отдельной группировкой. Если в шапке рядом с Контрагенты присутствует колонка ИНН, для группировки COUNTERPARTY фиксируется наличие дополнительного атрибута:
```
has_inn = true
or
has_inn = false
```
5. После обработки шапки система начинает последовательную обработку строк табличной части ОСВ. Для каждой строки необходимо получить как минимум:
1. исходное значение строки;
2. уровень группировки Excel;
3. значения сальдо и оборотов;
4. ИНН, если соответствующая колонка присутствует;
5. признак БУ, Вал. или Кол., если он присутствует в ОСВ.
6. Количество вложенных счетов и субсчетов не должно влиять на определение группировок. Начальной точкой определения аналитик и контрагентов является **последний счет или субсчет текущей ветки**, а не первый счет ОСВ Например, 60 -> 60.01 -> 60.01.1 -> ОАО ВТБ -> Договор №1, должно быть обработано следующим образом:
```
60 = ACCOUNT
60.01 = ACCOUNT
60.01.1 = ACCOUNT
ОАО ВТБ = COUNTERPARTY
Договор №1 = CONTRACT
```
7. Для строк, не являющихся счетами, система определяет положение строки внутри текущей ветки по уровню группировки Excel. Уровень группировки используется для определения отношений между строками:
1. **увеличение уровня** означает переход к дочерней строке;
2. **одинаковый уровень** означает строки одного уровня;
3. **уменьшение уровня** означает завершение текущей вложенной группы.
8. Тип строки определяется путем сопоставления структуры текущей ветки с последовательностью группировок из шапки.
Пример
При схеме ACCOUNT -> DEPARTMENT -> COUNTERPARTY -> CONTRACT и структуре - 67.01 -> Основное подразделение -> ОАО ВТБ -> Договор №1, получаем:
| Строка | group\\_type |
| --- | --- |
| 67.01 | ACCOUNT |
| Основное подразделение | DEPARTMENT |
| ОАО ВТБ | COUNTERPARTY |
| Договор №1 | CONTRACT |
9. После определения строки COUNTERPARTY все ее дочерние строки продолжают классифицироваться согласно группировкам из шапки.
10. Если после COUNTERPARTY в шапке указана неизвестная группировка, ее строки получают OTHER. Например, Контрагенты -> Валюта, COUNTERPARTY -> OTHER.
11. Все строки ОСВ сохраняются независимо от их типа. Для строки необходимо хранить:
| **Поле** | **Назначение** |
| --- | --- |
| row\\_number | Номер исходной строки |
| level | Уровень группировки |
| group\\_type | ACCOUNT / DEPARTMENT / COUNTERPARTY / CONTRACT / OTHER |
| group\\_name | Исходное название группировки из шапки |
| account\\_id | Нормализованный счет |
| account\\_code | Код текущего счета |
| counterparty\\_name | Значение строки COUNTERPARTY |
| counterparty\\_inn | ИНН при наличии |
| data\\_type | БУ (BU), Вал (CURRENCY), Кол (QUANTITY) при наличии |
| Денежные показатели | Сальдо и обороты |
### Шапки ОСВ
Вариант 1
| | | | | | | | |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Оборотно-сальдовая ведомость по счету 67 за 1 квартал 2026 г. | | | | | | | |
| Выводимые данные: БУ (данные бухгалтерского учета) | | | | | | | |
| Счет | | Сальдо на начало периода | | Обороты за период | | Сальдо на конец периода | |
| Контрагенты | ИНН | Дебет | Кредит | Дебет | Кредит | Дебет | Кредит |
| Договоры | |
Правила разбора:
| Что определяем | Источник | Правило |
| --- | --- | --- |
| Счет ОСВ | Заголовок отчета | Получить значение после "по счету" |
| Период | Заголовок отчета | Получить значение после "за" |
| Год | Заголовок отчета | Получить год |
| Квартал | Заголовок отчета | Получить квартал |
| Тип данных | "Выводимые данные: БУ..." | Получить значение после "Выводимые данные:" |
| Первая группировка | строка "Счет" | Присвоить значение **account** |
| Вторая группировка | строка "Контрагенты" | Присвоить значение **counterparty** |
| Дополнительный параметр | ячейка "ИНН" | Относится к строке "Контрагенты" |
| Третья группировка | строка "Договоры" | Присвоить значение **contract** |
Пример результата:
```
account = 67
reporting_period = "1 квартал 2026 г."
period_year = 2026
period_quarter = 1
data_type = BU
group_schema[1] = ACCOUNT
group_schema[2] = COUNTERPARTY
group_schema[3] = CONTRACT
has_inn = true
```
Вариант 2
| | | | | | | |
| --- | --- | --- | --- | --- | --- | --- |
| Оборотно-сальдовая ведомость по счету 60 | | | | | | |
| Период: 1 квартал 2026 г. | | | | | | |
| Детализация по субсчетам, субконто: Контрагенты, Договоры | | | | | | |
| Выводимые данные: сумма | | | | | | |
| Субконто | Сальдо на начало периода | | Оборот за период | | Сальдо на конец периода | |
| | Дебет | Кредит | Дебет | Кредит | Дебет | Кредит |
Правила разбора:
| Что определяем | Источник | Правило |
| --- | --- | --- |
| Счет ОСВ | Заголовок отчета | Получить значение после "по счету" |
| Период | Заголовок отчета | Получить значение после "Период:" |
| Год | Заголовок отчета | Получить год из периода |
| Квартал | Заголовок отчета | Получить квартал из периода |
| Тип данных | "Выводимые данные: ..." | Получить значение после "Выводимые данные:" |
| Первая группировка | строка "Детализация по субсчетам, субконто:" | Получить строку после двоеточия, присвоить первому значению - **account.**Разделение через запятые |
| Вторая группировка | строка "Детализация по субсчетам, субконто:" | Получить строку после двоеточия, присвоить второму значению -**counterparty**. Разделение через запятые |
Пример результата:
```
account = 60
reporting_period = "1 квартал 2026 г."
period_year = 2026
period_quarter = 1
data_type = SUM
group_schema[1] = COUNTERPARTY
group_schema[2] = CONTRACT
has_inn = false
```