108 lines
18 KiB
Markdown
108 lines
18 KiB
Markdown
---
|
||
code: DOC-221278
|
||
title: "Сводная ОСВ"
|
||
---
|
||
|
||
# Сводная ОСВ
|
||
|
||
Макрос "Оглавление"
|
||
|
||
### Описание:
|
||
|
||
Сводная ОСВ - это единая оборотно-сальдовая ведомость по всем компаниям группы, собранная в одном месте и приведенная к общему виду. У каждой компании периметра есть свои ОСВ, выгруженные поквартально, сводная ОСВ собирает их в единый набор строк. Суммы остаются исходными, сервис дополняет каждую строку недостающими признаками (Тип контрагента) и приводит значения к единому виду.
|
||
|
||
Отдельные ОСВ компаний между собой могут отличаться - контрагент указан текстом (иногда присутствует ИНН), из-за чего нельзя понять внутригрупповая это операция или расчет с внешним контрагентом. Сводная ОСВ становится единым источником данных, из которого дальше строятся все отчеты - Шахматка, Гудвилл, таблица корректировок, консолидированный отчет. Сводная ОСВ ничего не исключает, ее задача подготовить данные, а исключение внутригрупповых оборотов происходит в других таблицах.
|
||
|
||
Формирование ОСВ:
|
||
|
||
* Проверка загруженных ОСВ - по каждой компании периметра должны быть загружены все обязательные ОСВ.
|
||
* Контрагент, записанный в строке текстом, сопоставляется со справочником организаций - сначала по ИНН, затем по наименованию и синонимам. Каждой строке проставляется признак: **ГСК** (контрагент входит в периметр), **ГК** (входит в группу, но не в периметр) или **Внешний**.
|
||
* В результате получается единый набор строк. У каждой строки видна - компания, номер счета, контрагент, признак контрагента, сальдо на начало и конец, обороты за период.
|
||
|
||
### Источник данных:
|
||
|
||
| | | | |
|
||
| --- | --- | --- | --- |
|
||
| 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 | ЮЛ, которому принадлежит алиас |
|
||
|
||
### Алгоритм формирование сводной ОСВ
|
||
|
||
1. По id версии консолидации из таблицы **consolidation\_version** определяется запись **consolidation**. Из нее берутся отчетный год, отчетный квартал и идентификатор ГСК. Через таблицу **related\_group** определяется ГК, в рамках которой выполняется консолидация.
|
||
2. Из таблицы **consolidation\_member** выбираются все организации, включенные в выбранную версию консолидации. Этот состав считается зафиксированным периметром. Изменение текущего состава **related\_group\_member** не должно автоматически изменять состав уже созданной версии.
|
||
3. Для каждой организации периметра из таблицы **stored\_file** выбираются все подтвержденные файлы ОСВ за год и квартал консолидации.
|
||
4. Для каждого файла используется задание распознавания, указанное в **stored\_file.current\_recognition\_job\_id**. Связанная запись **recognition\_job** должна иметь статус done. Результаты предыдущих запусков распознавания этого же файла в сводную ОСВ не включаются.
|
||
5. Все выбранные файлы организации должны относиться к одному отчетному периоду. Если один и тот же файл был загружен повторно как новая версия ранее загруженного файла, необходимо использовать только подтвержденную версию файла
|
||
6. Из таблицы **osv\_entry** выбираются строки, относящиеся к актуальным заданиям распознавания выбранных файлов ОСВ. Для определения назначения строки используется связь **osv\_entry.grouping\_schema\_id -> osv\_grouping\_schema.id**. В расчетный набор сводной ОСВ включаются строки, для которых **osv\_grouping\_schema.group\_type = COUNTERPARTY**.
|
||
7. Каждая запись **osv\_entry** представляет отдельную строку исходной ОСВ.
|
||
8. Организация-владелец строки определяется через **legal\_entity.id**. Наименование организации для колонки "Компания ГК" берется из **legal\_entity.name**.
|
||
9. Год и квартал строки определяются через **stored\_file.period\_year** и **stored\_file.period\_quarter**. Значение колонки "Период" формируется как 2026 Q2.
|
||
10. Для каждой строки обрабатывается счет. Если **osv\_entry.account\_id** заполнен, код счета берется из **chart\_of\_account.code**. Если **account\_id** отсутствует, выполняется поиск счета по нормализованному **osv\_entry.account\_code.** Строки с одинаковым счетом не объединяются. Если у организации есть сто строк по счету 60.01, в сводной ОСВ также должно остаться сто строк по этому счету.
|
||
11. Наименование контрагента для отображения берется из **osv\_entry.counterparty\_name**. Оно не заменяется справочным наименованием организации, чтобы аналитик видел значение из исходной ОСВ.
|
||
12. ИНН контрагента берется из **osv\_entry.counterparty\_inn**. Пустое значение преобразуется в NULL.
|
||
13. Если **osv\_entry.counterparty\_id** уже заполнен, используется сохраненное сопоставление. Если поле не заполнено, сначала выполняется поиск организации по ИНН. Если по ИНН найдено юридическое лицо, его идентификатор записывается как сопоставленный контрагент. Если контрагент не найден по ИНН, выполняется поиск по **legal\_entity.name** и значениям **legal\_entity\_alias.normalized\_alias**. Если найдено несколько организаций, строка передается на ручное сопоставление.
|
||
14. Если **osv\_entry.counterparty\_id** входит в **consolidation\_member** текущей **consolidation\_version**, строке присваивается тип "ГСК". Если контрагент не входит в периметр версии, но его **legal\_entity.company\_group\_id** совпадает с **company\_group\_id** ГК текущей консолидации, присваивается тип "ГК". Если контрагент относится к другой ГК или не был сопоставлен, строке присваивается тип "Внешний".
|
||
15. Шесть показателей переносятся из **osv\_entry** без изменения. Значения **opening\_debit**, **opening\_credit**, **turnover\_debit**, **turnover\_credit**, **closing\_debit** и **closing\_credit** не суммируются и не пересчитываются.
|
||
16. Количество строк сводной ОСВ должно быть равно количеству выбранных детальных строк **osv\_entry**.
|
||
|
||
### Алгоритм ручного сопоставления компании из ОСВ
|
||
|
||
1. Пользователь открывает строку сводной ОСВ, для которой **osv\_entry.counterparty\_id** не заполнен.
|
||
2. Система формирует список организаций, с которыми можно сопоставить контрагента. В список включаются компании ГСК и компании ГК.
|
||
3. Поиск организации выполняется по:
|
||
* **legal\_entity.inn**
|
||
* **legal\_entity.name**
|
||
* **legal\_entity\_alias.alias**
|
||
* **legal\_entity\_alias.normalized\_alias**
|
||
4. Пользователь выбирает одну организацию из результатов поиска.
|
||
5. После выбора система определяет тип сопоставленного контрагента.
|
||
> Если выбранная организация входит в **consolidation\_member** текущей версии - "ГСК"
|
||
>
|
||
> Если организация не входит в периметр версии, но ее **company\_group\_id** совпадает с ГК консолидации -"ГК"
|
||
>
|
||
> Если организация не входит в текущий ГК - "Внешний"
|
||
6. Система получает исходное наименование контрагента из **osv\_entry.counterparty\_name**, а так же ИНН из **legal\_entity.inn.**
|
||
7. Перед добавлением алиаса система проверяет, существует ли в **legal\_entity\_alias** запись с таким же **legal\_entity\_id** и **normalized\_alias**.
|
||
8. Если такой алиас уже связан с текущей организацией, новая запись не создается. Используется существующий алиас.
|
||
9. Если алиас отсутствует, в **legal\_entity\_alias** создается запись.
|
||
10. Если такой же **normalized\_alias** уже связан с другой организацией, система должна проинформировать пользователя о наличии дубля в другой компании. Пользователю должен даваться выбор добавить алиас в текущую компанию и удалить у предыдущей, либо отменить добавление алиаса к текущей компании.
|
||
11. После успешного сохранения алиаса в текущей строке ОСВ заполняется **osv\_entry.counterparty\_id = legal\_entity.id** выбранной организации. Поля **osv\_entry.counterparty\_name** и **osv\_entry.counterparty\_inn** не изменяются. Они должны сохранять исходные значения из файла ОСВ.
|
||
12. В рамках текущей версии консолидации система ищет другие строки **osv\_entry** с таким же наименованием контрагента.
|
||
13. Для найденных строк система может применить сопоставление автоматически, если выполняются условия:
|
||
* **counterparty\_id** еще не заполнен
|
||
* нормализованный алиас связан только с одним ЮЛ
|
||
* в строке ОСВ нет ИНН, противоречащего выбранной организации
|