From 8c1d94d88192e4dd5d472724e428ee12a5ba2858 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 20:37:26 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=D0=BE=D0=BF=D0=B0=D1=81=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B8?= =?UTF-8?q?=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20=D0=BE=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=81=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit После импорта данных (опросник/JSON) программа сама прогоняет логику по каждому объекту КИИ: нарушитель (по интернету), уровень Н1/Н2, виды нарушителей, угрозы (скоринг), инциденты (из угроз), орг./тех. меры (базовые + по СЗИ объекта). Оператор добивает остальное вручную. Лог: «⚡ Автозаполнение безопасности». --- dokogen/ui.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dokogen/ui.py b/dokogen/ui.py index afe60b4..b1cb1fc 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -3085,6 +3085,38 @@ class DokoGenApp: self._add_employee_row(pos, fio) 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.root.after(0, _apply)