diff --git a/kontur_focus/focus.py b/kontur_focus/focus.py index d378047..a60386a 100644 --- a/kontur_focus/focus.py +++ b/kontur_focus/focus.py @@ -86,6 +86,29 @@ class Focus(Request): return {'success': False, 'message': e} else: return response + + def finan(self, path: str = None): + """В файле указана рейтинговая таблица и окончательное заключение о финансовых показателях компании. + + :param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог, defaults to None + :type path: str, optional + """ + response = self.get('/finan') + current_datetime = datetime.now().strftime('%d-%m-%Y_%H-%M') + filename = f'Финансовый_анализ_{self.inn}_{current_datetime}.pdf' + + if not path: + file_path = os.path.join(self._basedir, filename) + else: + file_path = os.path.join(path, filename) + + try: + with open(file_path, mode='wb') as file: + file.write(response.content) + + return {'success': True, 'filename': filename, 'path': file_path} + except Exception as e: + return {'success': False, 'message': e} def founders_history(self): """История владения организацией diff --git a/kontur_focus/focus_compliance.py b/kontur_focus/focus_compliance.py index 0b72358..eebd887 100644 --- a/kontur_focus/focus_compliance.py +++ b/kontur_focus/focus_compliance.py @@ -7,6 +7,18 @@ from datetime import datetime class FocusCompliance(Request): _basedir = os.path.abspath(os.path.dirname(__file__)) _focus_base_url = None + check_models = [ + { + 'name': 'corporate', + 'description': 'Корпоративный сегмент', + 'risk_model_id': 'a9457161-0454-448a-bc2c-83a89cd51b42' + }, + { + 'name': '115-fz', + 'description': '115 ФЗ для некредитных финансовых организаций', + 'risk_model_id': '887ee87c-3a43-48d7-a4ad-05c0a64ff53a' + } + ] def __init__(self, inn: str = None, ogrn: str = None): load_dotenv() @@ -132,6 +144,33 @@ class FocusCompliance(Request): return {'success': True, 'files': [result]} + def full_company_report(self, model: str = '115-fz', path: str = None) -> dict: + """Запрос на полную проверку и построение печатного отчёта по организации + + :param model: Идентификатор модели, по которой пройдет проверка. + Идентификатор возвращается в методе «Получение списка рисковых моделей организации» + GET /banks/{bankId}/models, defaults to '115-fz' + :type model: str, optional + :param path: Путь сохранения файла, по-умолчанию файл сохраняется в текущий каталог, defaults to None + :type path: str, optional + :return: Отчет о результате сохранения файла + :rtype: dict + """ + if model == '115-fz': + model_id = [d['risk_model_id'] for d in self.check_models if d['name'] == model][0] + else: + model_id = [d['risk_model_id'] for d in self.check_models if d['name'] == 'corporate'][0] + + response = self.get(f'{self._focus_base_url}/models/{model_id}/fullCompanyReport') + result = self._save_file( + filename='Полный_отчет', + content=response.content, + file_type='docx', + path=path + ) + + return {'success': True, 'files': [result]} + # Физлица def person_is_foreign_agent(self): """Вхождение физлица в список иностранных агентов @@ -157,6 +196,35 @@ class FocusCompliance(Request): except KeyError: return None + def full_individual_report(self, path: str = None, passport: str = None, fio: str = None) -> dict: + """Запрос на построение печатного отчёта по физ лицу + Необходимо обязательно указать либо ИНН, либо ФИО и номер паспорта + + :param path: Путь сохранения файла, по-умолчанию файл сохраняется в текущий каталог, defaults to None + :type path: str, optional + :param passport: Номер паспорты, defaults to None + :type passport: str, optional + :param fio: ФИО (хотя бы фамилия и имя), defaults to None + :type fio: str, optional + :return: Отчет о результате сохранения файла + :rtype: dict + """ + if self.inn: + response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport') + if not self.inn and passport and fio: + response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport', passportNumber=passport, fio=fio) + else: + return {'success': True, 'result': 'Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт'} + + result = self._save_file( + filename='Полный_отчет', + content=response.content, + file_type='docx', + path=path + ) + + return {'success': True, 'files': [result]} + # Иноагенты def get_foreign_agents_list(self, fa_type: str = None) -> list: # Не работает, если нет подключенной лицензии """Получение списка иноагентов diff --git a/setup.py b/setup.py index 59f2117..70cc6ef 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name="kontur_focus", - version="2025.10.0", + version="2025.11.0", author="Ilya Sapunov", author_email="sapunov@selectel.ru", description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс",