Algoritmo NominaEmpresa

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 19

Algoritmo NominaEmpresa

Const
salario_minimo<- 7750;
Var
Cent: entero;
total_devengado_global, total_deducciones_global,total_apropiaciones_global, total_pago_neto_global: real;
total_trabajadores, total_mujeres, total_varones: entero;
nombre: cadena de caracter [30];
sexo: caracter;
//Devengado
salario_basico, horas_extras, recargos_diurnos, recargos_nocturnos, recargos_dominicales, recargos_festivos:real;
comisiones, auxilio_transporte, pago_neto, total_devengado: real;
//Deducciones
aportes_salud, aportes_pension, monto_pension, Libranzas, embargos_judiciales, aportesFSP:real;
retencion_mensual, total_deducciones, expectativa_anual, deduccion_ir: real;
porcentaje_limite_libranzas, porcentaje_max_libranzas: real;
autoriza_libranzas,tiene_embargos: caracter;
//Apropiaciones
porcentaje_aportes_salud, porcentaje_aportes_pension, porcentaje_riesgos_profesionales, porcentaje_aportes_parafiscales: real;
porcentaje_prestaciones_sociales, monto_total_aportes_salud, monto_total_aportes_pension: real;
monto_total_riesgos_profesionales, monto_total_aportes_parafiscales, monto_total_prestaciones_sociales:real;
total_apropiaciones: real;
Inicio
//Inicializar acumuladores y contadores globales
total_devengado_global <- 0;
total_deducciones_global <- 0;
total_apropiaciones_global <- 0;
total_pago_neto_global <- 0;
total_trabajadores <- 0;
total_mujeres <- 0;
total_varones <- 0;
Cent <- 0;

While (Cent <> -1) do


inicio
total_trabajadores <- total_trabajadores + 1;
Escribir("Ingrese nombre del empleado");
Leer(nombre);

Escribir("sexo: Varón/V o Mujer/M");


Leer(sexo);
while ((sexo <> 'V') and (sexo <> 'M')) do
inicio
Escribir("Ingreso incorrecto. Por favor, ingrese 'V' o 'M'.");
Leer(sexo);
fin;
If ((sexo = 'V' ) or (sexo = 'v')) then
total_varones <- total_varones + 1;
else
If ((sexo = 'M' ) or (sexo = 'm')) then
total_mujeres <- total_mujeres + 1;
else
Escribir("Ingreso Incorrecto");

//Valores para Devengado


Escribir("Ingrese el salario básico:");
Leer(salario_basico);
while (salario_basico <= 0) do
inicio
Escribir("El salario básico debe ser un valor positivo. Ingrese nuevamente:");
Leer(salario_basico);
fin;

Escribir("Ingrese pago x horas extras:");


Leer(horas_extras);
while (horas_extras < 0) do
inicio
Escribir("El pago por horas extras no puede ser negativo. Ingrese nuevamente:");
Leer(horas_extras);
fin;

Escribir("Ingrese monto x recargos diurnos:");


Leer(recargos_diurnos);
while (recargos_diurnos < 0) do
inicio
Escribir("El monto de recargos diurnos no puede ser negativo. Ingrese nuevamente:");
Leer(recargos_diurnos);
fin;

Escribir("Ingrese monto x recargos nocturnos:");


Leer(recargos_nocturnos);
while (recargos_nocturnos < 0) do
inicio
Escribir("El monto de recargos nocturnos no puede ser negativo. Ingrese nuevamente:");
Leer(recargos_nocturnos);
fin;

Escribir("Ingrese monto x recargos dominicales:");


Leer(recargos_dominicales);
while (recargos_dominicales < 0) do
inicio
Escribir("El monto de recargos dominicales no puede ser negativo. Ingrese nuevamente:");
Leer(recargos_dominicales);
fin;
Escribir("Ingrese monto x recargos festivos:");
Leer(recargos_festivos);
while (recargos_festivos < 0) do
inicio
Escribir("El monto de recargos festivos no puede ser negativo. Ingrese nuevamente:");
Leer(recargos_festivos);
fin;

Escribir("Ingrese monto de comisiones:");


Leer(comisiones);
while (comisiones < 0) do
inicio
Escribir("El monto de comisiones no puede ser negativo. Ingrese nuevamente:");
Leer(comisiones);
fin;

Escribir("Ingrese monto x auxilio de transporte:");


