Proyecto Final de Programación 2
Julian Yesid Gacha Gomez
Universidad El Bosque
Profesor
Wilson Mauro Rojas Reales
Proyecto Final de Programación 2, Universidad El Bosque.
Bogotá D.C, 2024
1
Índice
1. Introducción pág. 3
2. Requerimiento del sistema pág. 5
3. Arquitectura del sistema pág. 6
4. Instalación pág. 8
4.1 Preparación del Entorno pág. 8
4.2 Instalación del sistema pág. 8
4.3 Ejecución pág. 9
5. Funcionalidades del sistema pág. 11
5.1 Modulo pág. 11
6. Base de datos pág. 14
7. Seguridad pág. 17
8. Mantenimiento y soluciones pág. 19
9. Anexos pág. 22
2
Introducción
Nombre del Proyecto: Sophy´s
Versión del Software: 1.0 Versión
Fecha de Elaboración: 25 de noviembre del 2024
Responsable(s): Julian Yesid Gacha Gomez
Descripción General:
• Propósito del proyecto:
El objetivo principal de este proyecto es desarrollar un sistema de información para
SOPHY’s que automatice el proceso de compra y venta de productos farmacéuticos,
permitiendo a la droguería optimizar sus operaciones diarias, mejorar la gestión de
inventarios y ventas, y generar reportes estadísticos que faciliten la toma de
decisiones estratégicas en tiempo real. Esto permitirá a la empresa monitorear su
estado financiero (pérdidas y ganancias) de manera eficiente y brindar un mejor
servicio a sus clientes.
• Breve descripción del sistema:
El sistema de información estará diseñado para reemplazar el actual modelo de
gestión basado en archivos de Excel. Será una aplicación integrada que incluirá los
siguientes módulos y funcionalidades clave:
1. Gestión de Medicamentos:
Registro y actualización de los datos de los medicamentos, incluyendo su nombre,
proveedor, precios y stock.
Control de inventarios con alertas para productos con alta rotación que necesiten
reposición.
2. Gestión de Ventas:
Registro de ventas diarias por cliente.
Aplicación de reglas de negocio para servicios a domicilio:
Clientes frecuentes: servicio gratuito en el mismo barrio.
Clientes esporádicos: costo adicional si el valor de la compra supera $30,000.
Restricción: sin servicios a domicilio para compras menores a $30,000.
3
3. Gestión de Clientes:
Clasificación de clientes en frecuentes y esporádicos.
Registro de datos básicos como dirección, teléfono y tipo de cliente.
4. Reportes Estadísticos:
Reportes diarios de cierre con análisis de pérdidas y ganancias.
Estadísticas de ventas segmentadas por producto, cliente y proveedor.
Histórico de compras y ventas para análisis a largo plazo.
5. Optimización de Procesos:
Agilización del proceso de cierre diario con generación automática de reportes.
Integración con módulos de inventario y proveedores para automatizar la reposición
de productos.
6. Toma de Decisiones:
Datos en tiempo real para la evaluación del estado financiero de la empresa.
Reportes personalizables según las necesidades de la gerencia.
4
Requisitos del sistema
Hardware:
• Procesador: Intel Core i3 o equivalente (mínimo 2 núcleos, 2.4 GHz).
• RAM: 4 GB (8 GB recomendado para un mejor rendimiento).
• Espacio en Disco: 20 GB libres (para instalación del sistema y base de datos).
Software:
• Sistema Operativo: Windows 11.
• Entornos de Desarrollo: Inteliji, VS Code
• Bases de Datos: MySQL
5
Arquitectura del sistema
Diagrama de arquitectura
El sistema sigue una arquitectura multicapa diseñada para asegurar la separación de
responsabilidades y facilitar el mantenimiento y escalabilidad del sistema. A continuación,
se describen las capas y componentes principales:
1. Capa de Presentación (Frontend)
• Framework utilizado:
React.js para desarrollar interfaces dinámicas y responsivas.
• Funcionalidades principales:
Proporciona una interfaz de usuario intuitiva para gestionar medicamentos,
clientes y ventas.
Formularios interactivos para registrar datos.
6
2. Capa de Negocios (Backend)
• Servicios y tecnologías usadas:
Spring Boot:
o Implementa la lógica de negocio.
o Exposición de API REST para integración con la capa de presentación.
o Java como lenguaje principal.
• Propósito:
o Procesar solicitudes de la capa de presentación.
o Aplicar validaciones y ejecutar reglas de negocio.
o Generar reportes de pérdidas y ganancias.
3. Capa de Persistencia
• Tecnologías utilizadas:
Hibernate (JPA) para el mapeo objeto-relacional (ORM).
Operaciones CRUD para medicamentos, clientes y ventas.
• Propósito:
• Abstraer el acceso a los datos mediante repositorios.
4. Capa de Datos (Base de Datos)
• Base de Datos utilizada: MySQL.
• Estructura básica:
• Tablas principales:
o Medicamentos: Registro de productos disponibles.
o Clientes: Información básica de clientes frecuentes y esporádicos.
o Ventas: Detalles de cada transacción.
• Configuración mediante Hibernate en la capa de persistencia.
7
Instalación
Preparación del Entorno
Asegúrate de tener instaladas las siguientes herramientas para configurar el entorno de
desarrollo:
• Java Development Kit (JDK) 17 o superior: Necesario para ejecutar el backend
desarrollado con Spring Boot.
• Node.js (versión 16 o superior): Requerido para manejar el frontend con
React.js.
• MySQL Server (versión 9.0): Base de datos utilizada para almacenar la
información.
• Postman (opcional): Herramienta para probar las APIs REST.
• Backend: Eclipse, IntelliJ IDEA, o cualquier editor compatible con Java.
• Frontend: Visual Studio Code.
• Git: Para el control de versiones y gestión de repositorios.
• Navegador Web: Preferiblemente Google Chrome para pruebas de la
aplicación.
Herramientas adicionales:
• MySQL Workbench (opcional): Para administrar la base de datos visualmente.
• Dbeaver (opcional): Para administrar la base de datos por parte visual.
• Maven: Administrador de dependencias para el proyecto backend.
4.2. Instalación del Sistema
Sigue estos pasos para instalar el sistema:
• Descargar el software
Frontend: Clonar o descargar el repositorio del proyecto React
Backend: Clonar o descargar el repositorio del proyecto Spring Boot
• Configuración del Backend
Paso 1: Configurar la base de datos en MySQL:
o Crear una base de datos llamada sophy
o Configurar las credenciales (usuario y contraseña) en el archivo
application.properties del proyecto.
8
Ejemplo:
spring.datasource.url=jdbc:mysql://localhost:3306/sophy
spring.datasource.username=[usuario]
spring.datasource.password=[contraseña]
Paso 2: Compilar y ejecutar el proyecto:
o Abre el proyecto en tu IDE preferido.
o Ejecuta el comando “mvn clean install” para compilar y descargar las dependencias.
o Inicia el servidor ejecutando la clase principal del proyecto).
o Configuración del Frontend
Paso 1: Instalar dependencias:
o Navega al directorio del proyecto frontend con la terminal.
o Ejecuta el comando “npm install” para instalar las dependencias del proyecto.
Paso 2: Configurar la URL del backend en el archivo de configuración del frontend:
• Busca el archivo donde se definen las URLs de la API y actualiza la dirección al
servidor backend
Paso 3: Iniciar el servidor de desarrollo:
• Ejecuta el comando “npm start” para iniciar el servidor local del frontend.
4.3. Ejecución
Para iniciar el sistema:
• Iniciar la base de datos:
Asegúrate de que MySQL esté corriendo.
Comprueba que la base de datos sophy esté configurada correctamente.
• Iniciar el backend:
Ejecuta el servidor Spring Boot desde tu IDE o mediante el comando:
o “bash”
o “mvn spring-boot:run”
9
• Iniciar el frontend:
Ejecuta el servidor React.js con el comando:
o “bash”
o “npm start
Abre un navegador web y accede a la URL del frontend (http://localhost:“Puerto
Configurado”).
10
Funcionalidades del sistema
5.1. Módulo de Gestión de Medicamentos
Este módulo permite a la empresa registrar, actualizar y consultar los medicamentos
disponibles en inventario, gestionando la información clave como precios, stock y
proveedores.
• Flujo de Funcionalidad:
• Registrar Medicamento:
El usuario accede al formulario de registro de medicamentos.
Ingresa datos como nombre, proveedor, precio de compra y venta, y cantidad
inicial de stock.
El sistema valida los datos y guarda el registro.
• Consultar Inventario:
El usuario selecciona la opción "Consultar Inventario".
El sistema muestra una tabla con todos los medicamentos y su stock actual.
• Actualizar Medicamento:
El usuario selecciona un medicamento de la lista.
Modifica los datos y guarda los cambios.
El sistema actualiza el registro en la base de datos.
5.2. Módulo de Vistas
Pantalla: Registro de Medicamentos
11
Propósito: Permitir al usuario ingresar nuevos medicamentos al sistema.
Elementos:
• Botones:
o Enviar: Guarda el nuevo medicamento en la base de datos.
o Cancelar: Limpia el formulario sin guardar los cambios.
• Formularios:
o Nombre del Medicamento (validación: requerido, texto).
o Precio de Compra (validación: requerido, numérico).
o Precio de Venta (validación: requerido, numérico).
o Stock Inicial (validación: requerido, entero).
o Proveedor (validación: requerido, texto).
Flujo:
El usuario completa los campos del formulario.
Presiona el botón "Enviar".
El sistema valida los datos y registra el medicamento.
Resultado esperado: Muestra un mensaje de éxito y redirige a la lista de medicamentos.
Pantalla: Consulta de Inventario
Propósito: Mostrar al usuario una lista de medicamentos disponibles con detalles como
stock y precios.
12
Elementos:
• Botones:
o Editar: Permite modificar los datos del medicamento seleccionado.
o Eliminar: Borra un medicamento del inventario.
Flujo:
El usuario accede a la pantalla de inventario.
Selecciona un medicamento de la tabla y presiona "Editar" o "Eliminar".
El sistema realiza la acción solicitada y actualiza la tabla.
13
Base de datos
6.1. Modelo Relacional
El modelo relacional de la base de datos se encuentra diseñado para cubrir las necesidades
operativas del sistema de SOPHY’s. Incluye tablas principales como Producto, Usuario,
Auditoria, Categoría, Parámetro, y Tipo_Usuario. A continuación, se presenta una breve
descripción de las tablas y sus relaciones:
14
6.2. Descripción de Tablas
1. Tabla: Producto
• Descripción: Almacena información sobre los productos disponibles, sus
categorías y detalles relacionados con inventarios y precios.
o Columnas:
▪ id (SMALLINT): Identificador único del producto.
▪ categoría (SMALLINT): Relación con la tabla Categoría.
▪ lineaReferencia (SMALLINT): Línea de referencia del producto.
▪ código (VARCHAR (12)): Código único del producto.
▪ descripción (VARCHAR (60)): Descripción detallada del producto.
▪ existencia (INT): Cantidad disponible en inventario.
▪ precio_venta_actual (DECIMAL (10,0)): Precio de venta actual.
▪ precio_venta_anterior (DECIMAL (10,0)): Precio de venta anterior.
▪ costo venta (DECIMAL (10,0)): Costo de venta del producto.
▪ margen utilidad (DOUBLE): Margen de utilidad calculado.
▪ stock_minimo (INT): Cantidad mínima para inventario.
▪ stock_maximo (INT): Cantidad máxima para inventario.
▪ estado (VARCHAR (1)): Estado del producto (activo/inactivo).
2. Tabla: Usuario
o Descripción: Almacena los datos de los usuarios del sistema, incluyendo sus
credenciales y roles.
o Columnas:
▪ id (BIGINT): Identificador único del usuario.
▪ login (VARCHAR (10)): Nombre de usuario para autenticación.
▪ clave (VARCHAR (256)): Contraseña cifrada.
▪ nombres (VARCHAR (45)): Nombres del usuario.
15
▪ apellidos (VARCHAR (45)): Apellidos del usuario.
▪ id_tipo_usuario (SMALLINT): Relación con la tabla Tipo_Usuario.
▪ estado (VARCHAR (1)): Estado del usuario (activo/inactivo).
▪ primer_ingreso (TINYINT (1)): Indica si es el primer ingreso del usuario.
3. Tabla: Auditoria
o Descripción: Registra las acciones realizadas en el sistema para garantizar la
trazabilidad.
o Columnas:
▪ id (BIGINT): Identificador único del registro de auditoría.
▪ fecha_auditoria (DATETIME): Fecha y hora de la acción.
▪ usuario_auditoria (VARCHAR (8)): Usuario que realizó la acción.
▪ accion_auditoria (VARCHAR (1)): Tipo de acción (insertar, actualizar,
eliminar).
▪ comentario_auditoria (VARCHAR (60)): Descripción de la acción.
▪ address_auditoria (VARCHAR(20)): Dirección IP desde la que se realizó
la acción.
6.3. Consultas Frecuentes
• Cada tabla va a manejar como consulta frecuente un CRUD. Que se conoce como
métodos de agregar, eliminar, actualizar y buscar.
16
Seguridad
Mecanismos Implementados
1. Autenticación:
• Usuario/Contraseña:
o El sistema utiliza una autenticación basada en usuario y contraseña.
o Restricciones de contraseñas:
o Longitud: mínimo 4 y máximo 6 caracteres.
o Complejidad: debe contener al menos una letra mayúscula,
una letra minúscula y un número.
o Almacenamiento seguro: contraseñas cifradas utilizando el
algoritmo SHA-1.
2. Validaciones:
• Contraseñas: Verificación de formato al momento de creación o
actualización.
3. Auditoría y Trazabilidad:
• Se almacena cada acción realizada por los usuarios, incluyendo:
o Inserciones, actualizaciones y eliminaciones.
• Información registrada:
o Usuario que realiza la acción.
o Dirección IP del cliente.
o Fecha y hora de la acción.
• Funcionalidad de consulta por usuario y rango de fechas para revisar el
historial.
4. Mecanismo de Bloqueo de Usuarios:
• Bloqueo automático tras 3 intentos fallidos de autenticación.
• Envío de correo electrónico al Administrador del sistema notificando el
evento.
17
5. Notificaciones Automáticas:
• Al crear un nuevo usuario:
o El sistema genera una contraseña aleatoria y la envía al correo del
usuario.
o El usuario debe cambiar su contraseña al primer inicio de sesión.
• Al bloqueo de un usuario:
o Notificación automática al Administrador general.
6. Gestión de Contraseñas:
• Parámetro de vigencia de contraseña configurable (en días).
• Obligación de cambio de contraseña tras el vencimiento.
7. Seguridad de Pagos:
• Integración con PSE para pagos electrónicos.
• Pagos en efectivo habilitados.
Permisos por Roles
1. Administrador:
• Acceso completo a todos los módulos del sistema.
• Gestión de usuarios (crear, actualizar, eliminar, desbloquear).
• Configuración de parámetros del sistema, como intentos fallidos y vigencia
de contraseñas.
• Consulta de auditoría.
2. Usuario Regular:
• Acceso limitado según el perfil asignado.
• Registro y consulta de datos dentro de su módulo asignado (ventas,
medicamentos, etc.).
18
Mantenimiento y Solución
Logs: Ubicación y Análisis
1. Ubicación de los Logs:
• Los archivos de log generados por el sistema se almacenan en el directorio
logs/ dentro del servidor donde está implementado el backend.
• Nombre de archivo: application.log (configurado mediante log4j).
2. Tipos de Logs Generados:
• INFO: Para registrar operaciones exitosas, como inicio de sesión o
generación de reportes.
• WARN: Para advertencias sobre posibles problemas, como baja
disponibilidad de stock.
• ERROR: Para registrar errores críticos que requieren atención inmediata,
como fallos en la conexión a la base de datos.
3. Análisis de Logs:
• Revisión periódica de los logs para identificar patrones de fallos.
Errores Comunes y Soluciones
1. Error: Fallo en la conexión a la base de datos.
• Descripción: El backend no puede conectarse a la base de datos MySQL.
• Solución:
1. Verifica que el servicio MySQL esté corriendo en el servidor.
2. Confirma las credenciales y la URL en el archivo
application.properties.
3. Asegúrate de que el puerto de la base de datos (por defecto, 3306) y
la ip de donde esta alojada la base de datos.
19
2. Error: Usuario bloqueado tras intentos fallidos.
• Descripción: Un usuario no puede acceder al sistema debido a tres intentos
fallidos de inicio de sesión.
• Solución:
1. Inicia sesión como Administrador.
2. Ve al módulo de gestión de usuarios y desbloquea el usuario.
3. Notifica al usuario que debe restablecer su contraseña.
3. Error: No se generan reportes.
• Descripción: El sistema no produce reportes estadísticos o de cierre.
• Solución:
1. Verifica que el servicio del backend esté corriendo correctamente.
2. Revisa los logs para identificar posibles fallos en las consultas SQL.
3. Asegúrate de que los datos necesarios estén correctamente
almacenados en la base de datos.
4. Error: El frontend no carga o muestra una página en blanco.
• Descripción: El servidor React.js no responde o hay errores en la interfaz.
• Solución:
1. Ejecuta “npm install” en el proyecto frontend para instalar las
dependencias.
2. Verifica que el servidor de desarrollo esté corriendo “npm start”.
3. Asegúrate de que la URL del backend esté configurada
correctamente en el archivo de configuración del frontend.
5. Error: Problemas con autenticación de usuarios.
• Descripción: Los usuarios no pueden iniciar sesión correctamente.
• Solución:
1. Revisa los logs para detectar errores relacionados con la
autenticación.
20
2. Confirma que las contraseñas almacenadas están cifradas
correctamente.
3. Comprueba que las políticas de validación de contraseñas se están
aplicando correctamente.
21
Anexo
9.1. Referencias
• Documentos utilizados para el diseño y desarrollo del sistema:
1. Documentación oficial de Spring Boot: https://spring.io/projects/spring-boot
2. Guía de usuario de Hibernate: https://hibernate.org/documentation/
3. Manual de React: https://react.dev/learn
4. Documentación de MySQL: https://dev.mysql.com/doc/
5. Especificaciones del proyecto proporcionadas por SOPHY’s.
9.2. Glosario
• API REST: Interfaz que permite la comunicación entre sistemas mediante el uso de
estándares HTTP.
• Hibernate (JPA): Herramienta de mapeo objeto-relacional para simplificar el acceso
a bases de datos desde aplicaciones Java.
• Spring Boot: Framework de Java para el desarrollo rápido de aplicaciones backend.
• MySQL: Sistema de gestión de bases de datos relacional.
• SHA-1: Algoritmo de cifrado usado para asegurar contraseñas.
• IP (Internet Protocol): Dirección única que identifica un dispositivo en una red.
• Doble Factor de Autenticación: Sistema que añade una capa extra de seguridad al
requerir una segunda forma de verificación.
9.3. Diagramas Complementarios
1. Mockups:
• https://go.glideapps.com/app/tkI9Zsxn7Jh8mYacGnBQ/layout
2. Diagrama de Casos de Uso:
3. Diagrama Entidad-Relación:
22