Commit Graph
75 Commits
Author SHA1 Message Date
prog1764 220b923e76 fix: окно расчёта показателей 8/9 — не уходит на задний план, ввод работает, кнопка на месте
Проблемы:
1. Окно уходило на задний план при сдвиге — не было grab_set/lift,
   родитель указывал на главное окно вместо диалога ПП 127
2. В показателе 8 не вводились данные — из-за потери фокуса
3. В показателе 9 кнопка «Рассчитать» не была видна — окно 720x560
   не вмещало все поля (прибыль/налог/ΔДоходов/бюджет/НДПИ/ДИВ/ВСО/НС +
   результат), кнопки уезжали за край

Исправлено:
- родитель окна — dialog (ПП 127), а не root
- w.transient(dialog) + w.lift() + w.grab_set() + w.focus_force()
- тело окна в Canvas + вертикальный Scrollbar (все поля доступны)
- кнопки «🧮 Рассчитать / ✔️ Применить / Отмена» вне скролла — всегда видны
- при закрытии — grab_release()
2026-08-04 23:50:25 +04:00
prog1764 e4e7bb444a feat: папка dictionaries/prompts — словари промтов для каждой ИИ-кнопки
- prompts/suggest_object_params.json: жёсткие правила подбора характеристик —
  выбирать ТОЛЬКО из предоставленных списков (сферы/типы/архитектуры/
  типовые объекты), ничего не выдумывать; назначение строго по форме
  «Объект предназначен для … с целью …»; типовой объект — дословно из 360-р
- prompts/suggest_threats.json, check_security.json, check_company.json,
  declension.json — промты для остальных ИИ-кнопок
- verify.py: _load_prompt() + подключение промтов в suggest_object_params_ai,
  suggest_threats_ai, check_security_ai; ИИ получает полные списки
  (spheres/object_types/architectures) и выбирает из них
- ui.py: окно рекомендаций ИИ — галочки у каждого поля, применяются
  только отмеченные (ИИ может ошибаться в архитектуре — оператор решает)
2026-08-04 23:32:58 +04:00
prog1764 acb7aeaa64 fix: кнопки /🧮 в окне ПП 127 — UnboundLocalError/NameError
Кнопки command=_auto_fill_criteria и lambda _open_calc_dialog создавались
ДО определения этих функций внутри _open_criteria_127_dialog — Python
бросал UnboundLocalError/NameError при нажатии. Определения функций
перенесены выше мест использования (проверено: def < кнопка для всех).
2026-08-04 23:22:35 +04:00
prog1764 c1ad496319 feat: загрузка доходов организации из DaData (показатель 8)
- verify.py: get_company_finance_dadata(inn, token) — findById/party,
  возвращает finance (последний отчётный год) + finance_history (по годам)
- ui.py: кнопка «🌐 Загрузить доходы из DaData (по ИНН)» в блоке
  «Доходы за 5 лет (показатель 8)» — по ИНН организации подтягивает
  доходы за последние 5 лет и заполняет income_year_1..5
- если в тарифе DaData нет финансовой отчётности — понятное сообщение,
  доходы заполняются вручную
2026-08-04 23:20:04 +04:00
prog1764 7742cb1e10 fix: кнопки 🧮 расчёта показателей 8/9 — NameError в _open_calc_dialog
В _open_calc_dialog использовался _num2 (определён только в
_auto_fill_criteria) — tkinter молча глотал исключение, кнопки
«молчали». Заменено на _num (определён внутри _open_calc_dialog).
Дополнительно isys определён в начале диалога ПП 127 для
авторасчёта (доходы/ущерб/балансовая стоимость объекта).
2026-08-04 23:17:48 +04:00
prog1764 4bffd0e08d feat: пометка ★ для ОКВЭД, подходящих под 187-ФЗ (из 360-р)
- dictionaries/okved_187.json: 78 кодов ОКВЭД из Распоряжения ПРФ № 360-р
  (виды деятельности субъектов КИИ по типовым отраслевым объектам)
