En este módulo, desarrollaremos un sistema de nómina básico utilizando RPG. Este estudio de caso te permitirá aplicar los conceptos aprendidos en los módulos anteriores y te dará una visión práctica de cómo se puede utilizar RPG en un entorno empresarial real.

Objetivos del Estudio de Caso

  • Comprender los requisitos de un sistema de nómina.
  • Diseñar la estructura de datos necesaria.
  • Implementar las funcionalidades básicas del sistema.
  • Realizar pruebas y depuración del sistema.

Requisitos del Sistema de Nómina

Antes de comenzar a programar, es importante entender los requisitos del sistema. Un sistema de nómina típico debe:

  1. Registrar empleados: Almacenar información básica como nombre, identificación, salario, etc.
  2. Calcular salarios: Basado en horas trabajadas, deducciones, bonificaciones, etc.
  3. Generar reportes: Producir reportes de nómina para cada período de pago.
  4. Almacenar históricos: Mantener un registro histórico de los pagos realizados.

Diseño de la Estructura de Datos

Para este sistema, utilizaremos dos archivos principales:

  1. Archivo de Empleados: Contendrá la información básica de cada empleado.
  2. Archivo de Nómina: Contendrá los registros de pagos de nómina.

Estructura del Archivo de Empleados

Campo Tipo Descripción
EMP_ID CHAR(5) Identificación del empleado
EMP_NAME CHAR(50) Nombre del empleado
EMP_SALARY DEC(7,2) Salario base del empleado

Estructura del Archivo de Nómina

Campo Tipo Descripción
PAY_ID CHAR(10) Identificación del pago
EMP_ID CHAR(5) Identificación del empleado
PAY_DATE DATE Fecha del pago
HOURS_WORKED DEC(5,2) Horas trabajadas
GROSS_PAY DEC(7,2) Pago bruto
DEDUCTIONS DEC(7,2) Deducciones
NET_PAY DEC(7,2) Pago neto

Implementación del Sistema de Nómina

  1. Registro de Empleados

Primero, crearemos un programa para registrar empleados en el archivo de empleados.

H DFTACTGRP(*NO) ACTGRP('QILE')

FEMPLOYEE  UF   E           K DISK

D EmployeeDS   E DS                  ExtName(EMPLOYEE)

D empId        S              5A
D empName      S             50A
D empSalary    S              7P 2

C     *Entry        Plist
C                   Parm                    empId
C                   Parm                    empName
C                   Parm                    empSalary

C                   Eval      EmployeeDS.EMP_ID = empId
C                   Eval      EmployeeDS.EMP_NAME = empName
C                   Eval      EmployeeDS.EMP_SALARY = empSalary

C                   Write     EMPLOYEE
C                   Eval      *INLR = *ON
C                   Return

  1. Cálculo de Nómina

A continuación, crearemos un programa para calcular y registrar los pagos de nómina.

H DFTACTGRP(*NO) ACTGRP('QILE')

FEMPLOYEE  IF   E           K DISK
FPAYROLL   UF   E           K DISK

D PayrollDS     E DS                  ExtName(PAYROLL)
D EmployeeDS    E DS                  ExtName(EMPLOYEE)

D empId         S              5A
D payId         S             10A
D payDate       S               D
D hoursWorked   S              5P 2
D grossPay      S              7P 2
D deductions    S              7P 2
D netPay        S              7P 2

C     *Entry        Plist
C                   Parm                    payId
C                   Parm                    empId
C                   Parm                    payDate
C                   Parm                    hoursWorked
C                   Parm                    deductions

C                   Chain     empId         EmployeeDS
C                   If        %Found
C                   Eval      grossPay = EmployeeDS.EMP_SALARY * hoursWorked
C                   Eval      netPay = grossPay - deductions

C                   Eval      PayrollDS.PAY_ID = payId
C                   Eval      PayrollDS.EMP_ID = empId
C                   Eval      PayrollDS.PAY_DATE = payDate
C                   Eval      PayrollDS.HOURS_WORKED = hoursWorked
C                   Eval      PayrollDS.GROSS_PAY = grossPay
C                   Eval      PayrollDS.DEDUCTIONS = deductions
C                   Eval      PayrollDS.NET_PAY = netPay

C                   Write     PAYROLL
C                   EndIf

C                   Eval      *INLR = *ON
C                   Return

  1. Generación de Reportes

Finalmente, crearemos un programa para generar reportes de nómina.

H DFTACTGRP(*NO) ACTGRP('QILE')

FPAYROLL   IF   E           K DISK

D payDate       S               D
D payId         S             10A
D empId         S              5A
D hoursWorked   S              5P 2
D grossPay      S              7P 2
D deductions    S              7P 2
D netPay        S              7P 2

C     *Entry        Plist
C                   Parm                    payDate

C                   ReadE     PAYROLL
C                   Dow       Not %Eof
C                   If        PAYROLL.PAY_DATE = payDate
C                   Eval      payId = PAYROLL.PAY_ID
C                   Eval      empId = PAYROLL.EMP_ID
C                   Eval      hoursWorked = PAYROLL.HOURS_WORKED
C                   Eval      grossPay = PAYROLL.GROSS_PAY
C                   Eval      deductions = PAYROLL.DEDUCTIONS
C                   Eval      netPay = PAYROLL.NET_PAY

C                   // Aquí puedes agregar la lógica para imprimir o mostrar el reporte
C                   EndIf
C                   ReadE     PAYROLL
C                   EndDo

C                   Eval      *INLR = *ON
C                   Return

Pruebas y Depuración

Es fundamental probar cada componente del sistema para asegurarse de que funciona correctamente. Aquí hay algunos pasos para realizar pruebas:

  1. Registrar varios empleados y verificar que se almacenan correctamente en el archivo de empleados.
  2. Calcular y registrar pagos de nómina para los empleados registrados y verificar que los cálculos son correctos.
  3. Generar reportes de nómina para diferentes fechas y verificar que los datos son precisos.

Conclusión

En este estudio de caso, hemos desarrollado un sistema de nómina básico utilizando RPG. Hemos cubierto el registro de empleados, el cálculo de nómina y la generación de reportes. Este ejercicio te proporciona una base sólida para entender cómo se puede utilizar RPG en aplicaciones del mundo real. En el siguiente módulo, aplicaremos estos conocimientos para construir una aplicación más compleja y robusta.

© Copyright 2024. Todos los derechos reservados