PROYECTO FINAL
- Definir el enunciado del problema a sistematizar según las necesidades detectadas. (Debe ser Claro y tener mínimo 12 tablas) (Entrega 1)
Una familia ha decidido formalizar y organizar su negocio de préstamos, el cual actualmente se realiza de manera informal entre amigos, conocidos y clientes cercanos. Para ello, han decidido implementar un sistema de gestión de préstamos que permita llevar un control completo de los préstamos otorgados, los pagos recibidos, las condiciones acordadas con los clientes, el plan de pago que elija el cliente, así como cualquier mora impuesta por incumplimiento de pago. Además, el sistema debe permitir llevar un historial detallado de cada cliente, incluyendo sus referencias personales y la evolución de sus préstamos y pagos.
El objetivo es crear un sistema que además de gestionar préstamos, permita optimizar el proceso de cobro, seguimiento y organización de la información de cada cliente y transacción, asegurando que los datos sean fácilmente accesibles y gestionables.
Requisitos del sistema:
-
Gestión de clientes: El sistema debe permitir almacenar la información personal de los clientes, incluyendo datos como nombre, dirección, número de teléfono, correo electrónico, referencias personales, y detalles del historial de préstamos previos.
-
Gestión de préstamos: El sistema debe registrar los préstamos otorgados, incluyendo el monto del préstamo, fecha de otorgamiento, condiciones acordadas, tasa de interés, fecha de vencimiento, y el cliente asociado a cada préstamo.
-
Gestión de pagos: El sistema debe permitir registrar cada pago recibido, con detalles como la fecha, el monto pagado, y el préstamo asociado al pago.
-
Planes de pago: El sistema debe permitir a los clientes elegir entre diferentes planes de pago, y el sistema debe almacenar detalles de los plazos acordados y las cuotas de pago que el cliente debe cumplir.
-
Moras: El sistema debe gestionar las moras impuestas a los clientes que no cumplan con los pagos en los plazos acordados, registrando el monto de la mora, la fecha de la mora, y el préstamo afectado.
-
Historial de cliente: El sistema debe llevar un historial detallado de todas las interacciones con cada cliente, incluidos los préstamos previos, pagos realizados, moras, y cambios en los planes de pago.
-
Referencias personales: Cada cliente puede tener varias referencias personales que serán almacenadas en el sistema para poder contactarlas en caso de incumplimiento del pago o para verificar la confiabilidad del clientes
Especificaciones del sistema:
Clientes: El sistema debe almacenar la información básica de cada cliente.
Campos: IDCliente (PK), nombre, apellido, númeroIdentificación, teléfono, dirección.
Préstamos: Cada préstamo otorgado debe registrarse en el sistema, con información sobre el monto prestado, la fecha en la que se solicitó y se aprobó el préstamo, y el estado actual del préstamo.
Campos: CodigoPrestamo (PK), IDCliente (FK que se refiere a la tabla "Clientes"), montoPrestado, fechaSolicitud, fechaAprobación, estado.
Pagos: El sistema debe registrar cada pago realizado por los clientes, incluyendo detalles como el monto pagado, la fecha del pago, el método utilizado y el saldo restante.
Campos: CodigoPago (PK), CodigoPrestamo (FK que se refiere a la tabla "Préstamos"), Codigoplanpago (FK que se refiere a la tabla "Plan de Pago"), montoPagado, fechaPago, metodoPago, saldoRestante.
Condiciones del préstamo: Cada préstamo tiene sus propias condiciones específicas, como la tasa de interés y el plazo en días para la devolución.
Campos: CodigoCondicion (PK), CodigoPrestamo (FK que se refiere a la tabla "Préstamos"), tasaInteres, plazoDias.
Plan de Pago: Algunos préstamos se dividen en planes de pago con cuotas específicas. El sistema debe permitir registrar la cantidad de cuotas y el monto de cada una.
Campos: CodigoPlanpago (PK), CodigoPrestamo (FK que se refiere a la tabla "Préstamos"), montoCuota, cantidadCuotas.
Historial de Préstamos: El sistema debe almacenar un historial de cada préstamo, permitiendo ver el estado actual del préstamo y agregar comentarios si es necesario.
Campos: CodigoHistorial (PK), IDCliente (FK que se refiere a la tabla "Clientes"), CodigoPrestamo (FK que se refiere a la tabla "Préstamos"), estadoActual, comentarios.
Referencias: Los clientes pueden proporcionar referencias personales, que también se registran en el sistema. Cada referencia incluye información de contacto y la relación con el cliente.
Campos: CodigoReferencia (PK), IDCliente (FK que se refiere a la tabla "Clientes"), nombreReferente, IDReferente, relación, telefonoReferente, direccionReferente.
Multas: En caso de incumplimientos, se pueden imponer multas a los clientes. Cada multa debe registrar la razón, el monto, la fecha y el estado de la multa.
Campos: CodigoMulta (PK), CodigoPrestamo (FK que se refiere a la tabla "Préstamos"), IDCiente (FK que se refiere a la tabla "Clientes"), fechaMulta, montoMulta, razón, estadoMulta.
Renegociaciones de préstamo: Llevar control de los cambios o renegociaciones en un préstamo (nuevo plazo, nueva tasa, nuevo plan de pago).
Campos: IdRenegociacion(PK), CodigoPrestamo(FK), fecharenegociacion, nuevaTasaInteres, nuevoPlazo, observaciones
Garantías del préstamo: Registrar las garantías (objetos, propiedades, fiadores) que los clientes ofrecen para respaldar un préstamo.
Campos: IDGarantia(PK), CodigoPrestamo(FK) tipoGarantia, descripcion, valorEstimado, estadoGarantia
Cobradores: Registrar los datos de los cobradores asignados a gestionar los cobros de ciertos préstamos.
Campos: IDCobrador (PK), CodigoPrestamo(FK), nombre1, nombre2, apellido1, apellido2, telefono, IDZona(FK)
Zonas: Asociar a cada cliente una zona para poder tener a la mano las agrupaciones, rutas de cobro o realizar diferentes análisis por sector.
Campos: IDZona(PK), IdMunicipio(FK), IDCliente(FK), CodigoPrestamo(FK)
Municipio: Asociar cada municipio a una zona
Campos: IdMunicipio(PK), nombre
2. REALIZAR LO SIGUIENTE:
2.1. Darle un nombre a la base de datos.
Préstamos amigos
2.2. Listado de tablas que llevara la BD. (Cuales son referenciales y cuales son de movimiento)
Tablas referenciales: Clientes, condiciones de préstamo, referencias, Cobradores, zonas, Garantías, plan de pago, municipio
Tablas de movimiento: Préstamos, pagos, historial de prestamos, multas, Renegociaciones
2.3. Diseñar el diccionario de datos de cada tabla (campo, nombre el campo, tipo, tamaño y descripción).
2.4. Montar o diseñar el modelo entidad relación.

