Угрозы: список сортируется по возрастанию кода УБИ (УБИ.001 → УБИ.211) во всех местах — подбор программой, ИИ, автозаполнение, импорт, добавление недостающих

This commit is contained in:
LocoAgent
2026-08-05 14:14:06 +04:00
parent c9dffdd4ca
commit 52b4ee6f1a
2 changed files with 50 additions and 13 deletions
+21 -3
View File
@@ -11,6 +11,24 @@
import os
import json
import re
def _ubi_num(text):
"""Код УБИ из строки → int: «УБИ.069 Название» → 69. None, если кода нет."""
m = re.search(r'уби\.?\s*(\d+)', str(text), re.IGNORECASE)
return int(m.group(1)) if m else None
def sort_threats_by_ubi(items):
"""Сортировка угроз по возрастанию кода УБИ (УБИ.001, УБИ.002, …).
Строки без кода УБИ уходят в конец (по алфавиту).
"""
def _key(t):
n = _ubi_num(t)
return (0, n) if n is not None else (1, str(t).lower())
return sorted(items, key=_key)
def load_threats(dict_dir=None):
@@ -244,9 +262,9 @@ def suggest_threats_program(isys, threats=None, limit=None):
sc = sum(1 for kw in pos if kw in tl)
scored.append((sc, t))
# Сортируем по релевантности (сначала — с наибольшим совпадением)
scored.sort(key=lambda x: -x[0])
result = [t for sc, t in scored if sc > 0]
# Сортируем по возрастанию кода УБИ (УБИ.001 → УБИ.211…)
scored = [t for sc, t in scored if sc > 0]
result = sort_threats_by_ubi(scored)
if limit and len(result) > limit:
result = result[:limit]