- okved.json: добавлен недостающий код 09.90 (всего 267)
- ui.py: _load_okved_187_codes/_is_okved_187 — проверка по коду/подкоду
- окно выбора основного ОКВЭД: радио-кнопки с пометкой «★ ...»
- окно выбора доп. ОКВЭД: display_map со звёздочками (в значение
  звёздочка не попадает), легенда «★ — код подходит под 187-ФЗ»
- при применении сохраняется чистый код без ★ (импорт/документы не ломаются)
2026-08-04 23:07:28 +04:00
prog1764 29ba4b0532 feat: поля показателя 8 в GUI (доходы за 5 лет + суммарный ущерб)
- models: income_year_1..5 (доход за 5 лет назад ... за прошлый год),
  income_loss (суммарный экономический ущерб от нарушения критических
  процессов) — понятные названия без ΔДоходов
- вкладка «Организация» → «Финансовые показатели»: 6 новых полей
- авторасчёт п. 8: берёт доходы за 5 лет и ущерб из полей,
  считает №8 = ущерб / средний доход за 5 лет × 100% (проверено
  на примере методички: 33% → I категория)
- импорт из опросника: incomeYear1..5 / incomeLoss
- переменные шаблонов: {{company_income_year_1..5}},
  {{company_income_loss}}
2026-08-04 23:03:55 +04:00
prog1764 5aed863b83 feat: максимальная автоматизация ПП 127
- после автозаполнения категория пересчитывается сразу (по наивысшей
  из выбранных)
- подсказка для ΔДоходов: балансовая стоимость объекта как ориентир
- итоговое сообщение показывает, какие показатели остались незаполненными
  (нет данных для расчёта) — оператор видит, что именно добить вручную
2026-08-04 22:57:26 +04:00
prog1764 0f9b3a1f11 feat: автозаполнение показателей ПП 127 по данным организации
Кнопка « Заполнить автоматически (по данным)» в окне ПП 127:
- п. 8 (ущерб субъекту КИИ): если организация не госкорпорация/ГУП/
  госкомпания/стратегическое АО (Указ № 1009) — автоматически «не
  применим» + обоснование
- п. 9 (ущерб бюджетам): подставляет прибыль и налог из данных
  организации, оператор вводит ΔДоходов → расчёт КНП → ΔНП →
  №9 = ΔБ/Бусредн×100% → рекомендация категории (пороги ПП 127),
  расчёт добавляется в обоснование
- остальные применимые показатели — оператор заполняет вручную
- результаты как рекомендация, всё подтверждается пользователем
2026-08-04 22:55:43 +04:00
prog1764 0098f483d2 feat: подбор типового отраслевого объекта с фильтром по сфере
- detect_sphere(): автоопределение сферы по ключевым словам названия/
  назначения/описания объекта (здравоохранение, наука, транспорт, связь,
  энергетика, банки, ТЭК, атомная, ОПК, ракетно-космическая, горная,
  металлургия, химия)
- suggest_typical_object_program: фильтр по сфере в приоритете —
  1) сфера из комбобокса, 2) сфера объекта (isys.sphere), 3) автодетект,
  4) иначе все сферы. ОПК-объекту НЕ подбираются объекты из
  здравоохранения и других сфер
- если в своей сфере совпадений нет — возвращается пусто, оператор
  выбирает сферу вручную
2026-08-04 22:52:45 +04:00
prog1764 52b3bb8477 feat: авторасчёт показателей 8 и 9 (кнопка 🧮 в окне ПП 127)
- кнопка «🧮» у показателей 8 (ущерб субъекту КИИ) и 9 (ущерб бюджетам)
- п. 8: №8 = ΔДоходов / Дусредн × 100% (доходы за 5 лет), пороги ПП 127:
  1-10% → III, 10-20% → II, >20% → I; применим только для госкорпораций/
  ГУП/госкомпаний/стратегических АО (Указ № 1009)
