Files
kontur-focus-lib/docs/out/html/_modules/kontur_focus/focus_compliance.html

381 lines
48 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="ru" data-content_root="../../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>kontur_focus.focus_compliance &mdash; документация Kontur Focus Library 0.1.0</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=6ff560e8"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=cd1d70c9"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Алфавитный указатель" href="../../genindex.html" />
<link rel="search" title="Поиск" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
Kontur Focus Library
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Поиск в документации" aria-label="Поиск в документации" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Меню навигации">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../setup.html">Установка</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../focus.html">Фокус</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../focus-compliance.html">Фокус.Комплаенс</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../open-api.html">Open API specification</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Меню навигации для мобильных устройств" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">Kontur Focus Library</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Навигация по страницам">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../index.html">Код модуля</a></li>
<li class="breadcrumb-item active">kontur_focus.focus_compliance</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>Исходный код kontur_focus.focus_compliance</h1><div class="highlight"><pre>
<span></span><span class="kn">from</span><span class="w"> </span><span class="nn">kontur_focus.req</span><span class="w"> </span><span class="kn">import</span> <span class="n">Request</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">dotenv</span><span class="w"> </span><span class="kn">import</span> <span class="n">load_dotenv</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">datetime</span><span class="w"> </span><span class="kn">import</span> <span class="n">datetime</span>
<span class="k">class</span><span class="w"> </span><span class="nc">FocusCompliance</span><span class="p">(</span><span class="n">Request</span><span class="p">):</span>
<span class="n">_basedir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
<span class="n">_focus_base_url</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">check_models</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;corporate&#39;</span><span class="p">,</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="s1">&#39;Корпоративный сегмент&#39;</span><span class="p">,</span>
<span class="s1">&#39;risk_model_id&#39;</span><span class="p">:</span> <span class="s1">&#39;a9457161-0454-448a-bc2c-83a89cd51b42&#39;</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s1">&#39;name&#39;</span><span class="p">:</span> <span class="s1">&#39;115-fz&#39;</span><span class="p">,</span>
<span class="s1">&#39;description&#39;</span><span class="p">:</span> <span class="s1">&#39;115 ФЗ для некредитных финансовых организаций&#39;</span><span class="p">,</span>
<span class="s1">&#39;risk_model_id&#39;</span><span class="p">:</span> <span class="s1">&#39;887ee87c-3a43-48d7-a4ad-05c0a64ff53a&#39;</span>
<span class="p">}</span>
<span class="p">]</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inn</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="n">ogrn</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="n">load_dotenv</span><span class="p">()</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">base_url</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;FOCUS_COMPLIANCE_BASE_URL&#39;</span><span class="p">),</span>
<span class="n">api_key</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;FOCUS_COMPLIANCE_ACCESS_KEY&#39;</span><span class="p">),</span>
<span class="n">inn</span><span class="o">=</span><span class="n">inn</span><span class="p">,</span>
<span class="n">ogrn</span><span class="o">=</span><span class="n">ogrn</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_focus_base_url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;/banks/</span><span class="si">{</span><span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;FOCUS_COMPLIANCE_BANK_ID&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_save_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">file_type</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;pdf&#39;</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="n">current_datetime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1">-%m-%Y_%H-%M&#39;</span><span class="p">)</span>
<span class="n">f_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s1">_</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">inn</span><span class="si">}</span><span class="s1">_</span><span class="si">{</span><span class="n">current_datetime</span><span class="si">}</span><span class="s1">.</span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">path</span><span class="p">:</span>
<span class="n">file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_basedir</span><span class="p">,</span> <span class="n">f_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">f_name</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">content</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;filename&#39;</span><span class="p">:</span> <span class="n">f_name</span><span class="p">,</span> <span class="s1">&#39;path&#39;</span><span class="p">:</span> <span class="n">file_path</span><span class="p">}</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</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="n">e</span><span class="p">}</span>
<span class="c1"># Компании</span>
<span class="k">def</span><span class="w"> </span><span class="nf">company_is_foreign_agent</span><span class="p">(</span><span class="bp">self</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"> :return: Дата формирования реестра, а также признаки присутствия или отсутствия в списках иностранных агентов</span>
<span class="sd"> :rtype: dict</span>
<span class="sd"> &quot;&quot;&quot;</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/lists&#39;</span><span class="p">)</span>
<span class="n">foreign_agent_list</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">&#39;foreignAgentList&#39;</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="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">foreign_agent_list</span><span class="p">[</span><span class="s1">&#39;uls&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="s1">&#39;listItemStatus&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;NotInList&#39;</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">company_in_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
<span class="k">for</span> <span class="n">person</span> <span class="ow">in</span> <span class="n">foreign_agent_list</span><span class="p">[</span><span class="s1">&#39;fls&#39;</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">person</span><span class="p">[</span><span class="s1">&#39;listItemStatus&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;NotInList&#39;</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">persons_in_company_in_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">person</span><span class="p">)</span>
<span class="n">fal_data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;list_date&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">foreign_agent_list</span><span class="p">[</span><span class="s1">&#39;actualListDate&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;T&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span>
<span class="s1">&#39;company_in_list&#39;</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">&#39;persons_in_company_in_list&#39;</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="k">return</span> <span class="n">fal_data</span>
<span class="k">def</span><span class="w"> </span><span class="nf">search_global_company_profiles_id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">company_name</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="w"> </span><span class="sd">&quot;&quot;&quot;Поиск сводной информации по санкционным профилям ЮЛ</span>
<span class="sd"> :param company_name: Наименование компании</span>
<span class="sd"> :type company_name: str</span>
<span class="sd"> :return: Список идентификаторов профилей</span>
<span class="sd"> :rtype: list</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="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">inn</span>
<span class="k">elif</span> <span class="n">company_name</span><span class="p">:</span>
<span class="n">query</span> <span class="o">=</span> <span class="n">company_name</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">try</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">&#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/search&#39;</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">)</span>
<span class="n">profiles</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">&#39;legalEntityProfiles&#39;</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">profiles</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">profiles</span><span class="p">}</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">profiles</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</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="p">[</span><span class="n">profile</span><span class="p">[</span><span class="s1">&#39;id&#39;</span><span class="p">]</span> <span class="k">for</span> <span class="n">profile</span> <span class="ow">in</span> <span class="n">profiles</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="p">[</span><span class="n">profiles</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;id&#39;</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">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="w"> </span><span class="sd">&quot;&quot;&quot;Получение печатного отчета по профилю ЮЛ</span>
<span class="sd"> :param profile_id_list: Список идентификаторов санкционных профилей компании </span>
<span class="sd"> :type profile_id_list: list</span>
<span class="sd"> :param path: Путь сохранения файла, по-умолчанию файл сохраняется в текущий каталог</span>
<span class="sd"> :type path: str, optional</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;No profiles is specified&#39;</span><span class="p">}</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">profile_id_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">files</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">profile_id</span> <span class="ow">in</span> <span class="n">profile_id_list</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">&#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_id</span><span class="si">}</span><span class="s1">/report&#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="n">filename</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;Отчет_по_профилю_</span><span class="si">{</span><span class="n">profile_id_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">&#39;</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">&#39;docx&#39;</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="n">files</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">result</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;files&#39;</span><span class="p">:</span> <span class="n">files</span><span class="p">}</span>
<span class="k">else</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">&#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_id_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">/report&#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="n">filename</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;Отчет_по_профилю_</span><span class="si">{</span><span class="n">profile_id_list</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">&#39;</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">&#39;docx&#39;</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">&#39;success&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;files&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">result</span><span class="p">]}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">full_company_report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">model</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;115-fz&#39;</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="sd"> :param model: Идентификатор модели, по которой пройдет проверка. </span>
<span class="sd"> Идентификатор возвращается в методе «Получение списка рисковых моделей организации»</span>
<span class="sd"> GET /banks/{bankId}/models, defaults to &#39;115-fz&#39;</span>
<span class="sd"> :type model: str, optional</span>
<span class="sd"> :param path: Путь сохранения файла, по-умолчанию файл сохраняется в текущий каталог, defaults to None</span>
<span class="sd"> :type path: str, optional</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="n">model</span> <span class="o">==</span> <span class="s1">&#39;115-fz&#39;</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">&#39;risk_model_id&#39;</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">&#39;name&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="n">model</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</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">&#39;risk_model_id&#39;</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">&#39;name&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;corporate&#39;</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">&#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">/models/</span><span class="si">{</span><span class="n">model_id</span><span class="si">}</span><span class="s1">/fullCompanyReport&#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="n">filename</span><span class="o">=</span><span class="s1">&#39;Полный_отчет&#39;</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">&#39;docx&#39;</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">&#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="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="w"> </span><span class="sd">&quot;&quot;&quot;Вхождение физлица в список иностранных агентов</span>
<span class="sd"> :return: True или False</span>
<span class="sd"> :rtype: bool</span>
<span class="sd"> &quot;&quot;&quot;</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">/individuals&#39;</span><span class="p">)</span>
<span class="n">fa</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;foreignAgents&#39;</span><span class="p">]</span>
<span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="n">fa</span> <span class="k">else</span> <span class="kc">False</span>
<span class="k">def</span><span class="w"> </span><span class="nf">search_global_person_profiles_id</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Поиск сводной информации по санкционным/ПДЛ профилям ФЛ</span>
<span class="sd"> :return: Список идентификаторов профилей</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</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">&#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">/individuals/profiles/search&#39;</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">inn</span><span class="p">)</span>
<span class="k">return</span> <span class="n">response</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">def</span><span class="w"> </span><span class="nf">full_individual_report</span><span class="p">(</span><span class="bp">self</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="n">passport</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="n">fio</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="sd"> Необходимо обязательно указать либо ИНН, либо ФИО и номер паспорта</span>
<span class="sd"> :param path: Путь сохранения файла, по-умолчанию файл сохраняется в текущий каталог, defaults to None</span>
<span class="sd"> :type path: str, optional</span>
<span class="sd"> :param passport: Номер паспорты, defaults to None</span>
<span class="sd"> :type passport: str, optional</span>
<span class="sd"> :param fio: ФИО (хотя бы фамилия и имя), defaults to None</span>
<span class="sd"> :type fio: str, optional</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="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="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="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">try</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">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">&#39;Полный_отчет&#39;</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">&#39;docx&#39;</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">&#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="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="w"> </span><span class="sd">&quot;&quot;&quot;Получение списка иноагентов</span>
<span class="sd"> :param fa_type: Тип иноагента (i - физ. лица, l - юридические лица), если не указано, выгружаются все типы, defaults to None</span>
<span class="sd"> :type fa_type: str, optional</span>
<span class="sd"> :return: Список данных по иноагентам</span>
<span class="sd"> :rtype: list</span>
<span class="sd"> &quot;&quot;&quot;</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">/foreign-agents&#39;</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">fa_type</span> <span class="o">==</span> <span class="s1">&#39;i&#39;</span><span class="p">:</span>
<span class="n">individuals</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">&#39;individuals&#39;</span><span class="p">]</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">individuals</span>
<span class="k">elif</span> <span class="n">fa_type</span> <span class="o">==</span> <span class="s1">&#39;l&#39;</span><span class="p">:</span>
<span class="n">legal_entities</span> <span class="o">=</span> <span class="n">response</span><span class="p">[</span><span class="s1">&#39;legalEntities&#39;</span><span class="p">]</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">legal_entities</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">response</span><span class="p">]</span>
<span class="k">return</span> <span class="n">result</span>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Авторские права 2025, Ilya Sapunov. </p>
</div>
Собрано при помощи <a href="https://www.sphinx-doc.org/">Sphinx</a> с использованием
<a href="https://github.com/readthedocs/sphinx_rtd_theme">темы,</a>
предоставленной <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>