fix: парсер чисел понимает формат опросника «121 118 270 руб» (авторасчёт 8/9 работал с пустыми данными); показатель 8 применим для организаций ОПК по сфере объекта

This commit is contained in:
2026-08-05 02:01:45 +04:00
parent 5591dc2c5b
commit 868e0065f3
+19 -3
View File
@@ -2189,7 +2189,12 @@ class DokoGenApp:
import re as _re2 import re as _re2
def _num(s): 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: try:
return float(s) return float(s)
except Exception: except Exception:
@@ -2619,7 +2624,11 @@ class DokoGenApp:
- остальные применимые показатели — оставляются оператору. - остальные применимые показатели — оставляются оператору.
""" """
def _num2(s): 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: try:
return float(s) return float(s)
except Exception: except Exception:
@@ -2630,7 +2639,14 @@ class DokoGenApp:
is_special = any(k in org for k in [ 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 = [] filled = []
for num, name, values, var, applicable_here in rows: for num, name, values, var, applicable_here in rows:
if not applicable_here: if not applicable_here: