ANÁLISIS Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA EL CÁLCULO Y ADMINISTRACIÓN DE CRÉDITOS, EN EL SECTOR FINANCIERO. Fabián Andrés Cuervo Fajardo Código 533012 FUNDACIÓN UNIVERSITARIA KONRAD LORENZ FACULTAD DE INGENIERÍA DE SISTEMAS BOGOTÁ 2008 ANÁLISIS Y DESARROLLO DE UN SISTEMA DE INFORMACIÓN PARA EL CÁLCULO Y ADMINISTRACIÓN DE CRÉDITOS, EN EL SECTOR FINANCIERO. PROYECTO DE GRADO PARA OBTENER EL TITULO DE INGENIERO DE SISTEMAS Fabián Andrés Cuervo Fajardo Director: Ingeniero Gustavo Herazo FUNDACIÓN UNIVERSITARIA KONRAD LORENZ FACULTAD DE INGENIERÍA DE SISTEMAS BOGOTÁ 2008 1 Nota de aceptación ____________________________ ____________________________ ____________________________ Presidente del jurado ______________________________ Jurado ______________________________ Jurado Bogotá _____________________ (DD-MM-AAAA) 2 Dedicado a mis padres Lucio y Rosa Elena por su apoyo y dedicación en mi proceso formativo 3 AGRADECIMIENTOS Agradezco a todas las personas que me han acompañado en todo el proceso educativo a través de este largo camino de estudio y dedicación, agradecimiento especialmente a: Ingeniero Gustavo Herazo Pérez, por su gran colaboración en todo el proceso de análisis y diseño del presente proyecto de investigación. Ingeniero Javier Ávila, gracias a su dedicación, experiencia y conocimientos, que con criterios éticos y profesionales, compartió en estos últimos semestres. Ingeniero Germán Vargas, por su entusiasmo, optimismo y su desempeño en la labor docente, generando en los estudiantes deseos de continuar y gusto por la carrera. Paula y Fidgeral, compañeros que en el transcurso de los años fueron apoyo y compañía en este largo camino. 4 TABLA DE CONTENIDO 1 ASPECTOS DE LA INVESTIGACIÓN ........................................................ 8 1.1 DESCRIPCIÓN DEL PROBLEMA ........................................................... 8 1.2 JUSTIFICACIÓN DEL PROYECTO DE INVESTIGACIÓN ...................... 9 1.2.1 Razones sociales ................................................................................. 9 1.2.2 Razones económicas .......................................................................... 9 1.2.3 Razones técnicas ................................................................................. 9 1.2.4 Razones organizacionales ................................................................ 10 1.2.5 Razones metodológicas .................................................................... 10 1.3 DELIMITACIÓN ...................................................................................... 10 1.3.1 Espacial .............................................................................................. 10 1.3.2 Cronología .......................................................................................... 10 1.3.3 Conceptual ......................................................................................... 11 1.3.4 Financiera ........................................................................................... 11 1.3.5 Metodológica ...................................................................................... 11 1.4 OBJETIVOS ........................................................................................... 13 1.4.1 General ............................................................................................... 13 1.4.2 Específicos ......................................................................................... 13 1.5 PROPÓSITO........................................................................................... 14 2 MARCO TEORICO .................................................................................... 16 2.1 ANTECEDENTES................................................................................... 16 2.1.1 Históricos ........................................................................................... 16 2.1.1.1 Los Inicios: La Roma Imperial ....................................................... 16 2.1.1.2 La Edad Media ................................................................................. 17 2.1.1.3 El renacimiento y el desarrollo del capitalismo ........................... 17 2.1.2 Legales ............................................................................................... 18 2.1.3 Investigativos ..................................................................................... 19 2.2 BASES TEÓRICAS ................................................................................ 22 2.2.1 Definición de Crédito ......................................................................... 22 2.2.2 Tipos de Créditos............................................................................... 23 2.2.2.1 Crédito de libre inversión ............................................................... 23 2.2.2.2 Leasing Habitacional ...................................................................... 23 2.2.2.3 Créditos de estudios ...................................................................... 23 2.2.2.4 Créditos hipotecarios ..................................................................... 24 2.2.3 Interés ................................................................................................. 24 5 2.2.3.1 Interés simple e interés compuesto .............................................. 24 2.2.4 Amortización ...................................................................................... 25 2.2.5 Rentabilidad ....................................................................................... 25 2.3 TEORÍAS GENÉRICAS BASADAS EN LA INGENIERÍA ..................... 25 2.3.1 Productos del Modelo ....................................................................... 27 2.4 MARCO CONCEPTUAL ........................................................................ 28 2.4.1 Metas a alcanzar ................................................................................ 28 2.4.3 Enfoque .............................................................................................. 28 2.4.4 Necesidades a satisfacer .................................................................. 28 2.4.5 Controles ............................................................................................ 29 2.4.5 Servicios ............................................................................................. 29 3 DISEÑO METODOLÓGICO ...................................................................... 30 3.1 TIPO DE INVESTIGACIÓN DESCRIPTIVA ........................................... 30 3.2 ANÁLISIS ............................................................................................... 30 3.2.1 Metodología para el análisis ............................................................. 30 3.2.1.1 Análisis orientado a objetos .......................................................... 30 3.2.1.2 Business Process Management .................................................... 31 3.3 DISEÑO .................................................................................................. 32 3.3.1 Diseño Lógico .................................................................................... 32 3.3.2 Diseño Lógico .................................................................................... 65 3.3.2.1 Diseño base de datos ..................................................................... 65 3.3.2.1.1 Aspectos físicos de la base de datos ........................................ 65 4 ANÁLISIS DE RESULTADOS Y CONCLUSIONES ................................. 71 4.1 CODIFICACIÓN DEL PROGRAMA ....................................................... 71 4.2 BANCO DE PRUEBAS .......................................................................... 71 4.2.1 Pruebas de función............................................................................ 72 4.2.2 Pruebas modulares............................................................................ 73 4.2.3 Pruebas de Documentación y Ayuda ............................................... 74 4.2.4 Pruebas de Seguridad y Control ...................................................... 75 4.2.5 Pruebas de Calidad............................................................................ 75 4.3 INFORME DE PRUEBAS ....................................................................... 76 5 CONCLUSIONES ...................................................................................... 83 6 RECOMENDACIONES.............................................................................. 85 BIBLIOGRAFÍA ............................................................................................ 86 6 INTRODUCCIÓN Actualmente en la red se encuentra una gran gama de simuladores de cálculo de Intereses, de calculadoras intereses y software de Créditos, los cuales están limitados a solo calcular los Créditos dependiendo del interés, la tasa y desplegar los resultados del monto total a pagar. Anexo a estas aplicaciones se encontró varios formatos de Excel en los cuales también se tiene la funcionalidad de calcular los Créditos, los cuales trabajan con macros y subprogramas realizados en Visual Basic. Todo este software que se ha encontrado en la búsqueda de aplicaciones que realicen cálculos y administración de Créditos son software propietario y demos de programas los cuales tienen funcionalidad limitada y son de alto costo, excepto las calculadoras las cuales son un servicio que se presta de forma gratuita. Ahora en la actualidad existen empresas que comercializan con créditos y no se posee con el software necesario para el cálculo y la administración de esto más que en Hojas de cálculo, y aplicaciones que no cubren totalmente sus necesidades, ya que no acompañan todo el proceso del Crédito, solo el cálculo de las cuotas y los intereses del Crédito con las limitantes de la hoja de cálculo y de los conocimientos de la persona que opera estos cálculos. 7 1. ASPECTOS DE LA INVESTIGACIÓN 1.1. DESCRIPCIÓN DEL PROBLEMA Las exigencias del mercado y los nuevos modelos económicos que nacen a diario, exigen de las compañías prestadoras de servicios financiaros, la utilización de varias clases de software hechos a la medida, dependiendo de los tipos de crédito que ofrezcan, que les permitan un mejor manejo y desempeño de los intereses a cobrar, así mismo, que permitan administrar los pagos que se realizan de la deuda. En la Internet se pueden encontrar distintas clases de calculadoras de intereses y plantillas en Excel, sin embargo, estos sistemas no contribuyen a la elaboración, manejo de datos y clasificación de resultados, necesarios y vitales para administración eficiente de la información, haciendo difícil la labor de una empresa, pues las bases de este software son clásicas y simples. Presentando este problema, se pudo evidenciar en la investigación, que es muy poco el software que ofrecen estas facilidades de forma integral, además, que lo pueda hacer a bajos costos. Esto implica a las empresas que solicitan este tipo de software, que deban desarrollarlo por sus propios medios o que lo tengan que comprar ya desarrollado, exponiéndose a adquirir algo que en un futuro sea obsoleto, o peor, que no ofrezca lo que realmente necesita la entidad. El fin del desarrollo de este software, es ofrecer a las empresas prestadoras de servicios crediticios, la administración eficiente y a la medida, del cálculo de los créditos otorgados y ejecutados, el porcentaje de los intereses que se deben cobrar y el monto y tiempo de los pagos. 8 1.2 JUSTIFICACIÓN DEL PROYECTO DE INVESTIGACIÓN La importancia de este proyecto radica en que ofrece múltiples soluciones para las entidades prestadoras de servicios financieros, que van desde administrar eficientemente la lista de clientes, hasta calcular las tasas de interés a las que están sometidos los créditos. 1.2.1 Razones sociales Entre las razones sociales que existen para la elaboración de este proyecto, se encuentran la importancia de suplir las necesidades de las empresas que ofrecen créditos. También brindar soluciones prácticas, confiables y eficientes de un modelo novedoso que permitirá gestionar y administrar los recursos manejados a través de créditos otorgados a los usuarios que los soliciten. 1.2.2 Razones económicas Se busca crear el software con el fin de que las compañías que lo soliciten puedan adquirirlo a bajos costos, ya que entre los pocos sistemas que se encuentran en el mercado, los precios son elevados comparados con el que se ofrece en este proyecto. 1.2.3 Razones técnicas La aplicación podrá ser utilizada en equipos con plataforma Windows, en el lenguaje Visual Basic .NET 2005 y con bases de datos Microsoft SQL Server 2005 Express Edition, versión freeware, ya que estas herramientas son de la misma casa de software, son compatibles entre ellas y son populares a nivel computacional en la actualidad. 9 1.2.4 Razones organizacionales Las compañías que cuenten con un software como este, tendrán la posibilidad, de agilizar los procesos, de tener una estricta organización de sus clientes, de saber con exactitud los créditos otorgados, los montos cancelados, las tasas de interés a las que están sometidos los créditos, entre otros aspectos. Así mismo, tendrán la facilidad de adquirirlo, pues los bajos costos del software, son competitivos frente a los demás que se encuentran en el mercado. 1.2.5 Razones metodológicas Realizar un software basándose en el cálculo de intereses y amortización de cuotas, teniendo como partida la matemática financiera y la teoría de cálculo de tasas de interés simple, compuesto y nominal, como base fundamental para cumplir el propósito principal del proyecto. 1.3 DELIMITACIÓN 1.3.1 Espacial El proyecto se realiza en las instalaciones de la Fundación Universitaria Konrad Lorenz, bajo la coordinación del área de investigaciones, en donde se entregaran actas semanales para la asignatura Proyecto de Grado. 1.3.2 Cronología El proyecto se realiza en un lapso de tiempo de 4 meses, en los cuales se cumplirá con cada una de las fases a desarrollar en el tiempo determinado 10 para la entrega total del proyecto. Teniendo presente los entregables periódicos al área de investigación. 1.3.3 Conceptual En el proyecto se realiza la investigación de matemáticas financieras enfatizándose en el cálculo de intereses, rentabilidad y amortización de cuotas, así mismo se realizara un estudio del manejo de la base de datos Microsoft SQL Server 2005 Express Edition, ya que es una herramienta nueva para el equipo de trabajo. 1.3.4 Financiera Para la realización del proyecto se contará con los siguientes recursos físicos y tecnológicos: • Equipo de computo $ 1’500.000 • Conexión Internet $ 160.000 • Papelería $ 160.000 • CD’s $ 20.000 • Servicio público – Luz $ 48.000 • Otros Gastos personales $100.000 1.3.5 Metodológica A nivel metodológico se trabajó el modelo de Análisis y Diseño orientado a Objetos debido a la orientación del proyecto y también por el lenguaje en el cual se realizará, en todo el CVDS (Ciclo de Vida de Desarrollo de Software), dado que esta metodología tiene un conjunto de disciplinas que desarrollan y 11 modelan el software y facilitan la construcción de sistemas complejos a partir de componentes. Para la construcción y el modelado de todos los componentes del proyecto a nivel de software se utilizó la herramienta UML, [1] las siglas corresponden a Lenguaje Unificado de Modelado (Unified Modeling Language), la definición de UML se puede obtener descomponiendo las palabras que la conforman. Lenguaje: como todo lenguaje cuenta con una sintaxis y una semántica, por lo tanto al realizar cualquier modelo es necesario conocer una serie de reglas de cómo es el manejo de los elemento s en el lenguaje Modelado: con él se modelan los aspectos del mundo real, los cuales permiten la correcta interpretación y entendimiento de este. Unificado: es unificado ya que agrupa varias técnicas de modelado en un solo modelo. El proyecto se desarrollo a nivel de programación siguiendo un patrón de diseño, modelo vista controlador, el cual es bastante acorde con el modelo de Análisis y diseño orientado a objetos. Patrón Modelo-Vista-Controlador [2] Este patrón se utiliza en diseño de aplicaciones con sofisticadas interfaces. El fin es realizar un diseño que separe la vista del modelo, esto para aprovechar la reusabilidad de código, de tal forma que el cambio en las vistas no afecten el modelo del negocio y el modelo de datos, por otra parte al utilizar la herramienta .Net para el proyecto, en futuro se podrá llevar a la web por medio de ASP.Net, utilizando la misma controladora y el mismo modelo, para entender mejor cada uno de los componentes del modelo, se describen a continuación. 12 El modelo es el responsable de: Acceder a la capa de almacenamiento de datos. Es ideal que el modelo sea independiente del sistema de almacenamiento. Define las reglas de negocio. El controlador es responsable de: Recibe los eventos de entrada Contiene reglas de gestión de eventos, tanto de la vista como del modelo. Las vistas son responsables de: Recibir datos del modelo y mostrarlos al usuario, así como hacer el proceso contrario recibir los datos del usuario y registrarlos en el modelo para que sean procesados y registrados, 1.4 OBJETIVOS 1.4.1 General Desarrollar un Sistema de Información, para el cálculo y administración de préstamos monetarios en el sector financiero, utilizando un modelo metodológico de Ingeniería de Software, que haga más óptimos los procesos organizacionales en las empresas. 1.4.2 Específicos 1.4.2.1 Realizar el levantamiento de información necesario, para la gestión del proyecto a nivel conceptual, metodológico, jurídico y operacional, con respecto al cálculo de intereses y administración de créditos financieros. 13 1.4.2.2 Elaborar el análisis y diseño respectivo de la aplicación, con los lineamientos metodológicos tanto de software, como del modelado del negocio 1.4.2.3 Desarrollar la aplicación con estándares abiertos, utilizando la metodología adecuada, con fases definidas. 1.4.2.4 Realizar la fase de pruebas de forma adecuada, con los parámetros necesarios para asegurar el correcto funcionamiento de la aplicación tanto funcional como operativo. 1.4.2.5 Realizar la documentación respectiva a los manuales de instalación, técnico y de usuario. 1.4.2.6 Documentar todos los procesos desarrollados en el proyecto de acuerdo a las normas de investigación que están descritas en el método científico. 1.5 PROPÓSITO El propósito de este proyecto, es conseguir que las empresas prestadoras de servicios financieros en el país, tengan un software hecho a la medida de sus necesidades, que les permita administrar de forma eficiente los recursos otorgados a sus clientes por medio de créditos. Así mismo, se busca consolidar al interior de las compañías, la importancia de tener una buena administración de sus datos por medio de un programa económico que ofrece todas las ventajas de un sistema que esté identificado 14 en otro nicho de mercado, y que por supuesto tenga unos costos más elevados. 15 2. MARCO TEÓRICO 2.1 ANTECEDENTES 2.1.1. Históricos A través de la Historia se ha realizado todo tipo de manejo e intercambio de dinero y bienes, siempre orientado a tener una ganancia o una rentabilidad al realizar esta negociación, aun yendo más atrás en la historia se sabe del intercambio de elementos perteneciente a las culturas, partiendo de las necesidades que se presentaban en la época. A continuación se mencionara algunos hechos principales en el trayecto de los créditos y el manejo de tasas de Interés. 2.1.1.1 Los inicios: la roma imperial [3] la historia de las tasas de interés se encuentra relacionada con la creación del dinero y así mismo de los bancos como segunda medida. Las tasas de interés desde esta época estuvieron ligadas a realizar un receso en la actividad económica en el presente para obtener una recompensa económica a futuro, lo que se conoce en esta época como ahorro, para la población en esta época era bastante llamativo tener ganancias de su dinero solo con el hecho de dejar de consumir ahora, desde la roma imperial, en el tema, hay dos conceptos que son bastante importantes el capital y el tiempo, aparte de la tasa de interés con la cual se realiza el préstamo, otro factor primordial es la ganancia que tiene el banco y los gastos operativos que este representen. 16 En la roma antigua los intereses no se encontraban regulados como en esta época, pero cabe resaltar que existía la banca comercial y los préstamos a interés, y retomando lo primero en ocasiones el deudor y su familia quedaban sumidos a la esclavitud, o estas deudas eran cobradas con la vida, para satisfacción personal del prestamista, al no tener el dinero de reembolso. En nuestra época este hecho es el que conocemos como usura y hay leyes que amparan a las personas que son acreedores de un préstamo, pero en la época de la roma antigua era practicado de los nobles con los plebeyos sin ningún tipo de ley que protegiera el plebeyo y si con todos los derechos sobre el noble. 2.1.1.2 La edad media [3] Aunque a principios de la edad media la iglesia se vio apática al préstamo de dinero, llego a considerarlo hasta un pecado y tachaba el oficio de prestamista como bajo, pero en la época debido a la guerra y los grandes costos que esta generaba, la iglesia empezó a ceder espacio para los préstamos, ya que varios de ellos Iban dirigidos a la iglesia, de hecho con el amparo de la iglesia se hicieron una gran cantidad de fortunas. De esta forma y con el apoyo de la iglesia surgió la justificación ideológica para la burguesía, desde ese entonces, prestar dinero y trabajar en industrias para obtener un beneficio era una actividad digna y con amparo de la ley 2.1.1.3 El renacimiento y el desarrollo del capitalismo [3] Con el capitalismo, las tasas de interés fueron un papel bastante importante en las transacciones regulares que se realizaban en esta época, ya que el crédito y el ahorro funcionaron en torno de la acumulación de capital, desde este entonces y con los antecedentes de la roma antigua y la edad media, el estado comenzó a regular las tasas de interés, de esta forma 17 tomo control el gobierno sobre los prestamos y los intereses siendo la primer potencia en el capitalismo. 2.1.2 Legales En la actualidad el Gobierno Nacional tiene establecidas varias normas que hablan sobre el manejo de la captación de dinero de las personas por parte de las entidades bancarias en Colombia, entre las que se encuentra: Ley 45 de 1990 [4] Por la cual se expiden normas en materia de intermediación financiera, se regula la actividad aseguradora, se conceden unas facultades y se dictan otras disposiciones. Ley 35 de 1993 [4] Por la cual se dictan normas generales y se señalan en ella los objetivos y criterios a los cuales debe sujetarse el Gobierno Nacional para regular las actividades financiera, bursátil y aseguradora y cualquier otra relacionada con el manejo, aprovechamiento e inversión de recursos captados del público y se dictan otras disposiciones en materia financiera y aseguradora. Ley 546 de 1999 [4] Por la cual se dictan normas en materia de vivienda, se señalan los objetivos y criterios generales a los cuales debe sujetarse el Gobierno Nacional para regular un sistema especializado para su financiación, se crean instrumentos de ahorro destinado a dicha financiación, se dictan medidas relacionadas con los impuestos y otros costos vinculados a la construcción y negociación de vivienda y se expiden otras disposiciones. 18 Ley 964 de 2005 [4] Por la cual se dictan normas generales y se señalan en ellas los objetivos y criterios a los cuales debe sujetarse el Gobierno Nacional para regular las actividades de manejo, aprovechamiento e inversión de recursos captados del público que se efectúen mediante valores y se dictan otras disposiciones. Ley 510 de 1999 [5] Por la cual se dictan disposiciones en relación con el sistema financiero y asegurador, el mercado público de valores, las Superintendencias Bancaria y de Valores y se conceden unas facultades. Ley 550 de 1999 [6] Por la cual se establece un régimen que promueva y facilite la reactivación empresarial y la reestructuración de los entes territoriales para asegurar la función social de las empresas y lograr el desarrollo armónico de las regiones y se dictan disposiciones para armonizar el régimen legal vigente con las normas de esta ley. 2.1.3 Investigativos Otro software que se encuentran en el mercado a nivel mundial, presentan características similares a las que en este proyecto se están desarrollando. [9] Credit2Win Profesional 2007, este paquete de software es bastante completo para la compañía que requiera llevar el control de los créditos realizados, No los calcula, se basa en el ingreso de la información al sistema y la generación de múltiples reportes, en el momento solo está disponible en el idioma Ingles, la parametrización es bastante compleja. Es bastante completo en cuanto a los reportes se refiere, posee la opción de crear reportes personalizados por el usuario, el uso del software es complejo, no 19 es compatible con otros paquetes similares, la base de datos está inmersa en el paquete, su fin no es solo el manejo de créditos sino generadores de cartas de crédito, manejo de contactos, tareas de gerencia, planificación horaria y contactos, por lo cual pierde el énfasis de la amortización y rendimiento en créditos financieros, la versión gratuita viene completa, pero solo dura 7 días y es necesario comprarlo para seguirlo usando. Como se ve en la figura se llevan la parametrización de la compañía los individuos, los créditos, los contactos, los eventos, las tareas y los usuarios. Anexo a esto la seguridad es mínima para el usuario Tipo: Shareware, Costo: $495.00 US, Tamaño: 12415 K. 20 [10] LoanSpread, es un software completo para el cálculo de tasas de intereses, se acerca bastante al presente proyecto, al tomar diversas tasas por periodos, según un valor indicado para el cálculo de estos, maneja diversas tasas de interés, tomando como base el valor de la tasa ingresada al sistema, es una herramienta bastante completa en cuanto al cálculo de intereses, pero no administra los créditos que se realizan, ni lleva el control de los pagos, está disponible solo en ingles, su uso es bastante sencillo, la versión demo solo da la posibilidad de usarlo 10 veces, luego hay que comprarlo, no tiene opción de reportes, la información que se obtiene solo se pude imprimir de forma plana, no tiene ningún tipo de seguridad anexa al software, en la imagen se realizo un crédito de $ 5000000, tasa de interés de 8,75%, con calculo mensual y para pagos en 10 meses los cual arrojo la cuota de 520270,59. Y muestra las tasas cercanas ascendente y descendente, como los valores cercanos en múltiplos de mil, lo cual no es muy útil para la administración solo para la simulación de un crédito. Tipo: Shareware, Costo: $29.95 US, Tamaño: 1889 K 21 El proyecto que se está realizando tiene como propósito combinar las funcionalidades de estos dos y generar las amortizaciones de créditos con gran cantidad de opciones y la administración de este a futuro y con pagos completos de cuotas. 2.2 BASES TEÓRICAS 2.2.1 Definición de Crédito [11] El crédito es un préstamo de dinero que el Banco o una entidad otorga a su cliente, con el compromiso de que en el futuro, el cliente devolverá dicho 22 préstamo en forma gradual (mediante el pago de cuotas) o en un solo pago y con un interés adicional que compensa al Banco o a la entidad por todo el tiempo que no tuvo ese dinero. 2.2.2 Tipos de Créditos En el proyecto se manejan diversos tipos de créditos y se tiene la ventaja de poder parametrizarlos según la necesidad de la entidad que este prestando el servicio. Aunque generalmente se diferencia solamente entre créditos personales y créditos hipotecarios, también se distinguen los siguientes tipos de créditos: 2.2.2.1 Crédito de libre inversión Son utilizados al gusto del solicitante o para suplir una necesidad, no tiene un fin en común, por lo general la cantidad de dinero no es muy alta debido a que no siempre es para generar alguna rentabilidad. 2.2.2.2 Leasing Habitacional Es la opción de financiar la compra de un inmueble o un activo en caso de las compañías, mediante un contrato de arrendamiento financiero con opción de compra. 2.2.2.3 Créditos de estudios Son Créditos dirigidos a estudiantes para financiar matriculas universitarias, estudios de postgrado o estudio en el extranjero. Por lo general el pago de estos créditos se realiza al finalizar los estudios y devengar un salario el aspirante al crédito. También en ocasiones este crédito se renueva dependiendo de las calificaciones del aspirante. 23 2.2.2.4 Créditos hipotecarios El Crédito hipotecario se caracteriza porque, aparte de la garantía personal, se ofrece como garantía la hipoteca de un bien inmueble. En caso de no devolver el Crédito la entidad financiera pasaría a ser la propietaria de la vivienda. 2.2.3 Interés Corresponde a la renta que se paga por el uso de un capital durante un determinado tiempo. I=P–F Donde: P= capital, I= interés, F= cantidad acumulada Esta cantidad recibe diferente nombres comerciales como interés, utilidad, variación del dinero en el tiempo, rentabilidad, entre otros. 2.2.3.1 Interés simple e interés compuesto Para el proyecto el concepto de interés simple y compuesto son fundamentales para la amortización de las cuotas debido al tiempo y al tipo de pago que se va a realizar, ya que con esta información se realizara los cálculos de los interés basándose en estos tipos de interés, El interés simple es el que se obtiene cuando los intereses producidos, durante todo el tiempo del crédito, se deben únicamente al capital inicial. Por su parte, el interés compuesto es el que se obtiene cuando al capital se le suman periódicamente los intereses producidos. Así al final de cada periodo el capital que se tiene es el capital anterior más los intereses producidos por ese capital durante dicho periodo. 24 En el desarrollo se aplica los intereses compuestos para realizar el cálculo de las cuotas de los créditos por medio de la siguiente formula. S = P(1+in) Donde: P= valor crédito, i= tasa de interés, n= numero de cuotas En el proyecto esta es la formula base para el cálculo de intereses, en la formula, el valor de n está reflejado en meses, por lo cual para realizar el cálculo es necesario expresarlo en días 2.2.4 Amortización [12] Una amortización es una disminución gradual o extinción gradual de cualquier deuda durante un periodo de tiempo. La amortización de un crédito se da cuando se realiza al prestamista un reembolso de dinero prestado en un cierto plazo y con tasas de interés. 2.2.5 Rentabilidad Cuando se menciona le termino de rentabilidad se hace referencia más a las ganancias que a las pérdidas generadas por el crédito, en términos del proyecto son ganancias en dinero o la remuneración recibida por el capital invertido. 2.3 TEORÍAS GENÉRICAS BASADAS EN LA INGENIERÍA Para el desarrollo del proyecto se utilizo un motor de base de Microsoft SQL Server 2005 Express Edition, versión freeware, donde se realizo la base de datos para el almacenamiento de la información, relacionada con los 25 créditos, los clientes, las cuotas y al parametrización que se realiza en el sistema. La aplicación se realizó para plataformas Microsoft. El lenguaje de programación que se utilizo para el desarrollo de la aplicación es Visual Basic .NET. Microsoft SQL Server 2005 Express Edition El proyecto se realizo con esta base de datos por motivos de compatibilidad con el lenguaje de programación, por otra parte por motivos de trabajar con una herramienta poderosa y nueva para el equipo de programación, desde el comienzo del proyecto se desconocía el manejo de la herramienta. [13] SQL Server Express es un producto de base de datos gratis y fácil de usar, basado en tecnología SQL Server 2005. Está diseñado para brindar una simplicidad de uso, permitiendo instalaciones rápidas. La facilidad de uso comienza con una instalación robusta de la interface del usuario grafica (GUI) que guía al usuario a través del proceso de instalación. Las herramientas GUI que se encuentran incluidas sin cargo con SQL Server Express, incluyen Express Manager (versión Alfa) y Computer Manager. Estas herramientas simplifican las operaciones de bases de datos. El diseño y desarrollo de aplicaciones de bases de datos se vuelve más sencillo con la integración de Visual Studio. Con todas estas ventajas de interface de usuario, en el transcurso del proyecto se presentó la necesidad de ejecutar sentencias en SQL, por complejidad en la realización de procesos. Visual Studio .NET [14] Visual Studio .NET es un conjunto completo de herramientas de desarrollo para la construcción de aplicaciones Web ASP, servicios Web XML, aplicaciones para escritorio y aplicaciones móviles. Visual Basic .NET, 26 Visual C++ .NET, Visual C# .NET y Visual J# .NET utilizan el mismo entorno de desarrollo integrado (IDE), que les permite compartir herramientas y facilita la creación de soluciones en varios lenguajes. Asimismo, dichos lenguajes aprovechan las funciones de .NET Framework, que ofrece acceso a tecnologías clave para simplificar el desarrollo de aplicaciones Web ASP y servicios Web XML. Visual Basic .NET 2005 El proyecto se desarrollo con este lenguaje de programación, debido a la metodología de análisis y diseño orientado a objetos, Visual Basic es la opción más óptima para la realización del proyecto, por su robustez y documentación dirigida a los desarrolladores. [15] Microsoft Visual Basic 2005 es la evolución del lenguaje Visual Basic que está diseñado para generar de manera productiva aplicaciones con seguridad y orientado a objetos. Visual Basic permite centrar el diseño en Windows, el Web y dispositivos móviles. Como con todos los lenguajes que tienen por objetivo Microsoft .NET Framework, los programas escritos en Visual Basic se benefician de la seguridad y la interoperabilidad de lenguajes. 2.3.1 Productos del Modelo Al finalizar con el proyecto se deben entregar los siguientes productos: • Aplicación • Documentación del proceso de desarrollo • Manual del Usuario • Documentación de la herramienta • Documentación de las bases de datos • Estado del proyecto • Aspectos a mejorar 27 2.4 MARCO CONCEPTUAL 2.4.1 Metas a alcanzar • Lograr el desarrollo de un software completo que permita a las entidades que tienen como base de su negocio la otorgación de créditos financieros a usuarios, el completo manejo de datos importantes como la administración de los créditos, el total de intereses, entre otros. • Facilitar la adquisición de un software de bajo costo que cumpla con todos los requerimientos necesarios para poder administrar de manera eficiente los recursos que tienen que ver con el otorgamiento de créditos. • Ofrecer una opción más en el mercado que pueda competir contra otros sistemas avanzados, que tenga como valor agregado, el desarrollo a la medida de las necesidades de la empresa. 2.4.1 Enfoque El presente proyecto de investigación tiene un enfoque de tipo puntual, ya que su delimitación solo contempla la gestión de créditos, intereses sobre el crédito, fechas de pago, administración de clientes y pagos de cuotas completas. 2.4.2 Necesidades a satisfacer Este desarrollo solucionará los inconvenientes que tienen las empresas a la hora de manejar todo lo referente a los créditos, pagos, clientes e intereses. 28 Así mismo, solucionará los inconvenientes que presentan las entidades a la hora de conseguir un software que supla realmente las necesidades que tienen al pie de la letra. 2.4.3 Servicios • Ingresar, actualizar y eliminación de los clientes • Ingresar, actualizar y eliminar tasas de interés • Ingresar, actualizar y eliminar requisitos por créditos • Ingresar, actualizar y eliminar tipos de crédito • Ingresar, actualizar y eliminar documentación requerida por créditos • Registrar y eliminación de créditos • Simulación del crédito • Visualización del crédito • Pago de cuota completa 2.4.4 Controles Para poder acceder al sistema, el software solicitará un usuario y una clave, al cual valida entre dos perfiles de usuario y el administrador, el administrador tiene todos los derechos sobre toda la funcionalidad de la aplicación y el asesor, perfil que no tendrá acceso al formulario de usuarios y tampoco podrá parametrizar el modulo, pero si podrá consultar la parametrización existente. 29 3. DISEÑO METODOLÓGICO 3.1 TIPO DE INVESTIGACIÓN DESCRIPTIVA El Presente proyecto de investigación es de tipo descriptivo, ya que en la investigación se busca describir y especificar las propiedades más importantes de los procesos computacionales para lograr requerimientos óptimos y acordes con las necesidades del cálculo y el manejo de tasas de interés, la amortización de créditos y la administración de créditos por parte de la empresa. Adicionalmente en la investigación, se describirán las características que identifican los diferentes elementos y componentes de la investigación. 3.2 ANÁLISIS 3.2.1 Metodología para el análisis 3.2.1.1 Análisis orientado a objetos El presente proyecto de investigación se trabaja con metodología AOO, en donde se brindan los medios para mejorar la reutilización de los componentes software. El objetivo de la programación orientada a objetos es permitir que los sistemas informáticos sean fácilmente extendidos para mejorar su funcionalidad, o reutilizados en otros sistemas que requieran sus servicios. 30 Las características que integran la Programación orientada a objetos son la: abstracción, encapsulación, polimorfismo y herencia. La herramienta de diseño será UML, Lenguaje de Modelamiento Unificado (UML - Unified Modeling Language) es un lenguaje gráfico para visualizar, especificar y documentar cada una de las partes que comprende el desarrollo de software. La definición de UML se encuentra más detallada en el numeral 1.3.5 Delimitación metodológica, del presente documento. Se utilizan los siguientes diagramas para su conceptualización: • Diagrama de Casos de Uso: mostrando los procesos relevantes en un escenario con sus respectivos actores. • Diagrama de secuencia: Muestran a los diferentes objetos y las relaciones que pueden tener entre ellos, los mensajes que se envían entre ellos. • Diagrama de actividades: Es un caso especial del diagrama de estados. Muestra el flujo entre los objetos. Se utilizan para modelar el funcionamiento del sistema y el flujo de control entre objetos. • Diagramas de clases: muestran las diferentes clases que componen un sistema y cómo se relacionan unas con otras. Los diagramas de clases son diagramas estáticos porque muestran las clases, junto con sus métodos y atributos, así como las relaciones estáticas entre ella 3.2.1.2 Business Process Management Para mejor análisis del ciclo de negocio utilizado al realizar créditos financieros se utilizo la metodología empresarial BMP, así mismo se quiere representar como es el proceso de créditos en el sistema de información. [16] Business Process Management es la metodología empresarial cuyo 31 objetivo es mejorar la eficiencia a través de la gestión sistemática de los procesos de negocio, que se deben modelar, automatizar, integrar, monitorear y optimizar de forma continúa. A través del modelado de las actividades y procesos puede lograrse un mejor entendimiento del negocio y muchas veces esto presenta la oportunidad de mejorarlos. La administración de los procesos permite asegurar que los mismos se ejecuten eficientemente, y la obtención de información que luego puede ser usada para mejorarlos. Es a través de la información que se obtiene de la ejecución diaria de los procesos, que se puede identificar posibles ineficiencias en los mismos, y actuar sobre las mismas para Asesor comercial administrador optimizarlos. Crear usuarios Parametrizar aplicacion Ver disponibilidad Ejecutar simulación Aprobar credito Registrar pago Recibir solicitud Informar documentación Consultar cuotas Reporte a cliente SI Cancelar crédito Cliente Pagar cuotas 3.3 Aceptar credito Solicitar crédito NO DISEÑO 3.3.1 Diseño Lógico El sistema a desarrollar va a aplicar el DOO (Diseño Orientado a Objetos). Para tal fin presentaremos los siguientes diagramas: 32 Diagrama de Casos de Uso: Muestran los casos de uso, actores y sus relaciones. Muestra quien puede hacer que y relaciones existentes entre acciones (casos de uso). Son muy importantes para modelar y organizar el comportamiento del sistema. Describen qué hace el sistema desde el punto de vista de un observador externo. Ponen énfasis en qué hace el sistema, no en cómo lo hace. 33 Caso de uso análisis y desarrollo de un sistema de información para le calculo y la administración de créditos a nivel financiero 34 Caso de Uso: parametrizar aplicación. Nombre: Parametrizar aplicación. Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: Representa la parametrización que se debe realizar al modulo, antes de ser usado por el asesor. Actores: Administrador. Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. Flujo Normal: El administrador parametriza el sistema, según la normalización y las necesidades del modulo. Flujo Alternativo: El sistema realiza la validación de la parametrización, con respecto a los datos parametrizados. Pos condiciones: Los Datos han sido almacenados en el sistema Se puede continuar con el registro de clientes y el registro de los créditos. 35 Caso de Uso: Registrar usuarios Nombre: Registrar usuarios Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: Representa el ingreso de usuarios al sistema, los cuales tienen, una contraseña y un perfil de asesor o de administrador para interactuar con el sistema. Actores: Administrador. Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. Flujo Normal: El administrador ingresa los usuarios al sistema, según las necesidades del modulo y los campos a solicitar. Flujo Alternativo: El sistema realiza la validación de con respecto a los usuarios ingresados y a los usuarios que ya están registrados en el sistema para no permitir duplicidad. Pos condiciones: Los Datos han sido almacenados en el sistema Se puede continuar con el registro de clientes y el registro de los créditos. 36 Caso de Uso: Registrar cliente Nombre: Registrar cliente Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: Representa el ingreso de clientes al sistema. Con todos los datos necesarios para la gestión del crédito e información necesaria de un cliente. Actores: Asesor comercial Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. Flujo Normal: El asesor comercial ingresa los clientes al sistema, registrando todos los campos solicitados por el modulo. Flujo Alternativo: El sistema realiza la validación de los campos con respecto al tipo de dato que se debe registrar. Pos condiciones: Los Datos han sido almacenados en el sistema Se puede continuar con el registro de los créditos y la simulación. 37 Caso de Uso: Solicitar Crédito Nombre: Solicitar Crédito Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: El cliente solicita el crédito, según las necesidades de este, especificando, cantidad, numero de cuotas, fecha inicial de pago, tipo de pago, el asesor comercial le informa las tasas de crédito, verifica disponibilidad e informa al cliente los documentos necesarios para el crédito Actores: Cliente, asesor comercial Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. La aplicación debe estar parametrizada El cliente debe estar registrado en el sistema Los documentos del tipo de crédito deben estar registrados en el sistema Flujo Normal: El asesor comercial ingresa los datos del crédito para su registro, el crédito queda en estado registrado. Flujo Alternativo: El sistema realiza la validación de los campos con respecto al tipo de dato que se debe registrar al sistema. Pos condiciones: Los Datos han sido almacenados en el sistema Se realizar la simulación y se cambia de estado el crédito. 38 Caso de Uso: Ejecutar simulación Nombre: Ejecutar simulación Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: El asesor ejecuta la simulación del crédito para informar al cliente las cuotas del crédito y las fechas de pago Actores: Asesor comercial Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. El crédito debe estar registrado. Flujo Normal: El asesor comercial ejecuta la simulación del crédito, si es necesario especificar el valor de la cuota, la ingresa en el campo Flujo Alternativo: El sistema realiza la validación de los campos con respecto al tipo de dato que se debe registrar y la validación de los datos necesarios para realizar la simulación. Pos condiciones: Los Datos han sido almacenados en el sistema Se realiza la consulta de las cuotas del crédito y la aprobación o rechazo de este. 39 Caso de Uso: Aprobar cancelar crédito Nombre: Aprobar cancelar crédito Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: El asesor comercial realiza la aprobación del crédito, cuando el cliente entregue los documentos necesarios e informe del interés de tomar el creidito Actores: Asesor comercial Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. El crédito debe estar registrado, simulado. Flujo Normal: El asesor comercial realiza el proceso de cabio de estado del crédito cambiando de estado “registrado” a estado “cancelado” o “aprobado” Flujo Alternativo: El sistema realiza la validación de los campos con respecto al tipo de dato que se debe registrar. Pos condiciones: Los Datos han sido almacenados en el sistema Se realiza el proceso de registrar pago 40 Caso de Uso: Registrar pago Nombre: Registrar pago Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: El cliente realiza el pago en la entidad bancaria o directamente del pago e informa al asesor comercial del pago realizado, el asesor comercial ingresa al formulario de registrar pago, selecciona el crédito y la cuota y registra el pago ejecutando el proceso Actores: Asesor comercial, cliente Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. El crédito debe estar registrado, simulado y aprobado. Flujo Normal: El asesor comercial realiza el proceso de pago de la cuota según la información del pago por parte del cliente o la realización del pago en la entidad. Flujo Alternativo: El sistema realiza la validación de la cuota a pagar Pos condiciones: Los Datos han sido almacenados en el sistema Se realiza el proceso del pago de cuotas siguientes. 41 Caso de uso parametrizar modulo Caso de uso: Parametrizar el modulo. Nombre: Parametrizar el modulo Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: Muestra la parametrización necesaria antes de usar el modulo para generar simulaciones de créditos, aprobación de créditos y pago de cuotas. Es necesario parametrizar los tipos de crédito y la disponibilidad de dinero por cada crédito, las tasas de interés que se van a manejar y por último todos los documentos y la cantidad a solicitar para la aprobación de los créditos. Actores: Administrador Pre condiciones: El sistema debe estar Instalado. La conexión con la base de datos debe estar correctamente. Flujo Normal: 42 El administrador parametriza los tipos de créditos. El administrador parametriza las tasas a calcular. El administrador parametriza los documentos a solicitar. Flujo Alternativo: El sistema debe ser parametrizado con anterioridad por el administrador, para realizar una correcta simulación del crédito. Pos condiciones: La parametrización queda registrada en el sistema. 43 Cado de uso solicitar credito Solicitar crédito informar tipo de credito «uses» Solicitar valor «uses» verificar disponibilidad Asesor comercial ingresar tasa de interes anual del creito «uses» informar cantidad de cuotas Cliente «uses» Informar tipo de pago «uses» Ejecutar simulación Caso de uso: Solicitar crédito Nombre: Solicitar crédito Autor: Fabián Andrés Cuervo Fajardo Fecha: 20/03/2008 Descripción: Muestra la solicitud del crédito, por parte del cliente y el registro del mismo 44 crédito por parte del asesor comercial, quien luego de recibir toda la información necesaria para el crédito lo procesa para obtener la simulación de los valores y las fechas de la amortización del crédito solicitado. Actores: Asesor comercial, cliente. Pre condiciones: El sistema debe estar Parametrizado. Flujo Normal: El cliente solicita el crédito. El asesor comercial ingresa al sistema la información del cliente y del crédito que está solicitando. Ejecuta la simulación Entrega al cliente la información de forma verbal y el reporte del crédito. Flujo Alternativo: El sistema debe ser parametrizado con anterioridad por el administrador, para realizar una correcta simulación del crédito. La información debe estar completa, para la correcta simulación del crédito Pos condiciones: La simulación queda registrada en el sistema, para aprobar el crédito. El cliente queda registrado en el sistema para futuros trámites. Diagrama de secuencia: Muestran a los diferentes objetos y las relaciones que pueden tener entre ellos, los mensajes que se envían entre ellos. Son dos diagramas diferentes, que se puede pasar de uno a otro sin pérdida de información, pero que nos dan puntos de vista diferentes del sistema. En resumen, cualquiera de los dos es un Diagrama de Interacción. 45 Parametrizar tasas En el diagrama se observa como es el procedimiento para la parametrización de las tasas en el sistema, el actor encargado de esta parametrización es el administrador ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto tasas, llenándolo para así llevarlo a la clase tasas_bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión ejecuta el comando y cierra la conexión. 46 Parametrizar requisitos En el diagrama se observa como es el procedimiento para la parametrización de los requisitos en el sistema, requisitos los cuales dependen de los créditos y los documentos que deben haber sido ingresados con anterioridad en el sistema, el actor encargado de esta parametrización es el administrador ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto requisitos, llenándolo para así llevarlo a la clase requisitos_bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión ejecuta el comando y cierra la conexión. 47 Parametrizar documentos form_parametrizardocumentos Creditos documentos documentos_bd conexion-bd iddocumento descripción Cantidad Administrador BIngresarDocumento_Click_1() registar_documentos() setdocumentos() documento setdocumentos() ejecutar() abrirconexion() cerrarconexion() En el diagrama se observa como es el procedimiento para la parametrización de los documentos en el sistema, el actor encargado de esta parametrización es el administrador ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto documentos, llenándolo para así llevarlo a la clase documentos_bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión, ejecuta el comando y cierra la conexión. 48 Parametrizar clientes En el diagrama se observa como es el procedimiento para la parametrización de los clientes en el sistema, el actor encargado de esta parametrización es el asesor comercial ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto clientes, llenándolo para así llevarlo a la clase clientes_bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión, ejecuta el comando y cierra la conexión. 49 Registrar créditos En el diagrama se observa como es el procedimiento para la el sistema, para el registro de los créditos el modulo se debe encontrar totalmente parametrizado, el actor encargado de esta parametrización es el asesor comercial ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto registrocredito, llenándolo para así llevarlo a la clase registrocredito bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión, ejecuta el comando y cierra la conexión. 50 Parametrizar usuarios En el diagrama se observa como es el procedimiento para la parametrización de los usuarios en el sistema, el actor encargado de esta parametrización es el administrador ingresando la información por formulario, recibiéndola información la clase controladora, evaluando la solicitud y continuando con el objeto usuarios, llenándolo para así llevarlo a la clase usuarios_bd insertarlo en la base de datos a través de la clase conexión_bd, esta clase abre la conexión, ejecuta el comando y cierra la conexión. 51 Validación de usuarios seguros form_ingreso usuarios_bd conexion bd usuario password BIngresar_Click_1() usuario upd_activoNO() updateactivoNO() ejecutar() abrirconexion() cerrarconexion() validaringreso() validaringreso() getusuarioid() Consultar abrirconexion() 1 boolean: ingresar upd_activo() boolean: ingresar dataset cerrarconexion() updateactivo() ejecutar() abrirconexion() 1: Este procedimiento lo realiza en un maximo 3 veces de no ingresar los datos correctos validadando los datos con el objeto usuario cerrarconexion() El usuario al ingresar al sistema ingresa en los campos el usuario y la contraseña, al ejecutar el botón de “Ingresar”, el sistema actualiza la tabla de usuarios en el campo activo con el estado “No”, luego valida con el usuario y la contraseña que el usuario exista o no en el sistema, este ciclo lo realiza 3 veces en el cual se al ingresar el proceso actualiza en la base de datos el campo activo en estado “SI”. 52 Simular crédito El diagrama representa la simulación del crédito dependiendo de las cuotas y las tasas. 53 Diagrama de Clases: Un diagrama de clases es un tipo de diagrama estático que describe la estructura de un sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de análisis y diseño de los sistemas, donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargaran del funcionamiento y la relación entre uno y otro. Parametrizar tasas 1 creditos +tas : tasas +tas_bd : tasas_bd +registar_tasas() +gettasa() +gettasaid() +del_tasas() +udp_tasas() <<local>> 1 1 1 1 tasas_bd +conexion : conexion_bd +settasa() +gettasa() +gettasaid() : tasas +deltasa() +updatetasa() <<parametter>> 1 1 <<local>> 1 1 tasas 1 conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() frm_parametrizartasas +idtasa : String +descripcion : String +valor : Double +fecha : Date +settasas() +Getidtasa() : String +Getdescripcion() : String +Getvalor() : Double +Getfecha() : Date +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +parametrizartasas_Load() +BEliminarTasa_Click() +BActualizar_Click() +CActualizarTasa_SelectedIndexChanged() Parametrizar documentos 55 Parametriza requisitos 1 creditos <<local>> 1 1 +req : requisitos +req_bd : requisito_bd +registar_tipocredito() +getrequisito() +getrequisitosidcredito() +getrequisitoid() +del_requisito() +udp_requisito() frm_parametrizarrequisitos +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +parametrizarrequisitos_Load() +BEliminarrequisitos_Click() +BIngresarrequisito_Click() +CActualizarrequisito_SelectedIndexChanged() +BIngresarrequisitos() 1 1 requisito_bd +conexion : conexion_bd +setrequisito() +getrequisito() +getrequisitoid() : requisitos +delrequisito() +updaterequisito() 1 1 1 <<local>> requisitos 1 conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() <<parametter>> 1 +idrequisito : String +iddocumento : String +idcredito : String +formalaboral : String +setrequisitos() +Getiddocumento() : String +Getidcredito() : String +Getidrequisito() : String +getformalaboral() : String 56 Parametrizar tipo crédito 1 creditos <<local>> 1 +tcr : tipocredito +tcr_bd : tipocredito_bd +registar_tipocredito() +gettipocredito() +gettipocreditoid() +del_tipocredito() +udp_tipocredito() 1 frm_parametrizartipocredito +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +parametrizartipocredito_Load() +BEliminarrtipocredito_Click() +BIngresartipocredito_Click() +CActualizartipocredito_SelectedIndexChanged() +Bingresartipocredito() 1 1 tipocredito_bd +conexion : conexion_bd +settipocredito() +gettipocredito() +gettipocreditoid() : tipocredito +deltipocredito() +updatetipocredito() 1 1 1 <<local>> tipocredito 1 conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() <<parametter>> 1 +idcredito : String +descripcion : String +presupuesto : Double +setrequisitos() +Getidcredito() : String +Getdescripcion() : String +Getpresupuesto() : Double 57 Simular crédito e Ingresar cuotas 1 creditos +cuo : cuotas +cuo_bd : cuota_bd -sim : simular credito +registar_cuotas() +getcuotas() +getcuotas() +getcuotasid() +del_cuotas() +udp_cuotas() +simularcredito() 1 frm_simulacion +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +parametrizarcuotas_Load() +BIngresarcuotas() 1 cuota_bd 1 +conexion : conexion_bd +setcuotas() +getcuotas() +getcuotaid() : cuotas +delcuota() +updatecuota() 1 <<parametter>> <<local>> 1 1 1 1 simular credito 1 cuotas conexion_bd +idcredito : String +pago : String +capital : Double +interes : Double +valcuota : Double +saldo : Double +mora : Double -fecha : Date +setcuota() +Getidcredito() : String +Getpago() : String +Getcapital() : Double +GetValcuota() : Double +Getsaldo() : Double +Getmora() : Double +Getfecha() : Date +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() 1 <<parametter>> +cuota : Integer +dias : Integer +diasdate : Integer +capital : Double +interesperiodo : Double +intreres : Double +valcuota : Double +saldo : Double +mora : Double -fechapago : Date +simualrcredito() 1 1 1 1 tasas tasas_bd +conexion : conexion_bd +settasa() +gettasa() +gettasaid() : tasas +deltasa() +updatetasa() 1 <<local>> +idtasa : String +descripcion : String +valor : Double +fecha : Date +settasas() +Getidtasa() : String +Getdescripcion() : String +Getvalor() : Double +Getfecha() : Date 58 Parametrizar clientes 1 creditos <<local>> 1 1 +cli : clientes +cli_bd : cliente_bd +registar_clientes() +getclientes() +getclientes() +getclientesid() +del_clientes() +udp_clientes() frm_parametrizarclientes +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +parametrizarclientes_Load() +BIngresarclientes() +BActualizarclientes() +BEliminarclientes() +CActualizarcliente_SelectedValueChanged() 1 1 cliente_bd +conexion : conexion_bd +setcliente() +getcliente() +getclienteid() : clientes +delcliente() +updatecliente() 1 1 <<local>> 1 1 clientes conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() <<parametter>> 1 +idcliente : String +nombrebusqueda : String +primernombre : String +segundonombre : String +primerapellido : String +segundoapellido : String +direccion : String +telefono : String +movil : String +fax : String +email : String +vehiculo : String +vivienda : String +profesion : String +formalaboral : String +fechanacimiento : Date +setcliente() +Getidcliente() : String +Getnombrebusqueda() : String +getprimerapellido() : String +getsegundoapellido() : String +getprimernombre() : String +getsegundonombre() : String +getdireccion() : String +gettelefono() : String +getmovil() : String +getfax() : String +getemail() : String +getvehiculo() : String +getvivienda() : String +getprofesion() : String +getformalaboral() : String +Getfechanacimiento() : Date 59 Registrar Créditos 1 creditos +rcr : registrocredito +rcr_bd : registrocredito_bd +registrocredito() +getregistrocredito() +getregistrocreditoid() +del_registrocredito() +udp_registrocredito() <<local>> 1 frm_registrocredito 1 1 1 registrocredito_bd +conexion : conexion_bd +setregistrocredito() +getregistrocredito() +getregistrocreditoid() : registrocredito +delregistrocredito() +updateregistrocredito() +cred +cargando : Boolean +llenardatagrid() +llenarcombocox() +registrocredito_Load() +Bregistrocredito() +BActualizarregistrocredito() +BEliminarregistrocredito() +Cregistrocredito_SelectedValueChanged() 1 1 registrocredito 1 <<local>> 1 <<parametter>> conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() 1 +idcredito : String +cliente : String +nombre : String +tasa : String +estado : String +tipocredito : String +periodo : String +formapago : String +valorsolicitado : Integer +valoraprobado : Integer +numerocuotas : Integer +fechainicial : Date +fechafinal : Date +fechapresupuesto : Date +tea : Double +setregistrarcredito() +Getidcredito() : String +Getformapago() : String +Getcliente() : String +getnombre() : String +gettasa() : String +getperiodo() : String +gettipocredito() : String +getestado() : String +Gettea() : Double +Getvalorsolicitado() : Integer +Getvaloraprobado() : Integer +getnumerocuotas() : Integer +Getfechafinal() : Date +Getfechainicial() : Date +Getfechapresupuesto() : Date 60 Diagrama de clases Usuarios frm_principal +cred : creditos +ClientesToolStripMenuItem_Click() +ExamenesToolStripMenuItem_Click() +SoliToolStripMenuItem_Click() +ExamenesClienteToolStripMenuItem_Click() +ConsultarExamenesPorPacienteToolStripMenuItem_Click() +RechazarAprobarSolicitudToolStripMenuItem_Click() +UsuariosToolStripMenuItem_Click() +principal_FormClosed() +ResultadosExamenesToolStripMenuItem_Click() +ConsultarSolicitudesToolStripMenuItem_Click() frm_Ingreso 1 1 +cred : creditos +ingresar : Boolean -contador : Integer +BIngreso_Click() 1 1 creditos 1 <<local>> 1 1 +usr : usuarios +usrbd : usuarios_bd +registar_usuarios() +getusuarios() +getusuairoactivo() +getusuarioid() +del_clientes() +udpactivo() +udpactivono() frm_usuario 1 usuarios_bd 1 +conexion : conexion_bd +setusuario() +getusuario() +getusuarioid() : usuarios +delusuario() +updateactivo() +updateactivoNO() +getusuarioactivo() <<local>> 1 <<parametter>> 1 1 usuarios 1 conexion_bd +con : Object +abrirconexion() +cerraconexion() +ejecutar() +consultar() +cre : creditos +cargando : Boolean +llenardatagrid() +llenarcombocox() +usuarios_Load() +BIngresarusuario() +BEliminarclientes() 1 +usuario : String +nombre : String +apellido : String +Identificacion : String +password : String +perfil : String +setusuario() +Getusuario() : String +Getnombre() : String +getapellido() : String +getidentificacion() : String +getpassword() : String +getperfil() : String 61 Diagramas de colaboración: Esencialmente es un diagrama que muestra interacciones organizadas alrededor de los roles. A diferencia de los diagramas de secuencia, los diagramas de colaboración muestran explícitamente las relaciones de los roles. Por otra parte, un diagrama de colaboración no muestra el tiempo como una dimensión aparte, por lo que resulta necesario etiquetar con números de secuencia tanto la secuencia de mensajes como los hilos concurrentes. Muestra cómo las instancias específicas de las clases trabajan juntas para conseguir un objetivo común. Implementa las asociaciones del diagrama de clases mediante el paso de mensajes de un objeto a otro. Dicha implementación es llamada "enlace". 62 Diagrama de colaboración simulación del crédito form simulacion 1. sim c ula ion 2.1. getregistrocreditoid() Creditos 2.2 s 3. Consultar registrarcredito im u lar c red it o() . ge 4.1 ai d ttas () Conexion bd tasasbd simulacion 4 .3 s 2. 4. cuotas as ot cu t e .s etc uo tas cuotasbd 63 Diagrama de colaboración ingreso usuarios u us utar ) d( ioi ar jec 3.1. e et .g 2 .2 64 3.3.2 Diseño lógico 3.2.2.1 Diseño Base de Datos 3.2.2.1.1 Aspectos físicos de la base de datos clientes PK registrocredito idcliente PK,FK1 nombrebusqueda primernombre segundonombre primerapellido segundoapellido Direccion telefono movil fax email vehiculo vivienda profesion fechanacimiento formalaboral tasas idcredito cliente nombrebusqueda valorsolicitado valoraprobado fechapresupuesto fechainicial fechafinal tipocredito numerocuotas periodo tea tasa estado formapago PK idtasa FK1 descripcion fecha valor idcredito tipocreditos PK,FK1 idcredito FK2 descripcion presupuesto idrequisito cuotas usuarios idcredito requisitos documentos PK PK idrequisito FK1 iddocumento formalaboral idcredito iddocumento descripcion cantidad PK usuario password perfil activo nombre apellido identificacion cuota fechapago capital interes valcuota saldo mora pago Entidades Tipos de crédito tipocreditos PK,FK1 idcredito FK2 descripcion presupuesto idrequisito 65 Clientes Registro crédito registrocredito PK,FK1 idcredito cliente nombrebusqueda valorsolicitado valoraprobado fechapresupuesto fechainicial fechafinal tipocredito numerocuotas periodo tea tasa estado formapago 66 Cuotas Tasas Documentos Requisitos 67 Usuarios usuarios PK usuario password perfil activo nombre apellido identificacion Tipos de datos y longitud Clientes idcliente nombrebusqueda primernombre segundonombre primerapellido segundoapellido Direccion telefono Móvil Fax Email vehiculo vivienda profesion fechanacimiento formalaboral char(10) Text Text Text Text Text Text Text Text Text Text Text Text Text Datetime Text NOT NULL NULL NOT NULL NULL NOT NULL NULL NOT NULL NOT NULL NULL NULL NULL NULL NULL NULL NULL NULL Cuotas idcredito Cuota fechapago capital interes char(10) NULL int NULL datetime NULL numeric (18, 2) NULL numeric (18, 2) NULL 68 valcuota Saldo Mora Pago numeric numeric numeric Text (18, 2) NULL (18, 2) NULL (18, 2) NULL NULL Documentos Iddocumento descripcion Cantidad char(10) Text Int NOT NULL NULL NOT NULL Registrocredito Idcredito Cliente Nombrebusqueda Valorsolicitado Valoraprobado fechapresupuesto Fechainicial Fechafinal Tipocredito Numerocuotas Periodo Tea Tasa Estado Formapago char(10) char(10) Text Int Int datetime datetime datetime Text Int Text Float Text Text Text NOT NULL NOT NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL Requisitos Idrequisito Iddocumento Formalaboral Idcredito char(10) char(10) text char(10) NOT NULL NULL NULL NULL 69 Tasas Idtasa descripcion Fecha Valor char(10) Text datetime Float NOT NULL NULL NULL NOT NULL Tipocreditos idcredito descripcion presupuesto char(10) Text Int NOT NULL NULL NOT NULL Usuarios usuario password Perfil Activo nombre apellido identificacion char(10) Text Text char(10) Text Text Text NOT NULL NULL NULL NULL NULL NULL NULL 70 4. ANÁLISIS DE RESULTADOS Y CONCLUSIONES 4.1 CODIFICACIÓN DEL PROGRAMA Es el proceso de trascripción del diseño funcional realizado en UML (Diagramas de Casos de Usos, Diagramas de Secuencia, Diagramas de Actividades, Diagramas de Colaboración y diagramas de Estado) a Visual Basic .NET, para la creación de las interfaces, diseño y pruebas del monitoreo del aplicativo. Anexo al paquete de instalación, en el CD de entrega formal, se encuentra el código fuente de la aplicación, el instalador de SQL server 2005 Express, el script en SQL de la base de datos y el archivo .bak para ser instalado e importado en SQL. También se encuentra en el CD el ejecutable de la aplicación para correrlo sin necesidad de instalar el paquete. 4.2 BANCO DE PRUEBAS Las pruebas realizadas al desarrollo al finalizar fueron pruebas de caja negra debido a la carencia de un agente de pruebas de funcionamiento del desarrollo y una entidad de implementación del desarrollo, donde se harían pruebas de integración, pero no se llego a este punto del proceso del ciclo de vida de desarrollo de software, el formato que se muestra en las pruebas realizadas fue facilitado por el docente Gustavo Herazo, el cual ha sido aplicado en otros procesos de investigación y en construcción de software [17] Las pruebas de caja negra se centran en lo que se espera de un módulo, en intentan encontrar casos en que el módulo no se atiene a su especificación. Por 71 ello se denominan pruebas funcionales, y el encargado de las pruebas se limita a suministrarle datos como entrada y estudiar la salida, sin preocuparse de lo que pueda estar haciendo el módulo por dentro. Las pruebas de caja negra están especialmente indicadas en aquellos módulos que van a ser interfaz con el usuario. 4.2.1 Pruebas de función Objetivo: Verificar que cada una de las funciones cumpla con el propósito para el cual fueron diseñados. Criterio de decisión: De acuerdo a los requerimientos internacionales que exige el modelo del CVDS, dentro de su primera prueba de funcionalidad, exige la verificación de la validación de los caracteres de digitación, entre ellos están las letras, los números y los espacios en blanco en cada uno de los campos que se consideran obligatorios en el diseño de los respectivos formularios. PRUEBAS SI La función de validación de letras es correcta X La función de validación de números es correcta X La rutina de validación de espacios en blanco es correcta X NO La siguiente pantalla prueba la validación de espacios en blanco, en campos que son de carácter obligatorios para la base de datos, esta validación se está realizando desde la aplicación, para no involucrar a la bases de datos en la generación de mensajes de errores. 72 4.2.2 Pruebas modulares Objetivo: Detección de errores y verificación de la integración de los menús. Criterio de decisión: Las pruebas modulares corresponden al segundo item mencionado en la aplicación de pruebas de la metodología del CVDS, y su función consiste en evaluar cada una de las rutinas que se integran al todo de la aplicación y que exista interacción adecuada con el usuario. MENÚ APLICACIÓN PRUEBAS SI NO Se generan errores al momento de cargar un Submenú X Los Submenús son complejos X La interacción con el usuario es fácil X La selección de menús y submenús funciona X Realiza el proceso de inserción de nuevo entorno X Realiza el proceso de salir del entorno actual X 73 El siguiente pantallazo muestra la funcionalidad de los menús y los submenús los cuales son de fácil acceso al usuario y divididos según la funcionalidad a solicitar, anexo a los submenús están un cuadro de botones que tienen un texto de ayuda para saber a qué funcionalidad se está accediendo al hacer clic en el botón 4.2.3 Pruebas de Documentación y Ayuda Objetivo: Verificar el contenido de la documentación, manuales y ayudas. Criterio de decisión: Para las pruebas de documentación, igualmente se tomó la referencia de la metodología del CVDS, en donde el código debe ser explicativo como referencia para que el desarrollador se ubique dentro del entorno del análisis 74 de las variables y etiquetas que se muevan en la aplicación. Así mismo denota la inclusión de manuales y demás soportes escritos que ayuden a la interpretación del conocimiento del software. Los nombres de las variables deben ser significativos, dentro de la acción que ejecuta dentro del proceso del caso de uso que se está generando. PRUEBAS SI Existe una documentación interna (código) X Los nombres de las variables y etiquetas son significativas X Los comentarios son fáciles de entender X Existe una documentación externa X La ayuda es fácil de entender y manejar X NO 4.2.4 Pruebas de Seguridad y Control Objetivo: Verificación del control de acceso, validación de información y la realización correcta de las acciones sobre la aplicación. PRUEBAS SI Existe perfiles de usuario para el funcionamiento del sistema X Solicita contraseña al ingresar a la aplicación X NO 4.2.5 Pruebas de Calidad Objetivo: Verificar la capacidad operativa y de adaptación a los cambios en la aplicación. 75 PRUEBAS SI Existe portabilidad NO X El código es reutilizable X Existe integridad X Es fácil de utilizar X 4.3 INFORME DE PRUEBAS Objetivos • Comprobar la validación de información. • Comprobar la lógica de la aplicación • Comprobar el nivel de integración de los menús. • Probar el manejo de errores. 76 Material revisado Formulario principal Menú configuración Menú de consultar 77 Menú registro Menú reportes Formulario parametrizar tasas 78 Parametrizar documentos Parametrizar tipos de crédito 79 Parametrizar requisitos Parametrizar clientes 80 Registrar créditos Ejecutar simulación 81 Consultar cuotas 82 5. CONCLUSIONES Es bastante gratificante a nivel personal, realizar un proyecto de investigación descriptiva con un tema de gran magnitud como lo es el manejo de tasas de interés y poder crear una aplicación que puede suplir las necesidades principales del proceso de cálculo y amortización de créditos a nivel financiero. Para todo tipo de proyecto de desarrollo de software es fundamental trabajar con metodologías que estén enfocadas desarrollar con ciertos patrones para realizar un código más estructurado y fácil de utilizar, lo cual se vio plasmado en el desarrollo al implementar el patrón “modelo, vista controlador” y aunque es mayor las líneas de código que son necesarias en el modelo, este trabajo se ve compensado al crear la vista y al tener la intensión de crear nueva funcionalidad o da la opción de abordar un problema desde diferentes posibles soluciones sin necesidad de implementar gran cantidad de código. Es poco el software y las aplicaciones que en Colombia existen para manipular créditos a nivel financiero, que esté al alcance de cualquier tipo de usuario, en este momento es más utilizado en bancos y entidades de grandes magnitudes, donde tienen este software al cual es creado a las necesidades de la entidad, por diversas casas de software. La normatividad que existe en el momento con respecto a créditos va enfocada a entidades del gobierno y a tipos de crédito específicos, las cuales hasta el momento no especifica cómo es la estructura y los pasos a seguir para la solicitud de créditos por parte de las personas que lo soliciten y tampoco contempla normatividad para quienes lo otorgan, este normas son internas de cada institución, según la entidad y las personas que la conforman. El uso de UML como lenguaje de modelado es fundamental en todo proyecto de desarrollo de software, ya que colabora con la documentación y construcción de los objetos que conforman un sistema de información como el del presente 83 proyecto, con estos modelos se puede dar continuidad al proyecto sin necesidad que el desarrollador sea la misma persona, sino que puede llegar una persona nueva que teniendo los modelos como base podrá seguir con el trabajo realizado. Las herramientas de trabajo Visual Basic .NET 2005 y SQL server 2005 Express, se interrelacionan y complementan bien en el desarrollo de proyectos de software, generando confianza en el proceso de construcción, existe buena documentación con respecto a ambas en Internet y por parte de Microsoft, son de fácil uso y manejo, el reporte de errores y al documentación de ellos es bastante buena y hace que el trabajo del desarrollador sea ágil al encontrar solución rápida y oportuna a los inconvenientes que se puedan presentar. 84 6 RECOMENDACIONES Si se desea dar continuidad al proyecto se pueden tener las siguientes consideraciones: • El software podría ser mejorado, abarcando el tema de pagos, en el momento se puede realizar un tipo de pago completo de la cuota. • Funcionalidad de congelamiento de los créditos. • Gestionar con una entidad bancaria, los pagos a este banco y que el banco los reporte a través de archivos planos, los cuales puedan ser ingresados al sistema y que el sistema actualice los pagos. • El usuario pueda consultar su estado de crédito a través de internet, implementando está funcionalidad en ASP.NET, ya que las clases del proyectos seria utilizables con este lenguaje. • Debido a que la base de datos se trabaja a nivel de código y no con objetos de visual Basic, y también a través de sentencias SQL, que son de estándares en bases de datos, poder ejecutar la aplicación con diversas bases de datos según el gusto del usuario. 85 BIBLIOGRAFÍA [1] Introduccion a UML 2.0. Dsponible: http://www.epidataconsulting.com/tikiwiki/tiki-read_article.php?articleId=15 [Citado Mayo 3 de 2008] [2] Patrón "Modelo-Vista-Controlador". Disponible: http://www.proactivacalidad.com/java/patrones/mvc.html [Citado Mayo 3 de 2008] [3] Una breve historia de las tasas de interés Disponible: http://www.monografias.com/trabajos24/tasas-de-interes/tasas-de-interes.shtml [Citado Abril 5 de 2008] [4] Legislación Financiera Disponible. http://www.asobancaria.com/categorias.jsp?id=147&sup=2 [Citado Mayo 10 de 2008] [5] LEY 510 DE 1999. Disponible: http://web.minjusticia.gov.co/normas/1999/l5101999.htm [Citado Mayo 10 de 2008] [6] LEY 550 DE 1999. Disponible: http://web.minjusticia.gov.co/normas/1999/l5501999.htm [Citado Mayo 10 de 2008] [9] CreditWin Profesional (CreditWin Pro) 1.0. Disponible: http://www.freedownloadmanager.org/es/downloads/disputa_de_cr%C3%A9dito_g ratis [Citado Mayo 17 de 2008] [10] LoanSpread Loan Calculator 4.6.0. Disponible: http://www.freedownloadscenter.com/es/Negocio/Herramientas_Financieras_Varia s/LoanSpread_Loan_Calculator.html [Citado Mayo 17 de 2008] [11] Definición de crédito documentario. Disponible http://www.proyectosfindecarrera.com/definicion/credito-documentario.htm [Citado Mayo 17 de 2008] 86 [12] Que es amortización. Disponible: http://www.businesscol.com/foros/index.php?topic=2797 [Citado Mayo 17 de 2008] [13] Panorama de SQL Server 2005 Express Edition. Disponible: http://www.microsoft.com/spanish/msdn/articulos/archivo/100904/voices/10Panora maSQLServer2005ExpressEdition.mspx [Citado Mayo 17 de 2008] [14] Introducción a Visual Studio. Disponible: http://msdn.microsoft.com/eses/library/fx6bk1f4(VS.80).aspx [Citado Mayo 17 de 2008] [15] Visual Basic. Disponible: http://msdn.microsoft.com/eses/library/2x7h1hfk(VS.80).aspx [Citado Mayo 17 de 2008] [16] Business Process Management. Disponible: http://es.wikipedia.org/wiki/Business_Process_Management [Citado Mayo 24 de 2008] [17] Prueba de programas. Disponible: http://www.lab.dit.upm.es/~lprg/material/apuntes/pruebas/testing.htm#s22 [Citado Mayo 31 de 2008] 87 ANEXOS 88 Código fuente Cliente Public Class cliente Dim idcliente, nombrebusqueda, primernombre, segundonombre, primerapellido, segundoapellido, direccion, telefono, movil, fax, email, vehiculo, vivienda, profesion, formalaboral As String Dim fechanacimiento As Date Public Sub setcliente(ByVal idc As String, ByVal nom As String, ByVal prn As String, ByVal segn As String, ByVal pra As String, ByVal sega As String, ByVal dir As String, ByVal tel As String, ByVal mov As String, ByVal fax As String, ByVal ema As String, ByVal veh As String, ByVal viv As String, ByVal pro As String, ByVal fla As String, ByVal fec As Date) idcliente = idc nombrebusqueda = nom primernombre = prn segundonombre = segn primerapellido = pra segundoapellido = sega direccion = dir telefono = tel movil = mov fax = fax email = ema vehiculo = veh vivienda = viv profesion = pro formalaboral = fla fechanacimiento = fec End Sub Public Function Getidcliente() As String Getidcliente = idcliente End Function Public Function Getnombrebusqueda() As String Getnombrebusqueda = nombrebusqueda End Function Public Function getprimerapellido() As String getprimerapellido = primerapellido End Function Public Function getsegundoapellido() As String getsegundoapellido = segundoapellido End Function Public Function getprimernombre() As String getprimernombre = primernombre End Function Public Function getsegundonombre() As String getsegundonombre = segundonombre End Function Public Function getdireccion() As String getdireccion = direccion End Function Public Function gettelefono() As String gettelefono = telefono End Function 89 Public Function getmovil() As String getmovil = movil End Function Public Function getfax() As String getfax = fax End Function Public Function getemail() As String getemail = email End Function Public Function getvehiculo() As String getvehiculo = vehiculo End Function Public Function getvivienda() As String getvivienda = vivienda End Function Public Function getprofesion() As String getprofesion = profesion End Function Public Function getformalaboral() As String getformalaboral = formalaboral End Function Public Function Getfechanacimiento() As Date Getfechanacimiento = fechanacimiento End Function End Class Clientebd Public Class cliente_bd Dim conexion As New conexion_bd Public Sub setrcliente(ByVal cli As cliente) Dim insert_sql As String Dim tfec, feci As String Try If (cli.Getidcliente = "") Then Throw New Exception("Debe ingresar el id del cliente") End If If (cli.getprimerapellido = "") Then Throw New Exception("Debe ingresar el primer apellido del cliente") End If If (cli.getprimernombre = "") Then Throw New Exception("Debe ingresar el primer nombre del cliente") End If tfec = cli.Getfechanacimiento.Date.ToString() feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) insert_sql = "insert into clientes(idcliente, nombrebusqueda, primernombre, segundonombre, primerapellido, segundoapellido, direccion, telefono, movil, fax, email, vehiculo, vivienda, profesion, formalaboral,fechanacimiento) values('" insert_sql = insert_sql & cli.Getidcliente & "','" & cli.Getnombrebusqueda & "','" & cli.getprimernombre & "','" & cli.getsegundonombre & "','" & cli.getprimerapellido & "','" & 90 cli.getsegundoapellido & "','" & cli.getdireccion & "','" & cli.gettelefono & "','" & cli.getmovil & "','" & cli.getfax & "','" & cli.getemail & "','" & cli.getvehiculo & "','" & cli.getvivienda & "','" & cli.getprofesion & "','" & cli.getformalaboral & "','" & feci & "')" conexion.ejecutar(insert_sql) MessageBox.Show("El cliente ha sido ingresado") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getcliente() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from clientes" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getclienteid(ByVal idc As String) As cliente Dim objalma As New DataSet() Dim cl As New cliente Dim select_sql As String Try select_sql = "select * from clientes where idcliente = '" & idc & "'" objalma = conexion.consultar(select_sql) cl.setcliente(objalma.Tables("tabla").Rows(0).Item("idcliente"), objalma.Tables("tabla").Rows(0).Item("nombrebusqueda"), objalma.Tables("tabla").Rows(0).Item("primernombre"), objalma.Tables("tabla").Rows(0).Item("segundonombre"), objalma.Tables("tabla").Rows(0).Item("primerapellido"), objalma.Tables("tabla").Rows(0).Item("segundoapellido"), objalma.Tables("tabla").Rows(0).Item("direccion"), objalma.Tables("tabla").Rows(0).Item("telefono"), objalma.Tables("tabla").Rows(0).Item("movil"), objalma.Tables("tabla").Rows(0).Item("fax"), objalma.Tables("tabla").Rows(0).Item("email"), objalma.Tables("tabla").Rows(0).Item("vehiculo"), objalma.Tables("tabla").Rows(0).Item("vivienda"), objalma.Tables("tabla").Rows(0).Item("profesion"), objalma.Tables("tabla").Rows(0).Item("formalaboral"), objalma.Tables("tabla").Rows(0).Item("fechanacimiento")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return cl End Function Public Sub delcliente(ByVal idc As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try 91 delete_sql = "delete from clientes where idcliente = '" & idc & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updatecliente(ByVal cli As cliente) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Dim tfec, feci As String Try If (cli.Getidcliente = "") Then Throw New Exception("Debe ingresar el id del cliente") End If If (cli.getprimerapellido = "") Then Throw New Exception("Debe ingresar el primer apellido del cliente") End If If (cli.getprimernombre = "") Then Throw New Exception("Debe ingresar el primer nombre del cliente") End If tfec = cli.Getfechanacimiento.Date.ToString() feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) update_sql = "update clientes set idcliente = '" & cli.Getidcliente & "',nombrebusqueda = '" & cli.Getnombrebusqueda & "',primernombre = '" & cli.getprimernombre & "',primerapellido = '" & cli.getprimerapellido & "',segundoapellido = '" & cli.getsegundoapellido & "',direccion = '" & cli.getdireccion & "',telefono = '" & cli.gettelefono & "',movil = '" & cli.getmovil & "',fax = '" & cli.getfax & "',email = '" & cli.getemail & "',vehiculo = '" & cli.getvehiculo & "',vivienda = '" & cli.getvivienda & "',profesion = '" & cli.getprofesion & "',fechanacimiento = '" & feci & "',formalaboral = '" & cli.getformalaboral & "' where idcliente = '" & cli.Getidcliente & "'" conexion.ejecutar(update_sql) MessageBox.Show("El cliente ha sido actualizado") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class Cuota Public Class cuota Dim idcredito, pago As String Dim cuota As Integer Dim capital, interes, valcuota, saldo, mora As Double Dim fechapago As Date 92 Public Sub setcuotas(ByVal idc As String, ByVal pag As String, ByVal cuo As Integer, ByVal cap As Double, ByVal int As Double, ByVal vcuo As Double, ByVal sal As Double, ByVal fec As Date) idcredito = idc pago = pag cuota = cuo capital = cap interes = int saldo = sal valcuota = vcuo fechapago = fec End Sub Public Function Getidcredito() As String Getidcredito = idcredito End Function Public Function Getcuota() As Integer Getcuota = cuota End Function Public Function getpago() As String getpago = pago End Function Public Function getsaldo() As Double getsaldo = saldo End Function Public Function Getcapital() As Double Getcapital = capital End Function Public Function getinteres() As Double getinteres = interes End Function Public Function Getvalcuota() As Double Getvalcuota = valcuota End Function Public Function Getfechapago() As Date Getfechapago = fechapago End Function End Class Cuotabd Public Class cuotas_bd Dim conexion As New conexion_bd Public Sub setcuota(ByVal cuo As cuota) Dim insert_sql As String Dim tfec, feci As String Try tfec = cuo.Getfechapago.Date.ToString() feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) insert_sql = "insert into cuotas(idcredito,cuota,fechapago,capital,interes,valcuota,saldo,pago) values('" & cuo.Getidcredito & "'," & cuo.Getcuota & ",'" & feci & "'," & cuo.Getcapital & "," & cuo.getinteres & "," & cuo.Getvalcuota & "," & cuo.getsaldo & ",'" & cuo.getpago & "')" conexion.ejecutar(insert_sql) 93 Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getcuotas() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from cuotas" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getcuotascredito(ByVal idc As String) As DataSet Dim objalma As New DataSet() Dim select_sql As String Try select_sql = "select * from cuotas where idcredito = '" & idc & "'" objalma = conexion.consultar(select_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return objalma End Function Public Function getcuotascreditoSinpago(ByVal idc As String) As DataSet Dim objalma As New DataSet() Dim select_sql As String Try select_sql = "select * from cuotas where idcredito = '" & idc & "' AND pago = 'NO'" objalma = conexion.consultar(select_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return objalma End Function Public Sub delcredito(ByVal idc As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try delete_sql = "delete from cuotas where idcredito = '" & idc & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub pagarcuota(ByVal id As String, ByVal cuo As Integer) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String 94 Try update_sql = "update cuotas set pago = 'SI' where idcredito = '" & id & "'and cuota = " & cuo conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class documentos Public Class documentos Dim iddocumento, descripcion As String Dim cantidad As Integer Public Sub setdocumentos(ByVal idd As String, ByVal des As String, ByVal can As Integer) iddocumento = idd descripcion = des cantidad = can End Sub Public Function Getiddocumento() As String Getiddocumento = iddocumento End Function Public Function Getdescripcion() As String Getdescripcion = descripcion End Function Public Function Getcantidad() As Integer Getcantidad = cantidad End Function End Class Documentosbd Public Class documentos_bd Dim conexion As New conexion_bd Public Sub setdocumento(ByVal doc As documentos) Dim insert_sql As String Try If (doc.Getiddocumento = "") Then Throw New Exception("Debe ingresar el id del documento") End If If (doc.Getcantidad >= 0) Then Throw New Exception("Debe ingresar la cantidad de documentos a solicitar") End If insert_sql = "insert into documentos(iddocumento,descripcion,cantidad) values('" & doc.Getiddocumento & "','" & doc.Getdescripcion & "'," & doc.Getcantidad & ")" conexion.ejecutar(insert_sql) 95 Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getdocumentos() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from documentos" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getdocumentosid(ByVal idd As String) As documentos Dim objalma As New DataSet() Dim docu As New documentos Dim select_sql As String Try select_sql = "select * from documentos where iddocumento = '" & idd & "'" objalma = conexion.consultar(select_sql) docu.setdocumentos(objalma.Tables("tabla").Rows(0).Item("iddocumento"), objalma.Tables("tabla").Rows(0).Item("descripcion"), objalma.Tables("tabla").Rows(0).Item("cantidad")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return docu End Function Public Sub updatedocumentos(ByVal doc As documentos) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If (doc.Getiddocumento = "") Then Throw New Exception("Debe ingresar el id del documento") End If If (doc.Getcantidad = 0) Then Throw New Exception("Debe ingresar la cantidad de documentos a solicitar") End If update_sql = "update documentos set iddocumento = '" & doc.Getiddocumento & "',descripcion = '" & doc.Getdescripcion & "',cantidad = " & doc.Getcantidad & "where iddocumento = '" & doc.Getiddocumento & "'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub deldocumentos(ByVal idd As String) Dim objconexion As New OleDb.OleDbCommand 96 Dim delete_sql As String Try delete_sql = "delete from documentos where iddocumento = '" & idd & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class Registrocredito Public Class registrocredito Dim idcredito, cliente, nombre, tasa, estado, tipocredito, periodo, formapago As String Dim valorsolicitado, valoraprobado, numerocuotas As Integer Dim tea As Double Dim fechainicial, fechafinal, fechapresupuesto As Date Public Sub setregitrocredito(ByVal idc As String, ByVal cli As String, ByVal nom As String, ByVal tas As String, ByVal est As String, ByVal tcr As String, ByVal per As String, ByVal vap As Integer, ByVal vso As Integer, ByVal ncu As Integer, ByVal te As Double, ByVal fin As Date, ByVal ffi As Date, ByVal fpr As Date, ByVal fpa As String) formapago = fpa idcredito = idc cliente = cli nombre = nom tasa = tas estado = est tipocredito = tcr periodo = per valorsolicitado = vso valoraprobado = vap numerocuotas = ncu tea = te fechainicial = fin fechafinal = ffi fechapresupuesto = fpr End Sub Public Function Getformapago() As String Getformapago = formapago End Function Public Function Getidcredito() As String Getidcredito = idcredito End Function Public Function Getcliente() As String Getcliente = cliente End Function Public Function getnombre() As String getnombre = nombre End Function Public Function gettasa() As String 97 gettasa = tasa End Function Public Function getperiodo() As String getperiodo = periodo End Function Public Function gettipocredito() As String gettipocredito = tipocredito End Function Public Function getestado() As String getestado = estado End Function Public Function Gettea() As Double Gettea = tea End Function Public Function getvalorsolicitado() As Integer getvalorsolicitado = valorsolicitado End Function Public Function getvaloraprobado() As Integer getvaloraprobado = valoraprobado End Function Public Function Getnumerocuotas() As Integer Getnumerocuotas = numerocuotas End Function Public Function Getfechafinal() As Date Getfechafinal = fechafinal End Function Public Function Getfechainicial() As Date Getfechainicial = fechainicial End Function Public Function Getfechapresupuesto() As Date Getfechapresupuesto = fechapresupuesto End Function End Class Registrocredito_bd Public Class registrocredito_bd Dim conexion As New conexion_bd Public Sub setregistrocredito(ByVal rcr As registrocredito) Dim insert_sql As String Dim tfecini, fecini, tfecfin, fecfin, tfecpr, fecpr As String Try If (rcr.Getidcredito = "") Then Throw New Exception("Debe ingresar el identificador del credito") End If If (rcr.getperiodo = "") Then Throw New Exception("Debe selecionar un periodo de pago") End If If (rcr.Getformapago = "") Then Throw New Exception("Debe seleccionar una forma de pago") End If tfecini = rcr.Getfechainicial.Date.ToString() 98 fecini = Mid(tfecini, 7, 4) & Mid(tfecini, 4, 2) & Mid(tfecini, 1, 2) tfecfin = rcr.Getfechafinal.Date.ToString() fecfin = Mid(tfecfin, 7, 4) & Mid(tfecfin, 4, 2) & Mid(tfecfin, 1, 2) tfecpr = rcr.Getfechapresupuesto.Date.ToString() fecpr = Mid(tfecpr, 7, 4) & Mid(tfecpr, 4, 2) & Mid(tfecpr, 1, 2) insert_sql = "insert into registrocredito(idcredito, cliente, nombrebusqueda, tasa, estado, tipocredito, periodo,valorsolicitado, valoraprobado, numerocuotas,tea,fechainicial, fechafinal, fechapresupuesto,formapago) values('" insert_sql = insert_sql & rcr.Getidcredito & "','" & rcr.Getcliente & "','" & rcr.getnombre & "','" & rcr.gettasa & "','" & rcr.getestado & "','" & rcr.gettipocredito & "','" & rcr.getperiodo & "'," & rcr.getvalorsolicitado & "," & rcr.getvaloraprobado & "," & rcr.Getnumerocuotas & "," & rcr.Gettea & ",'" & fecini & "','" & fecfin & "','" & fecpr & "','" & rcr.Getformapago & "')" conexion.ejecutar(insert_sql) MessageBox.Show("El crédito ha sido creadó") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getregistrocredito() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from registrocredito" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getregistrocreditoid(ByVal idc As String) As registrocredito Dim objalma As New DataSet() Dim rcre As New registrocredito Dim select_sql As String Try select_sql = "select * from registrocredito where idcredito = '" & idc & "'" objalma = conexion.consultar(select_sql) rcre.setregitrocredito(objalma.Tables("tabla").Rows(0).Item("idcredito"), objalma.Tables("tabla").Rows(0).Item("cliente"), objalma.Tables("tabla").Rows(0).Item("nombrebusqueda"), objalma.Tables("tabla").Rows(0).Item("tasa"), objalma.Tables("tabla").Rows(0).Item("estado"), objalma.Tables("tabla").Rows(0).Item("tipocredito"), objalma.Tables("tabla").Rows(0).Item("periodo"), objalma.Tables("tabla").Rows(0).Item("valoraprobado"), objalma.Tables("tabla").Rows(0).Item("valorsolicitado"), objalma.Tables("tabla").Rows(0).Item("numerocuotas"), objalma.Tables("tabla").Rows(0).Item("tea"), objalma.Tables("tabla").Rows(0).Item("fechainicial"), 99 objalma.Tables("tabla").Rows(0).Item("fechafinal"), objalma.Tables("tabla").Rows(0).Item("fechapresupuesto"), objalma.Tables("tabla").Rows(0).Item("formapago")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return rcre End Function Public Sub delcredito(ByVal idc As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try delete_sql = "delete from registrocredito where idcredito = '" & idc & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub cambiarestado(ByVal id As String, ByVal est As String) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If (est = "") Then Throw New Exception("Debe selecionar un estado") End If update_sql = "update registrocredito set estado = '" & est & "' where idcredito = '" & id & "'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) If (ex.Message = "1") Then End If conexion.cerraconexion() End Try End Sub Public Sub cambiarfechafinalpago(ByVal id As String, ByVal fec As Date) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Dim tfec, feci As String Try tfec = fec feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) update_sql = "update registrocredito set fechafinal = '" & feci & "' where idcredito = '" & id & "'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub 100 End Class Requisitos Public Class requisitos Dim iddocumento, formalaboral, idcredito, idrequisito As String Public Sub setdrequisitos(ByVal idr As String, ByVal idd As String, ByVal forl As String, ByVal idc As String) iddocumento = idd formalaboral = forl idcredito = idc idrequisito = idr End Sub Public Function getidrequisito() As String getidrequisito = idrequisito End Function Public Function Getiddocumento() As String Getiddocumento = iddocumento End Function Public Function Getformalaboral() As String Getformalaboral = formalaboral End Function Public Function Getidcredito() As String Getidcredito = idcredito End Function End Class requisitosbd Public Class requisitos_bd Dim conexion As New conexion_bd Public Sub setrequisitos(ByVal req As requisitos) Dim insert_sql As String Try If (req.getidrequisito = "") Then Throw New Exception("Debe ingresar el identificador del requisito") End If insert_sql = "insert into requisitos(idrequisito,iddocumento,formalaboral,idcredito) values('" & req.getidrequisito & "','" & req.Getiddocumento & "','" & req.Getformalaboral & "','" & req.Getidcredito & "')" conexion.ejecutar(insert_sql) MessageBox.Show("El requisito ha sido creadó") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getrequisitos() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from requisitos" 101 objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getrequisitosid(ByVal idr As String) As requisitos Dim objalma As New DataSet() Dim req As New requisitos Dim select_sql As String Try select_sql = "select * from requisitos where idrequisito = '" & idr & "'" objalma = conexion.consultar(select_sql) req.setdrequisitos(objalma.Tables("tabla").Rows(0).Item("idrequisito"), objalma.Tables("tabla").Rows(0).Item("iddocumento"), objalma.Tables("tabla").Rows(0).Item("formalaboral"), objalma.Tables("tabla").Rows(0).Item("idcredito")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return req End Function Public Function getrequisitosidcredito(ByVal idc As String) As DataSet Dim objalma As New DataSet() Dim docu As New documentos Dim select_sql As String Try select_sql = "select * from requisitos where idcredito = '" & idc & "'" objalma = conexion.consultar(select_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return objalma End Function Public Sub delrequisitos(ByVal idr As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try delete_sql = "delete from requisitos where idrequisito = '" & idr & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updaterequisito(ByVal req As requisitos) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If (req.getidrequisito = "") Then 102 Throw New Exception("Debe ingresar el identificador del requisito") End If update_sql = "update requisitos set idrequisito = '" & req.getidrequisito & "',idcredito = '" & req.Getidcredito & "',iddocumento = '" & req.Getiddocumento & "',formalaboral = '" & req.Getformalaboral & "' where idrequisito = '" & req.getidrequisito & "'" conexion.ejecutar(update_sql) MessageBox.Show("El requisito ha sido actualizadó") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class Tasas Public Class tasas Dim idtasa, descripcion As String Dim valor As Double Dim fecha As Date Public Sub settasas(ByVal idt As String, ByVal des As String, ByVal val As Double, ByVal fec As Date) idtasa = idt descripcion = des valor = val fecha = fec End Sub Public Function Getidtasa() As String Getidtasa = idtasa End Function Public Function Getdescripcion() As String Getdescripcion = descripcion End Function Public Function Getvalor() As Double Getvalor = valor End Function Public Function Getfecha() As Date Getfecha = fecha End Function End Class Tasasbd Public Class tasa_bd Dim conexion As New conexion_bd Public Sub settasa(ByVal tas As tasas) Dim insert_sql As String Dim tfec, feci As String Try If (tas.Getidtasa = "") Then 103 Throw New Exception("Debe ingresar el identificador de la tasa") End If tfec = tas.Getfecha.Date.ToString() feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) insert_sql = "insert into tasas(idtasa,descripcion,fecha,valor) values('" & tas.Getidtasa & "','" & tas.Getdescripcion & "','" & feci & "'," & tas.Getvalor & ")" conexion.ejecutar(insert_sql) MessageBox.Show("la tasa de interés ha sido creadá") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function gettasa() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from tasas" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function gettasaid(ByVal idt As String) As tasas Dim objalma As New DataSet Dim tasa As New tasas Dim select_sql As String Try select_sql = "select * from tasas where idtasa = '" & idt & "'" objalma = conexion.consultar(select_sql) tasa.settasas(objalma.Tables("tabla").Rows(0).Item("idtasa"), objalma.Tables("tabla").Rows(0).Item("descripcion"), objalma.Tables("tabla").Rows(0).Item("valor"), objalma.Tables("tabla").Rows(0).Item("fecha")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return tasa End Function Public Sub deltasa(ByVal idt As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try delete_sql = "delete from tasas where idtasa = '" & idt & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updatetasa(ByVal tas as tasas) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String 104 Dim tfec, feci As String Try If (tas.Getidtasa = "") Then Throw New Exception("Debe ingresar el identificador de la tasa") End If If (tas.Getvalor > 100) Then Throw New Exception("Debe valor de la tasa no puede superar el 100%") End If If (tas.Getvalor < 0) Then Throw New Exception("Debe valor de la tasa no puede ser menor a 0 (CERO)") End If tfec = tas.Getfecha.Date.ToString() feci = Mid(tfec, 7, 4) & Mid(tfec, 4, 2) & Mid(tfec, 1, 2) update_sql = "update tasas set idtasa = '" & tas.Getidtasa & "',descripcion = '" & tas.Getdescripcion & "',valor = " & tas.Getvalor & ",fecha = '" & feci & "' where idtasa = '" & tas.Getidtasa & "'" conexion.ejecutar(update_sql) MessageBox.Show("la tasa de interés ha sido actualizadá") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class Tipocredito Public Class tipocredito Dim idcredito, descripcion As String Dim presupuesto As Double Public Sub settipocredito(ByVal idc As String, ByVal des As String, ByVal pre As Double) idcredito = idc descripcion = des presupuesto = pre End Sub Public Function Getidtipocredito() As String Getidtipocredito = idcredito End Function Public Function Getdescripcion() As String Getdescripcion = descripcion End Function Public Function Getpresupuesto() As Double Getpresupuesto = presupuesto End Function End Class Tipocreditobd Public Class tipocredito_bd 105 Dim conexion As New conexion_bd Public Sub settipocredito(ByVal tcre As tipocredito) Dim insert_sql As String Try If (tcre.Getidtipocredito = "") Then Throw New Exception("Debe ingresar el id del tipo de credito") End If insert_sql = "insert into tipocreditos(idcredito,descripcion,presupuesto) values('" & tcre.Getidtipocredito & "','" & tcre.Getdescripcion & "'," & tcre.Getpresupuesto & ")" conexion.ejecutar(insert_sql) MessageBox.Show("El tipo de crédito ha sido creadó") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Public Function gettipocredito() As DataSet Dim objalma As DataSet Dim select_sql As String select_sql = "select * from tipocreditos" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function gettipocreditoid(ByVal idc As String) As tipocredito Dim objalma As New DataSet Dim tcre As New tipocredito Dim select_sql As String Try select_sql = "select * from tipocreditos where idcredito = '" & idc & "'" objalma = conexion.consultar(select_sql) tcre.settipocredito(objalma.Tables("tabla").Rows(0).Item("idcredito"), objalma.Tables("tabla").Rows(0).Item("descripcion"), objalma.Tables("tabla").Rows(0).Item("presupuesto")) Catch ex As Exception MessageBox.Show(ex.Message) End Try Return tcre End Function Public Sub deltipocredito(ByVal idc As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String Try delete_sql = "delete from tipocreditos where idcredito = '" & idc & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Public Sub updattipocredito(ByVal cre As tipocredito) 106 Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If (cre.Getidtipocredito = "") Then Throw New Exception("Debe ingresar el id del tipo de credito") End If update_sql = "update tipocreditos set idcredito = '" & cre.Getidtipocredito & "',descripcion = '" & cre.Getdescripcion & "',presupuesto = " & cre.Getpresupuesto & " where idcredito = '" & cre.Getidtipocredito & "'" conexion.ejecutar(update_sql) MessageBox.Show("El tipo de crédito ha sido actualizadó") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updatepresupuesto(ByVal cre As tipocredito, ByVal val As Double) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If (cre.Getidtipocredito = "") Then Throw New Exception("Debe ingresar el id del tipo de credito") End If update_sql = "update tipocreditos set presupuesto = " & val & " where idcredito = '" & cre.Getidtipocredito & "'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub End Class Usuario Public Class usuario Dim usuario, password, perfil, activo, nombre, apellido, identificacion As String Public Sub setusuario(ByVal usr As String, ByVal pas As String, ByVal per As String, ByVal act As String, ByVal nom As String, ByVal ape As String, ByVal iden As String) usuario = usr password = pas perfil = per activo = act nombre = nom apellido = ape identificacion = iden End Sub 107 Public Function Getusuario() As String Getusuario = usuario End Function Public Function getpassword() As String getpassword = password End Function Public Function getperfil() As String getperfil = perfil End Function Public Function getactivo() As String getactivo = activo End Function Public Function getapellido() As String getapellido = apellido End Function Public Function getnombre() As String getnombre = nombre End Function Public Function getidentificacion() As String getidentificacion = identificacion End Function End Class usuariobd Public Class usuario_bd Dim conexion As New conexion_bd Public Sub setrusuario(ByVal usr As usuario) Dim insert_sql As String Try If (usr.Getusuario = "") Then Throw New Exception("Debe ingresar el usuario") End If If (usr.getpassword = "") Then Throw New Exception("Debe ingresar la contraseña") End If If (usr.getperfil = "") Then Throw New Exception("Debe seleccionar un perfil") End If insert_sql = "insert into usuarios(usuario, password, perfil, activo, nombre, apellido, identificacion) values('" & usr.Getusuario & "','" & usr.getpassword & "','" & usr.getperfil & "','" & usr.getactivo & "','" & usr.getnombre & "','" & usr.getapellido & "','" & usr.getidentificacion & "')" conexion.ejecutar(insert_sql) MessageBox.Show("El usuario ha sido creadó") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Function getusuario() As DataSet Dim objalma As DataSet Dim select_sql As String 108 select_sql = "select * from usuarios" objalma = conexion.consultar(select_sql) Return objalma End Function Public Function getusuarioid(ByVal idc As String) As usuario Dim objalma As New DataSet() Dim cl As New usuario Dim select_sql As String Try select_sql = "select * from usuarios where usuario = '" & idc & "'" objalma = conexion.consultar(select_sql) cl.setusuario(objalma.Tables("tabla").Rows(0).Item("usuario"), objalma.Tables("tabla").Rows(0).Item("password"), objalma.Tables("tabla").Rows(0).Item("perfil"), objalma.Tables("tabla").Rows(0).Item("activo"), objalma.Tables("tabla").Rows(0).Item("nombre"), objalma.Tables("tabla").Rows(0).Item("apellido"), objalma.Tables("tabla").Rows(0).Item("identificacion")) Catch ex As Exception If StrComp(cl.Getusuario, "", CompareMethod.Binary) = 0 Then MessageBox.Show("El usuario no existe") Else MessageBox.Show(ex.Message) End If conexion.cerraconexion() End Try Return cl End Function Public Function getusuarioactivo() As usuario Dim objalma As New DataSet() Dim cl As New usuario Dim select_sql As String Try select_sql = "select * from usuarios where activo = 'SI'" objalma = conexion.consultar(select_sql) cl.setusuario(objalma.Tables("tabla").Rows(0).Item("usuario"), objalma.Tables("tabla").Rows(0).Item("password"), objalma.Tables("tabla").Rows(0).Item("perfil"), objalma.Tables("tabla").Rows(0).Item("activo"), objalma.Tables("tabla").Rows(0).Item("nombre"), objalma.Tables("tabla").Rows(0).Item("apellido"), objalma.Tables("tabla").Rows(0).Item("identificacion")) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try Return cl End Function Public Sub delusuario(ByVal idc As String) Dim objconexion As New OleDb.OleDbCommand Dim delete_sql As String 109 Try delete_sql = "delete from usuarios where usuario = '" & idc & "'" conexion.ejecutar(delete_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updateactivo(ByVal usr As String) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try update_sql = "update usuarios set activo = 'SI' where usuario = '" & usr & "'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updatepassword(ByVal usr As usuario, ByVal pas As String, ByVal npas As String, ByVal cpas As String) Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try If Not (usr.getpassword = pas) Then Throw New Exception("las contraseña del usuario es incorrecta") End If If Not (npas = cpas) Then Throw New Exception("las contraseñas ingresadas no coinciden") End If update_sql = "update usuarios set password = '" & npas & "' where usuario = '" & usr.Getusuario & "'" conexion.ejecutar(update_sql) MessageBox.Show("La contraseña a sido modificada satisfactoriamente") Catch ex As Exception MessageBox.Show(ex.Message) conexion.cerraconexion() End Try End Sub Public Sub updateactivoNO() Dim objconexion As New OleDb.OleDbCommand Dim update_sql As String Try update_sql = "update usuarios set activo = 'NO' where activo = 'SI'" conexion.ejecutar(update_sql) Catch ex As Exception MessageBox.Show(ex.Message) 110 conexion.cerraconexion() End Try End Sub Public Function validaringreso(ByVal usr As String, ByVal pas As String) As Boolean Dim usrin As New usuario usrin = Me.getusuarioid(usr) If StrComp(usrin.Getusuario, "", CompareMethod.Binary) = 0 Then validaringreso = False Else If StrComp(usrin.getpassword, pas, CompareMethod.Binary) = 0 Then validaringreso = True Me.updateactivo(usrin.Getusuario) Else MessageBox.Show("El usuario o la contraseña son incorrectos") validaringreso = False End If End If End Function End Class Simularcredito Public Class simularcredito Dim cuota, dias, diasdate As Integer Dim capital, tmpinteres, interesperiodo, interes, valcuota, saldo, mora As Double Dim fechapago As Date Dim cuo As New cuota Dim cuobd As New cuotas_bd Dim sig As Boolean = True Dim valortotal As Double Dim ncuotas As Double Dim valint As Double Public Sub simularcredito(ByVal cre As registrocredito, ByVal vcuota As Double) Dim cuo2 As New cuota Dim tasbd As New tasa_bd Dim tas As New tasas Dim regbd As New registrocredito_bd Try If StrComp(cre.Getformapago, "Valor cuota", CompareMethod.Binary) = 0 And vcuota = 0 Then Throw New Exception("Debe ingresar el valor de la cuota") End If cuobd.delcredito(cre.Getidcredito) tas = tasbd.gettasaid(cre.gettasa) If StrComp(cre.getperiodo, "Diario", CompareMethod.Binary) = 0 Then dias = 30 diasdate = 1 111 Else If StrComp(cre.getperiodo, "Semanal", CompareMethod.Binary) = 0 Then dias = 4 diasdate = 8 Else dias = 1 diasdate = 30 End If End If fechapago = DateAdd(DateInterval.Day, diasdate, cre.Getfechainicial) If StrComp(cre.Getformapago, "Valor cuota", CompareMethod.Binary) = 0 Then ncuotas = cre.getvaloraprobado / vcuota interesperiodo = 1 + ((((cre.Gettea + tas.Getvalor) / 100) / 12) / dias) * ncuotas valortotal = cre.getvaloraprobado * interesperiodo valint = valortotal - cre.getvaloraprobado saldo = valortotal cuota = 1 While sig = True interes = valint / ncuotas valcuota = vcuota - interes saldo = saldo - vcuota cuo.setcuotas(cre.Getidcredito, "NO", cuota, valcuota, interes, vcuota, saldo, fechapago) cuobd.setcuota(cuo) If (saldo < vcuota) Then cuota += 1 vcuota = saldo valcuota = saldo - interes saldo = 0 cuo.setcuotas(cre.Getidcredito, "NO", cuota, valcuota, interes, vcuota, saldo, fechapago) cuobd.setcuota(cuo) sig = False End If fechapago = DateAdd(DateInterval.Day, diasdate, fechapago) cuota += 1 End While Else If StrComp(cre.Getformapago, "Capital fijo", CompareMethod.Binary) = 0 Then interesperiodo = 1 + ((((cre.Gettea + tas.Getvalor) / 100) / 12) / dias) * cre.Getnumerocuotas valortotal = cre.getvaloraprobado * interesperiodo valint = valortotal - cre.getvaloraprobado saldo = valortotal 112 interes = valint capital = cre.getvaloraprobado / cre.Getnumerocuotas For cuota = 1 To cre.Getnumerocuotas interes = interes / 2 saldo = saldo - capital - interes If (cuota = cre.Getnumerocuotas) Then interes = tmpinteres saldo = 0 End If cuo.setcuotas(cre.Getidcredito, "NO", cuota, capital, interes, capital + interes, saldo, fechapago) fechapago = DateAdd(DateInterval.Day, diasdate, fechapago) cuobd.setcuota(cuo) tmpinteres = interes Next Else interesperiodo = 1 + ((((cre.Gettea + tas.Getvalor) / 100) / 12) / dias) * cre.Getnumerocuotas valortotal = cre.getvaloraprobado * interesperiodo valint = valortotal - cre.getvaloraprobado saldo = valortotal For cuota = 1 To cre.Getnumerocuotas interes = valint / cre.Getnumerocuotas valcuota = valortotal / cre.Getnumerocuotas capital = valcuota - interes saldo = saldo - capital If (cuota = cre.Getnumerocuotas) Then saldo = 0 End If cuo.setcuotas(cre.Getidcredito, "NO", cuota, capital, interes, valcuota, saldo, fechapago) fechapago = DateAdd(DateInterval.Day, diasdate, fechapago) cuobd.setcuota(cuo) Next End If End If regbd.cambiarfechafinalpago(cre.Getidcredito, fechapago) MessageBox.Show("La simulación a sido ejecutada, puede observar las cuotas") Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub End Class Creditos (controladora) Public Class creditos Dim tas As New tasas Dim tasbd As New tasa_bd Dim doc As New documentos Dim docbd As New documentos_bd 113 Dim tcre As New tipocredito Dim tcrebd As New tipocredito_bd Dim req As New requisitos Dim reqbd As New requisitos_bd Dim cta As New cuota Dim cuobd As New cuotas_bd Dim rcr As New registrocredito Dim rcrbd As New registrocredito_bd Dim cli As New cliente Dim clibd As New cliente_bd Dim sim As New simularcredito Dim usr As New usuario Dim usrbd As New usuario_bd 'usuarios Public Function validaringreso(ByVal usr As String, ByVal pwd As String) As Boolean validaringreso = usrbd.validaringreso(usr, pwd) End Function Public Sub registar_usuarios(ByVal usua As String, ByVal pwd As String, ByVal per As String, ByVal act As String, ByVal nom As String, ByVal ape As String, ByVal iden As String) usr.setusuario(usua, pwd, per, act, nom, ape, iden) usrbd.setrusuario(usr) End Sub Public Function getusuario() As DataSet Dim dt As DataSet dt = usrbd.getusuario() getusuario = dt End Function Public Function getusuarioid(ByVal id As String) As usuario Dim us As usuario us = usrbd.getusuarioid(id) getusuarioid = us End Function Public Function getusuarioactivo() As usuario Dim us As usuario us = usrbd.getusuarioactivo() getusuarioactivo = us End Function Public Sub del_usuario(ByVal id As String) usrbd.delusuario(id) End Sub Public Sub udp_activo(ByVal idc As String) usrbd.updateactivo(idc) End Sub Public Sub udp_activoNO() usrbd.updateactivoNO() End Sub Public Sub cambiarpassword(ByVal pas As String, ByVal npas As String, ByVal cpas As String) Dim us As usuario us = Me.getusuarioactivo() usrbd.updatepassword(us, pas, npas, cpas) End Sub 114 'simulacion Public Sub simulacion(ByVal icr As String, ByVal cuota As Double) sim.simularcredito(Me.getregistrocreditoid(icr), cuota) End Sub 'clientes Public Sub registar_cliente(ByVal idc As String, ByVal nom As String, ByVal prn As String, ByVal segn As String, ByVal pra As String, ByVal sega As String, ByVal dir As String, ByVal tel As String, ByVal mov As String, ByVal fax As String, ByVal ema As String, ByVal veh As String, ByVal viv As String, ByVal pro As String, ByVal fla As String, ByVal fec As Date) cli.setcliente(idc, nom, prn, segn, pra, sega, dir, tel, mov, fax, ema, veh, viv, pro, fla, fec) clibd.setrcliente(cli) End Sub Public Function getcliente() As DataSet Dim dt As DataSet dt = clibd.getcliente() getcliente = dt End Function Public Function getclienteid(ByVal id As String) As cliente Dim cl As cliente cl = clibd.getclienteid(id) getclienteid = cl End Function Public Sub del_cliente(ByVal id As String) clibd.delcliente(id) End Sub Public Sub udp_cliente(ByVal idc As String, ByVal nom As String, ByVal prn As String, ByVal segn As String, ByVal pra As String, ByVal sega As String, ByVal dir As String, ByVal tel As String, ByVal mov As String, ByVal fax As String, ByVal ema As String, ByVal veh As String, ByVal viv As String, ByVal pro As String, ByVal fla As String, ByVal fec As Date) cli.setcliente(idc, nom, prn, segn, pra, sega, dir, tel, mov, fax, ema, veh, viv, pro, fla, fec) clibd.updatecliente(cli) End Sub 'registrarcredito Public Sub registar_credito(ByVal idc As String, ByVal cli As String, ByVal nom As String, ByVal tas As String, ByVal est As String, ByVal tcr As String, ByVal per As String, ByVal vap As Integer, ByVal vso As Integer, ByVal ncu As Integer, ByVal tea As Double, ByVal fin As Date, ByVal ffi As Date, ByVal fpr As Date, ByVal fpa As String) rcr.setregitrocredito(idc, cli, nom, tas, est, tcr, per, vap, vso, ncu, tea, fin, ffi, fpr, fpa) rcrbd.setregistrocredito(rcr) End Sub Public Function getregistrocredito() As DataSet Dim dt As DataSet dt = rcrbd.getregistrocredito() getregistrocredito = dt End Function 115 Public Function getregistrocreditoid(ByVal id As String) As registrocredito Dim rc As registrocredito rc = rcrbd.getregistrocreditoid(id) getregistrocreditoid = rc End Function Public Sub del_registrocredito(ByVal id As String) rcrbd.delcredito(id) End Sub Public Sub cambiarestado(ByVal id As String, ByVal est As String) rcrbd.cambiarestado(id, est) End Sub 'cuotas Public Sub registar_cuotas(ByVal idc As String, ByVal pag As String, ByVal cuo As Integer, ByVal cap As Double, ByVal int As Double, ByVal vcuo As Double, ByVal sal As Double, ByVal fec As Date) cta.setcuotas(idc, pag, cuo, cap, int, vcuo, sal, fec) cuobd.setcuota(cta) End Sub Public Function getcuotas() As DataSet Dim dt As DataSet dt = cuobd.getcuotas() getcuotas = dt End Function Public Function getcuotasid(ByVal id As String) As DataSet Dim dt As DataSet dt = cuobd.getcuotascredito(id) getcuotasid = dt End Function Public Function getcuotasinpago(ByVal id As String) As DataSet Dim dt As DataSet dt = cuobd.getcuotascreditoSinpago(id) getcuotasinpago = dt End Function Public Sub del_cuotas(ByVal id As String) cuobd.delcredito(id) End Sub Public Sub pagarcuotas(ByVal id As String, ByVal cuo As Integer) cuobd.pagarcuota(id, cuo) End Sub 'requisitos Public Sub registar_requisitos(ByVal idr As String, ByVal idd As String, ByVal forl As String, ByVal idc As String) req.setdrequisitos(idr, idd, forl, idc) reqbd.setrequisitos(req) End Sub Public Function getrequisitos() As DataSet Dim dt As DataSet dt = reqbd.getrequisitos() getrequisitos = dt End Function 116 Public Function getrequisitoscredito(ByVal id As String) As DataSet Dim dt As DataSet dt = reqbd.getrequisitosidcredito(id) getrequisitoscredito = dt End Function Public Function getrequisitosid(ByVal id As String) As requisitos Dim rq As requisitos rq = reqbd.getrequisitosid(id) getrequisitosid = rq End Function Public Sub del_requisitos(ByVal id As String) reqbd.delrequisitos(id) End Sub Public Sub udp_requisitos(ByVal idr As String, ByVal idd As String, ByVal forl As String, ByVal idc As String) req.setdrequisitos(idr, idd, forl, idc) reqbd.updaterequisito(req) End Sub 'Tasas Public Sub registar_tasas(ByVal idt As String, ByVal des As String, ByVal val As Double, ByVal fec As Date) tas.settasas(idt, des, val, fec) tasbd.settasa(tas) End Sub Public Function gettasa() As DataSet Dim dt As DataSet dt = tasbd.gettasa() gettasa = dt End Function Public Function gettasaid(ByVal id As String) As tasas Dim ts As tasas ts = tasbd.gettasaid(id) gettasaid = ts End Function Public Sub del_tasas(ByVal id As String) tasbd.deltasa(id) End Sub Public Sub udp_tasas(ByVal idt As String, ByVal des As String, ByVal val As Double, ByVal fec As Date) tas.settasas(idt, des, val, fec) tasbd.updatetasa(tas) End Sub 'Documentos Public Sub registrar_documentos(ByVal iddoc As String, ByVal des As String, ByVal cant As Integer) doc.setdocumentos(iddoc, des, cant) docbd.setdocumento(doc) End Sub Public Function getdocumento() As DataSet Dim dt As DataSet dt = docbd.getdocumentos() getdocumento = dt End Function Public Function getdocumentoid(ByVal id As String) As documentos 117 Dim dc As documentos dc = docbd.getdocumentosid(id) getdocumentoid = dc End Function Public Sub del_documento(ByVal id As String) docbd.deldocumentos(id) End Sub Public Sub udp_documento(ByVal idd As String, ByVal des As String, ByVal can As Integer) doc.setdocumentos(idd, des, can) docbd.updatedocumentos(doc) End Sub 'tipos de credito Public Sub registrar_tipo_credito(ByVal idcre As String, ByVal des As String, ByVal pre As Double) tcre.settipocredito(idcre, des, pre) tcrebd.settipocredito(tcre) End Sub Public Function gettipocredito() As DataSet Dim dt As DataSet dt = tcrebd.gettipocredito() gettipocredito = dt End Function Public Function gettipocreditoid(ByVal id As String) As tipocredito Dim tc As tipocredito tc = tcrebd.gettipocreditoid(id) gettipocreditoid = tc End Function Public Sub del_tipocredito(ByVal id As String) tcrebd.deltipocredito(id) End Sub Public Sub udp_tipocredito(ByVal idc As String, ByVal des As String, ByVal val As Double) tcre.settipocredito(idc, des, val) tcrebd.updattipocredito(tcre) End Sub End Class 118 Base de datos USE [creditos] GO /****** Objeto: Table [dbo].[documentos] Fecha de la secuencia de comandos: 05/28/2008 22:01:46 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[documentos]( [iddocumento] [char](10) NOT NULL, [descripcion] [text] NULL, [cantidad] [int] NOT NULL, CONSTRAINT [PK_documentos] PRIMARY KEY CLUSTERED ( [iddocumento] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[tipocreditos] Fecha de la secuencia de comandos: 05/28/2008 22:02:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[tipocreditos]( [idcredito] [char](10) NOT NULL, [descripcion] [text] NULL, [presupuesto] [int] NOT NULL, CONSTRAINT [PK_tipocreditos] PRIMARY KEY CLUSTERED ( [idcredito] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[requisitos] Fecha de la secuencia de comandos: 05/28/2008 22:01:56 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON 119 GO CREATE TABLE [dbo].[requisitos]( [idrequisito] [char](10) NOT NULL, [iddocumento] [char](10) NULL, [formalaboral] [text] NULL, [idcredito] [char](10) NULL, CONSTRAINT [PK_requisitos] PRIMARY KEY CLUSTERED ( [idrequisito] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[clientes] Fecha de la secuencia de comandos: 05/28/2008 22:01:39 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[clientes]( [idcliente] [char](10) NOT NULL, [nombrebusqueda] [text] NULL, [primernombre] [text] NOT NULL, [segundonombre] [text] NULL, [primerapellido] [text] NOT NULL, [segundoapellido] [text] NULL, [Direccion] [text] NOT NULL, [telefono] [text] NOT NULL, [movil] [text] NULL, [fax] [text] NULL, [email] [text] NULL, [vehiculo] [text] NULL, [vivienda] [text] NULL, [profesion] [text] NULL, [fechanacimiento] [datetime] NULL, [formalaboral] [text] NULL, CONSTRAINT [PK__clientes__0519C6AF] PRIMARY KEY CLUSTERED ( [idcliente] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[cuotas] Fecha de la secuencia de comandos: 05/28/2008 22:01:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON 120 GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[cuotas]( [idcredito] [char](10) NULL, [cuota] [int] NULL, [fechapago] [datetime] NULL, [capital] [numeric](18, 2) NULL, [interes] [numeric](18, 2) NULL, [valcuota] [numeric](18, 2) NULL, [saldo] [numeric](18, 2) NULL, [pago] [text] NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[usuarios] Fecha de la secuencia de comandos: 05/28/2008 22:02:04 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[usuarios]( [usuario] [char](10) NOT NULL, [password] [text] NULL, [perfil] [text] NULL, [activo] [char](10) NULL, [nombre] [text] NULL, [apellido] [text] NULL, [identificacion] [text] NULL, CONSTRAINT [PK_usuarios] PRIMARY KEY CLUSTERED ( [usuario] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[registrocredito] Fecha de la secuencia de comandos: 05/28/2008 22:01:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[registrocredito]( [idcredito] [char](10) NOT NULL, [cliente] [char](10) NOT NULL, [nombrebusqueda] [text] NULL, [valorsolicitado] [int] NULL, 121 [valoraprobado] [int] NULL, [fechapresupuesto] [datetime] NULL, [fechainicial] [datetime] NULL, [fechafinal] [datetime] NULL, [tipocredito] [text] NULL, [numerocuotas] [int] NULL, [periodo] [text] NULL, [tea] [float] NULL, [tasa] [text] NULL, [estado] [text] NULL, [formapago] [text] NULL, CONSTRAINT [FK_registrocredito_1] PRIMARY KEY CLUSTERED ( [idcredito] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: Table [dbo].[tasas] Fecha de la secuencia de comandos: 05/28/2008 22:01:59 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[tasas]( [idtasa] [char](10) NOT NULL, [descripcion] [text] NULL, [fecha] [datetime] NULL, [valor] [float] NOT NULL, PRIMARY KEY CLUSTERED ( [idtasa] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO SET ANSI_PADDING OFF GO /****** Objeto: ForeignKey [FK_clientes_clientes] Fecha de la secuencia de comandos: 05/28/2008 22:01:39 ******/ ALTER TABLE [dbo].[clientes] WITH CHECK ADD CONSTRAINT [FK_clientes_clientes] FOREIGN KEY([idcliente]) REFERENCES [dbo].[clientes] ([idcliente]) GO ALTER TABLE [dbo].[clientes] CHECK CONSTRAINT [FK_clientes_clientes] GO 122