From 6f52360c494d807b845e73783340358d2afac45a Mon Sep 17 00:00:00 2001 From: PotapovaA Date: Tue, 27 Oct 2026 17:44:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B5=D0=B4=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=89=D0=B8=D0=B9=D1=85=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=20=D0=B2=20EliminationRuleOut?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/schemas/consolidations.py | 2 ++ api/src/services/elimination_rules.py | 2 ++ api/tests/test_api_intercompany_matrix.py | 4 +++- openspec/specs/consolidations-api/spec.md | 3 ++- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/api/src/schemas/consolidations.py b/api/src/schemas/consolidations.py index 0215801..6b602cd 100644 --- a/api/src/schemas/consolidations.py +++ b/api/src/schemas/consolidations.py @@ -322,6 +322,8 @@ class EliminationRuleOut(BaseModel): rule_no: int version_no: int statement_type: StatementType + article_1_line: str + article_2_line: str side_1: Literal["D", "K"] measure: Literal["closing", "turnover"] company_1: IntercompanyMatrixRuleSideOut diff --git a/api/src/services/elimination_rules.py b/api/src/services/elimination_rules.py index b5a00c8..2b57aa5 100644 --- a/api/src/services/elimination_rules.py +++ b/api/src/services/elimination_rules.py @@ -39,6 +39,8 @@ class EliminationRuleService: "rule_no": rule.rule_no, "version_no": rule.version_no, "statement_type": rule.statement_type, + "article_1_line": rule.article_1_line, + "article_2_line": rule.article_2_line, "side_1": rule.side_1, "measure": rule.measure, "company_1": IntercompanyMatrixRuleSideOut(accounts=[], excluded=[]), diff --git a/api/tests/test_api_intercompany_matrix.py b/api/tests/test_api_intercompany_matrix.py index a21275e..c732c74 100644 --- a/api/tests/test_api_intercompany_matrix.py +++ b/api/tests/test_api_intercompany_matrix.py @@ -234,7 +234,9 @@ async def test_preset_uses_fixed_rules_version(auth_client: AuthClientFactory, s assert listed.json()["is_version_fixed"] is True assert listed.json()["version_no"] == rule.version_no assert "as_of" not in listed.json() - assert str(rule.id) in {item["id"] for item in listed.json()["rules"]} + listed_rule = next(item for item in listed.json()["rules"] if item["id"] == str(rule.id)) + assert listed_rule["article_1_line"] == rule.article_1_line + assert listed_rule["article_2_line"] == rule.article_2_line pairs = await client.get( f"/consolidations/versions/{world.version.id}/elimination-pairs", params={ diff --git a/openspec/specs/consolidations-api/spec.md b/openspec/specs/consolidations-api/spec.md index 989b5d1..2ba2b83 100644 --- a/openspec/specs/consolidations-api/spec.md +++ b/openspec/specs/consolidations-api/spec.md @@ -294,7 +294,8 @@ policy) SHALL возвращать XLSX с теми же статьями, ко SHALL возвращать объект `{version_no, is_version_fixed, rules}`: `version_no` — `consolidation_version.elimination_rules_version` (с DBML v5.23 задан у каждой версии), `is_version_fixed = true` (поле оставлено для совместимости клиента), `rules` — правила этой версии; правила других версий, в том числе более новых, MUST NOT попадать в ответ. Каждое правило SHALL -содержать `id`, `rule_no`, `version_no`, `statement_type`, `side_1` (`D`/`K`), `measure` (`closing`/`turnover`), +содержать `id`, `rule_no`, `version_no`, `statement_type`, `article_1_line`, `article_2_line`, `side_1` (`D`/`K`), +`measure` (`closing`/`turnover`), `company_1`, `company_2`; каждая сторона SHALL содержать `accounts: UUID[]` и `excluded: UUID[]` до раскрытия иерархии счетов. Невидимая и несуществующая версия SHALL отвечать одинаковым 404 `NOT_FOUND`.