Добавлено парсирование формы 14 и сохранение финансовых отчетов в базу данных; добавлена миграция для начальных данных типов документов

This commit is contained in:
Dmitry
2026-03-25 09:48:22 +03:00
parent 207e4b45a7
commit 7ee21d5e5d
5 changed files with 151 additions and 37 deletions
+16 -27
View File
@@ -11,8 +11,11 @@ class ReportParser
form_11_data = ReportParsers::Form11Parser.new(@yearly_file, spreadsheet: spreadsheet).call
form_12_data = ReportParsers::Form12Parser.new(@yearly_file, spreadsheet: spreadsheet).call
form_14_data = ReportParsers::Form14Parser.new(@yearly_file, spreadsheet: spreadsheet).call
merge_financial_statements(form_11_data, form_12_data)
save_form_statements(form_11_data, 1) # 1 - Бух. баланс
save_form_statements(form_12_data, 2) # 2 - Отчет о фин. результатах
save_form_statements(form_14_data, 4) # 4 - Отчет о движении денежных средств
end
end
@@ -28,35 +31,21 @@ class ReportParser
end
end
def merge_financial_statements(form_11_data, form_12_data)
document_type = DocumentType.find_or_create_by!(name: 'Финансовые данные')
def save_form_statements(form_data, form_id)
document_type = DocumentType.find_by(id: form_id)
raise "DocumentType with id=#{form_id} not found!" unless document_type
all_years = (form_11_data.keys + form_12_data.keys).uniq
form_data.each do |year, data|
rows = data[:rows] || data['rows'] || []
next if rows.blank?
all_years.each do |year|
statement = find_or_build_statement(document_type, year)
all_rows = []
if form_11_data[year].present?
form_11_rows = form_11_data[year][:rows] || form_11_data[year]['rows'] || []
all_rows.concat(form_11_rows)
end
if form_12_data[year].present?
form_12_rows = form_12_data[year][:rows] || form_12_data[year]['rows'] || []
all_rows.concat(form_12_rows)
end
if all_rows.present?
payload = {
data_year: year,
rows: all_rows
}
statement.assign_attributes(data: payload)
statement.save!
end
payload = {
data_year: year,
rows: rows
}
statement.assign_attributes(data: payload)
statement.save!
end
end