fix(parsers): disambiguate ROPK organizations by OKPO
All checks were successful
CI/CD Pipeline / Quality Gate (push) Successful in 1m13s
CI/CD Pipeline / Build and Push Images (push) Successful in 18s
CI/CD Pipeline / Internal Notify (push) Successful in 1s
CI/CD Pipeline / Deploy Dev via Compose (push) Successful in 31s

This commit is contained in:
2026-08-20 18:20:48 +02:00
parent 7c50cf82ad
commit c6f313090e
2 changed files with 45 additions and 3 deletions

View File

@@ -159,7 +159,7 @@ def _resolve_organization(
return None, "missing_required_value"
if inn and ogrn:
candidates = list(directory.filter(inn=inn, ogrn=ogrn)[:2])
candidates = list(directory.filter(inn=inn, ogrn=ogrn, okpo=okpo)[:2])
if len(candidates) > 1:
return None, "organization_ambiguous"
if not candidates:
@@ -172,8 +172,6 @@ def _resolve_organization(
else "organization_not_found"
)
organization = candidates[0]
if organization.okpo != okpo:
return None, "identifier_mismatch"
else:
candidates = list(directory.filter(okpo=okpo)[:2])
if len(candidates) > 1:

View File

@@ -131,6 +131,50 @@ class RopkSanctionsImportTest(TestCase):
self.assertEqual(record.extension.organization.inn, "0012345678")
self.assertEqual(record.extension.organization.ogrn, "1027700132195")
def test_import_uses_okpo_to_disambiguate_duplicate_inn_and_ogrn(self):
Organization.objects.create(
name="Филиал с другим ОКПО",
inn=self.organization.inn,
ogrn=self.organization.ogrn,
okpo="00999999",
opk_registry_membership=True,
directory_imported_at=timezone.now(),
)
_, result = import_ropk_sanctions(
handle=_workbook([_row("pair-duplicate")]),
original_name="sanctions.xlsx",
load_batch=22,
uploaded_by_id=None,
)
self.assertEqual(result.published, 1)
self.assertEqual(result.quarantined, 0)
record = OrganizationSourceRecord.objects.get()
self.assertEqual(record.extension.organization_id, self.organization.uid)
def test_import_quarantines_duplicate_inn_ogrn_and_okpo(self):
Organization.objects.create(
name="Полный дубль идентификаторов",
inn=self.organization.inn,
ogrn=self.organization.ogrn,
okpo=self.organization.okpo,
opk_registry_membership=True,
directory_imported_at=timezone.now(),
)
_, result = import_ropk_sanctions(
handle=_workbook([_row("triple-duplicate")]),
original_name="sanctions.xlsx",
load_batch=23,
uploaded_by_id=None,
)
self.assertEqual(result.published, 0)
self.assertEqual(result.quarantined, 1)
self.assertEqual(result.reasons, {"organization_ambiguous": 1})
self.assertFalse(OrganizationSourceRecord.objects.exists())
def test_import_preserves_full_fourteen_digit_okpo(self):
self.organization.okpo = "00123456789012"
self.organization.save(update_fields=["okpo"])