Определяем взаимозависимых лиц по составам советов директоров с помощью python.

Немного определений

   Определение взаимозависимых лиц согласно ст. 105.1 Налогового кодекса РФ достаточно тривиальная задача для корпоративного юриста.
Напомним, что взаимозависимые лица определяются по ряду критериев, приведенных в НК РФ.
   В пункте 2 ст. 105.1 НК РФ перечислены основания, согласно которым лица признаются взаимозависимыми. Итак, для целей налогообложения взаимозависимыми лицами являются:
— организации, в случае если одна организация прямо и (или) косвенно участвует в другой организации и доля такого участия составляет более 25%;
— физическое лицо и организация в случае, если такое физическое лицо прямо и (или) косвенно участвует в такой организации и доля такого участия составляет более 25%;
— организации, в случае если одно и то же лицо прямо и (или) косвенно участвует в этих организациях и доля такого участия в каждой организации составляет более 25%;
— организация и лицо (в том числе физическое лицо совместно с его супругом (супругой), родителями (в том числе усыновителями), детьми (в том числе усыновленными), полнородными и неполнородными братьями и сестрами, опекунами (попечителями) и подопечными), имеющие полномочия по назначению (избранию) единоличного исполнительного органа этой организации или по назначению (избранию) не менее 50% состава коллегиального исполнительного органа или совета директоров (наблюдательного совета) этой организации;
— организации, единоличные исполнительные органы которых либо не менее 50% состава коллегиального исполнительного органа или совета директоров (наблюдательного совета) которых назначены или избраны по решению одного и того же лица (физического лица совместно с его супругом (супругой), родителями (в том числе усыновителями), детьми (в том числе усыновленными), полнородными и неполнородными братьями и сестрами, опекунами (попечителями) и подопечными);
— организации, в которых более 50% состава коллегиального исполнительного органа или совета директоров (наблюдательного совета) составляют одни и те же физические лица совместно с их супругом (супругой), родителями (в том числе усыновителями), детьми (в том числе усыновленными), полнородными и неполнородными братьями и сестрами, опекунами (попечителями) и подопечными;
— организация и лицо, осуществляющее полномочия ее единоличного исполнительного органа;
— организации, в которых полномочия единоличного исполнительного органа осуществляет одно и то же лицо;
— организации и (или) физические лица в случае, если доля прямого участия каждого предыдущего лица в каждой последующей организации составляет более 50%;
— физические лица в случае, если одно физическое лицо подчиняется другому физическому лицу по должностному положению;
— физическое лицо, его супруг (супруга), родители (в том числе усыновители), дети (в том числе усыновленные), полнородные и неполнородные братья и сестры, опекун (попечитель) и подопечный.

Ближе к сути

Оснований много, но нам пока интересно одно из них, а именно:

— организации, в которых более 50% совета директоров составляют одни и те же физические лица.

Данное основание отличается от остальных тем, что юристу необходимо сравнить все составы советов директоров в обществах на совпадение их членов более 50 %. Обычно это не вызывает сложностей и кажется, зачем здесь что-то автоматизировать ? Все верно, если общество два или три сравнить их составы СД нет никаких проблем. Но, если обществ больше двух десятков и при этом в разных обществах разные составы директоров в том числе по количеству членов ? Здесь уже надо потратить время. Потратим его на программу, которая за нас вычислит взаимосвязанные стороны, анализируя составы советов директоров.

Приступаем к коду. Знакомим python c составами СД.

Допустим все составы СД у нас сведены в таблицу Excel. С Excel мы уже работали в предыдущих главах, поэтому будет легче.
Итак, мы имеем таблицу Excel с советами директоров с общим количеством обществ более двадцати:
clip_image002

   Нам необходимо, чтобы наша программа, пройдя по таблице, отбирала общества, если там будет совпадение более чем 50 % от общего числа членов совета директоров. Далее программа должна выводить результат либо на экран, либо в файл.
Логически программа будет выполнять следующий алгоритм. Получив от пользователя ФИО директоров, она будет сравнивать их с каждой строкой Excel, где содержатся ФИО директоров по каждому обществу. То есть каждые три члена СД пользователя из 5-ти сравниваются с каждыми 3-мя из 5-ти в таблице. На данном этапе программа не будет анализировать СД с числом членов более 5, пропуская их.
Что-то похожее, мы уже делали, поэтому первые строки нашей программы будут стандартными:
clip_image001

   Здесь мы импортировали модуль для работы с Excel и открыли файл с нашей таблицей.
Теперь мы предложим пользователю ввести пять членов СД, которых программа далее будет искать в обществах для сравнения. Всех введенных пользователем членов СД запишем в переменные a,b,c,e,f:
clip_image002[7]
   Здесь важный момент. ФИО директора надо вводить без пробелов, например ИвановИ.И. В таком же виде ФИО директоров должны присутствовать в таблице Excel.
Создадим два списка. Один пустой, второй с обществами, где СД более чем с 5 членами:
clip_image002[9]
Также мы открыли текстовый файл 55555.txt, в который будем сохранять результаты.Совпадение СД более, чем на 50 % означает, что 3 члена из 5-ти должны совпасть. Значит программа должна произвести 10 проверок на совпадение фамилий. Именно столько комбинаций может быть для СД из 5-ти членов.
Поэтому, чтобы не писать 10 раз один и тот же код, делая программу громоздкой, мы создадим функцию и далее вызовем (исполним ) ее 10 раз.

Заряжаем функцию

Вот наша функция:
clip_image002[11]
Разберем код.
Мы задали границы таблицы, по которой пойдет программа B2:L36. Если ячейка пустая, она будет пропущена.
Далее в функция будет рассматривать ФИО 1-го директора, если ФИО в ячейке соответствует ФИО, введенного пользователем, то функция идет дальше и сравнивает 2-го, затем 3-го директора. В конце функция формирует список обществ и записывает каждое из них в файл 55555.txt.
После того, как функция написана она автоматически не будет исполнена программой.
Ее необходимо вызвать:
clip_image002[13]
Но здесь мы вызвали функцию только для первой тройки директоров. Надо повторить вызов функции и для остальных комбинаций:
clip_image002[15]

Запускаем

Запустим программу и введем в окне интерпретатора python любые 5-ть ФИО директоров:
clip_image002[18]
После того, как программа исполнится, заглянем в файл на выходе 55555.txt:
clip_image002[20]
В файле – номера обществ, где были найдены совпадения. Надо обратить внимание, что это номера обществ из столбца А, а не номера строки Excel:
clip_image002[22]
Программа готова, но необходимо помнить, что она не анализирует составы СД с членами более 5 человек!

Скачать код программы – здесь.

Скачать тестовую таблицу – здесь.

admin

Оставить отклик

Ваш адрес эл.почты не будет опубликован.