From 7aeca7a45a20da52b2b018743f2dd2c51afa5da5 Mon Sep 17 00:00:00 2001 From: Raykov-MS Date: Mon, 24 Aug 2026 12:22:33 +0300 Subject: [PATCH] . --- app/pipeline/parser.py | 2 +- tests/unit/test_parser.py | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/app/pipeline/parser.py b/app/pipeline/parser.py index 70f28af..b7fc2ae 100644 --- a/app/pipeline/parser.py +++ b/app/pipeline/parser.py @@ -189,7 +189,7 @@ def _build_expanded_rows( file_name=file_name, operation_index=operation_index, record_id=record_id, - operation_fields={}, + operation_fields=operation_rows[0], participant_fields=participant_fields, is_continuation=True, ) diff --git a/tests/unit/test_parser.py b/tests/unit/test_parser.py index 20a41c6..912268b 100644 --- a/tests/unit/test_parser.py +++ b/tests/unit/test_parser.py @@ -208,10 +208,12 @@ def test_parse_xml_expands_documents_and_eio_into_additive_rows() -> None: base_row.participant_fields["УчастникЮЛ.СведЕИО.ФЛЕИО.ИННФЛИП"] == "111111111111" ) - assert second_document.operation_fields == {} + assert second_document.operation_fields == base_row.operation_fields assert second_document.is_continuation assert second_document.participant_fields == {"Документ.НомДок": "DOC-2"} + assert third_document.operation_fields == base_row.operation_fields assert third_document.participant_fields == {"Документ.НомДок": "DOC-3"} + assert second_eio.operation_fields == base_row.operation_fields assert second_eio.participant_fields == { "УчастникЮЛ.СведЕИО.ЮЛЕИО.ИННЮЛ": "2222222222" } @@ -247,6 +249,41 @@ def test_parse_xml_separates_single_eio_and_single_beneficiary() -> None: } +def test_beneficiary_continuation_keeps_full_operation_context() -> None: + xml = _base_xml( + """ +<Операция> + <ИдентификаторЗаписи>OP-BENEFICIARY + <НомерОперация>ЦФТ-БАНК_1361473945637 + <СумОперации>1500.00 + <УчастникОп> + <ТипУчастника>1 + <УчастникЮЛ> + <БенефициарЮЛ> + <ФЛБенефициар><ИННФЛИП>111111111111 + + <БенефициарЮЛ> + <ФЛБенефициар><ИННФЛИП>222222222222 + + + + +""" + ) + + result = parse_xml_content("SKO115FZ_01_123456789_20260616_X00001.xml", xml) + + assert len(result.rows) == 2 + main_row, beneficiary_continuation = result.rows + assert beneficiary_continuation.is_continuation + assert beneficiary_continuation.operation_fields == main_row.operation_fields + assert ( + beneficiary_continuation.operation_fields["НомерОперация"] + == "ЦФТ-БАНК_1361473945637" + ) + assert beneficiary_continuation.operation_fields["СумОперации"] == "1500.00" + + def test_operation_repeats_are_collapsed_once_for_two_participants() -> None: xml = _base_xml( """