- п. 9: полный расчёт по «Рекомендациям» ФСТЭК 2021:
  КНП = налог/прибыль (из данных организации), ΔНП = ΔДоходов × КНП,
  ΔБ = ΔНП + ΔНДПИ + ΔДИВ + ΔВСО + ΔНС, №9 = ΔБ / Бусредн × 100%,
  пороги ПП 127: >0,0003-0,0006 → III, >0,0006-0,001 → II, >0,001 → I
- окно показывает все шаги расчёта, кнопка «Применить» ставит категорию
  в выпадающий список и добавляет расчёт в обоснование
2026-08-04 22:50:50 +04:00
prog1764 4313b0a65d fix: у применимых показателей ПП 127 — и «—» (прочерк) и «не применим» вместе
Выпадающий список применимого показателя: пусто / «—» (применим,
категория не присвоена) / «не применим» / III / II / I.
У неприменимых к сфере — только «не применим» + кнопка 🔓.
2026-08-04 22:46:55 +04:00
prog1764 dadec02665 feat: подбор характеристик объекта КИИ — программа и ИИ
Вкладка «Основное», кнопки под полем типового объекта:
- ⚙️ «Подобрать типовой объект (программа)»: скоринг по совпадению
  значимых слов названия/назначения объекта с перечнем 392 типовых
  отраслевых объектов (Распоряжение 360-р), IDF-веса (редкие слова
  важнее общих) → окно с вариантами, оператор выбирает и применяет
  (заполняет сферу + типовой объект)
- 🤖 «Подобрать характеристики (ИИ)»: DeepSeek предлагает назначение,
  сферу, тип, архитектуру и типовой объект (из перечня 360-р) как
  рекомендацию → окно с полями, оператор подтверждает/правит

Примеры: СКУД → «ИС, АСУ, ИТКС, обеспечивающие контроль и управление
доступом на территорию»; 1С:УПП → «ИС для ведения бухгалтерского учета»
2026-08-04 22:43:04 +04:00
prog1764 b9968449ef fix: прочерк «—» у применимых показателей, «не применим» только у неприменимых
- применимый показатель: пусто / «—» (применим, категория не присвоена)
  / III / II / I категория
- неприменимый к сфере: в списке ТОЛЬКО «не применим», выбран
  автоматически, заблокирован, авто-обоснование из словаря сферы
- кнопка «🔓» разблокирует конкретный показатель и возвращает
  полный список (категории + прочерк)
2026-08-04 21:01:58 +04:00
prog1764 7f70bb0792 feat: в выпадающем списке показателей — «—» (применим без категории) и «не применим»
- options показателя: пусто / «—» (показатель применим, но категория
  не присвоена) / «не применим» / III / II / I
- _selected различает «прочерк» и «не применим» (оба не влияют
  на категорию, но сохраняются в список показателей)
- список показателей: «применим, категория не присвоена (—)» /
  «не применим»
- авто-обоснование: прочерк — «применим, категория не присвоена»,
  не применим — текст из словаря сферы
2026-08-04 20:55:03 +04:00
prog1764 972ff11b49 feat: ОПК показатели 8/9/13 + блокировка неприменимых с разблокировкой
- criteria_applicability.json: ОПК — применимы 8 (ущерб субъекту КИИ),
  9 (ущерб бюджету), 13 (гособоронзаказ) — обязательные для ОПК
- окно ПП 127: неприменимые для сферы показатели автоматически
  выбирают «не применим» и блокируются (серым), НО у каждого есть
  кнопка «🔓» — разблокировать конкретный показатель, если оператор
  считает его применимым (вернётся выбор категории)
- «не применим» сохраняется в список показателей и обоснование,
  не влияет на категорию
2026-08-04 20:53:29 +04:00
prog1764 4fc6fba92a 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
2026-08-04 20:50:43 +04:00
prog1764 6852bc634b feat: обоснования неприменимости показателей критериев по сферам
- dictionaries/criteria_justifications.json: тексты обоснований для сферы
  здравоохранения (показатели 1-7) — дословно из примера заказчика
- окно ПП 127: при выборе «не применим» обоснование из словаря сферы
  автоматически подставляется в поле «Обоснование»
- авто-обоснование при сохранении: категория + выбранные показатели +
  неприменимые показатели с текстами обоснований; если все показатели
  неприменимы — «Категория значимости: не присвоена»
