From 371370f450b6eddf3f46646e56c96c895eea0af7 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Thu, 30 Jul 2026 15:07:13 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=81=D0=BB=D0=BE=D0=B2=D0=B0=D1=80?= =?UTF-8?q?=D1=8C=20=D0=B8=20=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=94=D0=B5=D0=B9=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D1=81=20?= =?UTF-8?q?=D0=9F=D0=94=D0=BD=20=D0=B2=20=D0=98=D0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dokogen/dictionaries/pd_actions.json | 22 +++++++++++++++++++++ dokogen/models.py | 1 + dokogen/ui.py | 29 ++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 dokogen/dictionaries/pd_actions.json diff --git a/dokogen/dictionaries/pd_actions.json b/dokogen/dictionaries/pd_actions.json new file mode 100644 index 0000000..b66179a --- /dev/null +++ b/dokogen/dictionaries/pd_actions.json @@ -0,0 +1,22 @@ +[ + "Сбор персональных данных", + "Запись персональных данных", + "Систематизация персональных данных", + "Накопление персональных данных", + "Хранение персональных данных", + "Уточнение (обновление, изменение) персональных данных", + "Извлечение персональных данных", + "Использование персональных данных", + "Передача (распространение, предоставление, доступ) персональных данных", + "Обезличивание персональных данных", + "Блокирование персональных данных", + "Удаление персональных данных", + "Уничтожение персональных данных", + "Трансграничная передача персональных данных", + "Автоматизированная обработка персональных данных", + "Неавтоматизированная обработка персональных данных", + "Смешанная обработка персональных данных", + "Формирование и ведение баз данных", + "Передача данных третьим лицам", + "Внутренняя передача данных между подразделениями" +] diff --git a/dokogen/models.py b/dokogen/models.py index dfd273d..00f3bd3 100644 --- a/dokogen/models.py +++ b/dokogen/models.py @@ -28,6 +28,7 @@ class InformationSystem: users: str = "" defense_tools_list: List[str] = field(default_factory=list) processing_modes: 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) diff --git a/dokogen/ui.py b/dokogen/ui.py index eacd1a5..591b5e6 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -358,6 +358,16 @@ class DokoGenApp: self.pd_subjects_listbox = tk.Listbox(subj_tab, height=6) self.pd_subjects_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + # Действия с ПДн + act_tab = ttk.Frame(nb2) + nb2.add(act_tab, text="Действия с ПДн") + act_btn_frame = ttk.Frame(act_tab) + act_btn_frame.pack(fill=tk.X) + ttk.Button(act_btn_frame, text="+ Добавить", command=self._add_pd_action_item).pack(side=tk.LEFT, padx=2) + ttk.Button(act_btn_frame, text="Выбрать из списка", command=self._select_from_actions_list).pack(side=tk.LEFT, padx=2) + self.pd_actions_listbox = tk.Listbox(act_tab, height=6) + self.pd_actions_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + # СЗИ def_tab = ttk.Frame(nb2) nb2.add(def_tab, text="Средства защиты") @@ -606,6 +616,7 @@ class DokoGenApp: # Списки isys.personal_data_list = list(self.pd_listbox.get(0, tk.END)) isys.pd_subjects_list = list(self.pd_subjects_listbox.get(0, tk.END)) + isys.pd_actions_list = list(self.pd_actions_listbox.get(0, tk.END)) isys.defense_tools_list = list(self.defense_tools_listbox.get(0, tk.END)) isys.users_list = list(self.users_listbox.get(0, tk.END)) @@ -840,6 +851,7 @@ class DokoGenApp: for lb, items in [ (self.pd_listbox, isys.personal_data_list or []), (self.pd_subjects_listbox, isys.pd_subjects_list or []), + (self.pd_actions_listbox, isys.pd_actions_list or []), (self.defense_tools_listbox, isys.defense_tools_list or []), (self.users_listbox, isys.users_list or []), ]: @@ -872,6 +884,7 @@ class DokoGenApp: threat_type=src.threat_type, personal_data_category=list(src.personal_data_category), personal_data_list=list(src.personal_data_list), + pd_actions_list=list(src.pd_actions_list), pd_subjects_list=list(src.pd_subjects_list), defense_tools_list=list(src.defense_tools_list), users_list=list(src.users_list), @@ -974,6 +987,22 @@ class DokoGenApp: dialog.wait_window() + def _add_pd_action_item(self): + item = simpledialog.askstring("Добавить действие", "Введите действие с ПДн:") + if item: + self.pd_actions_listbox.insert(tk.END, item) + + def _select_from_actions_list(self): + """Выбор действий с ПДн из JSON словаря.""" + import json + dict_path = os.path.join(os.path.dirname(__file__), 'dictionaries', 'pd_actions.json') + try: + with open(dict_path, 'r', encoding='utf-8') as f: + items = json.load(f) + self._select_from_dialog("Выбор действий с персональными данными", items, self.pd_actions_listbox) + except Exception as e: + messagebox.showerror("Ошибка", f"Не удалось загрузить словарь: {e}") + def _select_from_pd_list(self): """Выбор ПДн из JSON словаря.""" import json