--- 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 ```