From 868e0065f39c2171dc4b34d21566f0869999d563 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Wed, 5 Aug 2026 02:01:45 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80=20?= =?UTF-8?q?=D1=87=D0=B8=D1=81=D0=B5=D0=BB=20=D0=BF=D0=BE=D0=BD=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=BE=D1=81=D0=BD=D0=B8=D0=BA=D0=B0=20=C2=AB?= =?UTF-8?q?121=20118=20270=20=D1=80=D1=83=D0=B1=C2=BB=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=D1=81=D1=87=D1=91=D1=82=208/9=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=BB=20=D1=81=20=D0=BF=D1=83?= =?UTF-8?q?=D1=81=D1=82=D1=8B=D0=BC=D0=B8=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=BC=D0=B8);=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=208=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=BC=20=D0=B4=D0=BB=D1=8F=20=D0=BE=D1=80=D0=B3=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B9=20=D0=9E=D0=9F=D0=9A?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D1=81=D1=84=D0=B5=D1=80=D0=B5=20=D0=BE=D0=B1?= =?UTF-8?q?=D1=8A=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dokogen/ui.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/dokogen/ui.py b/dokogen/ui.py index 6fecafd..f6c8b56 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -2189,7 +2189,12 @@ class DokoGenApp: import re as _re2 def _num(s): - s = str(s or '').replace(' ', '').replace('\u00a0', '') + # «121 118 270 руб», «1 000», «906 779 руб», «2 212.5» → число + s = str(s or '').strip() + if not s: + return None + s = s.replace('\u00a0', ' ').replace(' ', '')\ + .replace('руб', '').replace('₽', '').replace('р.', '').replace(',', '.') try: return float(s) except Exception: @@ -2619,7 +2624,11 @@ class DokoGenApp: - остальные применимые показатели — оставляются оператору. """ def _num2(s): - s = str(s or '').replace(' ', '').replace('\u00a0', '') + s = str(s or '').strip() + if not s: + return None + s = s.replace('\u00a0', ' ').replace(' ', '')\ + .replace('руб', '').replace('₽', '').replace('р.', '').replace(',', '.') try: return float(s) except Exception: @@ -2630,7 +2639,14 @@ class DokoGenApp: is_special = any(k in org for k in [ 'госкорпорац', 'государственная корпорация', 'гуп', 'фгуп', 'государственное унитарное предприятие', 'государственная компания', - 'росатом', 'роскосмос', 'ростех', 'вэб']) + 'росатом', 'роскосмос', 'ростех', 'вэб', + 'оборонно-промышленн', 'опк', 'стратегическ']) + # Показатель 8 применим и для организаций ОПК (сфера объекта) — + # «организация оборонно-промышленного комплекса» (п. 8 ПП 127) + if not is_special: + _sphere8 = (getattr(isys, 'sphere', '') or '').lower() + if any(k in _sphere8 for k in ['оборон', 'опк']): + is_special = True filled = [] for num, name, values, var, applicable_here in rows: if not applicable_here: