feat: export state corp exchange sections
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 30s
CI/CD Pipeline / Build and Push Images (push) Successful in 22s
CI/CD Pipeline / Internal Notify (push) Successful in 0s
CI/CD Pipeline / Deploy Dev in Dokploy (push) Successful in 1s

This commit is contained in:
2026-05-27 23:13:40 +02:00
parent 76a99a4a1e
commit a5995e04b6
3 changed files with 293 additions and 9 deletions

View File

@@ -12,14 +12,21 @@ from unittest.mock import Mock, patch
from zipfile import ZipFile
from apps.exchange.state_corp_services import StateCorpExchangeService
from apps.parsers.models import GenericParserRecord, ParserLoadLog
from apps.parsers.models import (
FinancialReport,
FinancialReportLine,
GenericParserRecord,
ParserLoadLog,
)
from apps.registers.models import Register
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from django.test import TestCase, override_settings
from tests.apps.parsers.factories import (
IndustrialCertificateRecordFactory,
IndustrialProductRecordFactory,
InspectionRecordFactory,
ManufacturerRecordFactory,
ProcurementRecordFactory,
)
from tests.apps.registers.factories import (
@@ -78,6 +85,25 @@ class StateCorpExchangeServiceTest(TestCase):
started_at="2026-01-01",
ended_at=None,
)
IndustrialCertificateRecordFactory.create(
inn=str(organization.mn_inn),
ogrn=str(organization.mn_ogrn),
organisation_name=organization.pn_name,
certificate_number="cert-001",
issue_date="2026-01-10",
issue_date_normalized="2026-01-10",
expiry_date="2027-01-10",
expiry_date_normalized="2027-01-10",
certificate_file_url="https://minpromtorg.gov.ru/cert/001",
registry_organization=organization,
)
ManufacturerRecordFactory.create(
inn=str(organization.mn_inn),
ogrn=str(organization.mn_ogrn),
full_legal_name=organization.pn_name,
address="г. Москва, ул. Тверская, д. 1",
registry_organization=organization,
)
IndustrialProductRecordFactory.create(
inn=str(organization.mn_inn),
ogrn=str(organization.mn_ogrn),
@@ -114,6 +140,42 @@ class StateCorpExchangeServiceTest(TestCase):
max_price_amount="4500000.75",
registry_organization=organization,
)
financial_report = FinancialReport.objects.create(
external_id="fin-001",
ogrn=str(organization.mn_ogrn),
registry_organization=organization,
file_name="fin_001_1027700132195.xlsx",
file_hash="f" * 64,
load_batch=1,
status=FinancialReport.Status.SUCCESS,
source=FinancialReport.SourceType.API,
)
FinancialReportLine.objects.create(
report=financial_report,
form_code="1",
line_code="1600",
line_name="Баланс",
year=2025,
period_start=1000,
period_end=1500,
)
GenericParserRecord.objects.create(
source=ParserLoadLog.Source.PROCUREMENTS_44FZ,
load_batch=1,
external_id="purchase-generic-001",
inn=str(organization.mn_inn),
ogrn=str(organization.mn_ogrn),
title="Поставка generic-оборудования",
record_date="15.02.2026",
amount="2500000.00",
status="published",
payload={
"law": "44-ФЗ",
"registry_number": "purchase-generic-001",
"Окончание подачи заявок": "20.02.2026",
},
registry_organization=organization,
)
GenericParserRecord.objects.create(
source=ParserLoadLog.Source.ARBITRATION,
load_batch=1,
@@ -198,9 +260,12 @@ class StateCorpExchangeServiceTest(TestCase):
package = StateCorpExchangeService.build_package(actual_date="2026-03-15")
self.assertEqual(package.payload_counts["organizations"], 1)
self.assertEqual(package.payload_counts["industrial_certificates"], 1)
self.assertEqual(package.payload_counts["manufacturers"], 1)
self.assertEqual(package.payload_counts["industrial_products"], 1)
self.assertEqual(package.payload_counts["prosecutor_checks"], 1)
self.assertEqual(package.payload_counts["public_procurements"], 1)
self.assertEqual(package.payload_counts["public_procurements"], 2)
self.assertEqual(package.payload_counts["financial_reports"], 1)
self.assertEqual(package.payload_counts["arbitration_cases"], 1)
self.assertEqual(package.payload_counts["bankruptcy_procedures"], 1)
self.assertEqual(package.payload_counts["defense_unreliable_suppliers"], 1)
@@ -212,6 +277,14 @@ class StateCorpExchangeServiceTest(TestCase):
self.assertEqual(payload["format"], StateCorpExchangeService.PAYLOAD_FORMAT)
self.assertEqual(payload["manifest"]["source_system"], "mostovik")
self.assertEqual(payload["data"]["organizations"][0]["inn"], "7707083893")
self.assertEqual(
payload["data"]["industrial_certificates"][0]["certificate_number"],
"cert-001",
)
self.assertEqual(
payload["data"]["manufacturers"][0]["full_legal_name"],
"АО Альфа",
)
self.assertEqual(
payload["data"]["industrial_products"][0]["registry_number"],
"prod-001",
@@ -224,6 +297,10 @@ class StateCorpExchangeServiceTest(TestCase):
payload["data"]["public_procurements"][0]["purchase_number"],
"purchase-001",
)
self.assertEqual(
payload["data"]["financial_reports"][0]["lines"][0]["line_code"],
"1600",
)
self.assertEqual(
payload["data"]["arbitration_cases"][0]["case_number"],
"А40-1/2026",