2026-08-04 20:48:55 +04:00
prog1764 3922b8264a feat: вариант «не применим» для показателей критериев значимости
В окне ПП 127 у каждого показателя теперь 5 вариантов: пусто,
«не применим», 3 категория, 2 категория, 1 категория.
«Не применим» не влияет на расчёт категории, но сохраняется
в список показателей как «Показатель N. ... — не применим».
2026-08-04 20:44:53 +04:00
prog1764 8c1d94d881 feat: автозаполнение безопасности автоматически после импорта опросника
После импорта данных (опросник/JSON) программа сама прогоняет логику
по каждому объекту КИИ: нарушитель (по интернету), уровень Н1/Н2,
виды нарушителей, угрозы (скоринг), инциденты (из угроз),
орг./тех. меры (базовые + по СЗИ объекта). Оператор добивает
остальное вручную. Лог: « Автозаполнение безопасности».
2026-08-04 20:37:26 +04:00
prog1764 68caaf9b63 feat: автозаполнение вкладки «Безопасность» по данным объекта
Новая кнопка « Автозаполнить» в панели действий — заполняет пустые поля
логически, без выдумок:
- категория нарушителя: есть интернет → внешний, нет → внутренний
- уровень возможностей: Н1 (внутренний) / Н2 (внешний)
- виды нарушителей: по категории из словаря attacker_types.json
- угрозы: подбор программой (скоринг по характеристикам объекта)
- инциденты: выводятся из подобранных угроз по ключевым словам
- орг. меры: базовый набор (контролируемая зона, доступ, документы,
  ответственные, обучение, инциденты, перечень лиц)
- тех. меры: базовые + доп. по средствам защиты объекта (СЗИ:
  межсетевой экран → МЭ, антивирус, СОВ, СКЗИ, виртуализация)
Незаполненное пользователем не перезаписывает.
2026-08-04 20:35:29 +04:00
prog1764 1ef8485b13 fix: подбор угроз программой + сравнение программа↔ИИ
Проблемы:
1. Подбор программой возвращал 193 из 227 угроз (весь перечень) —
   теперь скоринг по ключевым словам объекта (тип, интернет, нарушитель,
   сеть), отсев нерелевантных: 72-82 угрозы вместо 193
2. Сравнение программа↔ИИ не подсвечивало совпадения: ИИ возвращает
   «1. УБИ.001 …» / с лишними пробелами — сравнение шло по точной строке.
   Теперь ключ сравнения — код УБИ (regex), иначе нормализованный текст;
   добавлена статистика «Совпало / только программа / только ИИ»
2026-08-04 20:31:52 +04:00
prog1764 72f73d4c4f fix: результат ИИ-проверки безопасности показывается отдельным окном
Причина: результат писался только в панель «Проверка данных» на вкладке
«Организация», а пользователь смотрит вкладку «Безопасность» — замечания
были не видны. Теперь после ответа ИИ открывается отдельное окно
«🤖 Проверка безопасности — результат ИИ» с оценкой, замечаниями
и предложениями.
2026-08-04 20:24:42 +04:00
prog1764 07f0800b73 feat: автоподбор применимости показателей критериев значимости по сфере
- dictionaries/criteria_applicability.json: для каждой сферы перечень применимых
  показателей ПП РФ № 127, построен из признаков значимости Распоряжения ПРФ
  № 360-р (например: ОПК → только 13 оборонзаказ, показатель 1 «ущерб жизни
  и здоровью» не применим; банки → только 10; связь → только 4)
- окно ПП 127: неприменимые для сферы показатели блокируются и помечаются
  серым «(не применим для сферы)», исключаются из расчёта категории;
  если применимых показателей для сферы нет — категория «без категории»
