feat: перенос вкладки «Безопасность» из DokoGen 187-ФЗ

- security_tab_187_reference.py — код вкладки (секция построения +
  методы-обработчики + ИИ-проверка) для переноса интерфейса
- словари: attacker_categories, incidents, criteria_indicators,
  org_measures, tech_measures, threats, threats_fstec (+дата актуализации)
- fstec_threats.py — скачивание перечня угроз с bdu.fstec.ru
- verify.py: check_security_ai — ИИ-проверка безопасности по 236 приказу
This commit is contained in:
LocoAgent
2026-08-04 17:36:02 +04:00
parent de522360b8
commit baa8f095d0
11 changed files with 953 additions and 0 deletions
+39
View File
@@ -389,6 +389,45 @@ def compare_company_values(old_data, new_data):
return diffs
def check_security_ai(security_data, api_key, model='deepseek-chat', base_url=None):
"""ИИ-проверка заполненной вкладки «Безопасность» объекта КИИ (236 приказ)."""
if not api_key:
return None, "Не задан API-ключ ИИ (Файл → Настройки → API)"
system = (
"Ты — эксперт по безопасности критической информационной инфраструктуры (187-ФЗ, "
"приказ ФСТЭК России от 25.12.2017 № 239 «Об утверждении Требований по обеспечению "
"безопасности значимых объектов КИИ» и приказ № 236). Проверь заполненные сведения "
"об объекте КИИ и дай рекомендации. Верни ТОЛЬКО JSON: "
'{"оценка": "ok|warning|error", '
'"замечания": ["..."], '
'"предложения": {"attacker_category": "...", "threats": "...", "incidents": "...", '
'"criteria_values": "...", "criteria_justification": "...", '
'"org_measures": "...", "tech_measures": "..."}} '
"В «предложениях» укажи, что добавить/исправить по каждому разделу, если нужно, иначе пустые строки."
)
user = json.dumps(security_data, ensure_ascii=False)
js, err = _ai_json(api_key, model, base_url, system, user)
if err:
return None, err
notes = js.get('замечания') or []
if isinstance(notes, str):
notes = [notes]
proposals = js.get('предложения') or {}
if not isinstance(proposals, dict):
proposals = {}
return {
'source': 'ИИ',
'source_url': 'openai-совместимый API',
'disclaimer': AI_DISCLAIMER,
'kind': 'security',
'data': {
'rating': js.get('оценка', 'warning'),
'notes': notes,
'proposals': proposals,
},
}, None
def check_company_ai(company_data, api_key, model='deepseek-chat', base_url=None):
"""ИИ-проверка реквизитов организации.