fix: доп. ОКВЭД из DaData (устойчивый парсинг + лог), сравнение угроз (шире окно, сортировка по УБИ), кнопка «Проверить через ИИ» (check_threats_ai), честные подсказки п.8/п.9, автозаполнение ΔДоходов из балансовой стоимости КИИ, диалог _ask_amount вместо askfloat (формат «121 118 270 руб»), формулировка Бусредн по документу ФСТЭК (трёхлетний период)
This commit is contained in:
+44
-2
@@ -340,8 +340,15 @@ def check_company_dadata(inn, token):
|
||||
# ОКВЭД: основной (okved) и дополнительные (okveds — список словарей с 'code')
|
||||
okved = d.get('okved', '') or ''
|
||||
okved_extra = []
|
||||
for ok in (d.get('okveds') or []):
|
||||
code = (ok or {}).get('code') or ''
|
||||
raw_okveds = d.get('okveds') or []
|
||||
if isinstance(raw_okveds, str):
|
||||
# DaData иногда отдаёт доп. ОКВЭД одной строкой через запятую
|
||||
raw_okveds = [x.strip() for x in raw_okveds.split(',') if x.strip()]
|
||||
for ok in raw_okveds:
|
||||
if isinstance(ok, dict):
|
||||
code = (ok.get('code') or '').strip()
|
||||
else:
|
||||
code = str(ok or '').strip()
|
||||
if code:
|
||||
okved_extra.append(code)
|
||||
|
||||
@@ -567,6 +574,41 @@ def suggest_threats_ai(security_data, api_key, model='deepseek-chat', base_url=N
|
||||
return threats_out, None
|
||||
|
||||
|
||||
def check_threats_ai(security_data, current_threats, api_key, model='deepseek-chat', base_url=None):
|
||||
"""ИИ проверяет уже подобранный список угроз БИ для объекта КИИ.
|
||||
|
||||
В отличие от suggest_threats_ai (подбор заново), эта функция проверяет
|
||||
текущий список: какие угрозы лишние, каких не хватает, и даёт комментарий.
|
||||
|
||||
Возвращает (dict, ошибка):
|
||||
{"лишние": [...], "недостающие": [...], "комментарий": "..."}
|
||||
"""
|
||||
if not api_key:
|
||||
return None, "Не задан API-ключ ИИ (Файл → Настройки → API)"
|
||||
if not current_threats:
|
||||
return None, "Список угроз пуст — сначала подберите угрозы (программой или ИИ)."
|
||||
|
||||
system = (
|
||||
"Ты — эксперт ФСТЭК по безопасности критической информационной инфраструктуры "
|
||||
"(187-ФЗ, приказ ФСТЭК № 236). Проверь, корректно ли подобран перечень угроз "
|
||||
"безопасности информации для объекта КИИ."
|
||||
)
|
||||
user = (
|
||||
"Характеристики объекта КИИ:\n"
|
||||
f"{json.dumps(security_data, ensure_ascii=False)}\n\n"
|
||||
"Текущий перечень угроз (подобран программой или оператором):\n"
|
||||
+ "\n".join(f"{i+1}. {t}" for i, t in enumerate(current_threats))
|
||||
+ "\n\nВерни ТОЛЬКО JSON: "
|
||||
'{"лишние": ["угрозы, которые НЕ актуальны для этого объекта"], '
|
||||
'"недостающие": ["актуальные угрозы, которых в списке не хватает"], '
|
||||
'"комментарий": "краткий вывод по перечню"}'
|
||||
)
|
||||
js, err = _ai_json(api_key, model, base_url, system, user)
|
||||
if err:
|
||||
return None, err
|
||||
return js, None
|
||||
|
||||
|
||||
def suggest_object_params_ai(object_data, api_key, model='deepseek-chat', base_url=None,
|
||||
typical_objects=None, spheres=None, object_types=None,
|
||||
architectures=None):
|
||||
|
||||
Reference in New Issue
Block a user