2026-08-04 20:22:38 +04:00
prog1764 5bbd9313f5 feat: типовые отраслевые объекты КИИ по сферам (Распоряжение ПРФ № 360-р от 26.02.2026)
- dictionaries/typical_industry_objects.json: 392 типовых отраслевых объекта
  по 14 сферам (здравоохранение 12, наука 9, транспорт 62, связь 12,
  энергетика 12, регистрация прав 1, банки 20, ТЭК 11, атомная 16,
  оборонная 39, ракетно-космическая 72, горнодобывающая 38,
  металлургическая 53, химическая 35), с процессами и ОКВЭД
- ui.py: логика привязки — при выборе сферы объекта КИИ список типовых
  отраслевых объектов заполняется из словаря этой сферы (360-р),
  иначе — общий словарь typical_objects.json
- _on_sphere_changed/_update_typical_objects_by_sphere; вызов при загрузке объекта
2026-08-04 20:04:38 +04:00
prog1764 8438125bd1 feat: нарушители по Методике ФСТЭК от 05.02.2021 (без выдумок)
- attacker_categories.json: 2 категории (внешний/внутренний) с формулировками п. 5.1.6
- attacker_levels.json: 4 уровня возможностей Н1-Н4 (Приложение 8):
  базовые, базовые повышенные, средние, высокие — с полным описанием
  и видами нарушителей по каждому уровню
- attacker_types.json: 13 видов нарушителей (п. 5.1.3) — спецслужбы ИГ,
  террористические группировки, преступные группы, хакеры, конкуренты,
  разработчики ПО, поставщики, персонал, пользователи, сисадмины, бывшие работники
- вкладка «Безопасность»: категория (combobox) + уровень Н1-Н4 (combobox) +
  виды нарушителей (listbox с кнопками 📚 из словаря)
- модель: attacker_level, attacker_types; маппинги collect/select/copy/import;
  генератор: item.attacker_level, item.attacker_types
2026-08-04 19:52:18 +04:00
prog1764 c4a8de57d1 feat: словарь управлений ФСТЭК + переменная {{fstek_recipient_address}}
- dictionaries/fstek_offices.json: 7 управлений ФСТЭК по федеральным округам
  с адресами (из официальных реестров) и списками городов/регионов:
  ЦФО (Москва, Севастопольский пр-т 56/40), СЗФО (СПб, Исаакиевская пл. 11),
  ЮФО+СКФО (Ростов-на-Дону, ул. Ярослава Галана 1Е/25), ПФО (Н.Новгород,
  пр-т Гагарина 60 к11), УрФО (Екатеринбург, ул. Гагарина 28Б), СФО
  (Новосибирск, Красный пр-т 41), ДФО (Хабаровск, ул. Ленина 37)
- variables.py: _find_fstek_office(address) — определяет управление по городу/
  региону из адреса организации (с нормализацией сокращений обл./респ./г.о.)
- новые переменные: {{fstek_recipient_address}} (адрес управления для отправки),
  {{fstek_district}} (наименование управления)
- логика: адрес организации → управление ФСТЭК → адрес подставляется в документ
2026-08-04 19:45:33 +04:00
prog1764 730551aeba feat: алиасы item.* в цикле объектов КИИ под шаблон «Сведения» (ФСТЭК)
- item.objective→purpose, item.standard_name→typical_object,
  item.network_category→net_category, item.provider→net_operator,
  item.interaction_purpose→net_purpose, item.interaction_method→net_method,
  item.hardware→hw_sw, item.system_software→os_sw, item.defense_tools→defense_tools_list,
  item.component→subject_element, item.exploiting_org→subject_name,
  item.exploiting_inn→subject_inn, item.domain→domain_name,
  item.threat_actor→attacker_category, item.threat_justification→threats
- логика: item.* — только переменные циклов
2026-08-04 19:38:36 +04:00
prog1764 8e647fc79a feat: окно критериев значимости — дословная таблица ПП РФ № 127
- criteria_127.json переписан точно по Постановлению Правительства РФ
  от 08.02.2019 № 127 (приложение): 5 критериев (социальная, политическая,
  экономическая, экологическая, значимость для обороны страны), 30 показателей
  (1-14 с подпунктами а/б/в/г), значения сразу привязаны к категориям III/II/I
