5 Commits

Author SHA1 Message Date
8a093175c4 2025.11.5: Added new method 2025-11-10 15:08:40 +03:00
b50471276f Added exception for incorrect answer 2025-11-07 15:52:51 +03:00
1d55e08c15 Fixed individual report 2025-11-07 15:28:16 +03:00
71596d9cec Bump version 2025-11-07 13:45:39 +03:00
71cd6ddfcd Small fix 2025-11-07 13:44:19 +03:00
11 changed files with 102 additions and 22 deletions

View File

@@ -36,6 +36,8 @@
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id() .. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id()
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
.. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path) .. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path)
.. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path) .. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path)

Binary file not shown.

View File

@@ -182,6 +182,27 @@
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Key Error&#39;</span><span class="p">}</span> <span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Key Error&#39;</span><span class="p">}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">full_legal_entity_sanctions_profile</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">profile_id_list</span><span class="p">:</span> <span class="nb">list</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Просмотр полной информации определенного санкционного профиля ЮЛ</span>
<span class="sd"> :param profile_id_list: Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе </span>
<span class="sd"> «Поиск сводной информации по санкционным профилям ЮЛ» - </span>
<span class="sd"> GET /banks/{bankId}/companies/profiles/search</span>
<span class="sd"> :type profile_id_list: list</span>
<span class="sd"> :return: Полная информация по профилю ЮЛ</span>
<span class="sd"> :rtype: dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">profile_id_list</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Не указан список ID профилей&#39;</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">profile</span> <span class="o">=</span> <span class="n">profile_id_list</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="n">path</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;</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/profiles/</span><span class="si">{</span><span class="n">profile</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="n">response</span><span class="p">}</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка в ID профиля.&#39;</span><span class="p">}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">legal_entity_profile_report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">profile_id_list</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span> <span class="k">def</span><span class="w"> </span><span class="nf">legal_entity_profile_report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">profile_id_list</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">path</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение печатного отчета по профилю ЮЛ</span> <span class="w"> </span><span class="sd">&quot;&quot;&quot;Получение печатного отчета по профилю ЮЛ</span>
@@ -286,19 +307,25 @@
<span class="sd"> &quot;&quot;&quot;</span> <span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span><span class="p">:</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</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">&#39;</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">/formFullIndividualReport&#39;</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">&#39;</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">/formFullIndividualReport&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span> <span class="ow">and</span> <span class="n">passport</span> <span class="ow">and</span> <span class="n">fio</span><span class="p">:</span> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span> <span class="ow">and</span> <span class="n">passport</span> <span class="ow">and</span> <span class="n">fio</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">&#39;</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">/formFullIndividualReport&#39;</span><span class="p">,</span> <span class="n">passportNumber</span><span class="o">=</span><span class="n">passport</span><span class="p">,</span> <span class="n">fio</span><span class="o">=</span><span class="n">fio</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">&#39;</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">/formFullIndividualReport&#39;</span><span class="p">,</span> <span class="n">passportNumber</span><span class="o">=</span><span class="n">passport</span><span class="p">,</span> <span class="n">fio</span><span class="o">=</span><span class="n">fio</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span> <span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт&#39;</span><span class="p">}</span> <span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт&#39;</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="k">try</span><span class="p">:</span>
<span class="n">filename</span><span class="o">=</span><span class="s1">&#39;Полный_отчет&#39;</span><span class="p">,</span> <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</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">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">file_type</span><span class="o">=</span><span class="s1">&#39;docx&#39;</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s1">&#39;Полный_отчет&#39;</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="n">path</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="p">)</span> <span class="n">file_type</span><span class="o">=</span><span class="s1">&#39;docx&#39;</span><span class="p">,</span>
<span class="n">path</span><span class="o">=</span><span class="n">path</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span> <span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;file&#39;</span><span class="p">:</span> <span class="n">result</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="s1">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.&#39;</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">&#39;success&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span> <span class="s1">&#39;result&#39;</span><span class="p">:</span> <span class="s1">&#39;Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.&#39;</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">get_foreign_agents_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fa_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span> <span class="c1"># Не работает, если нет подключенной лицензии</span> <span class="k">def</span><span class="w"> </span><span class="nf">get_foreign_agents_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fa_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span> <span class="c1"># Не работает, если нет подключенной лицензии</span>

View File

@@ -36,6 +36,8 @@
.. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id() .. autofunction:: kontur_focus.FocusCompliance.search_global_company_profiles_id()
.. autofunction:: kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile(profile_id_list)
.. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path) .. autofunction:: kontur_focus.FocusCompliance.legal_entity_profile_report(profile_id_list, path)
.. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path) .. autofunction:: kontur_focus.FocusCompliance.full_company_report(model, path)

View File

