Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNAM – Dirección General de Bibliotecas Tesis Digitales Restricciones de uso DERECHOS RESERVADOS © PROHIBIDA SU REPRODUCCIÓN TOTAL O PARCIAL Todo el material contenido en esta tesis esta protegido por la Ley Federal del Derecho de Autor (LFDA) de los Estados Unidos Mexicanos (México). El uso de imágenes, fragmentos de videos, y demás material que sea objeto de protección de los derechos de autor, será exclusivamente para fines educativos e informativos y deberá citar la fuente donde la obtuvo mencionando el autor o autores. Cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por el respectivo titular de los Derechos de Autor. 1.Datos del alumno Apellido paterno Apellido materno Nombre(s) Teléfono Universidad Nacional Autónoma de México Facultad de Ciencias Carrera Número de cuenta 1. Datos del alumno Muñoz Gómez Fernando 56 06 76 55 Universidad Nacional Autónoma de México Facultad de Ciencias Actuaría 081417047 2. Datos del tutor Grado Nombre(s) Apellido paterno Apellido materno 2. Datos del tutor M en C Paulo Máximo Gutiérrez González 3. Datos del sinodal 1 Grado Nombre(s) Apellido paterno Apellido materno 3. Datos del sinodal 1 Act María Aurora Valdés Michell 4. Datos del sinodal 2 Grado Nombre(s) Apellido paterno Apellido materno 4. Datos del sinodal 2 Act Benigna Cuevas Pinzón 5 Datos del sinodal 3 Grado Nombre(s) Apellido paterno Apellido materno 5. Datos del sinodal 3 Act José Carlos Del Razo Domínguez 6. Datos del sinodal 4 Grado Nombre(s) Apellido paterno Apellido materno 6. Datos del sinodal 4 Act José Luis Carrasco Hernández 7 Datos del trabajo escrito Título Número de páginas Año 7. Datos del trabajo escrito Anualidades y programación como una solución a la distribución de intereses en fondo de ahorro 61 p 2006 Dedicatoria A mi padre Guillermo Muñoz Ordaz a quién le debo la mayoría de las lecciones que forjaron no solo mi carácter sino también mi modo de ver, entender y regir mi vida, así como el gusto que despertó en mi por la lectura. A mi madre Carmen Gómez Sánchez porque con sus cuidados, dedicación y apoyo incondicional me enseñó a apreciar el valor de una familia así como a disfrutar las cosas simples de la vida. A ambos por estar conmigo en todos los momentos significativos de mi vida. A mis hermanos Efrén, Carmen, Jesús, Martha, Francisco y Consuelo por su compañía, sus bromas y sus consejos. Y sobre todo porque tuve la fortuna de que fueran mis hermanos. A mi esposa Silvia Guadalupe Contreras Becerra por haber aceptado acompañarme en la aventura más grande de mi vida, la de formar mi propia familia. Además de llenar mis días de amor y comprensión. A mis hijos, Alejandra y Luis por ser fuente de mi inspiración y darme las dichas más grandes con solo decir papá. A mis amigas Angélica y Norma porque aunque pasen los años me siguen brindando su amistad irrestricta como el primer día. A mi amigo Luis Bayo por saber escucharme y ser confidente de todas mis correrías universitarias. A todos ellos les dedico este breve trabajo como un homenaje por todo lo que he aprendido y recibido de ellos. Agradecimientos Cuando se pretende hacer las cosas bien hechas, se busca la ayuda y asesoría de personas con un alto grado de experiencia y un conocimiento técnico especializado. Sin embargo cuando además se quiere que esas mismas cosas sean perfectas, amén de lo anterior se requiere que los involucrados pongan el corazón en cada una de las partes del proyecto en cuestión. Hoy, tengo la fortuna de agradecer esa participación a las siguientes personas: Al M. en C. Paulo Máximo Gutiérrez González por haber dirigido esta tesis y por sus acertados comentarios para llevar a feliz termino el trabajo. A mis sinodales Act. Aurora Valdés Michell, Act. Benigna Cuevas Pinzón, Act. José Carlos del Razo Domínguez y Act. José Luis Carrasco Hernández por su invaluable ayuda y por todo el tiempo que invirtieron en asesorarme y revisar este trabajo. ANUALIDADES Y PROGRAMACION COMO UNA SOLUCION A LA DISTRIBUCION DE INTERESES EN FONDO DE AHORRO INDICE Dedicatoria Agradecimientos Introducción Capítulo I. Una situación real 1.1. El ahorro como beneficio empresarial. 1 1.2. Fundamentos legales. 2 1.3 Un conflicto de intereses. 5 Capítulo II. Anualidades 2.1 Anualidades. 7 2.2 Desarrollo y justificación de la solución. 19 Capítulo III. La programación como complemento de la solución 3.1 Definición de un sistema para solucionar el problema. 22 3.2 Especificación de los menús necesarios para la aplicación. 25 Capítulo IV. Parte técnica 4.1 Selección base de datos y ambiente de desarrollo. 31 4.2 Definición de estructura de base de datos. 36 Capítulo V. Desarrollo 5.1 Codificación de la aplicación. 40 5.2 Pruebas de funcionalidad. 54 Capitulo VI. Un sistema en producción 6.1 Consideraciones finales. 57 6.2 Conclusiones 58 Apéndice 60 Bibliografía 61 Introducción Ante la necesidad de ser cada día más eficientes y poder dar cumplimiento de manera práctica y equitativa a la distribución intereses en los planes de fondo de ahorro, me permito presentar esta propuesta de trabajo como una posible solución al problema. Con esta propuesta intento llevar a la práctica una pequeña parte de algo que nos enseñan todos los días en las aulas, la aplicación de un modelo sencillo para resolver un problema de manera equitativa y soportado en la teoría de las matemáticas financieras. En esta solución combino la aplicación de las matemáticas financieras con otra herramienta muy poderosa, la programación de computadoras. Cuando me planteé por primera vez el problema de la distribución de intereses, lo intenté resolver de una manera tradicional, es decir calculando los intereses a través de interés compuesto. Resolverlo así, hubiera sido quizás la forma más sencilla de hacerlo, pero mientras más consideraba las formas de ahorro, las maneras de integrarse las personas al grupo de ahorradores y la manera en que se liquidaba el ejercicio noté para mi sorpresa que se asemejaba a un ejercicio de anualidades. Así, con esta idea en mente, regresé a documentarme y hoy tengo el orgullo de presentarles esta aplicación, en la que de una manera simple se ataca un problema que aqueja a muchas empresas y que puede ser resuelto mediante un programa que aplique anualidades, con un alto grado de certeza en la distribución justa de los intereses de acuerdo al tiempo y ahorro que cada persona del grupo haya realizado. Capítulo I El ahorro como beneficio empresarial. El fondo de ahorro es una prestación de previsión social que las compañías ofrecen como parte de su paquete de compensaciones con el claro objetivo de mantener o atraer a sus trabajadores. La finalidad de dicha prestación es la de promover el ahorro entre los trabajadores para ayudarlos a afrontar cualquier eventualidad de carácter económico en el futuro. Un punto adicional que fomenta el ahorro es el hecho de que por cada peso que aporta el empleado, el patrón aporta la misma cantidad, de esta forma al final del ejercicio se tiene el doble de la cantidadahorrada más los intereses generados. Sin embargo, debido a los beneficios que ofrece el ahorro y para evitar que se desvirtúe el sentido de la prestación, la ley regula tanto la cantidad que se debe de ahorrar como el tipo de inversión a la que se puede someter este ahorro. Así tenemos que el ahorro máximo que puede realizar el empleado no puede ser mayor al trece por ciento de diez veces el salario mínimo anualizado, y el monto de ahorro se deberá invertir en documentos de riesgo mínimo con rendimiento garantizado. El tratamiento fiscal está contemplado en las siguientes leyes: Ley del Impuesto sobre la Renta (LISR) y, la Ley del Seguro Social (LSS). Fundamentos legales. La ley del seguro social indica en su artículo 27 en el inciso II lo siguiente respecto al fondo de ahorro. Art. 27.- Para los efectos de esta Ley, se excluyen como integrantes del salario base de cotización, dada su naturaleza, los siguientes conceptos: II. El ahorro, cuando se integre por un depósito de cantidad semanaria, quincenal o mensual igual del trabajador y de la empresa; si se constituye en forma diversa o puede el trabajador retirarlo más de dos veces al año, integrará salario; tampoco se tomarán en cuenta las cantidades otorgadas por el patrón para fines sociales de carácter sindical. La ley del impuesto sobre la renta establece ciertas regulaciones para hacer deducible el fondo de ahorro en su artículo 31 inciso XII. XII. Que cuando se trate de gastos de previsión social, las prestaciones correspondientes se otorguen en forma general en beneficio de todos los trabajadores. Para estos efectos, tratándose de trabajadores sindicalizados se considera que las prestaciones de previsión social se otorgan de manera general cuando las mismas se establecen de acuerdo a los contratos colectivos de trabajo o contratos ley. Cuando una persona moral tenga dos o más sindicatos, se considera que las prestaciones de previsión social se otorgan de manera general siempre que se otorguen de acuerdo con los contratos colectivos de trabajo o contratos ley y sean las mismas para todos los trabajadores del mismo sindicato, aun cuando éstas sean distintas en relación con las otorgadas a los trabajadores de otros sindicatos de la propia persona moral, de acuerdo con sus contratos colectivos de trabajo o contratos ley. Tratándose de trabajadores no sindicalizados, se considera que las prestaciones de previsión social son generales cuando se otorguen las mismas prestaciones a todos ellos y siempre que las erogaciones deducibles que se efectúen por este concepto, excluidas las aportaciones de seguridad social, sean en promedio aritmético por cada trabajador no sindicalizado, en un monto igual o menor que las erogaciones deducibles por el mismo concepto, excluidas las aportaciones de seguridad social, efectuadas por cada trabajador sindicalizado. A falta de trabajadores sindicalizados, se cumple con lo establecido en este párrafo cuando se esté a lo dispuesto en el último párrafo de esta fracción. En el caso de las aportaciones a los fondos de ahorro, éstas sólo serán deducibles cuando, además de ser generales en los términos de los tres párrafos anteriores, el monto de las aportaciones efectuadas por el contribuyente sea igual al monto aportado por los trabajadores, la aportación del contribuyente no exceda del trece por ciento del salario del trabajador, sin que en ningún caso dicha aportación exceda del monto equivalente de 1.3 veces el salario mínimo general del área geográfica que corresponda al trabajador, elevado al año y siempre que se cumplan los requisitos de permanencia que se establezcan en el Reglamento de esta Ley. El reglamento del impuesto sobre la renta establece que: Artículo 42. Las aportaciones que efectúen los contribuyentes a fondos de ahorro, en los términos de la fracción XII del artículo 31 de la Ley, serán deducibles cuando se ajusten a los plazos y requisitos siguientes: I. Que el plan establezca que el trabajador pueda retirar las aportaciones de que se trata, únicamente al término de la relación de trabajo o una vez por año. II. Que el fondo se destine a otorgar préstamos a los trabajadores participantes y el remanente se invierta en valores a cargo del Gobierno Federal inscritos en el Registro Nacional de Valores, así como en títulos valor que se coloquen entre el gran público inversionista o en valores de renta fija que el SAT determine. III. Que en el caso de préstamos otorgados a trabajadores que tengan como garantía las aportaciones del fondo, dichos préstamos no excedan del monto que el trabajador tenga en el fondo, siempre que dichos préstamos sean otorgados una vez al año. Cuando se otorgue más de un préstamo al año, las aportaciones que se efectúen al fondo de ahorro serán deducibles, siempre que el último préstamo que se hubiera otorgado al mismo trabajador se haya pagado en su totalidad y siempre que haya transcurrido como mínimo seis meses desde que se cubrió la totalidad de dicho préstamo. Un conflicto de intereses. Un ejercicio típico de fondo de ahorro tiene una duración de un año. En ese lapso ocurren diversos eventos entre los cuales tenemos, el ingreso de nuevos elementos al plan (contrataciones), la baja de participantes (liquidaciones) y el retiro semestral del fondo de ahorro. Bajo esta situación ocurre que al finalizar el plan anual nos encontramos con varios empleados que durante el año consiguieron ahorrar la misma cantidad pero, su ingreso al fondo ocurrió en diferentes periodos del año. Así la cuestión es: Dado que su ahorro es idéntico, ¿Les corresponde el mismo interés a cada uno de ellos? Desafortunadamente, la ley regula y establece como se debe de invertir el fondo de ahorro pero no hace ninguna observación respecto al reparto de los intereses y es justo en este punto donde encontramos que la práctica más común es distribuirlos de manera proporcional al ahorro de las personas. Desde los primeros semestres de la carrera aprendemos que esto no es, por mucho la mejor forma de hacerlo, de hecho se podría aplicar una fórmula de interés compuesto y seguramente obtendríamos un resultado apropiado para la distribución de las ganancias. Sin embargo, el modelo del fondo de ahorro o de una caja de ahorros, se adapta a algo más conocido por los actuarios, las anualidades. Y es en este tenor que presento este trabajo como una propuesta en la que pretendo de una manera muy simple encontrar una aplicación a un poco de la teoría aprendida en las aulas para resolver un problema de índole ordinaria. Así, imaginemos un ejercicio con los siguientes supuestos: En una cierta empresa se tiene dos empleados que ahorraron exactamente el mismo importe, sin embargo, uno de ellos se incorporó a la empresa justo a la mitad del año. Dado que los dos ahorraron el mismo importe, ¿Les corresponde la misma cantidad de interés?, Existe otro empleado, que ahorró el doble de dinero que ambos, ¿Cómo se debe de comportar el interés generado?, ¿Será proporcional? Capítulo II Anualidades Comencemos por introducirnos a los conceptos de anualidades. En matemáticas financieras, la expresión anualidad se emplea para indicar el sistema de pago de sumas fijas, a intervalos iguales de tiempo. Se usa la palabra anualidad, que en un sentido propio de las finanzas no significa pagos anuales sino pagos a intervalos regulares de tiempo, en virtud de que en las anualidades contingentes interviene la probabilidad de vida anual de las personas. Así, son anualidades los dividendos sobre acciones, los fondos de amortización, los pagos de plazos, los pagos periódicos de las compañías de seguro y, en forma más general, los sueldos y todo tipo de rentas son anualidades. La expresión anualidad puede cambiarse por el de rentas, pagos periódicos, amortizacionesu otros, según el caso y las costumbres locales. Nosotros conservamos el nombre de anualidad para el estudio general de todo tipo de pagos periódicos. Una anualidad es una sucesión de pagos periódicos iguales. Si los pagos son diferentes o alguno de ellos es diferente los demás, la anualidad toma, según el caso, los nombres de anualidades variables o anualidades impropias. Los factores financieros que intervienen en las anualidades y sus formas de pago determinan diferentes tipos de anualidades. Para su estudio ordenado, es necesario clasificarlas y definirlas. A continuación definimos los elementos que integran a una anualidad. La renta es el valor de cada pago periódico. El tiempo que se fija entre dos pagos sucesivos es denominado como período de pago o período de la renta. El intervalo de tiempo que transcurre entre el primer período de pago y el final del último es el tiempo o plazo de una anualidad. La suma de los pagos hechos en un año es la renta anual. El tipo el interés que se fija es la tasa de una anualidad y puede ser nominal o efectiva. Según su tiempo, las anualidades se agrupan en dos clases: anualidades ciertas y anualidades eventuales o contingentes. Son anualidades ciertas aquellas anualidades cuyas fechas, inicial y terminal, se conocen por estar estipuladas en forma concreta. Anualidades contingentes son aquellas en las que el primer pago o el último, es decir, la fecha inicial y/o la fecha final depende de algún suceso previsible, pero cuya fecha de realización no puede fijarse. Las anualidades perpetuas son una variación de las anualidades ciertas, en las que la duración del pago es ilimitada. Según la forma en que se estipule el pago de la renta o anualidad, se originan las anualidades ordinarias o vencidas y las anualidades anticipadas. Una anualidad es ordinaria o vencida, si el pago de la renta se hace al final del período de pago. Es anticipada, si el pago se efectúa al principio de período de pago. De acuerdo con las definiciones anteriores, las anualidades se clasifican de la siguiente forma: Anualidades Ciertas Ordinarias o vencidas Anticipadas Diferidas Diferidas Perpetuas Perpetuas Perpetuas Diferidas Perpetuas Diferidas Anualidades Eventuales o Contingentes Diferidas Diferidas Perpetuas Perpetuas Perpetuas Diferidas Perpetuas Diferidas Cada una de las distintas formas de anualidades presenta variantes en la forma de calcular sus valores, según el número de pagos en el año y número de períodos de capitalizaciones anuales que estipule el tipo de interés. Tengamos también en cuenta que otra forma de encontrar las anualidades es en forma creciente y decreciente. Si el período de capitalización coincide con el período de pago, se dice que las anualidades son anualidades simples. Es decir, las anualidades simples son aquellas cuyo período de pago coincide con el período de capitalización. El valor de una anualidad calculado a su terminación es el monto de ella. El valor de la anualidad calculado a su comienzo es su valor actual o presente. Estos valores pueden, también, calcularse en fechas intermedias; en tal caso, se refiere a: monto de la parte vencida o valor actual de las anualidades por vencer. Monto y Valor Actual de las Anualidades Simples Ciertas Ordinarias. Este tipo de anualidad es el más frecuente y, por esto, cuando se dice simplemente anualidad, se supone que se trata de una anualidad simple cierta ordinaria. La tasa de interés es, por lo general, una tasa de interés nominal anual. En caso de que la tasa no sea nominal, se aclarará diciendo tasa efectiva anual. Si la tasa dada es nominal, sin especificación de período de capitalización, la tasa efectiva en el período de pago es el cociente entre la tasa nominal y el número anual de pagos. Símbolos que se utilizan en las anualidades R = pago periódico de una anualidad o renta. i = tasa efectiva por período de capitalización. j = tasa nominal anual. m = número de capitalizaciones en el año. j(m) = tasa nominal con m períodos de capitalización en el año. n = número de períodos de pago. S = monto de una anualidad. A = valor actual o presente de una anualidad. Cálculo del monto… Los pagos R efectuados al final de cada período ganan interés compuesto, hasta la fecha final. Estableciendo la ecuación de equivalencia para la fecha final como fecha focal, tendremos: Cada pago efectuado al final de período capitaliza los intereses en cada uno de los períodos que le siguen. El primer pago acumula durante (n – 1) períodos, el segundo (n – 2) períodos y, así, sucesivamente hasta el último pago que no gana intereses, ya que su pago coincide con la fecha de término. Los montos respectivos de los pagos R comenzando por el último serán R, R(1 + i), R(1 + i) 2 ,…,R(1 + i) n-2 + R(1+ i) n-1 . El monto total S de la anualidad es igual a la suma de los montos producidos por las distintas rentas R, o sea: S = R + R(1+i) + R(1+i) 2 + … + R(1+i) n-2 + R(1+i) n-1 Los términos del segundo miembro forman una progresión geométrica en n términos, razón (1 + i) y primer término R. De donde se tiene que S = R {[(1+i) n –1] / i} Si el valor de cada pago R es de una unidad monetaria, el monto S corresponderá al monto de una anualidad de uno por período y se expresa con el símbolo De donde obtenemos que Y por lo tanto Valor actual o presente de una anualidad es aquella cantidad A de dinero que con sus intereses compuestos, en el tiempo de la anualidad, dará un monto equivalente al monto de la anualidad. Formando la ecuación de equivalencia y utilizando como fecha focal de fecha final, se tiene: A (1+i) n = S De donde podemos inferir que Y por tanto el valor de A sería Simplificando obtenemos Si el valor de cada pago R es de una unidad monetaria, el valor actual A es el valor actual de una anualidad de 1 por período y se expresa con el símbolo De donde se obtiene que Y por lo tanto Anualidades Anticipadas En los negocios, es frecuente que los pagos periódicos se efectúen al comienzo de cada período; tal es el caso de la renta de terrenos, edificios y oficinas, cuyo alquiler se paga a principio de período. Las ventas a plazos suelen estipular una serie de pagos al comienzo de los períodos convenidos en el contrato de venta. En los seguros ya sean dotales, de vida o de protección contra riesgos, las pólizas, por lo general, estipulan que el asegurado debe pagar sus cuotas o primas de seguro, al comienzo de cada período. En estos casos se usa la expresión “El pago vence a principio del período”. Una anualidad anticipada o inmediata es una sucesión de pagos o rentas que se efectúan o vencen, al principio del período de pago. El simbolismo de uso más generalizado y, a su vez, recomendado por la Asociación Internacional de Actuarios, consiste en utilizar con diéresis los mismos símbolos que se utiliza en las anualidades vencidas, conservando su definición. En esta parte explicaremos las anualidades simples ciertas anticipadas. Para comparar las anualidades anticipadas, con las anualidades vencidas es muy útil el siguiente diagrama. Supongamos pagos unitarios. Observamos que, al agregar un último pago adicional tendríamos una anualidad vencida pagada durante n + 1 periodos, por lo tanto su monto sería Si restamos el valor del último pago R, entonces tendríamos que la igualdad sería Anualidades Diferidas En los negocios, es frecuente que algunas circunstancias obliguen a que el primer período de pago comience en una fecha futura, hasta después de transcurrido un cierto tiempo desde el momento inicial o de convenio. Es decir no coincide la fecha inicial de la anualidad, con la fecha del primer pago. En estos casos, se dice que la anualidad es diferida.En otras palabras una anualidad diferida es una anualidad cuyo plazo comienza después de transcurrido un intervalo de tiempo. Y el intervalo de aplazamiento es el tiempo que transcurre entre la fecha inicial, o fecha de valoración de la anualidad, y la fecha del primer pago. Para medir el intervalo de aplazamiento, se utiliza como unidad el tiempo que corresponde a un período de pago. Por lo general, las anualidades diferidas se analizan como anualidades ordinarias o vencidas; de manera que, en la realidad, al hablar de una anualidad diferida, se supone que es vencida. Los símbolos utilizados en las anualidades diferidas tienen el mismo significado, que los utilizados en las anualidades que ya hemos mencionado. Algunos autores separan para su análisis dos grupos de anualidades diferidas; las anualidades diferidas vencidas y las anualidades diferidas anticipadas, y utilizan los símbolos para expresar, respectivamente, el valor actual y el monto de una anualidad diferida vencida de una unidad monetaria por período, diferida en su pago k períodos y pagadera durante n períodos, a la tasa i por período. Para las anualidades diferidas anticipada, utilizan los mimos símbolos, con diéresis o encerrados en un recuadro. Anualidades Ciertas. Caso General En realidad, en la práctica, la mayoría de las operaciones comerciales y financieras que implican anualidades, tienen un período de capitalización igual al período de pago, es decir, son anualidades simples. En los casos en que no hay coincidencia entre el período de pago y el de capitalización, se dice que es una anualidad general. Por tanto tenemos que una anualidad general es aquella cuyos períodos de pago y capitalización no son iguales. Todas las definiciones dadas para las distintas clases de anualidades y sus diferentes tipos son válidas, para las anualidades generales. También, son válidas para las anualidades generales las definiciones de los valores de las anualidades simples, en lugar de dar fórmulas generales y otras correspondientes a los casos particulares, para la solución de problemas que implican anualidades generales. De aquí que consideramos más útil, instructivo y sencillo, desarrollar el tratamiento de las anualidades generales, trasformándolas en anualidades simples equivalentes. Se utilizan los mismos símbolos y con el mismo significado que se les dio en los capítulos anteriores. A continuación, damos una lista de algunos símbolos y su significado en las ecuaciones que implican anualidades generales. p = número de pagos por año W = renta o pago periódico de una anualidad general j = tasa nominal i =j / m = tasa efectiva por período de capitalización j(m) = tasa nominal con m períodos de capitalización Por todo lo que hemos visto anteriormente tenemos que una anualidad general ordinaria y una anualidad simple deberían de cumplir con los siguientes dos puntos: Las tasas de interés deben de ser equivalentes y Los valores de las anualidades en cualquier fecha deben ser iguales. Si suponemos que en la anualidad general ordinaria tenemos pagos W, p veces al año a una tasa efectiva i´ por periodo y que en la anualidad simple tenemos pagos R, m veces al año y una tasa efectiva i entonces los montos al final del año deberían ser Como los montos deben de ser iguales entonces tenemos que O sea Ahora bien, como las tasas deben de ser equivalentes tenemos (1+i) m = (1+i´) p luego (1+i) m -1 = (1+i´) p -1 es decir R(1/i) = W(1/i) Despejando i´ obtengo que i´ = (1+i) m/p – 1 Por lo tanto si substituyo tengo que Es decir Y como sabemos que Entonces tenemos Y por lo tanto Si substituimos k = m/p nuestra relación final sería Con el desarrollo anterior demostramos que no importa si n es entero o fracción por lo tanto la formula sigue siendo válida. Anualidades y Pagos Contingentes Anualidades contingentes son aquellas en las que el primer pago o el último, es decir, la fecha inicial y/o la fecha final depende de algún suceso previsible, pero cuya fecha de ocurrencia no puede fijarse. Las anualidades que se pagan a una persona durante su vida, reciben el nombre de rentas vitalicias. Una dotación o dotal es un contrato que promete pagar a su beneficiario una cierta cantidad de dinero, al final de un período de tiempo bien determinado, siempre que esté vivo para recibirla. Anualidades Vitalicias Una anualidad o renta vitalicia, consiste en una serie de pagos iguales, cuyo término queda fijado por la duración de la vida de la persona que ha de recibir la renta. Es decir, son anualidades contingentes y como anualidades pueden presentarse en cualquiera de sus formas, ya sea simples o generales, vencidas o anticipadas, diferidas, etc., dando origen a una gran variedad de rentas vitalicias. Las más frecuentes son las simples vencidas que se pagan al final de cada año y, por esto, al decir renta vitalicia o anualidad vitalicia, se entiende que se trata de una renta vitalicia simple vencida. Anualidades Vitalicias Anticipadas o Inmediatas Cuando los pagos se efectúan al comienzo de cada año, la renta o anualidad vitalicia es anticipada o inmediata. Por ser la renta inmediata, el primer pago de la renta vitalicia se recibe en el momento de pagar la prima neta única; luego el valor äx es igual al pago inmediato de una unidad monetaria más el valor actual äx de una renta vitalicia ordinaria de una unidad monetaria. Anualidades Vitalicias Ordinarias Diferidas En las rentas o anualidades diferidas, el primer pago queda aplazado un cierto número de años, y se paga un año después de expirado el período de aplazamiento y se continúa los pagos anuales de la misma manera que una renta vitalicia ordinaria. Anualidades Vitalicias Diferidas Anticipadas Para deducir una fórmula que permita calcular el valor de una anualidad vitalicia anticipada, diferida k años, se aplica el mismo método empleado en las anualidades vitalicias ordinarias diferidas, teniendo en cuenta que el primer dotal es kEx en lugar de k+1Ex. Anualidades Contingentes Temporales Una anualidad o renta es temporal, si en el contrato se estipula que se pagará el beneficiario sólo durante un cierto número de años, si este vive durante esos años, extinguiéndose la obligación en caso de muerte del beneficiario. Las anualidades contingentes temporales pueden ser vencidas, anticipadas, diferidas, etc., dando origen a una gran variedad de rentas contingentes o temporales. Anualidades Contingentes Inmediatas Temporales Se diferencia de la anterior en que el pago es anticipado, en lugar de vencido. El símbolo äx:n Se utiliza para expresar el valor actual o prima neta única de una anualidad contingente inmediata temporal, de una unidad monetaria, pagadera durante n años a una persona de edad x. Desarrollo y justificación de la solución. Basados en la teoría antes expuesta, supongamos que los empleados ahorran un peso cada quincena, si los pagos se hicieran n veces, la representación gráfica de dichos pagos sería la siguiente Si deseamos saber el monto obtenido al final del ejercicio basta con sumar 1 + (1+i) + (1+i) 2 + … + (1+i) n-2 + (1+i) n-1 Es decir, el monto total S de la anualidad es igual a la suma de los montos producidos por las distintas rentas, o sea: S = 1 + (1+i) + (1+i) 2 + … + (1+i) n-2 + (1+i) n-1 Los términos del segundo miembro forman una progresión geométrica en n términos, razón (1 + i) y primer término 1. De donde se tiene que Esto como ya habíamos explicado lo representamos como De donde obtenemos que Y por lo tanto al suponer que la aportación del empleado es R concluimos con En resumen podemos decir que la solución a nuestro problema de reparto de intereses quedará resueltoal obtener el monto de una anualidad pagadera n veces a una tasa de interés i. 0 1 2 3 n - 1 n. . . Se anexa el cuadro con los valores obtenidos al finalizar el ejercicio y calcular los montos para cada uno de los empleados. NUM. NOMBRE INGR. S AHORRO RETIRO INTERES SALARIO 000001 FERNANDO MUÑOZ GOMEZ 01/01/04 A 23,094.00 0.00 3,485.89 29,786.00 000002 SILVIA GUADALUPE CONTRERAS 01/01/04 B 0.00 0.00 0.00 12,000.00 000003 ALEJANDRA MUÑOZ CONTRERAS 01/01/04 A 22,205.04 0.00 3,351.71 14,234.00 000004 LUIS CARRASCO HERNANDEZ 01/01/04 A 23,094.00 11,547.00 3,485.89 34,768.00 000005 JUAN F. CARDENAS GUZMAN 01/01/04 A 14,002.56 7,001.28 2,113.59 8,976.00 000006 CECILIA ROCIO HERNANDEZ RIVERA 01/01/04 A 15,406.56 0.00 2,325.52 9,876.00 000007 ANGELICA FLORES LLAMAS 01/01/04 A 10,606.44 5,303.23 1,600.83 6,799.00 000008 NORMA BACA RAIZ 01/01/04 A 5,391.36 2,695.68 813.79 3,456.00 000009 LUIS MUNOZ CONTRERAS 01/01/04 A 7,800.00 3,900.00 1,177.36 5,000.00 000010 ANA MARIA CRUZ SANCHEZ 01/01/04 A 7,800.00 0.00 1,177.36 5,000.00 000011 MARIA LUISA RAMIREZ OJEDA 01/01/04 A 12,480.00 6,240.00 1,883.77 8,000.00 000012 ANGEL ORTIZ SALAZAR 01/01/04 A 7,122.96 3,561.48 1,075.16 4,566.00 000013 PAZ BECERRA DE ANDA 01/01/04 A 23,094.00 0.00 3,485.89 35,000.00 000015 ERICKA I. GONZALEZ RODRIGUEZ 01/01/04 A 13,884.00 6,942.00 2,095.70 8,900.00 000016 OFELIA GOMEZ CASTELLANOS 28/11/06 A 21,840.00 0.00 3,296.60 14,000.00 000017 DIANA LAURA MANRIQUEZ PEREZ 01/01/06 A 10,920.00 0.00 1,648.30 7,000.00 000018 MONICA MALDONADO RANGEL 01/07/06 A 10,920.00 0.00 750.31 14,000.00 Como podemos observar en los valores en rojo, cuando la gente permanece el mismo periodo de tiempo y ahorro el mismo importe sus intereses son idénticos, en el caso de las empleadas 17 y 18, a pesar de haber ahorrado el mismo importe, sus intereses son diferentes, esto es debido a que la primera estuvo desde el inicio del ejercicio y la segunda se integró al grupo cuando ya se encontraba a medio plan. A continuación se presentan los cálculos para los ejemplos citados suponiendo una tasa del 1.2 % efectiva por periodo. Con el cuadro anterior se comprueban los datos obtenidos por el sistema y se verifica que el cálculo del monto es correcto. Nom. Quinc. Aportación Tasa Ahorro 1+Tasa Luis 24 325 0.012 7800 1.012 Ana 24 325 0.012 7800 1.012 Diana 24 455 0.012 10920 1.012 Mónica 12 910 0.012 10920 1.012 Nom. Se exponencia Se resta 1 Se divide entre tasa Se obtiene monto Interes Real Luis 1.331472804 0.3314728 27.62273364 8,977.39 1,177.39 Ana 1.331472804 0.3314728 27.62273364 8,977.39 1,177.39 Diana 1.331472804 0.3314728 27.62273364 12,568.34 1,648.34 Mónica 1.153894624 0.1538946 12.82455202 11,670.34 750.34 Capítulo III Definición de un sistema para solucionar el problema. Una vez determinada la solución, el siguiente paso consiste en plantear la creación de un sistema que nos permita automatizar y generar de manera fidedigna los cálculos correspondientes al ahorro del empleado. Consideraciones: El sistema deberá considerar la inclusión de empleados en cualquier punto del año. • Se debe de asignar un número de empleado de manera automática. • El número deberá ser consecutivo e irrepetible. • Se deberá considerar la fecha de captura como la fecha de ingreso. • El empleado deberá ser asignado a un departamento de manera obligatoria. • Se podrá elegir forma de ahorro semestral o anual. • Se tendrá que capturar el sueldo, pero éste de ninguna manera podrá ser menor al salario mínimo. Se tendrá que contar con un módulo de modificación para los datos del empleado. • En esta opción se podrá modificar el nombre, el departamento, el plan de ahorro, el estado del empleado de activo a baja o viceversa y finalmente se podrá asignar una fecha de baja. • Deberá presentar un resumen del ahorro, del retiro, del interés ganado y el sueldo del empleado. • Por ningún motivo se podrá alterar el sueldo, el número del empleado o cualquier aportación. Un punto más a tener en cuenta es el cálculo de las aportaciones quincenales. • El cálculo quincenal no se podrá realizar más de una vez. • Se deberán de ir inhabilitando las quincenas previamente calculadas. Una opción del sistema será la posibilidad de hacer un retiro semestral. • Deberá validar que previamente se hayan calculado las 12 quincenas correspondientes al semestre. • No deberá calcularse este retiro si ya se realizó el cálculo de la quincena 13 o superior. • Sólo se deberá de aplicar el cálculo a los empleados que en ese momento tengan seleccionado el plan de ahorro semestral. El programa deberá contar con una opción para liquidar el ejercicio. • En este punto se deberá realizar el cálculo del monto de las aportaciones más el interés generado menos el retiro semestral para aquellos que lo hubieran realizado. • El cálculo anterior deberá ser efectuado toda vez que se verifique que las 24 quincenas del ejercicio han sido realizadas. Limpieza del sistema • La opción restante nos deberá permitir limpiar la base de datos para el inicio del nuevo ejercicio, es decir deberá eliminar a todas las bajas y poner en ceros a los empleados que permanecen en la compañía. Especificación de los menús necesarios para la aplicación. De acuerdo a las condiciones declaradas en el párrafo anterior tenemos que la estructura de menús sería la siguiente: Empleado • Agregar. Esta opción nos permitirá agregar un empleado al sistema. • Modificar. En esta parte se podrán modificar datos del empleado o borrar registros. Procesos • Cálculo Quincenal. Esta opción nos deberá permitir seleccionar cada una de las quincenas a procesar. • Préstamo Semestral. En esta opción se deberá poder hacer el cálculo del préstamo que puede recibir el empleado con garantía en el fondo de ahorro acumulado. • Liquidación Anual. Esta parte se encargará de hacer el cálculo del fondo acumulado más los intereses generados. • Nuevo Ejercicio. Esta opción deberá poner el sistema listo para iniciar un nuevo ejercicio. Salida. Finalmente esta opción nos permite salir del sistema. Las pantallas de captura o procesos deberán quedar de la siguiente manera. Agregar empleados. Como se puede apreciar en el dibujo, la forma de captura reúne todos los elementos solicitados en la definición. El campo de número de empleado no es editable, tampoco lo es la fecha de ingreso, se asigna de manera obligatoria un departamento al empleado, se da la opción de escoger el tipo de plan y se permite la captura del salario. Modificar. Como se aprecia en las pantallas anteriores la modificación del empleado sólo podrá ser aplicada en el nombre, el departamento, la fecha de baja y el plan al que pertenece. Procesos quincenales En esta parte sólo se podrán ejecutar proceso. En los procesos quincenales, el sistema nos deberá dar la facilidad de escoger que quincena se quiere aplicar. El préstamo semestral, la liquidación anual y el nuevo ejercicio sólo deben de disparar procedimientos y hacer afectaciones a la base de datos. Capítulo IV Selección base de datos y ambiente de desarrollo. La selección de la base de datos, así como el ambiente de desarrollo es una parte fundamental de la creación de cualquier sistema de información. Así que empecemos por explicar que una base de datos es un conjunto de información que pertenecen al mismo contexto almacenados sistemáticamente para su uso posterior. El almacenaje se realiza en poderosos medios magnéticos de una manera ordenada y eficiente. El actual desarrollo de la informática nos ofrece sistemas gestores de bases de datos (SGBD), que permiten almacenar y posteriormente acceder a los datos de forma rápida y estructurada. Según la variabilidad de los datos almacenados, lasbases de datos se pueden clasificar como Estáticas o Dinámicas. Las bases de datos estáticas son aquellas de sólo lectura, utilizadas primordialmente para almacenar datos históricos que posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a través del tiempo, realizar proyecciones y tomar decisiones. Las bases de datos dinámicas son aquellas bases donde la información almacenada se modifica con el tiempo, permitiendo operaciones como actualización y adición de datos, además de las operaciones fundamentales de consulta. Por su contenido tenemos mayor variabilidad, así tenemos las bases de datos bibliográficas que sólo contienen un surrogante (representante) de la fuente primaria, que permite localizarla. Un registro típico de una base de datos bibliográfica contiene información sobre el autor, fecha de publicación, editorial, título, edición, de una determinada publicación, etc. Puede contener un resumen o extracto de la publicación original, pero nunca el texto completo. Las bases de datos numéricas que como su nombre lo indica, el contenido son cifras o números. Por ejemplo, una colección de resultados de análisis de laboratorio. Otra posición la ocupan las bases de datos de texto completo que almacenan las fuentes primarias, como por ejemplo, todo el contenido de todos las ediciones de una colección de revistas científicas. Un tipo más son las de directorio como son guías telefónicas en formato electrónico. Adicional a las anteriores tenemos las de imágenes, audio, vídeo y multimedia que como su nombre lo indica, almacenan información en distintos formatos. No es común mezclar los diferentes tipo en una sola base de datos, sin embargo gracias al gran desarrollo que ha sufrido este ambiente, hoy es factible realizarlo. Además de la clasificación por la función de las bases de datos, éstas también se pueden clasificar de acuerdo a su modelo de administración de datos. Un modelo de datos es básicamente una "descripción" de algo conocido como contenedor de datos (algo en donde se guarda la información), así como de los métodos para almacenar y recuperar información de esos contenedores. Los modelos de datos no son cosas físicas: son abstracciones que permiten la implementación de un sistema eficiente de base de datos. Algunos modelos con frecuencia utilizados en las bases de datos: Bases de datos jerárquicas: Éstas son bases de datos que, como su nombre indica, almacenan su información en una estructura jerárquica. En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no tienen hijos se los conoce como hojas. Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de datos. Bases de datos de red: Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico). Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de red ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales. Bases de datos relacionales: Éste es el modelo más utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Tras ser postulados sus fundamentos en 1970 por Edgar Frank Codd de los laboratorios IBM en San José (California), no tardó en consolidarse como un nuevo paradigma en los modelos de base de datos. Su idea fundamental es el uso de "relaciones". Estas relaciones podrían considerarse en forma lógica como conjuntos de datos llamados "tuplas". Pese a que ésta es la teoría de las bases de datos relacionales creadas por Edgar Frank Codd, la mayoría de las veces se conceptualiza de una manera más fácil de imaginar. Esto es pensando en cada relación como si fuese una tabla que está compuesta por registros (las filas de una tabla), que representarían las tuplas, y campos (las columnas de una tabla). En este modelo, el lugar y la forma en que se almacenen los datos no tienen relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de utilizar para un usuario esporádico de la base de datos. La información puede ser recuperada o almacenada mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la información. El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query Language o Lenguaje Estructurado de Consultas, un estándar implementado por los principales motores o sistemas de gestión de bases de datos relacionales. Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce como normalización de una base de datos. Finalmente tenemos las bases de datos orientadas a objetos: Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la base de datos los objetos completos (estado y comportamiento). Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del paradigma de objetos: • Encapsulación - Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos incorrectos o conflictos. • Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases. • Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos. En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la definición de la base de datos. Una operación (llamada función) se especifica en dos partes. La interfaz (o signatura) de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la interfaz. Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse independencia entre programas y operaciones. De lo anterior se desprende que el modelo que más se ajusta a nuestro desarrollo es el modelo relacional. El SGBD más potente del mercado tanto por la seguridad que ofrece como por la estabilidad tanto en mantenimiento como en recuperación de información es ORACLE. Por tanto nuestra propuesta de desarrollo estará soportada por una base de datos en ORACLE y codificada en un lenguaje de programación Power Builder. Al llevarnos la construcción a esta plataforma, estamos ofreciendo la posibilidad de transportarla una vez concluida a casi cualquier plataforma de base de datos de mediano a gran tamaño. Esto es factible ya que ambas plataformas (SGBD y desarrollo) utilizan estándares SQL. Definición de estructura de base de datos. FA_EMPLEADOS NUMEMP: VARCHAR2(6) NOMBRE: VARCHAR2(50) CVEDEP: VARCHAR2(6) SALARI: NUMBER(10,2) AHORRO: NUMBER(10,2) INTERE: NUMBER(10,2) RETSEM: NUMBER(10,2) FECING: DATE FECBAJ: DATE ESTADO: VARCHAR2(1) PLAN: VARCHAR2(1) FA_DEPTOS CVEDEP: VARCHAR2(6) DESCRI: VARCHAR2(50) FA_AHORRO NUMEMP: VARCHAR2(6) ENE001: NUMBER(10,2) ENE002: NUMBER(10,2) FEB001: NUMBER(10,2) FEB002: NUMBER(10,2) MAR001: NUMBER(10,2) MAR002: NUMBER(10,2) ABR001: NUMBER(10,2) ABR002: NUMBER(10,2) MAY001: NUMBER(10,2)MAY002: NUMBER(10,2) JUN001: NUMBER(10,2) JUN002: NUMBER(10,2) JUL001: NUMBER(10,2) JUL002: NUMBER(10,2) AGO001: NUMBER(10,2) AGO002: NUMBER(10,2) SEP001: NUMBER(10,2) SEP002: NUMBER(10,2) OCT001: NUMBER(10,2) OCT002: NUMBER(10,2) NOV001: NUMBER(10,2) NOV002: NUMBER(10,2) DIC001: NUMBER(10,2) DIC002: NUMBER(10,2) TOTANU: NUMBER(10,2) ESTADO: VARCHAR2(1) Descripción de las tablas Nombre FA_EMPLEADOS Contenido Esta tabla contiene los datos generales del empleado, así como un resumen de sus aportaciones y el valor de su ahorro Descripción de las columnas Nombre Tipo Nulo Contenido PK FK NUMEMP CARACTER(6) NO NULO Número de Empleado Campo no nulo Seis posiciones obligatorias Relleno con ceros a la izquierda Si No NOMBRE CARACTER(50) NO NULO Nombre del empleado Campo no nulo Máximo 50 posiciones No No CVEDEP CARACTER(6) NULO Clave del Departamento Seis posiciones obligatorias Relleno a la izquierda con ceros No Si SALARI NÚMERO(10,2) NO NULO Salario mensual del empleado No No AHORRO NÚMERO(10,2) NO NULO Importe del ahorro acumulado No No INTERE NÚMERO(10,2) NO NULO Interés ganado por el empleado No No RETSEM NÚMERO(10,2) NO NULO Retiro semestral No No FECING FECHA NO NULO Fecha de ingreso al sistema No No FECBAJ FECHA NULO Fecha de baja del sistema No No ESTADO CARACTER(1) NO NULO Indica si el empleado está A para Activo o B si está dado de Baja No No PLAN CARACTER(1) NO NULO Indica el tipo de plan, que puede ser A anual o S semestral No No Nombre FA_DEPTOS Contenido Esta tabla contiene la información relacionada al departamento donde labora el empleado Descripción de las columnas Nombre Tipo Nulo Contenido PK FK CVEDEP CARACTER(6) NO NULO Clave del Departamento Seis posiciones obligatorias Relleno a la izquierda con ceros Si No DESCRI CARACTER(50) NO NULO Nombre o descripción del departamento No No Nombre FA_AHORRO Contenido Esta tabla contiene las aportaciones al fondo de ahorro por empleado de manera quincenal Descripción de las columnas Nombre Tipo Nulo Contenido PK FK NUMEMP CARACTER(6) NO NULO Número de Empleado Campo no nulo Seis posiciones obligatorias Relleno con ceros a la izquierda Si Si ENE001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de enero No No ENE002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de enero No No FEB001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de febrero No No FEB002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de febrero No No MAR001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de marzo No No MAR002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de marzo No No ABR001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de abril No No ABR002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de abril No No MAY001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de mayo No No MAY002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de mayo No No JUN001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de junio No No JUN002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de junio No No JUL001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de julio No No JUL002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de julio No No Nombre FA_AHORRO Descripción de las columnas (2) Nombre Tipo Nulo Contenido PK FK AGO001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de agosto No No AGO002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de agosto No No SEP001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de septiembre No No SEP002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de septiembre No No OCT001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de octubre No No OCT002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de octubre No No NOV001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de noviembre No No NOV002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de noviembre No No DIC001 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Primera Quincena de diciembre No No DIC002 NÚMERO(10,2) NO NULO Ahorro en pesos correspondiente a la Segunda Quincena de diciembre No No TOTANU NÚMERO(10,2) NO NULO Ahorro total anualizado No No ESTADO CARACTER(1) NO NULO Estado del registro A para activo B para baja No No Capítulo V Codificación de la aplicación A continuación presento la codificación de las principales funciones que nos permiten llevar a cabo los cálculos correctos para la generación del ahorro quincenal y el cálculo de los intereses respectivos al final del ejercicio. La conectividad. Para poder establecer una conexión entre la aplicación desarrollada y la base de datos es necesario cumplir con un protocolo de seguridad y estandarización. Como se ha mencionado esta aplicación puede ser adaptada a diferentes bases de datos, por tanto en este script de conexión se establecerá con quién se va a conectar el programa y bajo que permisos (usuario) SQLCA.DBMS = "O84 ORACLE 8.0.4" SQLCA.LogPass = "FEMUGO64" SQLCA.ServerName = "AZTECA" SQLCA.LogId = "FMUNOZ" SQLCA.AutoCommit = False SQLCA.DBParm = "" CONNECT USING SQLCA; IF SQLCA.SQLCODE < 0 THEN MESSAGEBOX("Error de conexión","No pudo conectarse a la Base de Datos de Fondo de Ahorro, " + SQLCA.SQLErrText, StopSign!) HALT CLOSE ELSE OPEN(W_INICIAL) END IF Como podemos observar nos estamos conectando a una base de datos ORACLE versión 8.0.4 La contraseña para firmarnos es FEMUGO64 El usuario es FMUNOZ y Finalmente la base de datos está identificada como AZTECA. Estos son los elementos mínimos necesarios para poder establecer un proceso de escucha entre la base de datos y una aplicación cliente servidor. Procedimiento MONTOQUINCENAL Este procedimiento se encarga de hacer el cálculo del ahorro que realiza el empleado basado en su sueldo. Como podemos observar válida que no se ahorró más del 13% de 10 veces el salario mínimo anualizado cada quincena para cumplir con la reglamentación fiscal. REAL MONTO, SUELDO, XTOPAR, LNAHORRO, LNSALARI, LNACUMUL STRING LCNUMEMP, LCESTADO DATE LDINGRE INTEGER CUANTOS DECLARE XREVISAR CURSOR FOR SELECT NUMEMP, FECING, ESTADO, AHORRO, SALARI FROM FA_EMPLEADOS WHERE ESTADO = 'A' ORDER BY NUMEMP; XTOPAR = (SALMIN * 365 * 10 * 0.13 * 0.5) / 12 OPEN XREVISAR; FETCH XREVISAR INTO :LCNUMEMP, :LDINGRE, :LCESTADO, :LNAHORRO, :LNSALARI; DO WHILE SQLCA.SQLCODE = 0 MONTO = LNSALARI * 0.13 * 0.5 IF MONTO > XTOPAR THEN MONTO = XTOPAR END IF CUANTOS = 0 SELECT COUNT(*) INTO :CUANTOS FROM FA_AHORRO WHERE NUMEMP = :LCNUMEMP; IF CUANTOS < 1 THEN CHOOSE CASE QUINCENA CASE 1 INSERT INTO FA_AHORRO VALUES(:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 2 INSERT INTO FA_AHORRO VALUES(0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 3 INSERT INTO FA_AHORRO VALUES(0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 4 INSERT INTO FA_AHORROVALUES(0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 5 INSERT INTO FA_AHORRO VALUES(0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 6 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 7 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 8 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 9 INSERT INTO FA_AHORRO VALUES(0,0,O,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 10 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 11 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 12 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 13 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 14 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 15 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 16 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 17 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 18 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 19 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 20 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 21 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,0,:MONTO, 'A', :LCNUMEMP); CASE 22 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,0,:MONTO, 'A', :LCNUMEMP); CASE 23 INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,0,:MONTO, 'A', :LCNUMEMP); CASE ELSE INSERT INTO FA_AHORRO VALUES(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,:MONTO,:MONTO, 'A', :LCNUMEMP); END CHOOSE UPDATE FA_EMPLEADOSS SET AHORRO = :MONTO WHERE NUMEMP = :LCNUMEMP; ELSE LNACUMUL = 0 SELECT NVL(TOTANU,0) INTO :LNACUMUL FROM FA_AHORRO WHERE NUMEMP = :LCNUMEMP; LNACUMUL = LNACUMUL + MONTO CHOOSE CASE QUINCENA CASE 1 UPDATE FA_AHORRO SET ENE001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 2 UPDATE FA_AHORRO SET ENE002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 3 UPDATE FA_AHORRO SET FEB001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 4 UPDATE FA_AHORRO SET FEB002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 5 UPDATE FA_AHORRO SET MAR001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 6 UPDATE FA_AHORRO SET MAR002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 7 UPDATE FA_AHORRO SET ABR001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 8 UPDATE FA_AHORRO SET ABR002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 9 UPDATE FA_AHORRO SET MAY001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 10 UPDATE FA_AHORRO SET MAY002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 11 UPDATE FA_AHORRO SET JUN001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 12 UPDATE FA_AHORRO SET JUN002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 13 UPDATE FA_AHORRO SET JUL001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 14 UPDATE FA_AHORRO SET JUL002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 15 UPDATE FA_AHORRO SET AGO001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 16 UPDATE FA_AHORRO SET AGO002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 17 UPDATE FA_AHORRO SET SEP001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 18 UPDATE FA_AHORRO SET SEP002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 19 UPDATE FA_AHORRO SET OCT001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 20 UPDATE FA_AHORRO SET OCT002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 21 UPDATE FA_AHORRO SET NOV001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 22 UPDATE FA_AHORRO SET NOV002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE 23 UPDATE FA_AHORRO SET DIC001 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; CASE ELSE UPDATE FA_AHORRO SET DIC002 = :MONTO, TOTANU = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; END CHOOSE UPDATE FA_EMPLEADOS SET AHORRO = :LNACUMUL WHERE NUMEMP = :LCNUMEMP; END IF; FETCH XREVISAR INTO :LCNUMEMP, :LDINGRE, :LCESTADO, :LNAHORRO, :LNSALARI; LOOP CLOSE XREVISAR; COMMIT; MESSAGEBOX('Fondo de Ahorro', 'Proceso Concluido Correctamente', Information! ); RETURN; El procedimiento PRESSEME es el que se encarga de hacer el préstamo semestral del fondo de ahorro. Al aplicarse verifica que estén realizados los cálculos para las primeras 12 quincenas, que no se haya efectuado ya de manera previa el préstamo semestral y por último se encarga de habilitar y deshabilitar las opciones ya realizadas para evitar confusiones al operador. REAL LNAHORRO REAL LNENE1, LNENE2, LNFEB1, LNFEB2, LNMAR1, LNMAR2, LNABR1, LNABR2, LNMAY1, LNMAY2,LNJUN1, LNJUN2, LNSEGSEM STRING LCNUMEMP, LCESTADO DATE LDINGRE INTEGER CUANTOS DECLARE XPROCESAR CURSOR FOR SELECT NUMEMP, AHORRO FROM FA_EMPLEADOS WHERE ESTADO = 'A' AND PLAN = 'S' ORDER BY NUMEMP; LNENE1=0 LNENE2=0 LNFEB1=0 LNFEB2=0 LNMAR1=0 LNMAR2=0 LNABR1=0 LNABR2=0 LNMAY1=0 LNMAY2=0 LNJUN1=0 LNJUN2=0 LNSEGSEM = 0 SELECT SUM(ENE001) INTO :LNENE1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(ENE002) INTO :LNENE2 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(FEB001) INTO :LNFEB1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(FEB002) INTO :LNFEB2 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(MAR001) INTO :LNMAR1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(MAR002) INTO :LNMAR2 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(ABR001) INTO :LNABR1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(ABR002) INTO :LNABR2 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(MAY001) INTO :LNMAY1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(MAY002) INTO :LNMAY2 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(JUN001) INTO :LNJUN1 FROM FA_AHORRO WHERE ESTADO = 'A'; SELECT SUM(JUN002) INTO :LNJUN2 FROM FA_AHORRO WHERE ESTADO = 'A'; IF ISNULL(LNENE1) THEN LNENE1 = 0 END IF IF ISNULL(LNENE2) THEN LNENE2 = 0 END IF IF ISNULL(LNFEB1) THEN LNFEB1 = 0 END IF IF ISNULL(LNFEB2) THEN LNFEB2 = 0 END IF IF ISNULL(LNMAR1) THEN LNMAR1 = 0 END IF IF ISNULL(LNMAR2) THEN LNMAR2 = 0 END IF IF ISNULL(LNABR1) THEN LNABR1 = 0 END IF IF ISNULL(LNABR2) THEN LNABR2 = 0 END IF IF ISNULL(LNMAY1) THEN LNMAY1 = 0 END IF IF ISNULL(LNMAY2) THEN LNMAY2 = 0 END IF IF ISNULL(LNJUN1) THEN LNJUN1 = 0 END IF IF ISNULL(LNJUN2) THEN LNJUN2 = 0 END IF SELECT SUM(RETSEM) INTO :LNSEGSEM FROM FA_EMPLEADOS WHERE ESTADO = 'A'; IF ISNULL(LNSEGSEM) THEN LNSEGSEM = 0 END IF IF LNENE1 <= 0 OR LNENE2 <= 0 OR LNFEB1 <= 0 OR LNFEB2 <= 0 OR LNMAR1 <= 0 OR LNMAR2 <= 0 OR LNABR1 <= 0 OR LNABR2 <= 0 OR LNMAY1 <= 0 OR LNMAY2 <= 0 OR LNJUN1 <= 0 OR LNJUN2 <= 0 THEN MESSAGEBOX('FONDO DE AHORRO', 'NO SE HAN PROCESADO TODAS LAS QUINCENAS DEL SEMESTRE',StopSign!, OK!) RETURN; ELSE IF LNSEGSEM <> 0 THEN m_general.m_procesos.m_prestamosemestral.enabled = FALSE MESSAGEBOX('FONDO DE AHORRO', 'YA SE PROCESO EL RETIRO SEMESTRAL',StopSign!, OK!) RETURN; END IF END IF M_GENERAL.M_PROCESOS.M_PRESTAMOSEMESTRAL.ENABLED = FALSE OPEN XPROCESAR; FETCH XPROCESAR INTO :LCNUMEMP, :LNAHORRO; DO WHILE SQLCA.SQLCODE = 0 UPDATE FA_EMPLEADOS SET RETSEM = :LNAHORRO WHERE NUMEMP = :LCNUMEMP; FETCH XPROCESAR INTO :LCNUMEMP, :LNAHORRO; LOOP CLOSE XPROCESAR; COMMIT; MESSAGEBOX('FONDO DE AHORRO', 'PRESTAMO SEMESTRAL DEL EJERCICIO REALIZADO DE MANERA SATISFACTORIA',StopSign!, OK!) RETURN; El procedimiento LIQEJE esta encargado de realizar el cálculo de la liquidación del ejercicio. En este procedimiento tenemos que lo que se aplica es el cálculo de una anualidad pagadera n periodos a una tasa de interés i. Los detalles que aquí se cuidan es que ya se haya procesado la quincena 24, que el ejercicio no se haya calculado previamente y que sólo se aplique a empleados con estado activo. REAL LNXMES, LNINTERE, LNMONTOS, LNAHORRO, LNAPOQUI, LNENE1, LNENE2, LNFEB1, LNFEB2, LNMAR1, LNMAR2, LNABR1, LNABR2, LNMAY1, LNMAY2, LNJUN1, LNJUN2 REAL LNJUL1, LNJUL2, LNAGO1, LNAGO2, LNSEP1, LNSEP2, LNOCT1, LNOCT2, LNNOV1, LNNOV2, LNDIC1, LNDIC2 STRING LCNUMEMP INTEGER CUANTOS, LNNUMPER DECLARE XREVISAR CURSOR FOR SELECT NUMEMP, AHORRO FROM FA_EMPLEADOS WHERE ESTADO = 'A' ORDER BY NUMEMP; LNXMES = 0 SELECT SUM(DIC002) INTO :LNXMES FROM FA_AHORRO WHERE ESTADO = 'A'; IF ISNULL(LNXMES) OR LNXMES = 0 THEN MESSAGEBOX('FONDO DE AHORRO', 'LA LIQUIDACION DEL EJERCICIO NO ES POSIBLE, FALTAN QUINCENAS POR PROCESAR',StopSign!, OK!) RETURN; END IF LNXMES = 0 SELECT SUM(INTERE) INTO :LNXMES FROM FA_EMPLEADOS WHERE ESTADO = 'A'; IF ISNULL(LNXMES) THEN LNXMES = 0 END IF IF LNXMES > 1 THEN MESSAGEBOX('FONDO DE AHORRO', 'LA LIQUIDACION YA FUE REALIZADA',StopSign!, OK!) RETURN; END IF OPEN XREVISAR; FETCH XREVISAR INTO :LCNUMEMP, :LNAHORRO; DO WHILE SQLCA.SQLCODE = 0 LNAPOQUI = 0 LNMONTOS = 0 LNINTERE = 0 LNENE1 = 0 LNENE2 = 0 LNFEB1 = 0 LNFEB2 = 0 LNMAR1 = 0 LNMAR2 = 0 LNABR1 = 0 LNABR2 = 0 LNMAY1 = 0 LNMAY2 = 0 LNJUN1 = 0 LNJUN2 = 0 LNJUL1 = 0 LNJUL2 = 0 LNAGO1 = 0 LNAGO2 = 0 LNSEP1 = 0 LNSEP2 = 0 LNOCT1 = 0 LNOCT2 = 0 LNNOV1 = 0 LNNOV2 = 0 LNDIC1 = 0 LNDIC2 = 0 SELECT ENE001, ENE002, FEB001, FEB002, MAR001, MAR002, ABR001, ABR002, MAY001, MAY002, JUN001, JUN002, JUL001, JUL002, AGO001, AGO002, SEP001, SEP002, OCT001, OCT002, NOV001, NOV002, DIC001, DIC002 INTO :LNENE1, :LNENE2, :LNFEB1, :LNFEB2, :LNMAR1, :LNMAR2, :LNABR1, :LNABR2, :LNMAY1, :LNMAY2, :LNJUN1, :LNJUN2, :LNJUL1, :LNJUL2, :LNAGO1, :LNAGO2, :LNSEP1, :LNSEP2, :LNOCT1, :LNOCT2, :LNNOV1, :LNNOV2, :LNDIC1, :LNDIC2 FROM FA_AHORRO WHERE NUMEMP = :LCNUMEMP; IF LNENE1 <> 0 THEN LNAPOQUI = LNENE1 LNNUMPER = 24 ELSEIF LNENE2 <> 0 THEN LNAPOQUI = LNENE2 LNNUMPER = 23 ELSEIF LNFEB1 <> 0 THEN LNAPOQUI = LNFEB1 LNNUMPER = 22 ELSEIF LNFEB2 <> 0 THEN LNAPOQUI = LNFEB2 LNNUMPER = 21 ELSEIF LNMAR1 <> 0 THEN LNAPOQUI = LNMAR1 LNNUMPER = 20 ELSEIF LNMAR2 <> 0 THEN LNAPOQUI = LNMAR2 LNNUMPER = 19 ELSEIF LNABR1 <> 0 THEN LNAPOQUI = LNABR1 LNNUMPER = 18 ELSEIF LNABR2 <> 0 THEN LNAPOQUI = LNABR2 LNNUMPER = 17 ELSEIF LNMAY1 <> 0 THEN LNAPOQUI = LNMAY1 LNNUMPER = 16 ELSEIF LNMAY2 <> 0 THEN LNAPOQUI = LNMAY2 LNNUMPER = 15 ELSEIF LNJUN1 <> 0 THEN LNAPOQUI = LNJUN1 LNNUMPER = 14 ELSEIF LNJUN2 <> 0 THEN LNAPOQUI = LNJUN2 LNNUMPER = 13 ELSEIF LNJUL1 <> 0 THEN LNAPOQUI = LNJUL1 LNNUMPER = 12 ELSEIF LNJUL2 <> 0 THEN LNAPOQUI = LNJUL2 LNNUMPER = 11 ELSEIF LNAGO1 <> 0 THEN LNAPOQUI = LNAGO1 LNNUMPER = 10 ELSEIF LNAGO2 <> 0 THEN LNAPOQUI = LNAGO2 LNNUMPER = 9 ELSEIF LNSEP1 <> 0 THEN LNAPOQUI = LNSEP1 LNNUMPER = 8 ELSEIF LNSEP2 <> 0 THEN LNAPOQUI = LNSEP2 LNNUMPER = 7 ELSEIF LNOCT1 <> 0 THEN LNAPOQUI = LNOCT1 LNNUMPER = 6 ELSEIF LNOCT2 <> 0 THEN LNAPOQUI = LNOCT2 LNNUMPER = 5 ELSEIF LNNOV1 <> 0 THEN LNAPOQUI = LNNOV1 LNNUMPER = 4 ELSEIF LNNOV2 <> 0 THEN LNAPOQUI = LNNOV2 LNNUMPER = 3 ELSEIF LNDIC1 <> 0 THEN LNAPOQUI = LNDIC1 LNNUMPER = 2 ELSE LNAPOQUI = LNDIC2 LNNUMPER = 1 END IF IF LNAPOQUI <= 0 THEN CONTINUE; END IF LNMONTOS = LNAPOQUI * ((((1 + LATASA) ^ LNNUMPER) - 1) / LATASA) LNINTERE = LNMONTOS - LNAHORRO UPDATE FA_EMPLEADOS SET INTERE = :LNINTERE WHERE NUMEMP = :LCNUMEMP; FETCH XREVISAR INTO :LCNUMEMP, :LNAHORRO; LOOP CLOSE XREVISAR; COMMIT; MESSAGEBOX('FONDO DE AHORRO', 'LIQUIDACION DEL EJERCICIO REALIZADA DE MANERA SATISFACTORIA',StopSign!, OK!) RETURN; Pruebas de funcionalidad. Actualmente el salario mínimo vigente en el Distrito Federal es de $48.67 Dado que el tope anual del fondo es el 13% del diez veces el salario mínimo anualizado tenemos que: TFA = 48.67 * 365 * 10 * 0.13 = 23093.915 Si tenemos en cuenta que nos interesa el tope mensual, basta dividir entre 12 y nuestro tope para el fondo de ahorro mensual sería de TFM = 23093.915 / 12 = 1924.49292 Que para efectos prácticos podemos considerar como TFM = 1924.50 Ahora bien, nuestros periodos de acumulación son quincenales, por tanto el tope que realmente buscamos es: TFQ = 1924.50 / 2 = 962.25 Ahora veamos los ejemplos de los siguientes empleados Un empleado que gana 14 mil pesos mensuales tendría el siguiente cálculo FondoQuincenal = 14000 * 0.13 * 0.5 = 910.00 Dado que no rebasa el tope y si suponemos que estuvo durante todo el año el tendría un ahorro de: Ahorro Anual = 910 * 24 = 21840.00 Si aplicamos la fórmula obtenida para el monto acumulado suponiendo una tasa de 1.2% efectiva quincenal tendríamos que Monto = 910*(((1+0.012)24 – 1 ) / 0.12) = 910 * ((1.3314728 – 1 ) / 0.12 ) = Monto = 910 * 27.6227336 = 25136.6876 Si un empleado con el mismo sueldo entrara justo a la mitad del año entonces tendríamos que su cálculo sería el siguiente: Fondo Quincenal = 14000 * 0.13 * 0.5 = 910.00 Nuevamente no es topado por lo tanto su ahorro proporcional al año sería Ahorro Anual = 910 * 12 = 10920 Si obtenemos ahora el cálculo de los interese bajo el mismo esquema que el anterior obtenemos que: Monto = 910*(((1+0.012)12 – 1 ) / 0.12) = 910 * ((1.15389462 – 1 ) / 0.12 ) = Monto = 910 * 12.824552 = 11670.3423 Otro caso es el de un trabajador con un sueldo de 7000 pesos que laboró durante todo el año. El cálculo sería el siguiente: Fondo Quincenal = 7000 * 0.13 * 0.5 = 455.00 Como tampoco es topado su ahorro llevado al año sería Ahorro Anual = 455 * 24 = 10920 De donde al obtener su ahorro más intereses tenemos Monto = 455*(((1+0.012)24 – 1 ) / 0.12) = 910 * ((1.3314728 – 1 ) / 0.12 ) = Monto = 455 * 27.6227336 = 12568.3438 Finalmente tenemos que el tope mensual de fondo de ahorro es 1924.50, por tanto toda aquella persona cuyo salario exceda Salario = 1924.50 / 01.3 = 14803.8462 Deberá quedar automáticamente topada a 1924.50 mensual de fondo o en nuestro caso a 962.25 ya que el ahorro es quincenal. Observemos la siguiente tabla Aportación quincenal Periodos Ahorro Anual Interés Ganado 910.00 24 21840.00 3296.6876 455.00 12 10920.00 750.3423 455 24 10920.00 1648.3438 Como podemos observar a ahorro idénticos no corresponde la misma cantidad de interés ya que la mayor permanencia en el plan nos permite reinvertir lo aportado y así generar mayor utilidad. En el caso de los participantes uno y tres notamos que si se mantiene la proporción, esto debido a que su inversión fue al mismo plazo y con la misma tasa de interés. Con esto demostramos que la solución propuesta se adecua a nuestras necesidades y resuelve de una forma eficiente el problema que se planteo. Capítulo VI Consideraciones finales. Una vez concluida la aplicación se debe de considerar el ambiente donde se vaya a montar a producción. Esta aplicación ha sido diseñada para ser fácilmente transportada de una base de datos a otra, basta con modificar la cadena de conexión y contar con el controlador (nativo u ODBC) apropiado para que sin ningún problema se trabaje en una base de datos o en otra. Así, podemos decir que lo mismo funciona en Access, que en SQL server, Informix u Oracle. Los requisitos mínimos esperados para que la aplicación funcione como cliente, es un equipo Pentium con memoria de 256 kb y monitor a color con un ambiente de sistema operativo windows 95 o superior. Es importante señalar que la documentación del sistema consta de una descripción de las tablas en un archivo de formato Erwin, esto con el objeto de poder crear las tablas de manera automática en cualquier base de datos. Se anexan los archivos JPG con las imágenes de los iconos utilizados, la librería fonaho para que en caso de que se quieran cambiar las cadenas de conexión o los límites del fondo de ahorro así como el salario mínimo se puedan realzar y compilar para generar el ejecutable sin ningún problema. El ejecutable se está creando en una versión de Power Builder versión 7.0 Conclusiones La razón principal que me llevó a realizar este trabajo fue la de presentar de una forma muy sencilla una aplicación que combinara el aspecto financiero básico de la teoría de las matemáticas financieras para resolver un problema común que se presenta todos los días en el ámbito laboral. No es definitivamente la manera más ortodoxa de atacar el problema y sin embargo nos muestra que con un mínimo de elementos, si se saben mezclar se obtiene soluciones efectivas. Considero que la aportación principal de este trabajo es mostrar como debemos en nuestro papel de profesionistas llevar a la aplicación diaria todo aquello que día a día aprendemos en las aulas. En un ambiente tan competido no basta con llegar y hacer las cosas bien, hoy tenemos que innovar. Con esta forma de cálculo, mi pretensión fue mostrar como un ejercicio teórico puede consolidarse como una práctica en el mercado. Hoy estamos mostrando que nuestro perfil en el mercado no es sólo de un profesional que aplica técnica de manera eficaz, sino que vamos más allá y buscamos rellenar esas lagunas legales en beneficio de los integrantes de nuestra sociedad, ya que si bien, la ley indica que se debe de hacer una distribución de intereses en los fondos de ahorro o las cajas, no regula esta distribución, por tanto es nuestra obligación buscar esa repartición de manera equitativa y justa. Además de lo anterior podemos concluir que la computación va cada vez más de la mano con nuestro desarrollo como profesionistas, es una herramienta básica la cual nos permite de manera sencilla realizar cálculos, verificaciones masiva y dar un valor agregado a nuestro trabajo ya que cada día es más accesible y sencilla su programación. Sin embargo no debemos de olvidar que es sólo una herramienta, el valor de nuestro trabajo está en todo aquello que aprendimos en las aulas y la aplicación de esto será lo que realmente nos coloque como verdaderos profesionistas. Se ha mencionado la posibilidad de hacer uso de este programa para una caja de ahorro porque estructuralmente el funcionamiento es muy similar, bastaría con hacer un par de adecuaciones (como los topes) y obtendríamos una aplicación para administrar una caja de ahorro. Apéndice Base de datos Campo. Unidad mínima de información dentro de una base de datos. Se conoce igualmente como columna. Debe de contener siempre el mismo tipo de datos. Registro. Agrupación de campos que conservan siempre el mismo orden de campos. Se conocen como renglones. PK. Una llave primaria se define como el valor único de una columna en una tabla. FK. Se dice que un campo es llave foránea cuando su valor está restringido por el valor de una llave primaria en otra tabla. Tipo de dato. Característica del dato que se inserta en las columnas, puede ser numérico, fecha, carácter u objeto. Ejecutable. Archivo de aplicación que realiza la interfaz entre el sistema operativo y el usuario final. Se dice del programa que lleva a cabo las funciones o procedimientos. Power Builder. Lenguaje visual de programación que sirve para crear aplicaciones cliente servidor. Archivos JPG. Documentos que contienen imágenes. Librerías Pbl. Archivos fuente de power builder donde se guardan las instrucciones de un programa. Erwin. Paquetería que nos ayuda a genera código para crear estructuras de bases de datos en diferentes plataformas. 1 Bibliografía Ley del Seguro Social. Ley del Impuesto Sobre la Renta. Matemáticas Financieras Benjamín de la Cueva Limusa Matemáticas Financieras Lincoyán Portus Govinden McGraw Hill Data Base Architecture and Administration David Austin Vijay Venkatachalam Oracle Inc. Oracle 9i Administración de bases de datos César Pérez Mc Graw Hill Foundations of Power Builder Smith Schaad Mc Graw Hill Power Builder Dejan Popovic Prentice Hall Portada Índice Introducción Capítulo I. El Ahorro como Beneficio Empresarial Capítulo II. Anualidades Capítulo III. Definición de un Sistema para Solucionar el Problema. Capítulo IV. Selección Base de Datos y
Compartir