2.5. Dibujar el Diagrama relacional.

3. Crear la BD y las tablas respectivas en MySQL (guardar evidencias del código MySQL con el que resuelva dicha actividad) (Entrega 2)
4. Diseñar ejercicios en los que se apliquen los diferentes comandos que se utilizaron durante el semestre con su respectivo análisis y resultados. (Entrega 3)
5. Sustentación
1) Insertar registros con fechas recientes
Análisis
Nombre de la tabla: prestamo
Campos que contiene: codigo_prestamo, id_cliente, monto_prestado, fecha_solicitud, estado
Comandos: insert, curdate
Sintáxis: insert into prestamo (codigo_prestamo, id_cliente, monto_prestado, fecha_solicitud, estado) values(8881, 10, 800000, '2025-04-05', 'Aprobado'), (8882, 20, 500000, '2025-04-20', 'En proceso'), (8883, 30, 600000, curdate(), 'Activo');

2) Buscar todos los clientes cuyo nombre contengan 'an'
Análisis
Nombre de la tabla: cliente
Campos que contiene: nombre
Comandos: select, where, like
Sintáxis:select * from cliente where nombre like '%an%';

3) Agregar una columna con ENUM a la tabla garantías
Análisis
Nombre de la tabla: garantias
Campos que contiene: nivel_riesgo
Comandos: alter, add, enum, default
Sintáxis: alter table garantias add nivel_riesgo enum ('Alto', 'Medio','Bajo') default 'Medio';

Modificacion de un nivel de riesgo para comprobar el comando

4) Realizar una consulta utilizando INNER JOIN
Análisis
Nombre de la tabla: cliente, prestamo
Campos que contiene: nombre, monto_prestado, id_cliente
Comandos: select, inner join
Sintáxis: select c.nombre, p.monto_prestado from cliente c inner join prestamo p on c.id_cliente = p.id_cliente;

5) Realizar una consulta utilizando LEFT JOIN
Análisis
Nombre de la tabla: cliente, referencias
Campos que contiene: nombre, nombre_referentes, id_cliente
Comandos: select, left join
Sintáxis: select c.nombre, r.nombre_referente from cliente c left join referencias r on c.id_cliente = r.id_cliente;

6) Realizar una consulta utilizando RIGHT JOIN
Análisis
Nombre de la tabla: cliente, historialprestamo
Campos que contiene: nombre, estado_actual, id_cliente
Comandos: select, right join
Sintáxis: select c.nombre, h.estado_actual from historialprestamo h right join cliente c on h.id_cliente = c.id_cliente;

7) Realizar una consulta utilizando JOIN con varias tablas
Análisis
Nombre de la tabla: cliente, prestamo, garantias
Campos que contiene: nombre, fecha_soliticud, tipo_garantia, id_cliente, codigo_prestamo
Comandos: select, join
Sintáxis: select c.nombre, p.fecha_solicitud, g.tipo_garantia from cliente c join prestamo p on c.id_cliente = p.id_cliente join garantias g on p.codigo_prestamo = g.codigo_prestamo;

8) Numerar las multas por cliente
Análisis
Nombre de la tabla: multas
Campos que contiene: id_cliente, monto_multa
Comandos: select, @
Sintáxis: select @n := @n + 1 as numero, id_cliente, monto_multa from multas;

9) Crear una auditoría para la tabla pago
Análisis
Nombre de la tabla: auditoria_pago
Campos que contiene: id, codigo_pago, accion, fecha
Comandos: create
Sintáxis: create table auditoria_pago
-> (id int auto_increment not null primary key,
-> codigo_pago int not null,
-> accion varchar(10) not null,
-> fecha timestamp default current_timestamp);

Creación del trigger para la tabla auditoria_pago

Prueba de la auditoria

10) Crear un usuario y otorgar permisos
Creación de los usuarios:

Prueba con el usuario:

Cómo el usuario tiene permiso únicamente de lectura permite ver los datos de la base de datos

Pero no permite modificar algo dentro de la base de datos por los permisos que tiene