- окно 980x700 со скроллом: у каждого показателя выбор значения из документа
  («III категория: …», «II категория: …», «I категория: …»)
- категория значимости по наивысшей выбранной: I→1-я, II→2-я, III→3-я, иначе без категории
- обоснование: автогенерация текста с перечнем выбранных показателей,
  если поле пустое; кнопки «Рассчитать категорию» и «Сохранить»
- категория сразу подставляется в поле категории значимости объекта
2026-08-04 19:20:52 +04:00
prog1764 879ada5859 fix: убрана кнопка «✏️ Редактировать» у основных угроз БИ
- угрозы выбираются только из словаря (ФСТЭК), редактировать смысла нет
- остаются «- Удалить» и «📚 Из словаря»
2026-08-04 19:18:40 +04:00
prog1764 b044b05eaf feat: финансовые показатели организации + балансовая стоимость объекта
- модели: Company.profit (сумма прибыли), Company.profit_tax (налог с прибыли),
  InformationSystem.balance_value (балансовая стоимость объекта КИИ)
- импорт из опросника: «Сумма прибыли за предыдущий год» и «Сумма налога с прибыли»
  (Общие сведения) → profit/profitTax; «Балансовая стоимость объекта КИИ в рублях»
  (каждый ОБЪЕКТ-лист) → balanceValue, больше не падает в описание
- UI: блок «Финансовые показатели» во вкладке «Организация»; поле
  «Балансовая стоимость (руб.)» в объекте КИИ; маппинги collect/select/copy/import
- генератор: {{company_profit}}, {{company_profit_tax}}, {{item.balance_value}}
2026-08-04 19:17:37 +04:00
prog1764 58b4402d31 fix: кнопка «✏️ Уточнить модель/кол-во» только для ПО/оборудования
- в окнах выбора из словаря инцидентов, угроз, критериев, мер,
  пользователей, СЗИ и ОКВЭД кнопка больше не показывается
- параметр allow_refine: включается только у hw_sw/os_sw/app_sw
  (там «уточнить модель» и количество действительно нужны)
2026-08-04 18:01:27 +04:00
prog1764 6c2e4a0c38 feat: подбор угроз — инвертированная логика (все угрозы минус неактуальные)
- threat_rules: по умолчанию актуальны ВСЕ угрозы БДУ ФСТЭК, исключаются
  заведомо неактуальные: нет интернета → убраны удалённый доступ/веб/почта/
  беспроводные/DDoS/облачные/грид; АСУ → убраны BIOS/грид/виртуализация/браузер
  (теперь 170-200 угроз на объект вместо 15 «самых похожих»)
- _has_internet уточнён: «Отсутствует» у оператора / «изолирован» / «не требуется»
  → внешней сети нет; сеть общего пользования или реальный оператор → есть
- verify.suggest_threats_ai: свежий перечень ФСТЭК (227 угроз) передаётся в промт,
  ИИ выбирает из него, а не из устаревших знаний; + человекочитаемая сводка объекта
- ui: кнопки программа/ИИ без лимита 20; после подбора угрозы сохраняются в модель
  (_collect_is) — при открытии словаря галочки выбранных угроз стоят
- models.from_dict: фильтрация неизвестных полей вложенных объектов — старые файлы
  с удалёнными полями (attacker_characteristics) больше не падают
2026-08-04 17:59:44 +04:00
prog1764 8569b478d4 fix: вернул «+ Добавить» у организационных и технических мер
- _sec_row: новый параметр allow_add — ручное добавление показывается
  даже при наличии словаря
- орг. и тех. меры: allow_add=True (может пригодиться), остальные словарные
  списки (угрозы, инциденты, критерии) — по-прежнему только из словаря
2026-08-04 17:51:17 +04:00
prog1764 6206c867c7 fix: удалено поле «Характеристика нарушителя» (придумано, в опроснике нет)
- убрано из вкладки «Безопасность» (UI), модели InformationSystem,
  маппингов _collect_is/_on_is_select, _copy_is, _apply_imported_data,
  variables.py и данных для ИИ-проверки
