fix: ОКВЭД импорт/DaData/словарь+интернет, доменное имя, вкладка ОКИИ → вложенные вкладки, словарики, СЗИ разбивка, адрес отдельно
- ОКВЭД: resolve_okved (словарь okved.json + DaData suggest okved2), применяется при импорте и DaData; галочки «ОКВЭД осн./доп.» в «что применять» - DaData: показ и подстановка доп. ОКВЭД - доменное имя: поле во вкладке «Организация» + импорт - вкладка «Объекты КИИ»: сверху Наименование/Описание/Категория, остальное вкладками: Основное (назначение, сфера, тип, архитектура, типовой отраслевой объект — со словариками и выпадающими списками), Субъект, Сети и ПО, Безопасность (236), СЗИ, Пользователи ОКИИ - новые словари: spheres.json, object_types.json, architectures.json, typical_objects.json - адрес объекта — в отдельное поле (не в описание) - СЗИ: разбивка слипшихся названий (Kaspersky...)
This commit is contained in:
@@ -148,6 +148,49 @@ def normalize_address(text):
|
||||
return ' '.join(fixed)
|
||||
|
||||
|
||||
def resolve_okved(code, dadata_token=None):
|
||||
"""Код ОКВЭД → «код - название».
|
||||
|
||||
1) Ищем в словаре dictionaries/okved.json (строки вида «27.32.2 Название»).
|
||||
2) Если не нашли — запрашиваем DaData suggest okved2 (если есть токен).
|
||||
3) Иначе возвращаем код как есть.
|
||||
"""
|
||||
code = (code or '').strip()
|
||||
if not code:
|
||||
return ''
|
||||
# 1) Словарь
|
||||
try:
|
||||
import os, json
|
||||
dict_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'dictionaries', 'okved.json')
|
||||
with open(dict_path, encoding='utf-8') as f:
|
||||
items = json.load(f)
|
||||
for item in items:
|
||||
item = str(item).strip()
|
||||
# совпадение по началу: «27.32.2» или «27.32.2 - ...» / «27.32.2 ...»
|
||||
if item.split()[0].rstrip('.') == code.rstrip('.'):
|
||||
# нормализуем: «код - название»
|
||||
rest = item[len(item.split()[0]):].strip().lstrip('- ').strip()
|
||||
if rest:
|
||||
return f"{code} - {rest}"
|
||||
return item
|
||||
except Exception:
|
||||
pass
|
||||
# 2) DaData suggest okved2
|
||||
if dadata_token:
|
||||
try:
|
||||
js, err = _http_json('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/okved2',
|
||||
data={'query': code, 'count': 1},
|
||||
headers={'Content-Type': 'application/json',
|
||||
'Authorization': f'Token {dadata_token}'})
|
||||
if not err and js:
|
||||
sugg = (js.get('suggestions') or [])
|
||||
if sugg and sugg[0].get('value'):
|
||||
return sugg[0]['value']
|
||||
except Exception:
|
||||
pass
|
||||
return code
|
||||
|
||||
|
||||
def _fmt_date(value):
|
||||
"""Дата: '2005-02-09' → '09.02.2005'; миллисекунды 1107907200000 → дата."""
|
||||
if not value:
|
||||
|
||||
Reference in New Issue
Block a user