feat: обоснования неприменимости показателей 8-14 для здравоохранения

- criteria_justifications.json: добавлены показатели 8 (ущерб субъекту КИИ),
  9 (ущерб бюджету), 10-10.5 (банковские), 11 (экология), 12 (пункт
  управления), 13 (гособоронзаказ), 14 (оборона/правопорядок) — дословно
  из примера заказчика
- ui.py: _just_text — поиск обоснования по группе показателя (2а→2,
  3б→3, 10.6→10, 13а→13), покрыты все 30 показателей ПП 127
This commit is contained in:
2026-08-04 20:50:43 +04:00
parent 6852bc634b
commit 4fc6fba92a
2 changed files with 36 additions and 12 deletions
@@ -6,6 +6,18 @@
"4": "Субъект КИИ не является оператором связи, объекты КИИ организации сферы здравоохранения не относятся к объектам транспортной инфраструктуры.",
"5": "Организация сферы здравоохранения является юридическим лицом, обеспечивающим эксплуатацию информационной системы, задействованной в процессе оказания государственной услуги, однако нарушение функционирования информационной системы (рассматриваемого объекта КИИ), не участвующей в обработке информации, необходимой для оказания государственной услуги, не влечет за собой нарушение и (или) прекращение доступа к государственной услуге. Рассматриваемый объект КИИ не участвует в обработке информации, необходимой для оказания государственной услуги.",
"6": "Организация сферы здравоохранения не является органом государственной власти, в связи с этим критерий неприменим.",
"7": "Организация сферы здравоохранения не является субъектом политической сферы деятельности, в связи с этим критерий неприменим."
"7": "Организация сферы здравоохранения не является субъектом политической сферы деятельности, в связи с этим критерий неприменим.",
"8": "Организация сферы здравоохранения не является государственной корпорацией, государственным унитарным предприятием, государственной компанией, стратегическим акционерным обществом, стратегическим предприятием, в связи с этим критерий неприменим.",
"9": "Объект КИИ задействован только в предоставлении медицинских услуг, освобожденных от налогообложения, в связи с этим критерий неприменим.",
"10": "Организация сферы здравоохранения не является субъектом банковской сферы деятельности.",
"10.1": "Организация сферы здравоохранения не является центральным контрагентом.",
"10.2": "Организация сферы здравоохранения не является центральным депозитарием.",
"10.3": "Организация сферы здравоохранения не является негосударственным пенсионным фондом.",
"10.4": "Организация сферы здравоохранения не является страховой организацией.",
"10.5": "Организация сферы здравоохранения не является оператором услуг информационного обмена.",
"11": "Объекты КИИ организации сферы здравоохранения не относятся к опасным производственным объектам в соответствии с законодательством Российской Федерации.",
"12": "Организация сферы здравоохранения не выполняет функции пункта управления (ситуационного центра) государственного органа власти или государственной корпорации.",
"13": "Организация сферы здравоохранения не является субъектом обеспечения обороны страны, безопасности государства и правопорядка.",
"14": "Организация сферы здравоохранения не имеет информационных систем, функционирующих в области обеспечения обороны страны, безопасности государства и правопорядка."
}
}
+23 -11
View File
@@ -1858,6 +1858,16 @@ class DokoGenApp:
_sphere_just = self.is_sphere_combo.get() if hasattr(self, 'is_sphere_combo') else ''
_just = justifications.get(_sphere_just, {}) if _sphere_just else {}
def _just_text(num):
"""Обоснование для показателя: точный ключ, иначе группа по первым цифрам
(2а→2, 3б→3, 10.6→10, 13а→13)."""
if num in _just:
return _just[num]
m = _re.match(r'(\d+)', num)
if m and m.group(1) in _just:
return _just[m.group(1)]
return None
dialog = tk.Toplevel(self.root)
dialog.title("Показатели критериев значимости (ПП РФ № 127)")
dialog.geometry("980x700")
@@ -1924,16 +1934,17 @@ class DokoGenApp:
def _on_pick(_e, _num=num, _var=var, _name=name):
# При выборе «не применим» — автоподстановка обоснования из словаря сферы
if _var.get().strip() == 'не применим' and _num in _just:
txt = _just[_num]
if _var.get().strip() == 'не применим':
txt = _just_text(_num)
prefix = f"Показатель {_num}. {_name} — не применим."
full = prefix + " " + txt
cur = justify_txt.get('1.0', 'end-1c').strip()
if prefix not in cur:
if cur:
justify_txt.insert('end', '\n' + full)
else:
justify_txt.insert('1.0', full)
if txt:
full = prefix + " " + txt
cur = justify_txt.get('1.0', 'end-1c').strip()
if prefix not in cur:
if cur:
justify_txt.insert('end', '\n' + full)
else:
justify_txt.insert('1.0', full)
combo.bind('<<ComboboxSelected>>', _on_pick)
if not applicable_here:
@@ -2036,8 +2047,9 @@ class DokoGenApp:
)
for num, name, _, _ in not_applicable:
base = f"Показатель {num}. {name} — не применим"
if num in _just:
auto_parts.append(base + ": " + _just[num])
jtxt = _just_text(num)
if jtxt:
auto_parts.append(base + ": " + jtxt)
else:
auto_parts.append(base + ".")
if not_applicable and not chosen: