ОКВЭД: полный справочник ОКВЭД2 (2770 записей) в едином формате «код название», resolve_okved без дефиса, импорт доп. ОКВЭД без переносов; угрозы: умный подбор — исключение неиспользуемых технологий (виртуализация, облако, мобильные, АСУ ТП, грид, суперкомпьютер, большие данные, беспроводные сети, контейнеры, smart-карты, ИИ), базовые угрозы локальных сетей
This commit is contained in:
+16
-10
@@ -161,15 +161,20 @@ def normalize_address(text):
|
||||
|
||||
|
||||
def resolve_okved(code, dadata_token=None):
|
||||
"""Код ОКВЭД → «код - название».
|
||||
"""Код ОКВЭД → «код название» (без дефиса), например «27.32.2 Производство силовых кабелей».
|
||||
|
||||
Принимает и голый код («27.32.2»), и строку с названием
|
||||
(«27.32.2 - Производство силовых кабелей» / «27.32.2 Производство силовых кабелей»).
|
||||
1) Ищем в словаре dictionaries/okved.json (строки вида «27.32.2 Название»).
|
||||
2) Если не нашли — запрашиваем DaData suggest okved2 (если есть токен).
|
||||
3) Иначе возвращаем код как есть.
|
||||
3) Иначе возвращаем нормализованную строку «код название» как есть.
|
||||
"""
|
||||
code = (code or '').strip()
|
||||
if not code:
|
||||
return ''
|
||||
# Извлекаем код из входной строки: «27.32.2 - Производство силовых кабелей» → «27.32.2»
|
||||
m = re.match(r'^\s*(\d+(?:\.\d+)*)', code)
|
||||
code_only = m.group(1) if m else code.split()[0].rstrip('.')
|
||||
# 1) Словарь
|
||||
try:
|
||||
import os, json
|
||||
@@ -178,12 +183,8 @@ def resolve_okved(code, dadata_token=None):
|
||||
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}"
|
||||
# совпадение по коду: «27.32.2» или «27.32.2 Название»
|
||||
if item.split()[0].rstrip('.') == code_only.rstrip('.'):
|
||||
return item
|
||||
except Exception:
|
||||
pass
|
||||
@@ -191,7 +192,7 @@ def resolve_okved(code, dadata_token=None):
|
||||
if dadata_token:
|
||||
try:
|
||||
js, err = _http_json('https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/okved2',
|
||||
data={'query': code, 'count': 1},
|
||||
data={'query': code_only, 'count': 1},
|
||||
headers={'Content-Type': 'application/json',
|
||||
'Authorization': f'Token {dadata_token}'})
|
||||
if not err and js:
|
||||
@@ -200,7 +201,12 @@ def resolve_okved(code, dadata_token=None):
|
||||
return sugg[0]['value']
|
||||
except Exception:
|
||||
pass
|
||||
return code
|
||||
# 3) Нормализуем вход: «27.32.2 - Название» → «27.32.2 Название» (без дефиса)
|
||||
rest = code[len(m.group(1)):].strip() if m else ''
|
||||
rest = rest.lstrip('- ').strip()
|
||||
if rest:
|
||||
return f"{code_only} {rest}"
|
||||
return code_only
|
||||
|
||||
|
||||
def _fmt_date(value):
|
||||
|
||||
Reference in New Issue
Block a user