diff --git a/golden/expected_osv_parse/osv-dkb/nkz/2025-Q3/НКЗ_ОСВ_58+66+67_Субсчета+Контрагенты_2025.09-01_24459.json b/golden/expected_osv_parse/osv-dkb/nkz/2025-Q3/НКЗ_ОСВ_58+66+67_Субсчета+Контрагенты_2025.09-01_24459.json index a21d8e6..367a50a 100644 --- a/golden/expected_osv_parse/osv-dkb/nkz/2025-Q3/НКЗ_ОСВ_58+66+67_Субсчета+Контрагенты_2025.09-01_24459.json +++ b/golden/expected_osv_parse/osv-dkb/nkz/2025-Q3/НКЗ_ОСВ_58+66+67_Субсчета+Контрагенты_2025.09-01_24459.json @@ -3,7 +3,7 @@ "service": { "name": "tabular-parser" }, - "status": "needs_check", + "status": "done", "metrics": { "rows": 32, "warnings": [] @@ -12,7 +12,7 @@ { "document_type": "OSV", "locator": "sheet:58", - "status": "needs_check", + "status": "done", "warnings": [ { "code": "OSV_HIERARCHY_BY_OUTLINE", @@ -23,11 +23,6 @@ "code": "OSV_HEADER", "severity": "info", "message": "валюта в шапке не найдена" - }, - { - "code": "OSV_PARENT_SUM", - "severity": "info", - "message": "§1.4: суммы родителя ≠ сумме детей (±0.01): строки 12, 24" } ], "header": { @@ -433,10 +428,7 @@ "checks": { "total_row_matches_root": true, "balance_identity_violations": [], - "parent_sum_violations": [ - 12, - 24 - ] + "parent_sum_violations": [] } }, { diff --git a/golden/expected_osv_parse/synthetic/s47_indent_hierarchy_code_sums.json b/golden/expected_osv_parse/synthetic/s47_indent_hierarchy_code_sums.json new file mode 100644 index 0000000..c0c6ba1 --- /dev/null +++ b/golden/expected_osv_parse/synthetic/s47_indent_hierarchy_code_sums.json @@ -0,0 +1,867 @@ +{ + "schema_version": "2.0", + "service": { + "name": "tabular-parser" + }, + "status": "done", + "metrics": { + "rows": 32, + "warnings": [] + }, + "documents": [ + { + "document_type": "OSV", + "locator": "sheet:68 сч.", + "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": "68", + "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": "68.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "68.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "2333.00", + "turnover_credit": "2624.00", + "closing_debit": null, + "closing_credit": "291.00", + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "68.01.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "68.01.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "2333.00", + "turnover_credit": "2624.00", + "closing_debit": null, + "closing_credit": "291.00", + "extra": null + }, + { + "row_number": 9, + "level": 2, + "parent_row_number": 8, + "row_value": "Налог (взносы): начислено / уплачено", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "68.01.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "2333.00", + "turnover_credit": "2624.00", + "closing_debit": null, + "closing_credit": "291.00", + "extra": null + }, + { + "row_number": 10, + "level": 0, + "parent_row_number": null, + "row_value": "68.10", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "68.10", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "15687.00", + "turnover_debit": "45332.00", + "turnover_credit": "45332.00", + "closing_debit": null, + "closing_credit": "15687.00", + "extra": null + }, + { + "row_number": 11, + "level": 1, + "parent_row_number": 10, + "row_value": "Налог (взносы): начислено / уплачено", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "68.10", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": "15687.00", + "turnover_debit": "45332.00", + "turnover_credit": "45332.00", + "closing_debit": null, + "closing_credit": "15687.00", + "extra": null + }, + { + "row_number": 12, + "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": "15687.00", + "turnover_debit": "47665.00", + "turnover_credit": "47956.00", + "closing_debit": null, + "closing_credit": "15978.00", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + }, + { + "document_type": "OSV", + "locator": "sheet:90 сч.", + "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": "90", + "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": "90.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "90.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "300.00", + "closing_debit": null, + "closing_credit": "300.00", + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "90.01.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "90.01.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "300.00", + "closing_debit": null, + "closing_credit": "300.00", + "extra": null + }, + { + "row_number": 9, + "level": 2, + "parent_row_number": 8, + "row_value": "Аренда", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "90.01.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "200.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "level": 2, + "parent_row_number": 8, + "row_value": "Прочие", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "90.01.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "100.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 0, + "parent_row_number": null, + "row_value": "90.07", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "90.07", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "200.00", + "turnover_credit": null, + "closing_debit": "200.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 12, + "level": 1, + "parent_row_number": 11, + "row_value": "90.07.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "90.07.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "200.00", + "turnover_credit": null, + "closing_debit": "200.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 13, + "level": 2, + "parent_row_number": 12, + "row_value": "Расходы по аренде", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "90.07.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "200.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "level": 0, + "parent_row_number": null, + "row_value": "90.09", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "90.09", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "500.00", + "turnover_credit": "300.00", + "closing_debit": "200.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 15, + "level": 1, + "parent_row_number": 14, + "row_value": "", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "90.09", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "500.00", + "turnover_credit": "300.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 16, + "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": null, + "turnover_debit": "700.00", + "turnover_credit": "600.00", + "closing_debit": "400.00", + "closing_credit": "300.00", + "extra": null + } + ], + "checks": { + "total_row_matches_root": true, + "balance_identity_violations": [], + "parent_sum_violations": [] + } + }, + { + "document_type": "OSV", + "locator": "sheet:91 сч.", + "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": "91", + "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": "91.01", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "100.00", + "closing_debit": null, + "closing_credit": "100.00", + "extra": null + }, + { + "row_number": 8, + "level": 1, + "parent_row_number": 7, + "row_value": "Проценты к получению", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "70.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 9, + "level": 2, + "parent_row_number": 8, + "row_value": "Проценты по вкладам", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "70.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 10, + "level": 1, + "parent_row_number": 7, + "row_value": "Прочие доходы", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "30.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 11, + "level": 2, + "parent_row_number": 10, + "row_value": "Пени", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "20.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 12, + "level": 2, + "parent_row_number": 10, + "row_value": "Штрафы", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.01", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "10.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 13, + "level": 0, + "parent_row_number": null, + "row_value": "91.02", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "91.02", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "170.00", + "turnover_credit": null, + "closing_debit": "170.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 14, + "level": 1, + "parent_row_number": 13, + "row_value": "91.02.1", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "170.00", + "turnover_credit": null, + "closing_debit": "170.00", + "closing_credit": null, + "extra": null + }, + { + "row_number": 15, + "level": 2, + "parent_row_number": 14, + "row_value": "Проценты к уплате", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "100.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 16, + "level": 3, + "parent_row_number": 15, + "row_value": "Проценты по займам", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "60.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 17, + "level": 3, + "parent_row_number": 15, + "row_value": "Проценты по кредитам", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "40.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 18, + "level": 2, + "parent_row_number": 14, + "row_value": "Прочие расходы", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "30.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 19, + "level": 3, + "parent_row_number": 18, + "row_value": "Затраты на нужды", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "20.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 20, + "level": 3, + "parent_row_number": 18, + "row_value": "Штрафы по договорам", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "10.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 21, + "level": 2, + "parent_row_number": 14, + "row_value": "Операционные расходы", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "40.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 22, + "level": 3, + "parent_row_number": 21, + "row_value": "Услуги банка", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.02.1", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": "40.00", + "turnover_credit": null, + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 23, + "level": 0, + "parent_row_number": null, + "row_value": "91.09", + "group_type": "ACCOUNT", + "group_name": "Субконто", + "account_code_raw": "91.09", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "70.00", + "closing_debit": null, + "closing_credit": "70.00", + "extra": null + }, + { + "row_number": 24, + "level": 1, + "parent_row_number": 23, + "row_value": "", + "group_type": "OTHER", + "group_name": null, + "account_code_raw": "91.09", + "counterparty_name": null, + "counterparty_inn": null, + "data_type": "BU", + "opening_debit": null, + "opening_credit": null, + "turnover_debit": null, + "turnover_credit": "70.00", + "closing_debit": null, + "closing_credit": null, + "extra": null + }, + { + "row_number": 25, + "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": null, + "turnover_debit": "170.00", + "turnover_credit": "170.00", + "closing_debit": "170.00", + "closing_credit": "170.00", + "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 3c1d262..062e283 100644 --- a/osv/synthetic/README.md +++ b/osv/synthetic/README.md @@ -64,6 +64,7 @@ cd tabular-parser/api | `s44_subkonto_unnamed_10.xlsx` | то же, что `s43`, но счёт 10 (материалы «Мука пшеничная», «Сахар-песок») | счёт 10 не расчётный: подстроки остаются `OTHER` без имени, предупреждения нет, `done` | | `s45_account_label_value_cells.xlsx` | выгрузка 1С «ОСВ по счёту 60 по контрагентам» (tabular-parser#71, AURORA-1714): слов «по счету» нет, счёт — «Счет Поставщика» \| «60*» в соседних ячейках, «Счет Клиента» без значения; в первой колонке голые числовые коды 441, 431, 199; период «За период» \| «01.01.25..30.06.25» | `account_code_raw=60`, 2025 Q2 нарастающий, голые коды не счета, строки `COUNTERPARTY`, `done` | | `s46_counterparty_code_blocks.xlsx` | та же выгрузка целиком: вид субконто «Поставщики» в колонке суммы первой строки данных; блоки субсчетов 60.111, 60.112 (сумм в строке нет); в блоке — код контрагента с суммами, строка названия без сумм, договоры (в том числе «441»); «ИТОГ по 60.111» с суммами блока; в конце «ИТОГ» | `hierarchy=code_blocks`, субсчета `ACCOUNT` с суммами из «ИТОГ по …», коды — `COUNTERPARTY` с названием, договоры — `CONTRACT`, строки «ИТОГ по …», названий и «Поставщики» в `rows` нет, «ИТОГ» — `TOTAL`, `done` | +| `s47_indent_hierarchy_code_sums.xlsx` | три листа «Субконто» без вида аналитики в шапке, иерархия по отступам (AURORA-1858, tabular-parser#78): «68 сч.» — подуровень `68.01.1` на том же отступе, что `68.01`; «90 сч.» — безымянная строка закрытия сразу за счётом `90.09` (пустая ячейка отступа не хранится); «91 сч.» — аналитика на одном отступе, вложенность видна только по суммам (`100 = 60 + 40`, `30 = 20 + 10`, `40 ⊃ 40`) | `hierarchy=indent`, `68.01.1` — ребёнок `68.01`, строка закрытия — ребёнок `90.09`/`91.09`, аналитика 91 вложена по суммам, три листа `done` | `s17`–`s19` — регрессия извлечения ИНН из текста (issue #9). `s14`–`s16` добавлены тестом покрытия словарей `tabular-parser` (`rules/*.yaml`, решение R-22): каждая запись словаря должна сработать на реальных или синтетических файлах; эти файлы закрывают записи, которых нет в реальных ОСВ. diff --git a/osv/synthetic/s47_indent_hierarchy_code_sums.xlsx b/osv/synthetic/s47_indent_hierarchy_code_sums.xlsx new file mode 100644 index 0000000..21f4255 Binary files /dev/null and b/osv/synthetic/s47_indent_hierarchy_code_sums.xlsx differ