- «Категория нарушителя» остаётся (из варианта 3 Кости)
2026-08-04 17:50:22 +04:00
prog1764 5b318eef88 feat: окно «Показатели критериев значимости» по таблице ПП РФ № 127
- кнопка «📋 Заполнить по таблице ПП № 127» в вкладке «Безопасность»
- окно 860x640 со скроллом: 5 критериев (социальная, политическая,
  экономическая, экологическая, оборонная), 12 показателей,
  у каждого выбор значения 1-4 с описанием шкалы
- объединены показатели и обоснование в одном окне (общее поле)
- «🧮 Рассчитать категорию»: по максимальному баллу → 1/2/3/без категории
  (4→1-я, 3→2-я, 2→3-я), результат пишется в категорию значимости объекта
- «💾 Сохранить»: заполняет список показателей и обоснование
- словарь criteria_127.json (формулировки можно править файлом)
2026-08-04 17:48:40 +04:00
prog1764 38eae4b16f fix: вкладка «Безопасность» — убраны кнопки ручного «+ Добавить» у словарных списков
- угрозы, инциденты, критерии, орг./тех. меры — только из словаря (-, ✏️, 📚)
- «+» остался только у «Обоснования значений показателей» (словаря нет)
2026-08-04 17:46:07 +04:00
prog1764 7158a90b76 feat: вкладка «Безопасность» — коды УБИ, автоподбор угроз (программа/ИИ), сравнение, новый UI
- угрозы ФСТЭК теперь с кодами: «УБИ.001 Угроза …» (парсинг кода из БДУ, 227 шт)
- threat_rules.py — логика программы: по характеристикам объекта (тип ИС/АСУ/ИТКС,
  интернет да/нет, нарушитель внутр./внешн.) фильтрует перечень по ключевым словам
- verify.py: suggest_threats_ai — ИИ предлагает актуальные угрозы по описанию объекта
- вкладка перестроена: компактная 2-колоночная раскладка, панель действий сверху:
  «⬇️ Загрузить угрозы ФСТЭК» | «⚙️ Подобрать (программа)» | «🤖 Подобрать (ИИ)» |
  «⚖️ Сравнить» | «🤖 Проверить безопасность через ИИ»
- окно выбора из словаря: 720x680 + поле поиска (фильтр по тексту, важно для 227 угроз)
- сравнение программа↔ИИ: окно с двумя списками, совпавшие подсвечены зелёным
2026-08-04 17:44:54 +04:00
prog1764 b6f595fd32 fix: импорт одного человека в поле ФИО (старые опросники)
- если в ячейке ФИО несколько человек (через запятую/точку с запятой/
  перевод строки или просто подряд) — остаётся первое полное ФИО
- применяется к должностным лицам (chief/ответственный/админ),
  комиссии и сотрудникам при импорте из опросника
- то же при открытии сохранённого файла (from_dict):
  «Коростелев Павел Сергеевич Хрящев Сергей Владимирович …» → «Коростелев Павел Сергеевич»
2026-08-04 17:34:17 +04:00
prog1764 42a243f7b6 feat: уточнение модели/количества для любых позиций словаря (ОС и др.)
- кнопка «✏️ Уточнить модель/кол-во» теперь всегда в окне выбора из словаря
- для позиций без маркера (Windows 10 Pro и т.п.) запрашивает количество:
  вводишь 5 → «Windows 10 Pro 5 шт.»
- для позиций с «(уточнить …)» вычищает маркер из названия и дописывает модель + количество
- формат: «Позиция Модель N шт.» (без запятой)
2026-08-04 17:31:09 +04:00
prog1764 0b3aff4ae9 feat: кнопка «✏️ Уточнить модель/кол-во» в окне выбора из словаря
- если в словаре есть позиции с «(уточнить …)» — в окне выбора появляется кнопка
- отмечаешь галочкой, например «Сервер (уточнить модель)» — жмёшь кнопку,
  программа запрашивает модель/версию/конфигурацию и количество
- в список добавляется полная строка: «Сервер Supermicro SSG-2027R -E1R24N, 2 шт.»
- работает для всех словарей: ПО (hw_sw, os_sw, app_sw), СЗИ и т.д.
2026-08-04 17:30:13 +04:00
prog1764 3ef1ff41e0 fix: импорт старых данных (обратная совместимость)
- объекты КИИ: добавлены варианты во мн.ч. в словари типов объекта
  (Автоматизированные системы управления, Информационно-телекоммуникационные сети)
  и способов взаимодействия (Проводной, Без проводной) — как в старом опроснике
- employees_access: фильтр плейсхолдеров («Формат: Фамилия Имя Отчество»,
  «Пример: …») и пустых строк при загрузке файла (from_dict) и при импорте опросника
2026-08-04 17:28:20 +04:00
prog1764 f04a5bd524 feat: вкладка «Безопасность» — словарики+чекбоксы, загрузка угроз ФСТЭК (БДУ) с датой актуализации, ИИ-проверка
- категория нарушителя — выпадающий список (attacker_categories.json)
- характеристика нарушителя, угрозы, инциденты, показатели критериев,
  обоснование, орг./тех. меры — списки с кнопками (+/-/редактировать/из словаря)
- словари: incidents.json, criteria_indicators.json, org_measures.json, tech_measures.json, threats.json
- кнопка «⬇️ Загрузить угрозы ФСТЭК»: парсит bdu.fstec.ru (227 угроз),
  сохраняет threats_fstec.json + дату актуализации; подпись «Актуально на: …»
  или предупреждение, если ещё не скачивалось
- кнопка «🤖 Проверить безопасность через ИИ»: DeepSeek сверяет заполненное
  с 236 приказом и даёт замечания/предложения (check_security_ai в verify.py)
- новое поле модели attacker_characteristics
2026-08-04 17:10:07 +04:00
prog1764 aae66dcca1 feat: вкладка «ПО» — словари ОС/аппаратных средств/прикладных программ + большое окно редактирования
- словари: hw_sw.json, os_sw.json, app_sw.json
- кнопка «📚 Из словаря» у каждого списка ПО (мультивыбор)
- большое окно добавления/редактирования позиции (560x220, многострочное)
2026-08-04 16:56:51 +04:00
prog1764 ba2a02d1cd feat: вкладка «Субъект» — кнопка «Заполнить из данных организации»
Если объект КИИ находится в той же организации — одним кликом копирует
наименование, адрес, ИНН, КПП из вкладки «Организация» в поля субъекта.
2026-08-04 16:54:38 +04:00
prog1764 28cd764795 feat: вкладка «ПО» — списки с кнопками (как «Средства защиты»)
3 списка: ПО и аппаратные средства, Операционные системы, Прикладные программы.
У каждого кнопки «+ Добавить», «- Удалить», «✏️ Редактировать».
Данные хранятся построчно (\n), импорт и генератор сохраняют переносы.
2026-08-04 16:31:25 +04:00
prog1764 300dfed5b3 Revert "feat: выпадающие списки открываются кликом в любом месте поля (не только по стрелке)"
This reverts commit 463745123c.
2026-08-04 15:59:52 +04:00
prog1764 f5548f2fb8 feat: вкладка «ПО» — многострочные поля (списки построчно, как в опроснике)
- hw_sw/os_sw/app_sw теперь tk.Text с прокруткой вместо однострочного Entry
- импортёр сохраняет переносы строк (_clean_multiline), а не схлопывает в одну строку
- _collect_is/_on_is_select поддержка Text-виджетов
2026-08-04 15:59:06 +04:00
prog1764 463745123c feat: выпадающие списки открываются кликом в любом месте поля (не только по стрелке)
Добавлен обработчик _combo_open для всех комбобоксов: клик по полю
раскрывает список, не нужно тянуть курсор в правый угол к стрелке.
2026-08-04 15:56:52 +04:00
prog1764 4ca596102f fix: убраны галочки ЛВС/Интернет из вкладок объекта КИИ
По 236 приказу эти признаки неактуальны — полный перечень характеристик
объекта уже есть в отдельной вкладке «Сеть».
2026-08-04 15:55:30 +04:00