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: