Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f657ca77a4 | |||
| 6982393d03 | |||
| 227905dc04 | |||
| e03aed78f0 | |||
| 65c04d1578 | |||
| 97cc810363 |
Binary file not shown.
Binary file not shown.
@@ -310,15 +310,18 @@
|
|||||||
<span class="k">return</span> <span class="n">fal_data</span>
|
<span class="k">return</span> <span class="n">fal_data</span>
|
||||||
|
|
||||||
<span class="k">def</span><span class="w"> </span><span class="nf">company_in_sanctions_lists</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
<span class="k">def</span><span class="w"> </span><span class="nf">company_in_sanctions_lists</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="nb">dict</span><span class="p">:</span>
|
||||||
<span class="w"> </span><span class="sd">"""Вхождение организации и ее руководителей в санкционные списки</span>
|
<span class="w"> </span><span class="sd">"""Вхождение организации и ее руководителей в санкционные списки с датами вхождения по типам санкций</span>
|
||||||
|
|
||||||
<span class="sd"> :return: Признак присутствия или отсутствия в санкционных списках:\n</span>
|
<span class="sd"> :return: Признак присутствия или отсутствия в санкционных списках:\n</span>
|
||||||
<span class="sd"> .. code-block:: python\n</span>
|
<span class="sd"> .. code-block:: python\n</span>
|
||||||
<span class="sd"> {'company_in_list': False, 'persons_in_company_in_list': False}</span>
|
<span class="sd"> {'company_in_list': False, \n</span>
|
||||||
|
<span class="sd"> 'persons_in_company_in_list': False, \n</span>
|
||||||
|
<span class="sd"> 'lists_dates': [{'type': 'Sema', 'date': '2025-12-15T00:00:00'}]}</span>
|
||||||
<span class="sd"> :rtype: dict</span>
|
<span class="sd"> :rtype: dict</span>
|
||||||
<span class="sd"> """</span>
|
<span class="sd"> """</span>
|
||||||
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/companies/lists'</span><span class="p">)</span>
|
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/companies/lists'</span><span class="p">)</span>
|
||||||
<span class="n">sanctions_list</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">'sanctionsList'</span><span class="p">]</span>
|
<span class="n">sanctions_list</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">'sanctionsList'</span><span class="p">]</span>
|
||||||
|
<span class="n">lists_data</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">'globalSanctionsList'</span><span class="p">][</span><span class="s1">'listDates'</span><span class="p">]</span>
|
||||||
<span class="n">company_in_list</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">company_in_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
<span class="n">persons_in_company_in_list</span> <span class="o">=</span> <span class="p">[]</span>
|
<span class="n">persons_in_company_in_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||||
|
|
||||||
@@ -336,7 +339,8 @@
|
|||||||
|
|
||||||
<span class="n">sanctions_lists_data</span> <span class="o">=</span> <span class="p">{</span>
|
<span class="n">sanctions_lists_data</span> <span class="o">=</span> <span class="p">{</span>
|
||||||
<span class="s1">'company_in_list'</span><span class="p">:</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">company_in_list</span> <span class="k">else</span> <span class="kc">False</span><span class="p">,</span>
|
<span class="s1">'company_in_list'</span><span class="p">:</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">company_in_list</span> <span class="k">else</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
<span class="s1">'persons_in_company_in_list'</span><span class="p">:</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">persons_in_company_in_list</span> <span class="k">else</span> <span class="kc">False</span>
|
<span class="s1">'persons_in_company_in_list'</span><span class="p">:</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">persons_in_company_in_list</span> <span class="k">else</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
|
<span class="s1">'lists_data'</span><span class="p">:</span> <span class="n">lists_data</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
|
|
||||||
<span class="k">return</span> <span class="n">sanctions_lists_data</span>
|
<span class="k">return</span> <span class="n">sanctions_lists_data</span>
|
||||||
@@ -447,14 +451,18 @@
|
|||||||
<span class="n">model_id</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'risk_model_id'</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_models</span> <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'corporate'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
<span class="n">model_id</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span><span class="p">[</span><span class="s1">'risk_model_id'</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_models</span> <span class="k">if</span> <span class="n">d</span><span class="p">[</span><span class="s1">'name'</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'corporate'</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/models/</span><span class="si">{</span><span class="n">model_id</span><span class="si">}</span><span class="s1">/fullCompanyReport'</span><span class="p">)</span>
|
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s1">'</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span><span class="si">}</span><span class="s1">/models/</span><span class="si">{</span><span class="n">model_id</span><span class="si">}</span><span class="s1">/fullCompanyReport'</span><span class="p">)</span>
|
||||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_save_file</span><span class="p">(</span>
|
|
||||||
<span class="n">filename</span><span class="o">=</span><span class="s1">'Полный_отчет'</span><span class="p">,</span>
|
|
||||||
<span class="n">content</span><span class="o">=</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">,</span>
|
|
||||||
<span class="n">file_type</span><span class="o">=</span><span class="s1">'docx'</span><span class="p">,</span>
|
|
||||||
<span class="n">path</span><span class="o">=</span><span class="n">path</span>
|
|
||||||
<span class="p">)</span>
|
|
||||||
|
|
||||||
<span class="k">return</span> <span class="p">{</span><span class="s1">'success'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">'file'</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span>
|
<span class="k">try</span><span class="p">:</span>
|
||||||
|
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_save_file</span><span class="p">(</span>
|
||||||
|
<span class="n">filename</span><span class="o">=</span><span class="s1">'Полный_отчет'</span><span class="p">,</span>
|
||||||
|
<span class="n">content</span><span class="o">=</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">,</span>
|
||||||
|
<span class="n">file_type</span><span class="o">=</span><span class="s1">'docx'</span><span class="p">,</span>
|
||||||
|
<span class="n">path</span><span class="o">=</span><span class="n">path</span>
|
||||||
|
<span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s1">'success'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">'file'</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span>
|
||||||
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||||
|
<span class="k">return</span> <span class="p">{</span><span class="s1">'success'</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">'result'</span><span class="p">:</span> <span class="s1">'Организация не найдена'</span><span class="p">}</span>
|
||||||
|
|
||||||
<span class="c1"># Физлица</span>
|
<span class="c1"># Физлица</span>
|
||||||
<span class="k">def</span><span class="w"> </span><span class="nf">person_is_foreign_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
<span class="k">def</span><span class="w"> </span><span class="nf">person_is_foreign_agent</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
|
|
||||||
.. autofunction:: kontur_focus.FocusCompliance.company_in_sanctions_lists()
|
.. autofunction:: kontur_focus.FocusCompliance.company_in_sanctions_lists()
|
||||||
|
|
||||||
|
|
||||||
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id(company_name, search_accuracy)
|
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id(company_name, search_accuracy)
|
||||||
|
|
||||||
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
|
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
|
||||||
|
|||||||
@@ -274,11 +274,15 @@
|
|||||||
<dl class="py function">
|
<dl class="py function">
|
||||||
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.company_in_sanctions_lists">
|
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.company_in_sanctions_lists">
|
||||||
<span class="sig-name descname"><span class="pre">company_in_sanctions_lists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.company_in_sanctions_lists" title="Ссылка на это определение">¶</a></dt>
|
<span class="sig-name descname"><span class="pre">company_in_sanctions_lists</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.company_in_sanctions_lists" title="Ссылка на это определение">¶</a></dt>
|
||||||
<dd><p>Вхождение организации и ее руководителей в санкционные списки</p>
|
<dd><p>Вхождение организации и ее руководителей в санкционные списки с датами вхождения по типам санкций</p>
|
||||||
<dl class="field-list simple">
|
<dl class="field-list simple">
|
||||||
<dt class="field-odd">Результат<span class="colon">:</span></dt>
|
<dt class="field-odd">Результат<span class="colon">:</span></dt>
|
||||||
<dd class="field-odd"><p><p>Признак присутствия или отсутствия в санкционных списках:</p>
|
<dd class="field-odd"><p><p>Признак присутствия или отсутствия в санкционных списках:</p>
|
||||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s1">'company_in_list'</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">'persons_in_company_in_list'</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="s1">'company_in_list'</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
|
|
||||||
|
<span class="s1">'persons_in_company_in_list'</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
||||||
|
|
||||||
|
<span class="s1">'lists_dates'</span><span class="p">:</span> <span class="p">[{</span><span class="s1">'type'</span><span class="p">:</span> <span class="s1">'Sema'</span><span class="p">,</span> <span class="s1">'date'</span><span class="p">:</span> <span class="s1">'2025-12-15T00:00:00'</span><span class="p">}]}</span>
|
||||||
</pre></div>
|
</pre></div>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
+22
-14
@@ -33,7 +33,7 @@ class Focus(Request):
|
|||||||
return self.get('/egrDetails')
|
return self.get('/egrDetails')
|
||||||
|
|
||||||
def excerpt(self, path: str = None) -> dict:
|
def excerpt(self, path: str = None) -> dict:
|
||||||
"""Выписка из ЕГРЮЛ/ЕГРИП
|
"""Выписка из ЕГРЮЛ/ЕГРИП (только для РФ)
|
||||||
|
|
||||||
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
|
:param path: Путь выгрузки файла. Если не указан, выгружается в текущий каталог.
|
||||||
:type path: str, необязательный
|
:type path: str, необязательный
|
||||||
@@ -41,21 +41,25 @@ class Focus(Request):
|
|||||||
:rtype: str
|
:rtype: str
|
||||||
"""
|
"""
|
||||||
response = self.get('/excerpt')
|
response = self.get('/excerpt')
|
||||||
current_datetime = datetime.now().strftime('%d-%m-%Y_%H-%M')
|
|
||||||
filename = f'Выписка_{self.inn}_{current_datetime}.pdf'
|
|
||||||
|
|
||||||
if not path:
|
if response.status_code != 404:
|
||||||
file_path = os.path.join(self._basedir, filename)
|
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:
|
else:
|
||||||
file_path = os.path.join(path, filename)
|
return {'success': False, 'message': 'Not found'}
|
||||||
|
|
||||||
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 express_report(self, pdf: bool = True, path: str = None) -> dict:
|
def express_report(self, pdf: bool = True, path: str = None) -> dict:
|
||||||
"""Экспресс-отчет по контрагенту
|
"""Экспресс-отчет по контрагенту
|
||||||
@@ -145,3 +149,7 @@ class Focus(Request):
|
|||||||
foreign_agents_list = next(lst for lst in self.government_lists() if lst['id'] == 'fcfc856d-89f8-408b-afef-56750cb90fed')
|
foreign_agents_list = next(lst for lst in self.government_lists() if lst['id'] == 'fcfc856d-89f8-408b-afef-56750cb90fed')
|
||||||
|
|
||||||
return foreign_agents_list['isInList']
|
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
|
||||||
|
|||||||
@@ -80,15 +80,18 @@ class FocusCompliance(Request):
|
|||||||
return fal_data
|
return fal_data
|
||||||
|
|
||||||
def company_in_sanctions_lists(self) -> dict:
|
def company_in_sanctions_lists(self) -> dict:
|
||||||
"""Вхождение организации и ее руководителей в санкционные списки
|
"""Вхождение организации и ее руководителей в санкционные списки с датами вхождения по типам санкций
|
||||||
|
|
||||||
:return: Признак присутствия или отсутствия в санкционных списках:\n
|
:return: Признак присутствия или отсутствия в санкционных списках:\n
|
||||||
.. code-block:: python\n
|
.. code-block:: python\n
|
||||||
{'company_in_list': False, 'persons_in_company_in_list': False}
|
{'company_in_list': False, \n
|
||||||
|
'persons_in_company_in_list': False, \n
|
||||||
|
'lists_dates': [{'type': 'Sema', 'date': '2025-12-15T00:00:00'}]}
|
||||||
:rtype: dict
|
:rtype: dict
|
||||||
"""
|
"""
|
||||||
response = self.get(path=f'{self._focus_base_url}/companies/lists')
|
response = self.get(path=f'{self._focus_base_url}/companies/lists')
|
||||||
sanctions_list = response['sanctionsList']
|
sanctions_list = response['sanctionsList']
|
||||||
|
lists_data = response['globalSanctionsList']['listDates']
|
||||||
company_in_list = []
|
company_in_list = []
|
||||||
persons_in_company_in_list = []
|
persons_in_company_in_list = []
|
||||||
|
|
||||||
@@ -106,7 +109,8 @@ class FocusCompliance(Request):
|
|||||||
|
|
||||||
sanctions_lists_data = {
|
sanctions_lists_data = {
|
||||||
'company_in_list': True if company_in_list else False,
|
'company_in_list': True if company_in_list else False,
|
||||||
'persons_in_company_in_list': True if persons_in_company_in_list else False
|
'persons_in_company_in_list': True if persons_in_company_in_list else False,
|
||||||
|
'lists_data': lists_data
|
||||||
}
|
}
|
||||||
|
|
||||||
return sanctions_lists_data
|
return sanctions_lists_data
|
||||||
@@ -217,14 +221,20 @@ class FocusCompliance(Request):
|
|||||||
model_id = [d['risk_model_id'] for d in self.check_models if d['name'] == 'corporate'][0]
|
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')
|
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, 'file': result}
|
try:
|
||||||
|
result = self._save_file(
|
||||||
|
filename='Полный_отчет',
|
||||||
|
content=response.content,
|
||||||
|
file_type='docx',
|
||||||
|
path=path
|
||||||
|
)
|
||||||
|
if not result['success']:
|
||||||
|
return {'success': False, 'result': result['message']}
|
||||||
|
|
||||||
|
return {'success': True, 'file': result}
|
||||||
|
except AttributeError:
|
||||||
|
return {'success': False, 'result': 'Организация не найдена'}
|
||||||
|
|
||||||
# Физлица
|
# Физлица
|
||||||
def person_is_foreign_agent(self):
|
def person_is_foreign_agent(self):
|
||||||
|
|||||||
+2
-2
@@ -36,8 +36,8 @@ class Request:
|
|||||||
try:
|
try:
|
||||||
response = requests.get(url=full_url, params=payload)
|
response = requests.get(url=full_url, params=payload)
|
||||||
|
|
||||||
if response.headers['Content-Type'] == 'application/json' or \
|
if ('Content-Type' in response.headers and response.headers['Content-Type'] == 'application/json') or \
|
||||||
response.headers['Content-Type'] == 'application/json; charset=utf-8':
|
('Content-Type' in response.headers and response.headers['Content-Type'] == 'application/json; charset=utf-8'):
|
||||||
return response.json()
|
return response.json()
|
||||||
else:
|
else:
|
||||||
return response
|
return response
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="kontur_focus",
|
name="kontur_focus",
|
||||||
version="2025.12.0",
|
version="2026.4.3",
|
||||||
author="Ilya Sapunov",
|
author="Ilya Sapunov",
|
||||||
author_email="me@slrover.ru",
|
author_email="me@slrover.ru",
|
||||||
description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс",
|
description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс",
|
||||||
|
|||||||
Reference in New Issue
Block a user