Расчет КТУ с использованием библиотеки pandas
Коэффициент трудового участия — коэффициент, отражающий количественную оценку меры трудового участия отдельного работника в общих результатах труда группы работников, характеризующий суммарный вклад работника в общие результаты труда производственной бригады, коллектива
https://ru.wikipedia.org/wiki/Коэффициент_трудового_участия
Очень часто КТУ используют для начисления некого вознаграждения, премии или бонуса отделу или бригаде.
В своей статье я попыталась смоделировать ситуацию, когда у нас есть несколько факторов, которые влияют на увеличение/снижение КТУ работника в бригаде. В таблице ниже приведен пример данных факторов.
Факторы КТУ
Определенной формулы для расчета КТУ нет, но обычно каждому работнику присуждают персональный балл, который характеризует его участие в производственном процессе. Далее берут сумму коллективного вознаграждения и распределяют между сотрудниками пропорционально их баллам. Что такое персональный балл? Это и есть КТУ. Как правило, он состоит из двух частей.
Принцип расчета КТУ я взяла из данного источника 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С и не заносят данную информацию в программу. Также данный код может служить прекрасной проверкой расчета данного показателя, если вы сомневаетесь в правильности сделанных вами расчетов.