feat: переделка под ОКИИ (187-ФЗ) — объекты КИИ вместо ИС, категории 1-3, ОКВЭД, убраны ПДн/бумажные носители

- вкладка «Информационные системы» → «Объекты КИИ», убрана «Структура объекта»
- «Тип угроз»/«УЗ» → категория значимости 1/2/3/без категории
- удалены Категории ПДн, кол-во записей, перечень/субъекты/действия с ПДн + словари
- «Пользователи ИС» → «Пользователи ОКИИ», средства защиты оставлены
- вкладка «Бумажные документы» удалена полностью (GUI + логика + модели)
- ОКВЭД: поля во вкладке «Организация», словарь okved.json, выбор галочками, импорт
- нормализация регистра адреса DaData (КАПС → нормальный)
- importer: объекты КИИ (наименование объекта, ПО, СЗИ, пользователи)
This commit is contained in:
2026-08-04 13:58:23 +04:00
parent b115f9e2b4
commit ce1b56066a
11 changed files with 562 additions and 724 deletions
+10 -31
View File
@@ -7,7 +7,7 @@ from typing import List, Dict, Any
@dataclass
class CommissionMember:
"""Член комиссии по ПДн"""
"""Член комиссии по категорированию объектов КИИ"""
role: str = "член комиссии"
position: str = ""
fio: str = ""
@@ -15,38 +15,19 @@ class CommissionMember:
@dataclass
class InformationSystem:
"""Информационная система (обработка ПДн)"""
"""Объект КИИ (вместо информационной системы 152-ФЗ)"""
name: str = ""
description: str = ""
is_local_network: bool = False
is_internet: bool = False
defence_level: str = ""
threat_type: str = "3"
category: str = ""
pd_list: str = ""
pd_count: str = "менее 100 000"
users: str = ""
defense_tools_list: List[str] = field(default_factory=list)
processing_modes: str = ""
subject_type: str = "работники организации"
pd_actions_list: List[str] = field(default_factory=list)
pd_subjects_list: List[str] = field(default_factory=list)
personal_data_list: List[str] = field(default_factory=list)
users_list: List[str] = field(default_factory=list)
personal_data_category: List[str] = field(default_factory=list)
category: str = "" # Категория значимости объекта КИИ: 1 / 2 / 3 / без категории
users_list: List[str] = field(default_factory=list) # Пользователи ОКИИ
defense_tools_list: List[str] = field(default_factory=list) # Средства защиты
purpose: str = ""
room: str = ""
structure: str = "" # Структура информационной системы
structure: str = "" # Структура объекта КИИ
software: str = "" # Программное обеспечение
@dataclass
class PaperDocument:
"""Бумажный документ с ПДн"""
name: str = ""
storage: str = ""
@dataclass
class Company:
"""Организация — основной объект (187-ФЗ)"""
@@ -75,6 +56,8 @@ class Company:
ogrn: str = ""
ogrn_date: str = ""
kpp: str = ""
okved: str = "" # Основной ОКВЭД
okved_extra: List[str] = field(default_factory=list) # Дополнительные ОКВЭД
# Должностные лица
chief_position: str = ""
@@ -91,7 +74,6 @@ class Company:
# Списки
commission: List[CommissionMember] = field(default_factory=list)
information_systems: List[InformationSystem] = field(default_factory=list)
paper_documents_list: List[PaperDocument] = field(default_factory=list)
employees_access: List[Dict[str, str]] = field(default_factory=list)
# Наименование структурного подразделения по безопасности
@@ -135,13 +117,10 @@ class Company:
InformationSystem(**isys) if isinstance(isys, dict) else isys
for isys in d["information_systems"]
]
if "paper_documents_list" in d and isinstance(d["paper_documents_list"], list):
d["paper_documents_list"] = [
PaperDocument(**p) if isinstance(p, dict) else p
for p in d["paper_documents_list"]
]
if "employees_access" in d and not isinstance(d["employees_access"], list):
d["employees_access"] = []
if "okved_extra" in d and not isinstance(d.get("okved_extra"), list):
d["okved_extra"] = []
valid = {f.name for f in cls.__dataclass_fields__.values()}
return cls(**{k: v for k, v in d.items() if k in valid})