Leer(auxilio_transporte);
while (auxilio_transporte < 0) do
inicio
Escribir("El monto de auxilio de transporte no puede ser negativo. Ingrese nuevamente:");
Leer(auxilio_transporte);
fin;

total_devengado <- salario_basico + horas_extras + recargos_diurnos + recargos_nocturnos + recargos_dominicales +


recargos_festivos + comisiones + auxilio_transporte;

// Valores para Deducciones


Escribir("Ingrese aportes a pensión(0-20%):");
Leer(aportes_pension);
While ((aportes_pension < 0) or (aportes_pension > 20)) do
inicio
Escribir (“El porcentaje de aportes a pensión debe estar entre 0%-20%. Ingrese nuevamente:”);
Leer(aportes_pension);
fin;
monto_pension<-(aportes_pension/100)*salario_basico;

Escribir(“¿El empleado autoriza el descuento de libranzas? (S/N):”);


Leer(autoriza_libranzas);
Libranzas <- 0;
while ((autoriza_libranzas <> 'S') and (autoriza_libranzas <> 's') and (autoriza_libranzas <> 'N') and (autoriza_libranzas <> 'n'))
do
inicio
Escribir("Por favor, ingrese S para sí o N para no:");
Leer(autoriza_libranzas);
fin;
if ((autoriza_libranzas = 'S') or (autoriza_libranzas = 's')) then
inicio
Escribir("Ingrese monto para libranzas:");
Leer(Libranzas);
// Validar que el monto de libranzas no exceda un porcentaje del salario
porcentaje_max_libranzas <- 25; //Porcentaje máximo
while (Libranzas > (total_devengado * (porcentaje_max_libranzas / 100))) do
inicio
Escribir("El monto de libranzas excede el ", porcentaje_max_libranzas, " % del salario.");
Escribir("Ingrese un monto válido para libranzas:");
Leer(Libranzas);
fin;
fin;

Escribir("¿Tiene embargos judiciales? (S/N): ");


Leer(tiene_embargos);
while ((tiene_embargos <> 'S') and (tiene_embargos <> 's') and (tiene_embargos <> 'N') and (tiene_embargos <> 'n')) do
inicio
Escribir("Por favor, ingrese S para sí o N para no:");
Leer(tiene_embargos);
fin;
If ((tiene_embargos = 'S') or (tiene_embargos = 's')) then
inicio
Escribir("Ingrese monto de embargos judiciales: ");
Leer(embargos_judiciales);
while (embargos_judiciales > total_devengado) do
inicio
Escribir("El monto de embargos judiciales excede el salario neto.");
Escribir("Ingrese un monto válido para embargos judiciales: ");
Leer(embargos_judiciales);
fin;
fin;
else
if ((tiene_embargos = 'N') or (tiene_embargos = 'n'))
embargos_judiciales <- 0;
else
Escribir(“Entrada Incorrecta”);

//Calcular si aporta al fondo de solidaridad pensional


If ((salario_basico >= 0) and (salario_basico< (4*salario_minimo))) then
aportesFSP<-0.00;
else
If ((salario_basico >= (4*salario_minimo)) and (salario_basico< (16*salario_minimo))) then
aportesFSP <-0.01*salario_basico;
else
If ((salario_basico >= (16*salario_minimo)) and (salario_basico < (17*salario_minimo))) then
aportesFSP <-0.012*salario_basico;
else
If ((salario_basico >= (17*salario_minimo)) and (salario_basico < (18*salario_minimo))) then
aportesFSP<- 0.014*salario_basico;
else
If ((salario_basico >= (18*salario_minimo)) and (salario_basico < (19*salario_minimo))) then
aportesFSP<- 0.016*salario_basico;
else
If ((salario_basico >= (19*salario_minimo)) and (salario_basico < (20*salario_minimo))) then
aportesFSP<- 0.018*salario_basico;
else
If (salario_basico >= (20*salario_minimo)) then
aportesFSP<- 0.02*salario_basico;

//Calcular Retención en la Fuente


expectativa_anual <- total_devengado * 12; // Se proyecta a 12 meses

//Según la tabla progresiva del IR


If ((expectativa_anual > 0.01) and (expectativa_anual <= 100000.00)) then
deduccion_ir <- 0.00;
else
If ((expectativa_anual > 100000.00) and (expectativa_anual <= 200000.00)) then
deduccion_ir <- ((expectativa_anual - 100000.00) * 0.15) + 0; //15% sobre el exceso
else
If ((expectativa_anual > 200000.00) and (expectativa_anual <= 350000.00)) then
deduccion_ir <- ((expectativa_anual - 200000.00) * 0.20) + 15000.00; //20% sobre el exceso
else
If ((expectativa_anual > 350000.00) and (expectativa_anual <= 500000.00)) then
deduccion_ir <- ((expectativa_anual - 350000.00) * 0.25) + 45000.00; //25% sobre el exceso
else
If (expectativa_anual > 500000.00) then
deduccion_ir <- ((expectativa_anual - 500000.00) * 0.30) + 82500.00; //30% sobre el exceso

//Calcular total deducciones


aportes_salud <- salario_basico * 0.07;// Según INSS
retencion_mensual <- deduccion_ir / 12;
total_deducciones <- aportes_salud + monto_pension + libranzas + embargos_judiciales + aportesFSP +
retencion_mensual;

//Calcular Neto a pagar


pago_neto <- total_devengado - total_deducciones;
//Apropiaciones
Escribir("Ingrese % de aportes de salud de la empresa (0-10%):");
Leer(porcentaje_aportes_salud);
while ((porcentaje_aportes_salud < 0) or (porcentaje_aportes_salud > 10)) do
inicio
Escribir("El porcentaje de aportes de salud de la empresa debe estar entre 0% y 10%. Ingrese nuevamente:");
Leer(porcentaje_aportes_salud);
fin;

Escribir("Ingrese % de aportes de pensión de la empresa (0-15%):");


Leer(porcentaje_aportes_pension);
while ((porcentaje_aportes_pension < 0) or (porcentaje_aportes_pension > 15)) do
inicio
Escribir("El porcentaje de aportes de pensión de la empresa debe estar entre 0% y 15%. Ingrese nuevamente:");
Leer(porcentaje_aportes_pension);
fin;

Escribir("Ingrese % de riesgos profesionales (0-5%):");


Leer(porcentaje_riesgos_profesionales);
while ((porcentaje_riesgos_profesionales < 0) or (porcentaje_riesgos_profesionales > 5)) do
inicio
Escribir("El porcentaje de riesgos profesionales debe estar entre 0% y 5%. Ingrese nuevamente:");
Leer(porcentaje_riesgos_profesionales);
fin;

Escribir("Ingrese % de aportes parafiscales (0-3%):");


Leer(porcentaje_aportes_parafiscales);
while ((porcentaje_aportes_parafiscales < 0) or (porcentaje_aportes_parafiscales > 3)) do
inicio
Escribir("El porcentaje de aportes parafiscales debe estar entre 0% y 3%. Ingrese nuevamente:");
Leer(porcentaje_aportes_parafiscales);
fin;

Escribir("Ingrese % de prestaciones sociales (5-20%):");


Leer(porcentaje_prestaciones_sociales);
while ((porcentaje_prestaciones_sociales < 5) or (porcentaje_prestaciones_sociales > 20)) do
inicio
Escribir("El porcentaje de prestaciones sociales debe estar entre 5% y 20%. Ingrese nuevamente:");
Leer(porcentaje_prestaciones_sociales);
fin;

//Calcular montos totales de apropiaciones


monto_total_aportes_salud <- (porcentaje_aportes_salud / 100) * salario_basico;
monto_total_aportes_pension <- (porcentaje_aportes_pension / 100) * salario_basico;
monto_total_riesgos_profesionales <- (porcentaje_riesgos_profesionales / 100) * total_devengado;
monto_total_aportes_parafiscales <- (porcentaje_aportes_parafiscales / 100) * salario_basico;
monto_total_prestaciones_sociales <- (porcentaje_prestaciones_sociales / 100) * salario_basico;
//Calcular total apropiaciones
total_apropiaciones <- monto_total_aportes_salud + monto_total_aportes_pension + monto_total_riesgos_profesionales +
monto_total_aportes_parafiscales + monto_total_prestaciones_sociales;

//Actualizar totales globales


total_devengado_global <- total_devengado_global + total_devengado;
total_deducciones_global <- total_deducciones_global + total_deducciones;
total_apropiaciones_global <- total_apropiaciones_global + total_apropiaciones;
total_pago_neto_global <- total_pago_neto_global + pago_neto;

