From a16f5740cb155cf66e4981c1d6d31922d15abea7 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Mon, 3 Aug 2026 17:34:04 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20=D0=B1=D0=B5=D1=80=D1=91=D1=82=20=D1=81?= =?UTF-8?q?=D0=BA=D0=BB=D0=BE=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8=20(=D0=B8=D0=BD=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0),=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D1=87=D0=B8=D1=82=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - {{company_full_name_genitive}} и др. теперь сначала берут готовое склонение из company_name_N / short_name_N (то, что пользователь подставил через Морфер/ИИ или ввёл вручную) - пересчёт через pymorphy — только если поле пустое - раньше документ всегда пересчитывал заново → расхождение с интерфейсом --- dokogen/variables.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/dokogen/variables.py b/dokogen/variables.py index d96f21b..dd79232 100644 --- a/dokogen/variables.py +++ b/dokogen/variables.py @@ -392,7 +392,21 @@ def _resolve(source: str, ctx: Dict) -> str: if source.startswith('decl:'): _, field, case = source.split(':') name = getattr(company, field, '') or '' - return dc.company_name_decline(name, case) if name else '—' + case_gr = dc._normalize_case(case) + # Сначала берём ГОТОВОЕ склонение из модели (пользователь мог + # подставить через Морфер/ИИ или ввести вручную), пересчитываем + # только если поле пустое + case_idx = {'nomn': 1, 'gent': 2, 'datv': 3, 'accs': 4, 'ablt': 5, 'loct': 6}.get(case_gr) + if case_idx: + if field == 'full_name': + ready = getattr(company, f'company_name_{case_idx}', '') or '' + if ready: + return ready + elif field == 'short_name': + ready = getattr(company, f'short_name_{case_idx}', '') or '' + if ready: + return ready + return dc.company_name_decline(name, case_gr) if name else '—' # Форматы ФИО if source.startswith('short_fio:'):