Опросник: добавлен словарь criterion_fields (20 показателей ПП-127), импортёр распознаёт строки «Показатель N …» в листе объекта и складывает в criterion_input; фильтр по сфере (берутся только применимые показатели)
This commit is contained in:
@@ -319,5 +319,127 @@
|
|||||||
"cell": "",
|
"cell": "",
|
||||||
"keywords": "журнал учета посетителей|журнал учёта посетителей"
|
"keywords": "журнал учета посетителей|журнал учёта посетителей"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"criterion_fields": [
|
||||||
|
{
|
||||||
|
"num": "1",
|
||||||
|
"name": "Максимальное число пострадавших людей",
|
||||||
|
"keywords": "пострадавш",
|
||||||
|
"unit": "человек"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "2б",
|
||||||
|
"name": "Люди с нарушенными условиями жизнедеятельности",
|
||||||
|
"keywords": "условия жизнедеятельности",
|
||||||
|
"unit": "тыс. человек"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "3б",
|
||||||
|
"name": "Люди, для которых недоступны транспортные услуги",
|
||||||
|
"keywords": "транспортн",
|
||||||
|
"unit": "тыс. человек"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "4а",
|
||||||
|
"name": "Абоненты, для которых недоступны услуги связи",
|
||||||
|
"keywords": "абонент",
|
||||||
|
"unit": "тыс. человек"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "5а",
|
||||||
|
"name": "Максимальное время недоступности государственной услуги",
|
||||||
|
"keywords": "недоступна государственная услуга|недоступности государственной",
|
||||||
|
"unit": "часов"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "5б",
|
||||||
|
"name": "Время, в течение которого госуслуга не может быть оказана",
|
||||||
|
"keywords": "регламентом|административным регламентом",
|
||||||
|
"unit": "%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "11б",
|
||||||
|
"name": "Люди, подверженные вредным воздействиям на окружающую среду",
|
||||||
|
"keywords": "вредным воздействиям",
|
||||||
|
"unit": "тыс. человек"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "13а",
|
||||||
|
"name": "Снижение объёма продукции ГОЗ",
|
||||||
|
"keywords": "объем продукции|объём продукции",
|
||||||
|
"unit": "%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "13б",
|
||||||
|
"name": "Увеличение времени изготовления единицы продукции ГОЗ",
|
||||||
|
"keywords": "время изготовления",
|
||||||
|
"unit": "%"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "14",
|
||||||
|
"name": "Максимальное время недоступности ИС (оборона)",
|
||||||
|
"keywords": "недоступна пользователю",
|
||||||
|
"unit": "часов"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "2а",
|
||||||
|
"name": "Территория нарушения жизнеобеспечения населения",
|
||||||
|
"keywords": "территория.*жизнедеятельности|жизнедеятельности населения",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "3а",
|
||||||
|
"name": "Территория нарушения транспортного сообщения",
|
||||||
|
"keywords": "территория.*транспорт",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "3в",
|
||||||
|
"name": "Типы нарушенных перевозок и грузов",
|
||||||
|
"keywords": "типам нарушенных перевозок|типы нарушенных перевозок",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "3г",
|
||||||
|
"name": "Категория объекта транспортной инфраструктуры",
|
||||||
|
"keywords": "категорированию объектов транспортной|категорию объекта транспортной",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "4б",
|
||||||
|
"name": "Уровень органа власти, для которого недоступны услуги связи",
|
||||||
|
"keywords": "уровню органа государственной власти",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "6",
|
||||||
|
"name": "Уровень государственного органа (невыполнение функции)",
|
||||||
|
"keywords": "функционирования государственного органа|государственного органа в части",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "7",
|
||||||
|
"name": "Уровень международного договора",
|
||||||
|
"keywords": "международного договора",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "11а",
|
||||||
|
"name": "Территория вредных воздействий на окружающую среду",
|
||||||
|
"keywords": "территория.*окружающую среду|окружающая среда может",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "12",
|
||||||
|
"name": "Уровень пункта управления (ситуационного центра)",
|
||||||
|
"keywords": "пункта управления|ситуационного центра",
|
||||||
|
"unit": "вариант"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"num": "13.1",
|
||||||
|
"name": "Статус в кооперации головного исполнителя ГОЗ",
|
||||||
|
"keywords": "кооперации головного исполнителя|статусу в кооперации",
|
||||||
|
"unit": "вариант"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -556,6 +556,17 @@ def _import_187_is_list(wb, data, settings, log_fn):
|
|||||||
if _set(field_lower, 'tech_measures', val_b):
|
if _set(field_lower, 'tech_measures', val_b):
|
||||||
log_fn(f" Тех. меры: {val_b[:60]}")
|
log_fn(f" Тех. меры: {val_b[:60]}")
|
||||||
continue
|
continue
|
||||||
|
# --- Показатели критериев значимости (ПП-127) → criterion_input ---
|
||||||
|
# Строки вида «Показатель 1. …» / «Показатель 2а. …» / «Показатель 13.1. …»
|
||||||
|
m_crit = re.match(r'^показател[ья]?\s*(\d+(?:\.\d+)?)([а-яА-Я]?)', field_lower)
|
||||||
|
if m_crit:
|
||||||
|
_num_crit = m_crit.group(1) + m_crit.group(2)
|
||||||
|
# нормализация: «10.1» → «10.1», «13.1» → «13.1», «2а» → «2а»
|
||||||
|
_num_crit = _num_crit.replace(' .', '.').strip()
|
||||||
|
if val_b and 'выбрать' not in field_lower and not _is_hint(val_b):
|
||||||
|
is_obj.setdefault('criterion_input', {})[_num_crit] = str(val_b).strip()
|
||||||
|
log_fn(f" Показатель {_num_crit}: {str(val_b)[:60]}")
|
||||||
|
continue
|
||||||
if 'интернет' in field_lower:
|
if 'интернет' in field_lower:
|
||||||
is_obj['isInternet'] = is_checked
|
is_obj['isInternet'] = is_checked
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -4782,6 +4782,29 @@ class DokoGenApp:
|
|||||||
if data.get('informationSystems'):
|
if data.get('informationSystems'):
|
||||||
self.model.information_systems.clear()
|
self.model.information_systems.clear()
|
||||||
for is_data in data['informationSystems']:
|
for is_data in data['informationSystems']:
|
||||||
|
# Фильтр по сфере: оставляем только показатели, применимые к сфере объекта
|
||||||
|
# (организация заполняет в опроснике только свои; лишнее отбрасываем).
|
||||||
|
_crit_in = dict(is_data.get('criterion_input', {}) or {})
|
||||||
|
if _crit_in:
|
||||||
|
import re as _re_sphere
|
||||||
|
_appl = None
|
||||||
|
try:
|
||||||
|
import json as _json_sphere
|
||||||
|
_ap_path = os.path.join(os.path.dirname(__file__),
|
||||||
|
'dictionaries', 'criteria_applicability.json')
|
||||||
|
with open(_ap_path, encoding='utf-8') as _f_sphere:
|
||||||
|
_appl_all = _json_sphere.load(_f_sphere)
|
||||||
|
_appl = _appl_all.get(is_data.get('sphere', '') or '')
|
||||||
|
except Exception:
|
||||||
|
_appl = None
|
||||||
|
if _appl:
|
||||||
|
_filtered = {}
|
||||||
|
for _n, _v in _crit_in.items():
|
||||||
|
_m = _re_sphere.match(r'(\d+)', str(_n))
|
||||||
|
_g = _m.group(1) if _m else str(_n)
|
||||||
|
if _g in _appl:
|
||||||
|
_filtered[_n] = _v
|
||||||
|
_crit_in = _filtered
|
||||||
isys = InformationSystem(
|
isys = InformationSystem(
|
||||||
name=is_data.get('name', ''),
|
name=is_data.get('name', ''),
|
||||||
description=is_data.get('description', ''),
|
description=is_data.get('description', ''),
|
||||||
@@ -4815,6 +4838,7 @@ class DokoGenApp:
|
|||||||
attacker_types=is_data.get('attacker_types', ''),
|
attacker_types=is_data.get('attacker_types', ''),
|
||||||
threats=normalize_threats(is_data.get('threats', '')),
|
threats=normalize_threats(is_data.get('threats', '')),
|
||||||
incidents=normalize_threats(is_data.get('incidents', '')),
|
incidents=normalize_threats(is_data.get('incidents', '')),
|
||||||
|
criterion_input=_crit_in,
|
||||||
criteria_values=is_data.get('criteria_values', ''),
|
criteria_values=is_data.get('criteria_values', ''),
|
||||||
criteria_justification=is_data.get('criteria_justification', ''),
|
criteria_justification=is_data.get('criteria_justification', ''),
|
||||||
org_measures=is_data.get('org_measures', ''),
|
org_measures=is_data.get('org_measures', ''),
|
||||||
|
|||||||
Reference in New Issue
Block a user