//Mostrar resultados individuales


Escribir("----- Resultado Individual -----");
Escribir("Nombre: ", nombre);
Escribir("Total Devengado: ", total_devengado);
Escribir("Total Deducciones: ", total_deducciones);
Escribir("Neto a Pagar: ", pago_neto);
Escribir("--------------------------------");
Escribir("Ingrese -1 para salir o cualquier otro número para continuar:");
Leer(Cent);
Fin;

//Mostrar totales globales e información de género


//Mostrar totales globales finales
Escribir("----- Totales Globales -----");
Escribir("Total Devengado Global: ", total_devengado_global);
Escribir("Total Deducciones Global: ", total_deducciones_global);
Escribir("Total Apropiaciones Global: ", total_apropiaciones_global);
Escribir("Total Pago Neto Global: ", total_pago_neto_global);
Escribir("--------------------------------");
Escribir("----- Informe de Nómina -----");
Escribir("Total Trabajadores: ", total_trabajadores);
Escribir("Total Mujeres: ", total_mujeres);
Escribir("Total Varones: ", total_varones);
Escribir("--------------------------------");
Fin.

Ingrese nombre del empleado


Jeffry
sexo: Varón/V o Mujer/M
v
Ingrese el salario básico:
40000
Ingrese pago x horas extras:
150
Ingrese monto x recargos diurnos:
100
Ingrese monto x recargos nocturnos:
150
Ingrese monto x recargos dominicales:
0
Ingrese monto x recargos festivos:
0
Ingrese monto de comisiones:
350
Ingrese monto x auxilio de transporte:
0
Ingrese aportes a pensión(0-20%):
5
¿El empleado autoriza el descuento de libranzas? (S/N):
n
¿Tiene embargos judiciales? (S/N):
n
Ingrese % de aportes de salud de la empresa (0-10%):
5
Ingrese % de aportes de pensión de la empresa (0-15%):
4
Ingrese % de riesgos profesionales (0-5%):
1
Ingrese % de aportes parafiscales (0-3%):
2
Ingrese % de prestaciones sociales (5-20%):
8
----- Resultado Individual -----
Nombre: Jeffry
Total Devengado: 4.0750000000000000E+004
Total Deducciones: 1.1845833333333332E+004
Neto a Pagar: 2.8904166666666668E+004
--------------------------------
Ingrese -1 para salir o cualquier otro número para continuar:
2
Ingrese nombre del empleado
Gladis
sexo: Varón/V o Mujer/M
m
Ingrese el salario básico:
25000
Ingrese pago x horas extras:
200
Ingrese monto x recargos diurnos:
100
Ingrese monto x recargos nocturnos:
150
Ingrese monto x recargos dominicales:
0
Ingrese monto x recargos festivos:
0
Ingrese monto de comisiones:
400
Ingrese monto x auxilio de transporte:

0
Ingrese aportes a pensión(0-20%):
4
¿El empleado autoriza el descuento de libranzas? (S/N):
s
Ingrese monto para libranzas:
10000
El monto de libranzas excede el 2.5000000000000000E+001% del salario.
Ingrese un monto válido para libranzas:
1000
¿Tiene embargos judiciales? (S/N):
n
Ingrese % de aportes de salud de la empresa (0-10%):
4
Ingrese % de aportes de pensión de la empresa (0-15%):
3
Ingrese % de riesgos profesionales (0-5%):
1
Ingrese % de aportes parafiscales (0-3%):
1
Ingrese % de prestaciones sociales (5-20%):
3
El porcentaje de prestaciones sociales debe estar entre 5% y 20%. Ingrese nuevamente:
6
----- Resultado Individual -----
Nombre: Gladis
Total Devengado: 2.5850000000000000E+004
Total Deducciones: 6.8366666666666661E+003
Neto a Pagar: 1.9013333333333336E+004
--------------------------------
Ingrese -1 para salir o cualquier otro número para continuar:
-1
----- Totales Globales -----
Total Devengado Global: 6.6600000000000000E+004
Total Deducciones Global: 1.8682500000000000E+004
Total Apropiaciones Global: 1.1766000000000000E+004
Total Pago Neto Global: 4.7917500000000000E+004
--------------------------------
----- Informe de Nómina -----
Total Trabajadores: 2
Total Mujeres: 1
Total Varones: 1
--------------------------------

También podría gustarte