Расчет КТУ с использованием библиотеки pandas

от автора

Коэффициент трудового участия — коэффициент, отражающий количественную оценку меры трудового участия отдельного работника в общих результатах труда группы работников, характеризующий суммарный вклад работника в общие результаты труда производственной бригады, коллектива

https://ru.wikipedia.org/wiki/Коэффициент_трудового_участия

Очень часто КТУ используют для начисления некого вознаграждения, премии или бонуса отделу или бригаде.

В своей статье я попыталась смоделировать ситуацию, когда у нас есть несколько факторов, которые влияют на увеличение/снижение КТУ работника в бригаде. В таблице ниже приведен пример данных факторов.

Факторы КТУ

Факторы КТУ

Определенной формулы для расчета КТУ нет, но обычно каждому работнику присуждают персональный балл, который характеризует его участие в производственном процессе. Далее берут сумму коллективного вознаграждения и распределяют между сотрудниками пропорционально их баллам. Что такое персональный балл? Это и есть КТУ. Как правило, он состоит из двух частей.

  • Базовая часть (всегда равна 1).

  • Складывается из оценок по заданным факторам

Принцип расчета КТУ я взяла из данного источника https://www.buhonline.ru/pub/beginner/2019/12/15303_koefficient-trudovogo-uchastiya-2022

Например имеется бригада из 10 человек, занесем информацию по данной бригаде в простую таблицу excel. Проставим коды для каждого из факторов КТУ в столбцы, выделенные синим цветом.

Список рабочих с показателями КТУ

Список рабочих с показателями КТУ

Теперь напишем код в python с использованием библиотеки pandas. Считаем данные с первого листа excel для создания словаря значений КТУ:

import pandas as pd def read_ktu_values(file_ktu):     # Чтение данных из Excel файла     df_ktu_values = pd.read_excel(file_ktu, sheet_name='KTU_Values')          # Создание словаря значений КТУ     ktu_values = {}     for _, row in df_ktu_values.iterrows():         ktu_values[row['Код']] = row['Значение']          return ktu_values

Далее напечатаем формулу для расчета коэффициента:

def calculate_ktu(codes, ktu_values, base_ktu=1):     ktu = base_ktu     for code in codes:         if code in ktu_values:             ktu += ktu_values[code]     return ktu

Теперь укажем значения для расчета премии и создадим словарь для работников:

def main():     # Чтение данных из Excel файла     file_ktu = 'ktu.xlsx'     total_bonus = 300000  # Пример общей премии, можно заменить на нужное значение     # Чтение значений КТУ     ktu_values = read_ktu_values(file_ktu)          # Чтение второго листа с работниками и их кодами     df_codes = pd.read_excel(file_ktu, sheet_name=1)          # Убедимся, что колонка с именами работников называется правильно     fio_column = 'ФИО'          if fio_column not in df_codes.columns:         raise KeyError(f"Колонка '{fio_column}' отсутствует на втором листе Excel файла.")     # Предполагаем, что в df_codes коды указаны в колонках 'Код1', 'Код2', и т.д.     code_columns = [col for col in df_codes.columns if col.startswith('Код')]          # Создание словаря с кодами для каждого работника     worker_codes = {}     for _, row in df_codes.iterrows():         fio = row[fio_column]         codes = [row[col] for col in code_columns if pd.notna(row[col])]         worker_codes[fio] = codes

Далее исходя из наших значений факторов КТУ, рассчитаем значение данного коэффициента для каждого из работников:

# Расчет КТУ для каждого работника и добавление новой колонки в df_codes     ktu_list = []     for _, row in df_codes.iterrows():         fio = row[fio_column]         if fio in worker_codes:             codes = worker_codes[fio]             ktu = calculate_ktu(codes, ktu_values)         else:             ktu = 1  # Базовый КТУ, если нет кодов         ktu_list.append(ktu)          df_codes['КТУ'] = ktu_list          # Расчет общей суммы КТУ всех работников     total_ktu = sum(ktu_list)          # Расчет премии для каждого работника     df_codes['Премия'] = df_codes['КТУ'] / total_ktu * total_bonus

И в заключение выведем полученные значения в отдельный файл excel:

# Сохранение результатов в новый Excel файл, оставляя только нужные колонки     output_file_path = 'output_ktu.xlsx'     result_df = df_codes[['№, п/п', fio_column,'Должность', 'КТУ', 'Премия']]          with pd.ExcelWriter(output_file_path) as writer:         result_df.to_excel(writer, sheet_name='Результаты', index=False)          print(f'Результаты сохранены в файл {output_file_path}')  if __name__ == "__main__":     main()

В результате получим следующую таблицу:

Премия работников

Премия работников

Многие спросят для чего вообще считать данным способом коэффициент трудового участия, когда есть специальная настройка шаблона в 1С. Но, существуют небольшие фирмы, которые пользуются только основными продуктами 1С и не заносят данную информацию в программу. Также данный код может служить прекрасной проверкой расчета данного показателя, если вы сомневаетесь в правильности сделанных вами расчетов.


ссылка на оригинал статьи https://habr.com/ru/articles/826946/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *