fix
This commit is contained in:
parent
fb83c8c805
commit
7beeb710ce
@ -72,6 +72,7 @@ COL_EIO_ADDRESS_ONE_LINE = _index(167)
|
|||||||
|
|
||||||
# ЕИО и ценные бумаги.
|
# ЕИО и ценные бумаги.
|
||||||
COL_EIO_INN = _index(163)
|
COL_EIO_INN = _index(163)
|
||||||
|
COL_EIO_OTHER_INFO = _index(164)
|
||||||
COL_EIO_REG_PLACE_ONE_LINE = _index(178)
|
COL_EIO_REG_PLACE_ONE_LINE = _index(178)
|
||||||
COL_EIO_REG_PLACE_STRUCTURED = _index(179)
|
COL_EIO_REG_PLACE_STRUCTURED = _index(179)
|
||||||
COL_CP_ISSUER_INN = _index(202)
|
COL_CP_ISSUER_INN = _index(202)
|
||||||
|
|||||||
@ -22,6 +22,7 @@ from .column_constants import (
|
|||||||
COL_CURRENCY,
|
COL_CURRENCY,
|
||||||
COL_EIO_ADDRESS_ONE_LINE,
|
COL_EIO_ADDRESS_ONE_LINE,
|
||||||
COL_EIO_INN,
|
COL_EIO_INN,
|
||||||
|
COL_EIO_OTHER_INFO,
|
||||||
COL_EIO_REG_PLACE_ONE_LINE,
|
COL_EIO_REG_PLACE_ONE_LINE,
|
||||||
COL_EIO_REG_PLACE_STRUCTURED,
|
COL_EIO_REG_PLACE_STRUCTURED,
|
||||||
COL_EMPLOYEE_SIGN,
|
COL_EMPLOYEE_SIGN,
|
||||||
@ -145,6 +146,15 @@ _OPERATION_DOCUMENT_FIELD = re.compile(
|
|||||||
r"(?:^|\.)ОснованиеОп(?:\[(?P<index>\d+)\])?\."
|
r"(?:^|\.)ОснованиеОп(?:\[(?P<index>\d+)\])?\."
|
||||||
r"(?P<field>КодДок|ИноеНаимДок|ДатаДок|НомДок|СодДок)$"
|
r"(?P<field>КодДок|ИноеНаимДок|ДатаДок|НомДок|СодДок)$"
|
||||||
)
|
)
|
||||||
|
_EIO_PERSON_BASE_PATHS = ("УчастникЮЛ.СведЕИО.ФЛЕИО",)
|
||||||
|
_EIO_OTHER_INFO_FIELDS = (
|
||||||
|
("СНИЛС", "СНИЛСФЛ"),
|
||||||
|
("ОМС", "ПолисНомер"),
|
||||||
|
("Номер телефона", "ТелефонНомер"),
|
||||||
|
("Дата рождения", "ДатаРождения"),
|
||||||
|
("Тип ФЛ, занимающегося частной практикой", "ТипФЛЧастнаяПрактика"),
|
||||||
|
("Регистрационный номер", "РегнНомер"),
|
||||||
|
)
|
||||||
_EIO_BLOCK_NAMES = (
|
_EIO_BLOCK_NAMES = (
|
||||||
"СведЕИО",
|
"СведЕИО",
|
||||||
"БенефициарЮЛ",
|
"БенефициарЮЛ",
|
||||||
@ -470,6 +480,11 @@ def build_fixed_row_by_index(
|
|||||||
COL_OPERATION_DOCUMENTS,
|
COL_OPERATION_DOCUMENTS,
|
||||||
_format_operation_documents(operation_lookup),
|
_format_operation_documents(operation_lookup),
|
||||||
)
|
)
|
||||||
|
_set(
|
||||||
|
row,
|
||||||
|
COL_EIO_OTHER_INFO,
|
||||||
|
_format_eio_other_info(participant_eio_lookup),
|
||||||
|
)
|
||||||
if not is_continuation:
|
if not is_continuation:
|
||||||
_apply_participant_identity_rules(row, participant_lookup)
|
_apply_participant_identity_rules(row, participant_lookup)
|
||||||
# Сначала убираем запрещённые однострочные адреса, чтобы структурная
|
# Сначала убираем запрещённые однострочные адреса, чтобы структурная
|
||||||
@ -671,8 +686,26 @@ def _format_operation_documents(lookup: _PayloadLookup) -> str:
|
|||||||
fields = [
|
fields = [
|
||||||
document.get(field_name, "") for field_name in _OPERATION_DOCUMENT_FIELDS
|
document.get(field_name, "") for field_name in _OPERATION_DOCUMENT_FIELDS
|
||||||
]
|
]
|
||||||
formatted_documents.append(f"{position}. {', '.join(fields)}")
|
fields.insert(1, "")
|
||||||
return "; ".join(formatted_documents)
|
formatted_documents.append(f"{position}, {', '.join(fields)};")
|
||||||
|
return "\n".join(formatted_documents)
|
||||||
|
|
||||||
|
|
||||||
|
def _format_eio_other_info(lookup: _PayloadLookup) -> str:
|
||||||
|
values: list[tuple[str, str]] = []
|
||||||
|
for label, field_name in _EIO_OTHER_INFO_FIELDS:
|
||||||
|
value = ""
|
||||||
|
for base_path in _EIO_PERSON_BASE_PATHS:
|
||||||
|
value = _lookup_pick_scoped_value(lookup, f"{base_path}.{field_name}")
|
||||||
|
if value:
|
||||||
|
break
|
||||||
|
values.append((label, value))
|
||||||
|
|
||||||
|
if not any(value for _, value in values):
|
||||||
|
return ""
|
||||||
|
lines = [f"{label}: {value}" for label, value in values]
|
||||||
|
lines.append("Дата регистрации: ")
|
||||||
|
return "\n".join(lines)
|
||||||
|
|
||||||
|
|
||||||
def _apply_participant_identity_rules(
|
def _apply_participant_identity_rules(
|
||||||
|
|||||||
@ -3265,12 +3265,12 @@
|
|||||||
"column_name": "Иные сведения ЕИО/Бенефициара",
|
"column_name": "Иные сведения ЕИО/Бенефициара",
|
||||||
"block": "eio",
|
"block": "eio",
|
||||||
"report_group": "eio",
|
"report_group": "eio",
|
||||||
"xml_tag": "СНИЛСФЛ|ПолисНомер|ТелефонНомер",
|
"xml_tag": "СНИЛСФЛ|ПолисНомер|ТелефонНомер|ДатаРождения|ТипФЛЧастнаяПрактика|РегнНомер",
|
||||||
"xml_path": "/СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/СНИЛСФЛ | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/БенефициарЮЛ/ФЛБенефициар/СНИЛСФЛ | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ПолисНомер | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/БенефициарЮЛ/ФЛБенефициар/ПолисНомер | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ТелефонНомер | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/БенефициарЮЛ/ФЛБенефициар/ТелефонНомер",
|
"xml_path": "/СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/СНИЛСФЛ | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ПолисНомер | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ТелефонНомер | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ДатаРождения | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/ТипФЛЧастнаяПрактика | /СообщОперКО/ИнформЧасть/СведКО/Операция/УчастникОП/УчастникЮЛ/СведЕИО/ФЛЕИО/РегнНомер",
|
||||||
"source_scope": "participant",
|
"source_scope": "participant",
|
||||||
"allow_short_lookup": false,
|
"allow_short_lookup": false,
|
||||||
"allow_direct_mapping": true,
|
"allow_direct_mapping": false,
|
||||||
"structured_value": true,
|
"structured_value": false,
|
||||||
"structured_group": "",
|
"structured_group": "",
|
||||||
"structured_role": "",
|
"structured_role": "",
|
||||||
"structured_order": 0,
|
"structured_order": 0,
|
||||||
|
|||||||
@ -848,9 +848,9 @@ def test_operation_documents_keep_positions_and_join_multiple_documents() -> Non
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert row[107] == (
|
assert row[107] == (
|
||||||
"1. 13, , 29/01/2026, 253, Размещение денежных средств; "
|
"1, 13, , , 29/01/2026, 253, Размещение денежных средств;\n"
|
||||||
"2. 99, Депозитный договор, 29/01/2026, Р202307/0001/93/Э, ; "
|
"2, 99, , Депозитный договор, 29/01/2026, Р202307/0001/93/Э, ;\n"
|
||||||
"3. 99, Общие условия размещения депозитов, 17/11/2020, Р202307/0001, "
|
"3, 99, , Общие условия размещения депозитов, 17/11/2020, Р202307/0001, ;"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1128,10 +1128,36 @@ def test_eio_other_info_combines_snils_and_phone() -> None:
|
|||||||
participant_fields={
|
participant_fields={
|
||||||
"УчастникЮЛ.СведЕИО.ФЛЕИО.СНИЛСФЛ": "123-456-789 00",
|
"УчастникЮЛ.СведЕИО.ФЛЕИО.СНИЛСФЛ": "123-456-789 00",
|
||||||
"УчастникЮЛ.СведЕИО.ФЛЕИО.ТелефонНомер": "+7 999 123-45-67",
|
"УчастникЮЛ.СведЕИО.ФЛЕИО.ТелефонНомер": "+7 999 123-45-67",
|
||||||
|
"УчастникЮЛ.СведЕИО.ФЛЕИО.ДатаРождения": "03/07/1984",
|
||||||
|
"УчастникЮЛ.СведЕИО.ФЛЕИО.ТипФЛЧастнаяПрактика": "2",
|
||||||
|
"УчастникЮЛ.СведЕИО.ФЛЕИО.РегнНомер": "77-12345",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
assert row[164] == "123-456-789 00, +7 999 123-45-67"
|
assert row[164] == (
|
||||||
|
"СНИЛС: 123-456-789 00\n"
|
||||||
|
"ОМС: \n"
|
||||||
|
"Номер телефона: +7 999 123-45-67\n"
|
||||||
|
"Дата рождения: 03/07/1984\n"
|
||||||
|
"Тип ФЛ, занимающегося частной практикой: 2\n"
|
||||||
|
"Регистрационный номер: 77-12345\n"
|
||||||
|
"Дата регистрации: "
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_eio_other_info_stays_empty_for_beneficiary_only_fields() -> None:
|
||||||
|
row = build_fixed_row_by_index(
|
||||||
|
file_name="f.xml",
|
||||||
|
record_id="R1",
|
||||||
|
operation_index=1,
|
||||||
|
operation_fields={},
|
||||||
|
participant_fields={
|
||||||
|
"УчастникЮЛ.БенефициарЮЛ.ФЛБенефициар.СНИЛСФЛ": "074-115-177 38",
|
||||||
|
"УчастникЮЛ.БенефициарЮЛ.ФЛБенефициар.ДатаРождения": "18/02/1981",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert row[164] == ""
|
||||||
|
|
||||||
|
|
||||||
def test_participant_and_beneficiary_inn_are_scoped_regardless_of_field_order() -> None:
|
def test_participant_and_beneficiary_inn_are_scoped_regardless_of_field_order() -> None:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user