diff --git a/golden/expected_osv_parse/synthetic/s40_flat_header_account.json b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json new file mode 100644 index 0000000..1c6ec33 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s40_flat_header_account.json @@ -0,0 +1,175 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_HEADER_ACCOUNT", + "severity": "info", + "message": "иерархия строк — плоский список под счётом шапки (header_account)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + } + ], + "header": { + "organization_name": "ООО \"Товарное хозяйство\"", + "organization_inn": null, + "account_code_raw": "76.Н.1", + "period_text": "2025 г.", + "period_year": 2025, + "period_quarter": "Q4", + "is_cumulative": true, + "period_start": "2025-01-01", + "period_end": "2025-12-31", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + }, + { + "type": "COUNTERPARTY", + "name": "Контрагенты" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "Август - Агро ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "Август - Агро ООО", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "1000.00", + "opening_credit": null, + "turnover_debit": "500.00", + "turnover_credit": "300.00", + "closing_debit": "1200.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 12, + "level": 0, + "parent_row_number": null, + "row_value": "АВИС ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "АВИС ООО", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "200.00", + "turnover_debit": "100.00", + "turnover_credit": "400.00", + "closing_debit": null, + "closing_credit": "500.00", + "extra": null + }, + { + "row_number": 13, + "level": 0, + "parent_row_number": null, + "row_value": "Агроаспект ООО", + "group_type": "COUNTERPARTY", + "group_name": "Контрагенты", + "account_code_raw": "76.Н.1", + "counterparty_name": "Агроаспект ООО", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "50.00", + "turnover_credit": "50.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "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": "1000.00", + "opening_credit": "200.00", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": "1200.00", + "closing_credit": "500.00", + "extra": null + }, + { + "row_number": 15, + "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": "800.00", + "opening_credit": null, + "turnover_debit": "650.00", + "turnover_credit": "750.00", + "closing_debit": "700.00", + "closing_credit": null, + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json new file mode 100644 index 0000000..7791aff --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s41_flat_chart_of_accounts.json @@ -0,0 +1,156 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 2, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_HEADER_ACCOUNT", + "severity": "info", + "message": "иерархия строк — плоский список под счётом шапки (header_account)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + } + ], + "header": { + "organization_name": "ООО Хреновская Нива", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "2 Квартал 2026 г.", + "period_year": 2026, + "period_quarter": "Q2", + "is_cumulative": false, + "period_start": "2026-04-01", + "period_end": "2026-06-30", + "is_from_year_start": false, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + }, + { + "type": "COUNTERPARTY", + "name": "Организации" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "row_value": "Автодор-Платные Дороги ООО", + "group_type": "COUNTERPARTY", + "group_name": "Организации", + "account_code_raw": "60", + "counterparty_name": "Автодор-Платные Дороги ООО", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "820.21", + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "4991.00", + "closing_debit": "829.21", + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 0, + "parent_row_number": null, + "row_value": "АГРОПРОФИ ООО", + "group_type": "COUNTERPARTY", + "group_name": "Организации", + "account_code_raw": "60", + "counterparty_name": "АГРОПРОФИ ООО", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "2763.79", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": null, + "closing_credit": "2763.79", + "extra": null + }, + { + "row_number": 9, + "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": "820.21", + "opening_credit": "2763.79", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": "829.21", + "closing_credit": "2763.79", + "extra": null + }, + { + "row_number": 10, + "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": null, + "opening_credit": "1943.58", + "turnover_debit": "5000.00", + "turnover_credit": "4991.00", + "closing_debit": null, + "closing_credit": "1934.58", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json new file mode 100644 index 0000000..40043bd --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s42_subaccounts_totals_reversed.json @@ -0,0 +1,190 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 4, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_ACCOUNT_PATTERN", + "severity": "info", + "message": "иерархия строк — по кодам счетов (account_pattern)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + } + ], + "header": { + "organization_name": "ООО \"Товарное хозяйство\"", + "organization_inn": null, + "account_code_raw": "76", + "period_text": "2025 г.", + "period_year": 2025, + "period_quarter": "Q4", + "is_cumulative": true, + "period_start": "2025-01-01", + "period_end": "2025-12-31", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "76.2", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.2", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "1000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "1000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "76.5", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.5", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "300.00", + "turnover_debit": "700.00", + "turnover_credit": "600.00", + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + }, + { + "row_number": 12, + "level": 0, + "parent_row_number": null, + "row_value": "76.Н", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.Н", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "5000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 13, + "level": 1, + "parent_row_number": 12, + "row_value": "76.Н.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "76.Н.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "5000.00", + "turnover_credit": "5000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "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": "1000.00", + "opening_credit": "300.00", + "turnover_debit": null, + "turnover_credit": null, + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + }, + { + "row_number": 15, + "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": "700.00", + "opening_credit": null, + "turnover_debit": "5700.00", + "turnover_credit": "6600.00", + "closing_debit": null, + "closing_credit": "200.00", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json new file mode 100644 index 0000000..a88bc8f --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s43_subkonto_unnamed_60.json @@ -0,0 +1,176 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_INDENT", + "severity": "info", + "message": "иерархия строк — по отступам (indent)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + }, + { + "code": "OSV_ROWS", + "severity": "info", + "message": "вид субконто в шапке не назван: строки аналитики счёта 60.01 приняты за контрагентов по плану счетов — проверьте" + } + ], + "header": { + "organization_name": "ООО \"Октябрьское\"", + "organization_inn": null, + "account_code_raw": "60", + "period_text": "9 месяцев 2024 г.", + "period_year": 2024, + "period_quarter": "Q3", + "is_cumulative": true, + "period_start": "2024-01-01", + "period_end": "2024-09-30", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "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": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "ИП Иванов А.А.", + "group_type": "COUNTERPARTY", + "group_name": null, + "account_code_raw": "60.01", + "counterparty_name": "ИП Иванов А.А.", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "34618000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 9, + "level": 1, + "parent_row_number": 7, + "row_value": "ООО \"ЭСТЕТ ОМСК\"", + "group_type": "COUNTERPARTY", + "group_name": null, + "account_code_raw": "60.01", + "counterparty_name": "ООО \"ЭСТЕТ ОМСК\"", + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "4236500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "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": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "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": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + } + ] +} diff --git a/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json new file mode 100644 index 0000000..4f0de92 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s44_subkonto_unnamed_10.json @@ -0,0 +1,171 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 3, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:Лист_1", + "status": "done", + "warnings": [ + { + "code": "OSV_HIERARCHY_BY_INDENT", + "severity": "info", + "message": "иерархия строк — по отступам (indent)" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "тип выводимых данных (БУ/НУ/сумма) в шапке не найден" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "валюта в шапке не найдена" + }, + { + "code": "OSV_HEADER", + "severity": "info", + "message": "вид данных в шапке не указан — строки без метки приняты как БУ" + } + ], + "header": { + "organization_name": "ООО \"Октябрьское\"", + "organization_inn": null, + "account_code_raw": "10", + "period_text": "9 месяцев 2024 г.", + "period_year": 2024, + "period_quarter": "Q3", + "is_cumulative": true, + "period_start": "2024-01-01", + "period_end": "2024-09-30", + "is_from_year_start": true, + "data_type": null, + "currency": null, + "header_variant": 1 + }, + "group_schema": [ + { + "type": "ACCOUNT", + "name": "Субконто" + } + ], + "columns": { + "opening_debit": "B", + "opening_credit": "C", + "turnover_debit": "D", + "turnover_credit": "E", + "closing_debit": "F", + "closing_credit": "G" + }, + "rows": [ + { + "row_number": 7, + "level": 0, + "parent_row_number": null, + "row_value": "10.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "Мука пшеничная", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": "34618000.00", + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "34618000.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 9, + "level": 1, + "parent_row_number": 7, + "row_value": "Сахар-песок", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "10.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "4236500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "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": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "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": "34618000.00", + "opening_credit": null, + "turnover_debit": "4236500.00", + "turnover_credit": "38854500.00", + "closing_debit": null, + "closing_credit": null, + "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 96289ea..b527857 100644 --- a/osv/synthetic/README.md +++ b/osv/synthetic/README.md @@ -57,6 +57,11 @@ cd tabular-parser/api | `s30_val_kol_vo_materials.xlsx` | счёт 10 (вариант 2, номенклатура): материал «Вал» без точки, под материалами строки «Кол-во» (AURORA-1663) | «Вал» — обычная строка (`data_type` шапки, `OTHER`), «Кол-во» — `QUANTITY`, `done` | | `s31_rows_below_total.xlsx` | под «Итого» дописаны «Ответственный:», блок «ООО Альфа (ГК)» с числами и строка «Итого по ГК» (AURORA-1664) | таблица кончается на первой «Итого», хвост вне документа, предупреждение «ниже таблицы … есть числа», `done` | | `s32_total_with_suffix.xlsx` | итоговая строка подписана «Итого по счету 60», точного «Итого» нет (I-1: правило `total_row` — запасное после `total_row_exact`) | `TOTAL` — последняя строка, `done` | +| `s40_flat_header_account.xlsx` | плоская форма 1С (#59, AURORA-1661): «по счету: 76.Н.1» с двоеточием, вид аналитики «Контрагенты» строкой между названием и периодом, организация ниже периода; строк-счетов нет, без outline и отступов; «Итого развернутое» перед «Итого» | `account_code_raw=76.Н.1`, `hierarchy=header_account`, строки `COUNTERPARTY`, «Итого развернутое» и «Итого» — `TOTAL`, `done` | +| `s41_flat_chart_of_accounts.xlsx` | плоская форма: вид аналитики «Организации», период «за 2 Квартал 2026 г. План счетов ООО Хреновская Нива» одной строкой, «Итого развернутое» перед «Итого» | организация из хвоста «План счетов», `account_code_raw=60`, `Q2`/2026, `hierarchy=header_account`, строки `COUNTERPARTY` без предупреждения о виде субконто, `done` | +| `s42_subaccounts_totals_reversed.xlsx` | под счётом 76 в шапке идут строки-субсчета «76.2», «76.5», «76.Н», «76.Н.1» (корня «76» нет), «Итого развернутое» перед «Итого» | `account_code_raw=76`, «Итого развернутое» — `TOTAL`, сверка по основной «Итого», `done` | +| `s43_subkonto_unnamed_60.xlsx` | счёт 60: корень «60.01» и два элемента аналитики с отступом, вид субконто в шапке не назван; «Итого» перед «Итого развернутое» | `hierarchy=indent`, подстроки — `COUNTERPARTY` по плану счетов с предупреждением `OSV_ROWS`, `done` | +| `s44_subkonto_unnamed_10.xlsx` | то же, что `s43`, но счёт 10 (материалы «Мука пшеничная», «Сахар-песок») | счёт 10 не расчётный: подстроки остаются `OTHER` без имени, предупреждения нет, `done` | `s17`–`s19` — регрессия извлечения ИНН из текста (issue #9). `s14`–`s16` добавлены тестом покрытия словарей `tabular-parser` (`rules/*.yaml`, решение R-22): каждая запись словаря должна сработать на реальных или синтетических файлах; эти файлы закрывают записи, которых нет в реальных ОСВ. diff --git a/osv/synthetic/s40_flat_header_account.xlsx b/osv/synthetic/s40_flat_header_account.xlsx new file mode 100644 index 0000000..5f201a3 Binary files /dev/null and b/osv/synthetic/s40_flat_header_account.xlsx differ diff --git a/osv/synthetic/s41_flat_chart_of_accounts.xlsx b/osv/synthetic/s41_flat_chart_of_accounts.xlsx new file mode 100644 index 0000000..258c5f4 Binary files /dev/null and b/osv/synthetic/s41_flat_chart_of_accounts.xlsx differ diff --git a/osv/synthetic/s42_subaccounts_totals_reversed.xlsx b/osv/synthetic/s42_subaccounts_totals_reversed.xlsx new file mode 100644 index 0000000..e6dc7f5 Binary files /dev/null and b/osv/synthetic/s42_subaccounts_totals_reversed.xlsx differ diff --git a/osv/synthetic/s43_subkonto_unnamed_60.xlsx b/osv/synthetic/s43_subkonto_unnamed_60.xlsx new file mode 100644 index 0000000..3901eba Binary files /dev/null and b/osv/synthetic/s43_subkonto_unnamed_60.xlsx differ diff --git a/osv/synthetic/s44_subkonto_unnamed_10.xlsx b/osv/synthetic/s44_subkonto_unnamed_10.xlsx new file mode 100644 index 0000000..46da380 Binary files /dev/null and b/osv/synthetic/s44_subkonto_unnamed_10.xlsx differ