18 KiB
code, title
| code | title |
|---|---|
| DOC-221278 | Сводная ОСВ |
Сводная ОСВ
Макрос "Оглавление"
Описание:
Сводная ОСВ - это единая оборотно-сальдовая ведомость по всем компаниям группы, собранная в одном месте и приведенная к общему виду. У каждой компании периметра есть свои ОСВ, выгруженные поквартально, сводная ОСВ собирает их в единый набор строк. Суммы остаются исходными, сервис дополняет каждую строку недостающими признаками (Тип контрагента) и приводит значения к единому виду.
Отдельные ОСВ компаний между собой могут отличаться - контрагент указан текстом (иногда присутствует ИНН), из-за чего нельзя понять внутригрупповая это операция или расчет с внешним контрагентом. Сводная ОСВ становится единым источником данных, из которого дальше строятся все отчеты - Шахматка, Гудвилл, таблица корректировок, консолидированный отчет. Сводная ОСВ ничего не исключает, ее задача подготовить данные, а исключение внутригрупповых оборотов происходит в других таблицах.
Формирование ОСВ:
- Проверка загруженных ОСВ - по каждой компании периметра должны быть загружены все обязательные ОСВ.
- Контрагент, записанный в строке текстом, сопоставляется со справочником организаций - сначала по ИНН, затем по наименованию и синонимам. Каждой строке проставляется признак: ГСК (контрагент входит в периметр), ГК (входит в группу, но не в периметр) или Внешний.
- В результате получается единый набор строк. У каждой строки видна - компания, номер счета, контрагент, признак контрагента, сальдо на начало и конец, обороты за период.
Источник данных:
| consolidation | related_group_id | Идентификатор ГСК, для которой выполняется консолидация | SELECT c.related_group_id, c.year, c.quarter, rg.company_group_id FROM consolidation_version cv JOIN consolidation c ON c.id = cv.consolidation_id JOIN related_group rg ON rg.id = c.related_group_id WHERE cv.id = consolidation_version_id* |
| consolidation | year | Отчетный год | |
| consolidation | quarter | Отчетный квартал | |
| related_group | company_group_id | ГК, к которой относится ГСК. Используется для определения типа контрагента | |
| consolidation_member | legal_entity_id | Организация, включенная в периметр выбранной версии консолидации | SELECT cm.legal_entity_id, le.name, le.inn FROM consolidation_member cm JOIN legal_entity le ON le.id = cm.legal_entity_id WHERE cm.consolidation_version_id = consolidation_version_id* |
| legal_entity | name | Наименование организации в колонке Компания ГК | |
| legal_entity | inn | ИНН организации-владельца ОСВ | |
| stored_file | id | Идентификатор файла ОСВ | SELECT sf.id, sf.legal_entity_id, sf.period_year, sf.period_quarter, sf.current_recognition_job_id FROM stored_file sf JOIN recognition_job rj ON rj.id = sf.current_recognition_job_id AND rj.file_id = sf.id WHERE sf.legal_entity_id = legal_entity_ids* AND sf.document_type = 'ОСВ' AND sf.period_year = period_year* AND sf.period_quarter = period_quarter* AND sf.status = 'Загружен' AND rj.status = 'done' |
| stored_file | legal_entity_id | Организация-владелец файла ОСВ | |
| stored_file | period_year | Год, за который загружена ОСВ | |
| stored_file | period_quarter | Квартал, за который загружена ОСВ | |
| stored_file | current_recognition_job_id | Авторитетный прогон распознавания | |
| recognition_job | status | Статус распознавания. Используются задания со статусом done | |
| osv_entry | id | Идентификатор исходной строки ОСВ | SELECT oe.id, oe.recognition_job_id, oe.account_code, oe.account_id, oe.account_root, oe.counterparty_name, oe.counterparty_inn, oe.counterparty_id, oe.opening_debit, oe.opening_credit, oe.turnover_debit, oe.turnover_credit, oe.closing_debit, oe.closing_credit FROM osv_entry oe WHERE oe.recognition_job_id = recognition_job_id* |
| osv_entry | account_code | Исходный код счета из файла ОСВ | |
| osv_entry | account_id | Ссылка на нормализованный счет | |
| osv_entry | account_root | Корневой счет | |
| osv_entry | counterparty_name | Наименование контрагента для колонки Контрагенты | |
| osv_entry | counterparty_inn | ИНН контрагента для колонки ИНН | |
| osv_entry | counterparty_id | Сопоставленная организация-контрагент | |
| osv_entry | opening_debit | Сальдо на начало периода, дебет | |
| osv_entry | opening_credit | Сальдо на начало периода, кредит | |
| osv_entry | turnover_debit | Обороты за период, дебет | |
| osv_entry | turnover_credit | Обороты за период, кредит | |
| osv_entry | closing_debit | Сальдо на конец периода, дебет | |
| osv_entry | closing_credit | Сальдо на конец периода, кредит | |
| chart_of_account | code | Нормализованный код счета для колонки Счет | SELECT coa.id, coa.code, coa.name, coa.parent_id FROM chart_of_account coa WHERE coa.id = account_id* |
| chart_of_account | name | Наименование счета | |
| chart_of_account | parent_id | Родительский счет в иерархии | |
| legal_entity | id | Идентификатор ЮЛ, найденного по ИНН | SELECT le.id, le.inn, le.name, le.company_group_id FROM legal_entity le |
| legal_entity | inn | ИНН ЮЛ для приоритетного сопоставления | |
| legal_entity | company_group_id | ГК найденного контрагента | |
| legal_entity | name | Наименование ЮЛ для сопоставления | SELECT DISTINCT le.id, le.inn, le.name, le.company_group_id FROM legal_entity le LEFT JOIN legal_entity_alias lea ON lea.legal_entity_id = le.id WHERE le.name = counterparty_name OR lea.normalized_alias = counterparty_name |
| legal_entity_alias | normalized_alias | Нормализованный вариант наименования | |
| legal_entity_alias | legal_entity_id | ЮЛ, которому принадлежит алиас |
Алгоритм формирование сводной ОСВ
- По id версии консолидации из таблицы consolidation_version определяется запись consolidation. Из нее берутся отчетный год, отчетный квартал и идентификатор ГСК. Через таблицу related_group определяется ГК, в рамках которой выполняется консолидация.
- Из таблицы consolidation_member выбираются все организации, включенные в выбранную версию консолидации. Этот состав считается зафиксированным периметром. Изменение текущего состава related_group_member не должно автоматически изменять состав уже созданной версии.
- Для каждой организации периметра из таблицы stored_file выбираются все подтвержденные файлы ОСВ за год и квартал консолидации.
- Для каждого файла используется задание распознавания, указанное в stored_file.current_recognition_job_id. Связанная запись recognition_job должна иметь статус done. Результаты предыдущих запусков распознавания этого же файла в сводную ОСВ не включаются.
- Все выбранные файлы организации должны относиться к одному отчетному периоду. Если один и тот же файл был загружен повторно как новая версия ранее загруженного файла, необходимо использовать только подтвержденную версию файла
- Из таблицы osv_entry выбираются строки, относящиеся к актуальным заданиям распознавания выбранных файлов ОСВ. Для определения назначения строки используется связь osv_entry.grouping_schema_id -> osv_grouping_schema.id. В расчетный набор сводной ОСВ включаются строки, для которых osv_grouping_schema.group_type = COUNTERPARTY.
- Каждая запись osv_entry представляет отдельную строку исходной ОСВ.
- Организация-владелец строки определяется через legal_entity.id. Наименование организации для колонки "Компания ГК" берется из legal_entity.name.
- Год и квартал строки определяются через stored_file.period_year и stored_file.period_quarter. Значение колонки "Период" формируется как 2026 Q2.
- Для каждой строки обрабатывается счет. Если osv_entry.account_id заполнен, код счета берется из chart_of_account.code. Если account_id отсутствует, выполняется поиск счета по нормализованному osv_entry.account_code. Строки с одинаковым счетом не объединяются. Если у организации есть сто строк по счету 60.01, в сводной ОСВ также должно остаться сто строк по этому счету.
- Наименование контрагента для отображения берется из osv_entry.counterparty_name. Оно не заменяется справочным наименованием организации, чтобы аналитик видел значение из исходной ОСВ.
- ИНН контрагента берется из osv_entry.counterparty_inn. Пустое значение преобразуется в NULL.
- Если osv_entry.counterparty_id уже заполнен, используется сохраненное сопоставление. Если поле не заполнено, сначала выполняется поиск организации по ИНН. Если по ИНН найдено юридическое лицо, его идентификатор записывается как сопоставленный контрагент. Если контрагент не найден по ИНН, выполняется поиск по legal_entity.name и значениям legal_entity_alias.normalized_alias. Если найдено несколько организаций, строка передается на ручное сопоставление.
- Если osv_entry.counterparty_id входит в consolidation_member текущей consolidation_version, строке присваивается тип "ГСК". Если контрагент не входит в периметр версии, но его legal_entity.company_group_id совпадает с company_group_id ГК текущей консолидации, присваивается тип "ГК". Если контрагент относится к другой ГК или не был сопоставлен, строке присваивается тип "Внешний".
- Шесть показателей переносятся из osv_entry без изменения. Значения opening_debit, opening_credit, turnover_debit, turnover_credit, closing_debit и closing_credit не суммируются и не пересчитываются.
- Количество строк сводной ОСВ должно быть равно количеству выбранных детальных строк osv_entry.
Алгоритм ручного сопоставления компании из ОСВ
- Пользователь открывает строку сводной ОСВ, для которой osv_entry.counterparty_id не заполнен.
- Система формирует список организаций, с которыми можно сопоставить контрагента. В список включаются компании ГСК и компании ГК.
- Поиск организации выполняется по:
- legal_entity.inn
- legal_entity.name
- legal_entity_alias.alias
- legal_entity_alias.normalized_alias
- Пользователь выбирает одну организацию из результатов поиска.
- После выбора система определяет тип сопоставленного контрагента.
Если выбранная организация входит в consolidation_member текущей версии - "ГСК"
Если организация не входит в периметр версии, но ее company_group_id совпадает с ГК консолидации -"ГК"
Если организация не входит в текущий ГК - "Внешний"
- Система получает исходное наименование контрагента из osv_entry.counterparty_name, а так же ИНН из legal_entity.inn.
- Перед добавлением алиаса система проверяет, существует ли в legal_entity_alias запись с таким же legal_entity_id и normalized_alias.
- Если такой алиас уже связан с текущей организацией, новая запись не создается. Используется существующий алиас.
- Если алиас отсутствует, в legal_entity_alias создается запись.
- Если такой же normalized_alias уже связан с другой организацией, система должна проинформировать пользователя о наличии дубля в другой компании. Пользователю должен даваться выбор добавить алиас в текущую компанию и удалить у предыдущей, либо отменить добавление алиаса к текущей компании.
- После успешного сохранения алиаса в текущей строке ОСВ заполняется osv_entry.counterparty_id = legal_entity.id выбранной организации. Поля osv_entry.counterparty_name и osv_entry.counterparty_inn не изменяются. Они должны сохранять исходные значения из файла ОСВ.
- В рамках текущей версии консолидации система ищет другие строки osv_entry с таким же наименованием контрагента.
- Для найденных строк система может применить сопоставление автоматически, если выполняются условия:
- counterparty_id еще не заполнен
- нормализованный алиас связан только с одним ЮЛ
- в строке ОСВ нет ИНН, противоречащего выбранной организации