fix: align reporting forms and demo analytics
All checks were successful
All checks were successful
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
"""Tests for FormF3 services."""
|
||||
|
||||
from decimal import Decimal
|
||||
from io import BytesIO
|
||||
|
||||
from apps.form_3.models import FormF3Record
|
||||
from apps.form_3.services import FormF3Parser, FormF3Service
|
||||
from django.test import TestCase
|
||||
from openpyxl import Workbook
|
||||
|
||||
from tests.apps.organization.factories import OrganizationFactory
|
||||
|
||||
@@ -48,6 +53,72 @@ class FormF3ServiceTest(TestCase):
|
||||
class FormF3ParserTest(TestCase):
|
||||
"""Tests for FormF3Parser."""
|
||||
|
||||
@staticmethod
|
||||
def _current_template_file() -> BytesIO:
|
||||
headers = [
|
||||
"Наименование организации",
|
||||
"ОКПО",
|
||||
"ОГРН",
|
||||
"ИНН",
|
||||
"Отгруженные товары собственного производства, выполненные работы и услуги собственными силами в фактических ценах - всего",
|
||||
"Отгруженные товары собственного производства, выполненные работы и услуги собственными силами в фактических ценах, из них инновационные товары, работы, услуги",
|
||||
"Всего основных фондов (без незавершенных активов и не включая земельные участки и объекты природопользования)",
|
||||
"Станочный парк и оборудование, всего по предприятию",
|
||||
"Станочный парк и оборудование - импортное оборудование",
|
||||
"Оборудование с возрастом от 5 до 10 лет",
|
||||
"Оборудование с возрастом до 5 лет",
|
||||
"Фактический (физический) износ оборудования, %",
|
||||
"Средний уровень загрузки производственных мощностей (всего)",
|
||||
"Средний уровень загрузки производственных мощностей военного производства",
|
||||
"Средний возраст сотрудников",
|
||||
"Количество работников предприятия до 20 лет",
|
||||
"Количество работников предприятия 20-29 лет",
|
||||
"Количество работников предприятия 30-39 лет",
|
||||
"Количество работников предприятия 40-49 лет",
|
||||
"Количество работников предприятия 50-59 лет",
|
||||
"Количество работников предприятия старше 60 лет",
|
||||
]
|
||||
workbook = Workbook()
|
||||
sheet = workbook.active
|
||||
sheet.append(headers)
|
||||
sheet.append(
|
||||
[None, None, None, None]
|
||||
+ ["тыс. руб."] * 3
|
||||
+ ["ед."] * 4
|
||||
+ ["%"] * 3
|
||||
+ ["лет"]
|
||||
+ ["чел."] * 6
|
||||
)
|
||||
sheet.append(
|
||||
[
|
||||
"Тестовая организация Ф-3",
|
||||
"90000001",
|
||||
"1267700000017",
|
||||
"3234567890",
|
||||
352,
|
||||
222,
|
||||
85,
|
||||
46,
|
||||
17,
|
||||
13,
|
||||
14,
|
||||
21,
|
||||
79,
|
||||
65,
|
||||
42,
|
||||
4,
|
||||
18,
|
||||
28,
|
||||
26,
|
||||
17,
|
||||
7,
|
||||
]
|
||||
)
|
||||
file = BytesIO()
|
||||
workbook.save(file)
|
||||
file.seek(0)
|
||||
return file
|
||||
|
||||
def test_get_column_mappings_returns_mappings(self):
|
||||
"""Test get_column_mappings returns correct mappings."""
|
||||
parser = FormF3Parser(report_year=2026, report_quarter=1)
|
||||
@@ -57,8 +128,24 @@ class FormF3ParserTest(TestCase):
|
||||
self.assertTrue(len(mappings) > 0)
|
||||
|
||||
field_names = [m.field_name for m in mappings]
|
||||
self.assertIn("avg_employees", field_names)
|
||||
self.assertIn("total_equipment", field_names)
|
||||
self.assertIn("shipped_goods_total", field_names)
|
||||
self.assertIn("machine_tools_and_equipment", field_names)
|
||||
self.assertIn("average_employee_age", field_names)
|
||||
self.assertNotIn("avg_employees", field_names)
|
||||
|
||||
def test_parse_current_template_maps_equipment_and_personnel_columns(self):
|
||||
OrganizationFactory.create(inn="3234567890")
|
||||
parser = FormF3Parser(report_year=2026, report_quarter=1)
|
||||
|
||||
result = parser.parse(self._current_template_file())
|
||||
|
||||
self.assertEqual(result.loaded_count, 1)
|
||||
record = FormF3Record.objects.get()
|
||||
self.assertEqual(record.shipped_goods_total, Decimal("352"))
|
||||
self.assertEqual(record.machine_tools_and_equipment, 46)
|
||||
self.assertEqual(record.imported_equipment, 17)
|
||||
self.assertEqual(record.average_employee_age, Decimal("42"))
|
||||
self.assertEqual(record.employees_30_39, 28)
|
||||
|
||||
def test_create_record_uses_existing_organization(self):
|
||||
"""Report imports reuse existing organizations when available."""
|
||||
@@ -69,8 +156,8 @@ class FormF3ParserTest(TestCase):
|
||||
row_data = {
|
||||
"inn": "3234567890",
|
||||
"name": "Тестовая организация Ф-3",
|
||||
"avg_employees": 100,
|
||||
"total_equipment": 50,
|
||||
"machine_tools_and_equipment": 50,
|
||||
"average_employee_age": 42,
|
||||
}
|
||||
|
||||
record = parser.create_record(row_data)
|
||||
|
||||
Reference in New Issue
Block a user