feat: автозаполнение безопасности автоматически после импорта опросника

После импорта данных (опросник/JSON) программа сама прогоняет логику
по каждому объекту КИИ: нарушитель (по интернету), уровень Н1/Н2,
виды нарушителей, угрозы (скоринг), инциденты (из угроз),
орг./тех. меры (базовые + по СЗИ объекта). Оператор добивает
остальное вручную. Лог: « Автозаполнение безопасности».
This commit is contained in:
2026-08-04 20:37:26 +04:00
parent 68caaf9b63
commit 8c1d94d881
+32
View File
@@ -3085,6 +3085,38 @@ class DokoGenApp:
self._add_employee_row(pos, fio) self._add_employee_row(pos, fio)
self._update_emp_count() self._update_emp_count()
# ⚡ Автозаполнение безопасности по каждому объекту (логика программы).
# После импорта опросника программа сама заполняет всё, что можно вывести
# логически; остальное оператор добивает вручную.
try:
from .threat_rules import auto_fill_security, load_threats
_threats_full = load_threats()
_filled_any = 0
for _isys in self.model.information_systems:
_fill = auto_fill_security(_isys, threats=_threats_full)
if _fill.get('attacker_category'):
_isys.attacker_category = _fill['attacker_category']
if _fill.get('attacker_level'):
_isys.attacker_level = _fill['attacker_level']
if _fill.get('attacker_types'):
_isys.attacker_types = _fill['attacker_types']
if _fill.get('threats'):
_isys.threats = _fill['threats']
if _fill.get('incidents'):
_isys.incidents = _fill['incidents']
if _fill.get('org_measures'):
_isys.org_measures = _fill['org_measures']
if _fill.get('tech_measures'):
_isys.tech_measures = _fill['tech_measures']
if _fill:
_filled_any += 1
if _filled_any:
self.log(f"⚡ Автозаполнение безопасности: обработано объектов: {_filled_any}")
# Обновляем форму выбранного объекта, если он есть
self._on_is_select()
except Exception as _e:
self.log(f"⚠ Автозаполнение безопасности: {_e}")
self.log("✅ Импорт применён") self.log("✅ Импорт применён")
self.root.after(0, _apply) self.root.after(0, _apply)