@@ -54,6 +54,7 @@
<li class="toctree-l2"><a class="reference internal" href="#id5">Юридические лица</a><ul> <li class="toctree-l2"><a class="reference internal" href="#id5">Юридические лица</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.company_is_foreign_agent"><code class="docutils literal notranslate"><span class="pre">company_is_foreign_agent()</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.company_is_foreign_agent"><code class="docutils literal notranslate"><span class="pre">company_is_foreign_agent()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.search_global_company_profiles_id"><code class="docutils literal notranslate"><span class="pre">search_global_company_profiles_id()</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.search_global_company_profiles_id"><code class="docutils literal notranslate"><span class="pre">search_global_company_profiles_id()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile"><code class="docutils literal notranslate"><span class="pre">full_legal_entity_sanctions_profile()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.legal_entity_profile_report"><code class="docutils literal notranslate"><span class="pre">legal_entity_profile_report()</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.legal_entity_profile_report"><code class="docutils literal notranslate"><span class="pre">legal_entity_profile_report()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.full_company_report"><code class="docutils literal notranslate"><span class="pre">full_company_report()</span></code></a></li> <li class="toctree-l3"><a class="reference internal" href="#kontur_focus.FocusCompliance.full_company_report"><code class="docutils literal notranslate"><span class="pre">full_company_report()</span></code></a></li>
</ul> </ul>
@@ -149,6 +150,25 @@
</dl> </dl>
</dd></dl> </dd></dl>
<dl class="py function">
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile">
<span class="sig-name descname"><span class="pre">full_legal_entity_sanctions_profile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">profile_id_list</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile" title="Ссылка на это определение"></a></dt>
<dd><p>Просмотр полной информации определенного санкционного профиля ЮЛ</p>
<dl class="field-list simple">
<dt class="field-odd">Параметры<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>profile_id_list</strong> (<em>list</em>) Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе
«Поиск сводной информации по санкционным профилям ЮЛ» -
GET /banks/{bankId}/companies/profiles/search</p>
</dd>
<dt class="field-even">Результат<span class="colon">:</span></dt>
<dd class="field-even"><p>Полная информация по профилю ЮЛ</p>
</dd>
<dt class="field-odd">Тип результата<span class="colon">:</span></dt>
<dd class="field-odd"><p>dict</p>
</dd>
</dl>
</dd></dl>
<dl class="py function"> <dl class="py function">
<dt class="sig sig-object py" id="kontur_focus.FocusCompliance.legal_entity_profile_report"> <dt class="sig sig-object py" id="kontur_focus.FocusCompliance.legal_entity_profile_report">
<span class="sig-name descname"><span class="pre">legal_entity_profile_report</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">profile_id_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.legal_entity_profile_report" title="Ссылка на это определение"></a></dt> <span class="sig-name descname"><span class="pre">legal_entity_profile_report</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">profile_id_list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#kontur_focus.FocusCompliance.legal_entity_profile_report" title="Ссылка на это определение"></a></dt>

View File

@@ -133,6 +133,8 @@
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_company_report">full_company_report() (в модуле kontur_focus.FocusCompliance)</a> <li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_company_report">full_company_report() (в модуле kontur_focus.FocusCompliance)</a>
</li> </li>
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_individual_report">full_individual_report() (в модуле kontur_focus.FocusCompliance)</a> <li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_individual_report">full_individual_report() (в модуле kontur_focus.FocusCompliance)</a>
</li>
<li><a href="focus-compliance.html#kontur_focus.FocusCompliance.full_legal_entity_sanctions_profile">full_legal_entity_sanctions_profile() (в модуле kontur_focus.FocusCompliance)</a>
</li> </li>
</ul></td> </ul></td>
</tr></table> </tr></table>

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -107,6 +107,27 @@ class FocusCompliance(Request):
except KeyError: except KeyError:
return {'success': False, 'result': 'Key Error'} return {'success': False, 'result': 'Key Error'}
def full_legal_entity_sanctions_profile(self, profile_id_list: list) -> dict:
"""Просмотр полной информации определенного санкционного профиля ЮЛ
:param profile_id_list: Идентификатор санкционного профиля ЮЛ. Идентификатор возвращается в методе
«Поиск сводной информации по санкционным профилям ЮЛ» -
GET /banks/{bankId}/companies/profiles/search
:type profile_id_list: list
:return: Полная информация по профилю ЮЛ
:rtype: dict
"""
if not profile_id_list:
return {'success': False, 'message': 'Не указан список ID профилей'}
else:
try:
profile = profile_id_list[0]
response = self.get(path=f'{self._focus_base_url}/companies/profiles/{profile}')
return {'success': True, 'result': response}
except KeyError:
return {'success': False, 'result': 'Ошибка в ID профиля.'}
def legal_entity_profile_report(self, profile_id_list: list, path: str = None) -> dict: def legal_entity_profile_report(self, profile_id_list: list, path: str = None) -> dict:
"""Получение печатного отчета по профилю ЮЛ """Получение печатного отчета по профилю ЮЛ
@@ -211,19 +232,25 @@ class FocusCompliance(Request):
""" """
if self.inn: if self.inn:
response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport') response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport')
if not self.inn and passport and fio: elif not self.inn and passport and fio:
response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport', passportNumber=passport, fio=fio) response = self.get(path=f'{self._focus_base_url}/formFullIndividualReport', passportNumber=passport, fio=fio)
else: else:
return {'success': True, 'result': 'Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт'} return {'success': False, 'result': 'Необходимо указать: либо ИНН, либо ФИО (хотя бы фамилию и имя) и паспорт'}
result = self._save_file( try:
filename='Полный_отчет', if response.status_code == 200:
content=response.content, result = self._save_file(
file_type='docx', filename='Полный_отчет',
path=path content=response.content,
) file_type='docx',
path=path
return {'success': True, 'file': result} )
return {'success': True, 'file': result}
else:
return {'success': False, 'result': 'Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.'}
except AttributeError:
return {'success': False, 'result': 'Ошибка получения отчета. Проверьте корректность ИНН, ФИО или паспортных данных.'}
# Иноагенты # Иноагенты
def get_foreign_agents_list(self, fa_type: str = None) -> list: # Не работает, если нет подключенной лицензии def get_foreign_agents_list(self, fa_type: str = None) -> list: # Не работает, если нет подключенной лицензии

View File

@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup( setup(
name="kontur_focus", name="kontur_focus",
version="2025.11.1", version="2025.11.5",
author="Ilya Sapunov", author="Ilya Sapunov",
author_email="sapunov@selectel.ru", author_email="sapunov@selectel.ru",
description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс", description="Библиотека-обертка для взаимодействия с REST API Контур.Фокус и Фокус.Комплаенс",