diff --git a/README.md b/README.md index 3fb7bd2..01d95e7 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ``` osv/{rb,schastl}/<ГГГГ-Qn | ГГГГ-FY>/ ОСВ по счетам, исходные имена файлов (разложены по шапке, не по имени) -osv/synthetic/ синтетика s01–s16 для форматов, которых нет в реальных данных (Срез 2a); генератор и описание — osv/synthetic/README.md +osv/synthetic/ синтетика s01–s19 для форматов, которых нет в реальных данных (Срез 2a); генератор и описание — osv/synthetic/README.md osv-dkb//<период>/ ОСВ шести организаций из пакета ДКБ 06.10.2026 (Цимлянский, НКЗ, Новоросметалл, НПЗ, Приманыческий, Агрокомплекс): многолистовые книги, needs_check, 50 тыс. строк — вне тестов osv/**, см. osv-dkb/README.md analysis-reports//<период>/ отчёты 1С «Анализ счета» по контрагентам группы из того же пакета (не ОСВ), см. README diff --git a/golden/expected_osv_parse/rb/2024-FY/ОСВ_60 за 2024.json b/golden/expected_osv_parse/rb/2024-FY/ОСВ_60 за 2024.json index 8bddf05..2eb63a4 100644 --- a/golden/expected_osv_parse/rb/2024-FY/ОСВ_60 за 2024.json +++ b/golden/expected_osv_parse/rb/2024-FY/ОСВ_60 за 2024.json @@ -2998,8 +2998,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты", "account_code_raw": "60.01", - "counterparty_name": "ДОРСЕРВИС ООО ИНН 3523022660", - "counterparty_inn": null, + "counterparty_name": "ДОРСЕРВИС ООО", + "counterparty_inn": "3523022660", "data_type": "BU", "opening_debit": null, "opening_credit": "214640.00", diff --git a/golden/expected_osv_parse/rb/2024-Q1/сч 60_ 1 кв 2024 г.json b/golden/expected_osv_parse/rb/2024-Q1/сч 60_ 1 кв 2024 г.json index cf83eab..6240ed5 100644 --- a/golden/expected_osv_parse/rb/2024-Q1/сч 60_ 1 кв 2024 г.json +++ b/golden/expected_osv_parse/rb/2024-Q1/сч 60_ 1 кв 2024 г.json @@ -1706,8 +1706,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты", "account_code_raw": "60.01", - "counterparty_name": "ДОРСЕРВИС ООО ИНН 3523022660", - "counterparty_inn": null, + "counterparty_name": "ДОРСЕРВИС ООО", + "counterparty_inn": "3523022660", "data_type": "BU", "opening_debit": null, "opening_credit": "214640.00", diff --git a/golden/expected_osv_parse/rb/2024-Q2/сч 60_ 2 кв 2024 г.json b/golden/expected_osv_parse/rb/2024-Q2/сч 60_ 2 кв 2024 г.json index cc6e49d..0a06404 100644 --- a/golden/expected_osv_parse/rb/2024-Q2/сч 60_ 2 кв 2024 г.json +++ b/golden/expected_osv_parse/rb/2024-Q2/сч 60_ 2 кв 2024 г.json @@ -1630,8 +1630,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты", "account_code_raw": "60.01", - "counterparty_name": "ДОРСЕРВИС ООО ИНН 3523022660", - "counterparty_inn": null, + "counterparty_name": "ДОРСЕРВИС ООО", + "counterparty_inn": "3523022660", "data_type": "BU", "opening_debit": null, "opening_credit": null, diff --git a/golden/expected_osv_parse/rb/2025-Q1/ОСВ сч 60 за 1 кв 2025 год.json b/golden/expected_osv_parse/rb/2025-Q1/ОСВ сч 60 за 1 кв 2025 год.json index 0b75cd8..ed67182 100644 --- a/golden/expected_osv_parse/rb/2025-Q1/ОСВ сч 60 за 1 кв 2025 год.json +++ b/golden/expected_osv_parse/rb/2025-Q1/ОСВ сч 60 за 1 кв 2025 год.json @@ -2067,8 +2067,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты", "account_code_raw": "60.01", - "counterparty_name": "ДОРСЕРВИС ООО ИНН 3523022660", - "counterparty_inn": null, + "counterparty_name": "ДОРСЕРВИС ООО", + "counterparty_inn": "3523022660", "data_type": "BU", "opening_debit": null, "opening_credit": "116660.00", diff --git a/golden/expected_osv_parse/rb/2025-Q2/сч 60.json b/golden/expected_osv_parse/rb/2025-Q2/сч 60.json index 2813dd0..d01ca0f 100644 --- a/golden/expected_osv_parse/rb/2025-Q2/сч 60.json +++ b/golden/expected_osv_parse/rb/2025-Q2/сч 60.json @@ -1972,8 +1972,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты", "account_code_raw": "60.01", - "counterparty_name": "ДОРСЕРВИС ООО ИНН 3523022660", - "counterparty_inn": null, + "counterparty_name": "ДОРСЕРВИС ООО", + "counterparty_inn": "3523022660", "data_type": "BU", "opening_debit": null, "opening_credit": "22240.00", diff --git a/golden/expected_osv_parse/schastl/2024-Q1/Оборотносальдовая ведомость по счету 76 за 1 квартал 2024 г..json b/golden/expected_osv_parse/schastl/2024-Q1/Оборотносальдовая ведомость по счету 76 за 1 квартал 2024 г..json index ca022e8..b3aa409 100644 --- a/golden/expected_osv_parse/schastl/2024-Q1/Оборотносальдовая ведомость по счету 76 за 1 квартал 2024 г..json +++ b/golden/expected_osv_parse/schastl/2024-Q1/Оборотносальдовая ведомость по счету 76 за 1 квартал 2024 г..json @@ -96,8 +96,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.04", - "counterparty_name": "Костыгова Наталья Валериевна, 352800390201", - "counterparty_inn": null, + "counterparty_name": "Костыгова Наталья Валериевна", + "counterparty_inn": "352800390201", "data_type": "BU", "opening_debit": null, "opening_credit": "100.00", @@ -153,8 +153,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.05", - "counterparty_name": "Межрегиональное операционное УФК (ФТС России), 7730176610", - "counterparty_inn": null, + "counterparty_name": "Межрегиональное операционное УФК (ФТС России)", + "counterparty_inn": "7730176610", "data_type": "BU", "opening_debit": "123189.16", "opening_credit": null, @@ -210,8 +210,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.09", - "counterparty_name": "Полиграф, 3528315710", - "counterparty_inn": null, + "counterparty_name": "Полиграф", + "counterparty_inn": "3528315710", "data_type": "BU", "opening_debit": null, "opening_credit": "14852.50", @@ -286,8 +286,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990), 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990)", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": null, "opening_credit": "20039.22", @@ -305,8 +305,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000, 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": "35.99", "opening_credit": null, @@ -343,8 +343,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.АВ", - "counterparty_name": "Русский бисквит, 3528052718", - "counterparty_inn": null, + "counterparty_name": "Русский бисквит", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": "4016666.70", "opening_credit": null, diff --git a/golden/expected_osv_parse/schastl/2024-Q2/Оборотносальдовая ведомость по счету 76 за 2 квартал 2024 г..json b/golden/expected_osv_parse/schastl/2024-Q2/Оборотносальдовая ведомость по счету 76 за 2 квартал 2024 г..json index ba81e08..53f1b61 100644 --- a/golden/expected_osv_parse/schastl/2024-Q2/Оборотносальдовая ведомость по счету 76 за 2 квартал 2024 г..json +++ b/golden/expected_osv_parse/schastl/2024-Q2/Оборотносальдовая ведомость по счету 76 за 2 квартал 2024 г..json @@ -96,8 +96,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.04", - "counterparty_name": "Костыгова Наталья Валериевна, 352800390201", - "counterparty_inn": null, + "counterparty_name": "Костыгова Наталья Валериевна", + "counterparty_inn": "352800390201", "data_type": "BU", "opening_debit": null, "opening_credit": "100.00", @@ -153,8 +153,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.05", - "counterparty_name": "Межрегиональное операционное УФК (ФТС России), 7730176610", - "counterparty_inn": null, + "counterparty_name": "Межрегиональное операционное УФК (ФТС России)", + "counterparty_inn": "7730176610", "data_type": "BU", "opening_debit": "123189.16", "opening_credit": null, @@ -210,8 +210,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.06", - "counterparty_name": "Русский бисквит, 3528052718", - "counterparty_inn": null, + "counterparty_name": "Русский бисквит", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": null, "opening_credit": null, @@ -267,8 +267,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.09", - "counterparty_name": "Полиграф, 3528315710", - "counterparty_inn": null, + "counterparty_name": "Полиграф", + "counterparty_inn": "3528315710", "data_type": "BU", "opening_debit": null, "opening_credit": "11132.00", @@ -343,8 +343,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990), 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990)", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": null, "opening_credit": "23379.18", @@ -362,8 +362,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000, 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": "35.99", "opening_credit": null, @@ -400,8 +400,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.АВ", - "counterparty_name": "Русский бисквит, 3528052718", - "counterparty_inn": null, + "counterparty_name": "Русский бисквит", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": "3466666.70", "opening_credit": null, diff --git a/golden/expected_osv_parse/schastl/2024-Q3/Оборотносальдовая ведомость по счету 76 за 3 квартал 2024 г..json b/golden/expected_osv_parse/schastl/2024-Q3/Оборотносальдовая ведомость по счету 76 за 3 квартал 2024 г..json index b30ac8f..d0a66c1 100644 --- a/golden/expected_osv_parse/schastl/2024-Q3/Оборотносальдовая ведомость по счету 76 за 3 квартал 2024 г..json +++ b/golden/expected_osv_parse/schastl/2024-Q3/Оборотносальдовая ведомость по счету 76 за 3 квартал 2024 г..json @@ -96,8 +96,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.04", - "counterparty_name": "Костыгова Наталья Валериевна, 352800390201", - "counterparty_inn": null, + "counterparty_name": "Костыгова Наталья Валериевна", + "counterparty_inn": "352800390201", "data_type": "BU", "opening_debit": null, "opening_credit": "100.00", @@ -153,8 +153,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.05", - "counterparty_name": "Межрегиональное операционное УФК (ФТС России), 7730176610", - "counterparty_inn": null, + "counterparty_name": "Межрегиональное операционное УФК (ФТС России)", + "counterparty_inn": "7730176610", "data_type": "BU", "opening_debit": "123189.16", "opening_credit": null, @@ -210,8 +210,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.06", - "counterparty_name": "Русский бисквит, 3528052718", - "counterparty_inn": null, + "counterparty_name": "Русский бисквит", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": "172131.15", "opening_credit": null, @@ -267,8 +267,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.09", - "counterparty_name": "Полиграф, 3528315710", - "counterparty_inn": null, + "counterparty_name": "Полиграф", + "counterparty_inn": "3528315710", "data_type": "BU", "opening_debit": null, "opening_credit": "10070.00", @@ -324,8 +324,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990), 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990)", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": null, "opening_credit": "28053.36", @@ -343,8 +343,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000, 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": null, "opening_credit": "82314.78", @@ -381,8 +381,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.АВ", - "counterparty_name": "Русский бисквит, 3528052718", - "counterparty_inn": null, + "counterparty_name": "Русский бисквит", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": "2916666.69", "opening_credit": null, diff --git a/golden/expected_osv_parse/schastl/2025-Q1/Оборотно-сальдовая ведомость по счету 76 за 1 квартал 2025 г..json b/golden/expected_osv_parse/schastl/2025-Q1/Оборотно-сальдовая ведомость по счету 76 за 1 квартал 2025 г..json index f04867d..98fb3e1 100644 --- a/golden/expected_osv_parse/schastl/2025-Q1/Оборотно-сальдовая ведомость по счету 76 за 1 квартал 2025 г..json +++ b/golden/expected_osv_parse/schastl/2025-Q1/Оборотно-сальдовая ведомость по счету 76 за 1 квартал 2025 г..json @@ -96,8 +96,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.04", - "counterparty_name": "Костыгова Наталья Валериевна, 352800390201", - "counterparty_inn": null, + "counterparty_name": "Костыгова Наталья Валериевна", + "counterparty_inn": "352800390201", "data_type": "BU", "opening_debit": null, "opening_credit": "100.00", @@ -153,8 +153,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.05", - "counterparty_name": "Межрегиональное операционное УФК (ФТС России), 7730176610", - "counterparty_inn": null, + "counterparty_name": "Межрегиональное операционное УФК (ФТС России)", + "counterparty_inn": "7730176610", "data_type": "BU", "opening_debit": "123189.16", "opening_credit": null, @@ -210,8 +210,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990), 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №1 УФССП по Вологодской области л/с05301А53990)", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": "13.40", "opening_credit": null, @@ -229,8 +229,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.41", - "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000, 3525144985", - "counterparty_inn": null, + "counterparty_name": "УФК по Вологодской области (ОСП по г.Череповцу №2 УФССП России по Вологодской области л/с05301А54000", + "counterparty_inn": "3525144985", "data_type": "BU", "opening_debit": null, "opening_credit": "26801.29", @@ -267,8 +267,8 @@ "group_type": "COUNTERPARTY", "group_name": "Контрагенты, ИНН", "account_code_raw": "76.АВ", - "counterparty_name": "РУССКИЙ БИСКВИТ АО, 3528052718", - "counterparty_inn": null, + "counterparty_name": "РУССКИЙ БИСКВИТ АО", + "counterparty_inn": "3528052718", "data_type": "BU", "opening_debit": "1816666.68", "opening_credit": null, diff --git a/golden/expected_osv_parse/synthetic/s17_inn_in_name.json b/golden/expected_osv_parse/synthetic/s17_inn_in_name.json new file mode 100644 index 0000000..b27b4fa --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s17_inn_in_name.json @@ -0,0 +1,227 @@ +{ + "schema_version": "1.1", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 8, + "warnings": [ + "sheet=Лист_1 hierarchy=outline" + ] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "header": { + "organization_name": "ООО \"Тестовая организация\"", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "1 квартал 2025 г.", + "period_year": 2025, + "period_quarter": "Q1", + "is_cumulative": true, + "data_type": "BU", + "currency": "RUB", + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Счет" + }, + { + "type": "COUNTERPARTY", + "name": "Контрагенты" + } + ], + "columns": { + "opening_debit": "E", + "opening_credit": "F", + "turnover_debit": "G", + "turnover_credit": "H", + "closing_debit": "I", + "closing_credit": "J" + }, + "rows": [ + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "60", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "254500.50", + "turnover_debit": "303000.25", + "turnover_credit": "560000.00", + "closing_debit": "115000.00", + "closing_credit": "491500.25", + "extra": null + }, + { + "row_number": 12, + "level": 1, + "parent_row_number": 11, + "row_value": "60.01", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": "253000.50", + "turnover_debit": "273000.25", + "turnover_credit": "460000.00", + "closing_debit": "65000.00", + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 13, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Альфа, 7701234567", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Альфа", + "counterparty_inn": "7701234567", + "data_type": "BU", + "opening_debit": null, + "opening_credit": "250000.50", + "turnover_debit": "180000.25", + "turnover_credit": "420000.00", + "closing_debit": null, + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 14, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Бета (ИНН 7707654321)", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Бета", + "counterparty_inn": "7707654321", + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": null, + "turnover_debit": "90000.00", + "turnover_credit": "40000.00", + "closing_debit": "65000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 15, + "level": 2, + "parent_row_number": 12, + "row_value": "Иванов Иван", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "Иванов Иван", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "3000.00", + "turnover_debit": "3000.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 16, + "level": 1, + "parent_row_number": 11, + "row_value": "60.02", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.02", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": "1500.00", + "turnover_debit": "30000.00", + "turnover_credit": "100000.00", + "closing_debit": "50000.00", + "closing_credit": "1500.00", + "extra": null + }, + { + "row_number": 17, + "level": 2, + "parent_row_number": 16, + "row_value": "ООО Гамма ИНН: 5001234567", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.02", + "counterparty_name": "ООО Гамма", + "counterparty_inn": "5001234567", + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": null, + "turnover_debit": "30000.00", + "turnover_credit": "100000.00", + "closing_debit": "50000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 18, + "level": 2, + "parent_row_number": 16, + "row_value": "ИП Сидоров 500100732259", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.02", + "counterparty_name": "ИП Сидоров", + "counterparty_inn": "500100732259", + "data_type": "BU", + "opening_debit": null, + "opening_credit": "1500.00", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": null, + "closing_credit": "1500.00", + "extra": null + }, + { + "row_number": 19, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "254500.50", + "turnover_debit": "303000.25", + "turnover_credit": "560000.00", + "closing_debit": "115000.00", + "closing_credit": "491500.25", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s18_inn_row_above.json b/golden/expected_osv_parse/synthetic/s18_inn_row_above.json new file mode 100644 index 0000000..f3658d5 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s18_inn_row_above.json @@ -0,0 +1,210 @@ +{ + "schema_version": "1.1", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 7, + "warnings": [ + "sheet=Лист_1 hierarchy=outline", + "строка 13: ИНН 7701234567 над строкой 14 отнесён к ней как к контрагенту", + "строка 18: ИНН 5001234567 над строкой 19 отнесён к ней как к контрагенту" + ] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "header": { + "organization_name": "ООО \"Тестовая организация\"", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "2 квартал 2025 г.", + "period_year": 2025, + "period_quarter": "Q2", + "is_cumulative": false, + "data_type": "BU", + "currency": "RUB", + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Счет" + }, + { + "type": "COUNTERPARTY", + "name": "Контрагенты" + } + ], + "columns": { + "opening_debit": "E", + "opening_credit": "F", + "turnover_debit": "G", + "turnover_credit": "H", + "closing_debit": "I", + "closing_credit": "J" + }, + "rows": [ + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "60", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "253000.50", + "turnover_debit": "303000.25", + "turnover_credit": "560000.00", + "closing_debit": "115000.00", + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 12, + "level": 1, + "parent_row_number": 11, + "row_value": "60.01", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": "253000.50", + "turnover_debit": "273000.25", + "turnover_credit": "460000.00", + "closing_debit": "65000.00", + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 14, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Альфа", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Альфа", + "counterparty_inn": "7701234567", + "data_type": "BU", + "opening_debit": null, + "opening_credit": "250000.50", + "turnover_debit": "180000.25", + "turnover_credit": "420000.00", + "closing_debit": null, + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 15, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Бета", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Бета", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": null, + "turnover_debit": "90000.00", + "turnover_credit": "40000.00", + "closing_debit": "65000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 16, + "level": 2, + "parent_row_number": 12, + "row_value": "Иванов Иван", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "Иванов Иван", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "3000.00", + "turnover_debit": "3000.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 17, + "level": 1, + "parent_row_number": 11, + "row_value": "60.02", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.02", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": null, + "turnover_debit": "30000.00", + "turnover_credit": "100000.00", + "closing_debit": "50000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 19, + "level": 2, + "parent_row_number": 17, + "row_value": "ООО Гамма", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.02", + "counterparty_name": "ООО Гамма", + "counterparty_inn": "5001234567", + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": null, + "turnover_debit": "30000.00", + "turnover_credit": "100000.00", + "closing_debit": "50000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 20, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "253000.50", + "turnover_debit": "303000.25", + "turnover_credit": "560000.00", + "closing_debit": "115000.00", + "closing_credit": "490000.25", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s19_inn_kpp_cell.json b/golden/expected_osv_parse/synthetic/s19_inn_kpp_cell.json new file mode 100644 index 0000000..13d92bb --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s19_inn_kpp_cell.json @@ -0,0 +1,229 @@ +{ + "schema_version": "1.1", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 8, + "warnings": [ + "sheet=Лист_1 hierarchy=outline" + ] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "header": { + "organization_name": "ООО \"Тестовая организация\"", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "3 квартал 2025 г.", + "period_year": 2025, + "period_quarter": "Q3", + "is_cumulative": false, + "data_type": "BU", + "currency": "RUB", + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Счет" + }, + { + "type": "COUNTERPARTY", + "name": "Контрагенты", + "has_inn": true + } + ], + "columns": { + "opening_debit": "F", + "opening_credit": "G", + "turnover_debit": "H", + "turnover_credit": "I", + "closing_debit": "J", + "closing_credit": "K", + "inn": "E" + }, + "rows": [ + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "60", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "261000.60", + "turnover_debit": "311000.35", + "turnover_credit": "572000.35", + "closing_debit": "115000.00", + "closing_credit": "502000.60", + "extra": null + }, + { + "row_number": 12, + "level": 1, + "parent_row_number": 11, + "row_value": "60.01", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": "253000.50", + "turnover_debit": "273000.25", + "turnover_credit": "460000.00", + "closing_debit": "65000.00", + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 13, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Альфа", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Альфа", + "counterparty_inn": "7701234567", + "data_type": "BU", + "opening_debit": null, + "opening_credit": "250000.50", + "turnover_debit": "180000.25", + "turnover_credit": "420000.00", + "closing_debit": null, + "closing_credit": "490000.25", + "extra": null + }, + { + "row_number": 14, + "level": 2, + "parent_row_number": 12, + "row_value": "ООО Бета", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "ООО Бета", + "counterparty_inn": "7707654321", + "data_type": "BU", + "opening_debit": "15000.00", + "opening_credit": null, + "turnover_debit": "90000.00", + "turnover_credit": "40000.00", + "closing_debit": "65000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 15, + "level": 2, + "parent_row_number": 12, + "row_value": "Иванов Иван", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.01", + "counterparty_name": "Иванов Иван", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "3000.00", + "turnover_debit": "3000.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 16, + "level": 1, + "parent_row_number": 11, + "row_value": "60.02", + "group_type": "ACCOUNT", + "group_name": "Счет", + "account_code_raw": "60.02", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": "8000.10", + "turnover_debit": "38000.10", + "turnover_credit": "112000.35", + "closing_debit": "50000.00", + "closing_credit": "12000.35", + "extra": null + }, + { + "row_number": 17, + "level": 2, + "parent_row_number": 16, + "row_value": "ООО Гамма", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.02", + "counterparty_name": "ООО Гамма", + "counterparty_inn": "5001234567", + "data_type": "BU", + "opening_debit": "120000.00", + "opening_credit": null, + "turnover_debit": "30000.00", + "turnover_credit": "100000.00", + "closing_debit": "50000.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 18, + "level": 2, + "parent_row_number": 16, + "row_value": "ООО Дельта", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "60.02", + "counterparty_name": "ООО Дельта", + "counterparty_inn": "7812345678", + "data_type": "BU", + "opening_debit": null, + "opening_credit": "8000.10", + "turnover_debit": "8000.10", + "turnover_credit": "12000.35", + "closing_debit": null, + "closing_credit": "12000.35", + "extra": null + }, + { + "row_number": 19, + "level": 0, + "parent_row_number": null, + "row_value": "Итого", + "group_type": "TOTAL", + "group_name": null, + "account_code_raw": null, + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "135000.00", + "opening_credit": "261000.60", + "turnover_debit": "311000.35", + "turnover_credit": "572000.35", + "closing_debit": "115000.00", + "closing_credit": "502000.60", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/osv/synthetic/README.md b/osv/synthetic/README.md index 69ecdf3..b555ad9 100644 --- a/osv/synthetic/README.md +++ b/osv/synthetic/README.md @@ -41,8 +41,11 @@ cd tabular-parser/api | `s14_statement_forms.xlsx` | три листа форм, каждый опознаётся одним признаком: «Форма по ОКУД 0710001», «Отчет о финансовых результатах», «Форма по ОКУД 0710002»; лист «ОСВ 60» | один документ, три предупреждения «skipped: statement» | | `s15_group_title_synonyms.xlsx` | названия групп сумм: лист «ОСВ 60» — «Входящее сальдо»/«Конечное сальдо», лист «ОСВ 62» — «Начальное сальдо»/«Исходящее сальдо» | два документа, все шесть колонок сумм найдены, `done` | | `s16_header_synonyms.xlsx` | лист «ОСВ 60»: нет названия организации, период «2024», валюта «RUB (код 643)», «Счет» и «Контрагенты» отдельными строками под «Дебет/Кредит»; лист «ОСВ 62» (вариант 2): «Детализация по субсчетам: Номенклатура, Статьи затрат, Нематериальные активы, Валюта» | `organization_name=""` + предупреждение, `Q4`/2024, `currency=RUB`, схема листа 62 — `ACCOUNT` + четыре `OTHER` | +| `s17_inn_in_name.xlsx` | колонки ИНН нет, ИНН записан в текст названия контрагента: «ООО Альфа, 7701234567», «ООО Бета (ИНН 7707654321)», «ООО Гамма ИНН: 5001234567», «ИП Сидоров 500100732259» (OQ-100) | `counterparty_inn` — цифры, `counterparty_name` — без ИНН и разделителя, `row_value` не меняется; физлицо без ИНН — `null`; `done` | +| `s18_inn_row_above.xlsx` | у «ООО Альфа» и «ООО Гамма» ИНН стоит отдельной строкой над названием (без сумм, тот же уровень), колонки ИНН нет (OQ-130) | строка с ИНН в `rows` не попадает и не уходит в `OTHER`; ИНН — у контрагента, предупреждение «ИНН … над строкой … отнесён к ней»; `done` | +| `s19_inn_kpp_cell.xlsx` | колонка «ИНН/КПП»: в ячейках склеенное «7701234567/770101001» (OQ-100) | `counterparty_inn` — только ИНН; колонка распознана как колонка ИНН; `done` | -`s14`–`s16` добавлены тестом покрытия словарей `tabular-parser` (`rules/*.yaml`, решение R-22): каждая запись словаря +`s17`–`s19` — регрессия извлечения ИНН из текста (issue #9). `s14`–`s16` добавлены тестом покрытия словарей `tabular-parser` (`rules/*.yaml`, решение R-22): каждая запись словаря должна сработать на реальных или синтетических файлах; эти файлы закрывают записи, которых нет в реальных ОСВ. ## О файле xlsb diff --git a/osv/synthetic/s17_inn_in_name.xlsx b/osv/synthetic/s17_inn_in_name.xlsx new file mode 100644 index 0000000..f2e4386 Binary files /dev/null and b/osv/synthetic/s17_inn_in_name.xlsx differ diff --git a/osv/synthetic/s18_inn_row_above.xlsx b/osv/synthetic/s18_inn_row_above.xlsx new file mode 100644 index 0000000..55cf1d0 Binary files /dev/null and b/osv/synthetic/s18_inn_row_above.xlsx differ diff --git a/osv/synthetic/s19_inn_kpp_cell.xlsx b/osv/synthetic/s19_inn_kpp_cell.xlsx new file mode 100644 index 0000000..c0575c7 Binary files /dev/null and b/osv/synthetic/s19_inn_kpp_cell.xlsx differ