fix: 6 замечаний по генератору
1) нормализация адреса: «Р-Н Крымский» → «р-н. Крымский», «Г Крымск» → «г. Крымск», «УЛ» → «ул.», «Д.» → «д.» 2) убрана строчка «ПО» на вкладке ИС 3) СЗИ без категорий: «Kaspersky, КриптоПро» (через запятую) 4) кнопка «Выбрать из списка» в подвкладке «Пользователи ИС» 5) бумажные документы: «хранятся в сейфе» (авто-предлог+падеж) 6) незаполненные данные «—» подсвечиваются жёлтым (незаменённые переменные — красным, как было)
This commit is contained in:
+32
-1
@@ -71,6 +71,31 @@ def _normalize_caps(text: str) -> str:
|
||||
return ' '.join(result)
|
||||
|
||||
|
||||
_ADDRESS_ABBR = {
|
||||
# нормальные сокращения для адресов: «Г» → «г.», «Р-Н» → «р-н.» и т.п.
|
||||
'Г': 'г.', 'УЛ': 'ул.', 'Д': 'д.', 'КВ': 'кв.', 'ПР': 'пр.',
|
||||
'ПЕР': 'пер.', 'ПЛ': 'пл.', 'ОБЛ': 'обл.', 'ПОС': 'пос.',
|
||||
'СТ': 'ст.', 'Ш': 'ш.', 'Р-Н': 'р-н.', 'Б-Р': 'б-р.', 'МКР': 'мкр.',
|
||||
'НАБ': 'наб.', 'ТУП': 'туп.', 'ПР-Д': 'пр-д.', 'КРП': 'крп.',
|
||||
'Г.': 'г.', 'УЛ.': 'ул.', 'Д.': 'д.', 'Р-Н.': 'р-н.',
|
||||
}
|
||||
|
||||
|
||||
def normalize_address(text: str) -> str:
|
||||
"""Приводит адрес к нормальному виду: «Г Крымск» → «г. Крымск»,
|
||||
«Р-Н Крымский» → «р-н. Крымский», «УЛ Карла» → «ул. Карла»."""
|
||||
if not text:
|
||||
return ''
|
||||
parts = re.split(r'(\s+|[,\;])', text)
|
||||
out = []
|
||||
for p in parts:
|
||||
if p.strip() and p.strip().upper() in _ADDRESS_ABBR:
|
||||
out.append(_ADDRESS_ABBR[p.strip().upper()])
|
||||
else:
|
||||
out.append(p)
|
||||
return ''.join(out)
|
||||
|
||||
|
||||
def clean_value(val):
|
||||
"""Очистка и нормализация значения ячейки Excel."""
|
||||
if val is None:
|
||||
@@ -145,6 +170,11 @@ def import_152fz(filepath: str, log_fn: Optional[Callable] = None, settings_path
|
||||
if data.get(src) and not data.get(dst):
|
||||
data[dst] = data[src]
|
||||
|
||||
# Нормализация адресов: «Г Крымск» → «г. Крымск», «Р-Н» → «р-н.» и т.п.
|
||||
for key in ('addressLegal', 'addressActual'):
|
||||
if data.get(key):
|
||||
data[key] = normalize_address(data[key])
|
||||
|
||||
_validate_company_data(data, log_fn)
|
||||
return data
|
||||
|
||||
@@ -366,7 +396,8 @@ def _import_152_is_list(wb, data, settings, log_fn):
|
||||
matched_label = label
|
||||
break
|
||||
if matched_label and val_b and 'выбрать' not in field_lower:
|
||||
is_obj['defense_tools'].append(f"{matched_label}: {val_b}")
|
||||
# Без префикса категории: просто название средства (Kaspersky, КриптоПро)
|
||||
is_obj['defense_tools'].append(val_b)
|
||||
elif matched_label:
|
||||
pass
|
||||
elif 'куда' in field_lower or 'передаются' in field_lower:
|
||||
|
||||
Reference in New Issue
Block a user