From 4484126e8f85c18438a66f3e6b1fb54654355e4c Mon Sep 17 00:00:00 2001 From: Dmitry Date: Wed, 8 Apr 2026 15:35:21 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D1=82=D1=8C=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B8=D0=BC=D0=B2=D0=BE?= =?UTF-8?q?=D0=BB=D1=8B=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D0=B5=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/report_parsers/base_parser.rb | 11 +++++++++++ app/services/report_parsers/form11_parser.rb | 3 +-- app/services/report_parsers/form12_parser.rb | 2 +- app/services/report_parsers/form14_parser.rb | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/services/report_parsers/base_parser.rb b/app/services/report_parsers/base_parser.rb index 232bc1b..2e51a10 100644 --- a/app/services/report_parsers/base_parser.rb +++ b/app/services/report_parsers/base_parser.rb @@ -96,5 +96,16 @@ module ReportParsers .gsub(/[«»]/, '') .strip end + + def normalize_line_name(value) + text = value.to_s + .tr("\u00A0", ' ') + .gsub(/[⁰¹²³⁴⁵⁶⁷⁸⁹]/, '') + .gsub(/(?<=\p{L})\d{1,2}(?=\s|\z)/u, '') + .gsub(/\s+/, ' ') + .strip + + text.presence + end end end diff --git a/app/services/report_parsers/form11_parser.rb b/app/services/report_parsers/form11_parser.rb index c060aa7..1e86f87 100644 --- a/app/services/report_parsers/form11_parser.rb +++ b/app/services/report_parsers/form11_parser.rb @@ -2,7 +2,6 @@ module ReportParsers class Form11Parser < BaseParser SHEET_NAME = 'Бухгалтерский баланс' FORM_CODE = '1.1' - # Add line codes or names that should be skipped during parsing. IGNORED_KEYS = [2].freeze def call @@ -27,7 +26,7 @@ module ReportParsers end all_rows = (header_row + 1).upto(sheet.last_row).filter_map do |row| - line_name = read_cell(sheet, row, columns[:name_column]) + line_name = normalize_line_name(read_cell(sheet, row, columns[:name_column])) line_code = read_cell(sheet, row, columns[:code_column]).to_s.strip.presence next if ignored_row?(line_name, line_code) diff --git a/app/services/report_parsers/form12_parser.rb b/app/services/report_parsers/form12_parser.rb index aae3880..12df2d8 100644 --- a/app/services/report_parsers/form12_parser.rb +++ b/app/services/report_parsers/form12_parser.rb @@ -25,7 +25,7 @@ module ReportParsers end all_rows = (header_row + 1).upto(sheet.last_row).filter_map do |row| - line_name = read_cell(sheet, row, columns[:name_column]) + line_name = normalize_line_name(read_cell(sheet, row, columns[:name_column])) line_code = read_cell(sheet, row, columns[:code_column]).to_s.strip.presence next if ignored_row?(line_name, line_code) diff --git a/app/services/report_parsers/form14_parser.rb b/app/services/report_parsers/form14_parser.rb index 1e7f8f8..22e805c 100644 --- a/app/services/report_parsers/form14_parser.rb +++ b/app/services/report_parsers/form14_parser.rb @@ -25,7 +25,7 @@ module ReportParsers end all_rows = (header_row + 1).upto(sheet.last_row).filter_map do |row| - line_name = read_cell(sheet, row, columns[:name_column]) + line_name = normalize_line_name(read_cell(sheet, row, columns[:name_column])) line_code = read_cell(sheet, row, columns[:code_column]).to_s.strip.presence next if ignored_row?(line_name, line_code)