Files
kontur-focus-lib/kontur_focus/focus.py
T
2026-06-03 15:29:37 +03:00

156 lines
5.9 KiB
Python

import os
from dotenv import load_dotenv
from kontur_focus.req import Request
from datetime import datetime
class Focus(Request):
_basedir = os.path.abspath(os.path.dirname(__file__))
def __init__(self, inn: str, ogrn: str = None):
load_dotenv()
super().__init__(
base_url=os.environ.get('FOCUS_BASE_URL'),
access_key=os.environ.get('FOCUS_ACCESS_KEY'),
inn=inn,
ogrn=ogrn
)
def base_info(self):
"""Выгрузка базовых реквизитов Российских юридических лиц и индивидуальных предпринимателей
:return: Информация о ЮЛ
:rtype: str
"""
return self.get(path='/req')
def advanced_info(self):
"""Расширенные сведения на основе ЕГРЮЛ/ЕГРИП
:return: Информация о ЮЛ
:rtype: str
"""
return self.get('/egrDetails')
def excerpt(self, path: str = None) -> dict:
"""Выписка из ЕГРЮЛ/ЕГРИП (только для РФ)
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
:type path: str, необязательный
:return: Результат, имя файла и путь выгрузки
:rtype: str
"""
response = self.get('/excerpt')
if response.status_code != 404:
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}
else:
return {'success': False, 'message': 'Not found'}
def express_report(self, pdf: bool = True, path: str = None) -> dict:
"""Экспресс-отчет по контрагенту
:param pdf: Выгрузить PDF файл, по-умолчанию True
:type pdf: bool, optional
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
:type path: str, optional
:return: _description_
:rtype: _type_
"""
response = self.get('/briefReport', pdf=pdf)
current_datetime = datetime.now().strftime('%d-%m-%Y_%H-%M')
filename = f'Экспресс-отчет_{self.inn}_{current_datetime}.pdf'
if 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}
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):
"""История владения организацией
:return: Набор полей с информацией об изменениях
:rtype: str
"""
return self.get('/foundersHistory')
def foreign_representatives(self):
"""Иностранные представительства и филиалы
:return: Набор данных о представительствах
:rtype: str
"""
return self.get('/foreignRepresentatives')
def government_lists(self): # DEPRECATED
"""Вхождение организации в государственные реестры
:return: Список реестров
:rtype: _type_
"""
response = self.get('/analyticLists')
return response['listsEntries']
def is_foreign_agent(self): # DEPRECATED
"""Проверка наличия организации в Едином реестре иностранных агентов
:return: Результат проверки
:rtype: bool
"""
foreign_agents_list = next(lst for lst in self.government_lists() if lst['id'] == 'fcfc856d-89f8-408b-afef-56750cb90fed')
return foreign_agents_list['isInList']
def kz_company_details(self):
response = self.get('/kz/companyDetails', bin=self.inn)
return response[0] if response else None