152 lines
5.7 KiB
Python
152 lines
5.7 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']
|