Cómo calcular el aguinaldo en méxico con Python

Estamos en temporada navidena, es tiempo de dar y recibir amor, pero tambien es tiempo de recibir el tan ansiado aguinaldo, hoy aprenderemos a calcular este monto utilizando Python.

Es un algoritmo muy sencillo, pero el tenerlo a la mano puede ser muy útil, puedes extender esta función de la manera que mejor te convenga, tal vez pasándole un csv o un excel para calcular el aguinaldo de todos los empleados, o tal vez puedes tenerla a la mano para saber que te están pagando correctamente.

Para calcularlo solo tenemos que tener en cuenta las siguientes variables:

Días trabajados # Se cuenta hasta el 31 de diciembre
Sueldo diario # Lo calculamos dividiendo el salario mensual entre 30
Días de aguinaldo # La ley establece quince días, pero pueden ser mas.

Tal como lo veo, podemos crear tres funciones que nos ayuden a calcularlo, primero calcularemos cuantos días trabajo el empleado, utilizaremos la librería datetime para ayudarnos.

from datetime import date

def calcula_dias_trabajados(fecha_ingreso, faltas=0):
    '''
    Obtiene los días trabajados en el año
    Parametros:
    fecha de ingreso tipo date, dias que falto en forma de entero.
    Return:
    entero con los días trabajados.
    Python latino
    '''
    primer_dia = date(date.today().year, 1, 1)
    ultimo_dia = date(date.today().year, 12, 31)
    if fecha_ingreso < primer_dia:
        return 365 - faltas
    return (ultimo_dia - fecha_ingreso).days - faltas

Ahora tenemos que calcular el sueldo diario, esta es mucho mas facil

def calcula_salario_diario(salario, dias=30):
    return salario / dias

Y ahora podemos traer todo junto

def calcula_aguinaldo(fecha_ingreso, salario, faltas=0, dias_ofrecidos=15):
    proporcional = dias_ofrecidos / 365.0
    proporcional_laborado = proporcional * calcula_dias_trabajados(fecha_ingreso, faltas)
    return proporcional_laborado * calcula_salario_diario(salario)

Ahora que tenemos la calculadora podemos llamarla cualquier forma que se nos ocurra, solo hay que tener cuidado con el formato de la fecha de ingreso, el cual debe de ser date.

...

def main():
   fecha_ingreso = date(2018,4,12)
   salario = 3121
   print('El aguinaldo sera de: $', calcula_aguinaldo(fecha_ingreso, salario))
El aguinaldo sera de: $ 1560

Eso es todo! como ejercicio te sugiero que pruebes con otros valores, tal como mas dias ofrecidos, o un tiempo menor a un año. También puedes validar que los días ofrecidos siempre sean mayores a 15 y que no haya números negativos. Como último ejercicio puedes tratar de invocar a la función varias veces dentro de un ciclo, para poder calcular varios aguinaldos al mismo tiempo.