| Atributo | Valor |
|---|---|
| Proyecto | proyecto_tdg2 |
| Título | Systemsware: Sistema de Gestión de Inventario |
| Versión | 2.0.0 |
| Estado | Producción estable |
| Autor | FiliphNicolas |
| Última actualización | Marzo 2026 |
| Repositorio | github.com/FiliphNicolas/proyecto_tdg2 |
Systemsware es un sistema de gestión web completo diseñado para pequeñas y medianas empresas que requieren control integral de inventario, pedidos, usuarios y atención al cliente. La aplicación centraliza la gestión de productos, almacenes, movimientos de stock, estado de cuentas y proporciona herramientas avanzadas de reportes y un chatbot inteligente para soporte 24/7.
Proveer una plataforma centralizada y segura para la administración eficiente del inventario, permitiendo a administradores y empleados gestionar productos, pedidos y reportes desde una interfaz web moderna y responsiva.
| Capa | Tecnología | Versión | Descripción |
|---|---|---|---|
| Backend | Node.js + Express.js | v14+ | Servidor web y API REST |
| Base de datos | PostgreSQL | v12+ | Almacenamiento relacional |
| Autenticación | JWT (jsonwebtoken) | Última estable | Tokens de sesión (8h) |
| Cifrado | bcrypt | v5+ | Hash de contraseñas (salt 10) |
| Reportes | PDFKit | Última estable | Generación de PDF en servidor |
| Frontend | HTML5 + CSS3 + JS | Vanilla | Sin frameworks de UI |
| Seguridad CORS | cors (npm) | Última estable | Control de orígenes |
proyecto_tdg2/
├── server.js # Servidor Express principal
├── package.json # Dependencias del proyecto
├── .env # Variables de entorno
├── .gitignore # Archivos ignorados por Git
├── javascript/
│ ├── databasepg.js # Conexión a PostgreSQL
│ ├── auth-middleware.js # Middleware de autenticación JWT
│ └── [otros archivos JS]
├── css/
│ └── styles.css # Estilos globales
├── pages/
│ ├── inicio.html # Página principal / Dashboard
│ ├── iniciar-sesion.html # Login
│ ├── registrar-cuenta.html # Registro de usuarios
│ ├── perfil.html # Perfil de usuario
│ ├── productos.html # Gestión de productos
│ ├── reporte-inventario.html # Reportes con exportación PDF
│ ├── servicio.html # Servicios
│ └── [otras páginas HTML]
├── routes/
│ ├── auth.js # Rutas de autenticación
│ ├── productos.js # Rutas de productos
│ ├── usuarios.js # Rutas de usuarios
│ ├── inventario.js # Rutas de inventario
│ ├── auditoria.js # Rutas de auditoría
│ ├── pedidos.js # Rutas de pedidos
│ ├── clientes.js # Rutas de clientes
│ ├── sedes.js # Rutas de sedes
│ └── estadisticas.js # Rutas de estadísticas
├── sql/
│ ├── schema-completo.sql # Esquema completo de la base de datos
│ └── [otros archivos SQL]
└── public/ # Archivos estáticos públicos
POST /api/auth/loginbcrypt.compare(){ id_usuario, nombre_usuario, rol } y expiración de 8 horasAuthorizationauthMiddleware en routes/auth.js valida el token en cada ruta protegidaLa conexión a PostgreSQL se configura en javascript/databasepg.js mediante variables de entorno:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=systemsware
DB_USER=postgres
DB_PASSWORD=tu_contraseña
PORT=3000
JWT_SECRET=tu_secreto_jwt_aqui
| Tabla | Descripción | Campos clave |
|---|---|---|
usuario |
Registro de cuentas del sistema | id_usuario, nombre_usuario, email, contrasena, rol, activo, id_sede |
producto |
Catálogo de productos del inventario | codigo_producto, nombre, descripcion, precio, cantidad_stock, categoria, id_sede |
inventario |
Historial de entradas/salidas de stock | id_movimiento, codigo_producto, tipo_movimiento, cantidad, id_sede, fecha_movimiento |
pedido |
Pedidos realizados por usuarios | id_pedido, id_cliente, id_usuario, id_sede, fecha_pedido, total, estado |
detalle_pedido |
Líneas de cada pedido | codigo_detalle, id_pedido, codigo_producto, cantidad, precio_unitario |
sede |
Sedes o almacenes del sistema | id_sede, nombre, ciudad, direccion, telefono, email, encargado, activo |
auditoria |
Registro de acciones del sistema | id_auditoria, id_usuario, tabla_afectada, accion, fecha_accion, detalles |
| Rol | Descripción | Permisos principales |
|---|---|---|
admin |
Administrador del sistema | Acceso total: usuarios, productos, pedidos, reportes, configuración |
empleado |
Personal interno | Gestión de inventario, movimientos, ver reportes |
vendedor |
Agente de ventas | Crear pedidos, consultar productos, ver estado de cuenta |
usuario |
Cliente registrado | Ver productos, crear pedidos, ver historial propio |
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
| POST | /api/register |
Registrar nuevo usuario | No |
| POST | /api/login |
Iniciar sesión y obtener JWT | No |
| POST | /api/logout |
Cerrar sesión | Sí |
| GET | /api/profile |
Obtener datos del usuario actual | Sí |
| PUT | /api/profile |
Actualizar datos del perfil | Sí |
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
| GET | /api/productos |
Listar todos los productos | Sí |
| GET | /api/productos/:codigo |
Obtener producto por código | Sí |
| POST | /api/productos |
Crear nuevo producto | Admin/Empleado |
| PUT | /api/productos/:codigo |
Actualizar producto | Admin/Empleado |
| DELETE | /api/public/productos/:codigo |
Eliminar producto | Público (para pruebas) |
| GET | /api/movimientos |
Listar movimientos de stock | Admin/Empleado |
| POST | /api/movimientos |
Registrar movimiento (entrada/salida) | Admin/Empleado |
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
| GET | /api/pedidos |
Listar todos los pedidos | Sí |
| POST | /api/pedidos |
Crear nuevo pedido | Sí |
| PUT | /api/pedidos/:id/estado |
Actualizar estado del pedido | Admin/Empleado |
| Método | Ruta | Descripción | Auth |
|---|---|---|---|
| GET | /api/reportes/inventario |
Reporte de stock actual con filtros | Admin/Empleado |
| GET | /api/reportes/ventas |
Reporte de pedidos y ventas | Admin |
| GET | /api/reportes/pdf |
Exportar reporte como PDF | Admin/Empleado |
Paso 1: Clonar el repositorio
git clone https://github.com/FiliphNicolas/proyecto_tdg2.git
cd proyecto_tdg2
Paso 2: Instalar dependencias
npm install
Paso 3: Crear la base de datos
psql -U postgres
CREATE DATABASE Systemsware;
\q
Paso 4: Ejecutar el esquema SQL
psql -U postgres -d systemsware -f sql/schema-completo.sql
Paso 5 (Opcional): Cargar datos de prueba Los datos de prueba están incluidos en el archivo schema-completo.sql
Paso 6: Configurar variables de entorno
Copiar el archivo .env.example a .env y configurar:
cp .env.example .env
Editar .env con tus credenciales:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=systemsware
DB_USER=postgres
DB_PASSWORD=tu_contraseña
PORT=3000
JWT_SECRET=tu_secreto_jwt_aqui
Paso 7: Iniciar el servidor
npm start
Abrir en el navegador: http://localhost:3000
| Usuario | Correo | Contraseña | Rol |
|---|---|---|---|
| admin | admin@systemsware.com | 123456 | Admin |
| empleado1 | empleado1@systemsware.com | 123456 | Empleado |
| empleado2 | empleado2@systemsware.com | 123456 | Empleado |
| vendedor | vendedor@systemsware.com | 123456 | Vendedor |
Módulo central del sistema. Permite crear, editar, consultar y eliminar productos del catálogo. Registra movimientos de stock (entradas, salidas y ajustes) con trazabilidad completa por usuario y fecha. Cada movimiento queda registrado con el usuario que lo realizó y la fecha/hora exacta.
Permite a los usuarios crear pedidos seleccionando productos del catálogo. Cada pedido tiene un ciclo de vida rastreable: pendiente → procesando → completado o cancelado. Los administradores y empleados pueden actualizar el estado y consultar el historial completo.
Genera reportes de inventario y ventas con filtros avanzados (categoría, rango de fechas, rango de precios). Exporta a PDF usando PDFKit con plantillas personalizadas, y a CSV para análisis en hojas de cálculo.
Asistente virtual disponible 24/7 integrado directamente en la aplicación. Responde preguntas frecuentes sobre servicios, precios, soporte e inventario. Incluye respuestas rápidas predefinidas y un indicador de escritura animado.
Panel personal con estadísticas en tiempo real: total de pedidos, monto gastado, pedidos pendientes y completados. Incluye historial de pedidos recientes y movimientos de inventario para roles autorizados. Avatar generado automáticamente con las iniciales del usuario.
Los tokens JWT se generan al iniciar sesión y contienen el ID y rol del usuario. Tienen una duración de 8 horas. El middleware valida el token antes de procesar cada solicitud a rutas protegidas.
Todas las contraseñas se almacenan con bcrypt (salt 10). Nunca se guardan en texto plano. La verificación usa bcrypt.compare() al iniciar sesión.
JWT_SECRET por un valor aleatorio seguro de al menos 32 caracteres| Error | Causa probable | Solución |
|---|---|---|
| No se pudo conectar al servidor | Servidor Node.js no está corriendo | Ejecutar npm start y verificar la consola |
| Error 405 Method Not Allowed | Caché del navegador desactualizado | Reiniciar servidor y limpiar caché (Ctrl+Shift+Supr) |
| Connection refused en base de datos | PostgreSQL no está activo | Iniciar el servicio PostgreSQL en el sistema operativo |
| Base de datos no existe | No se creó la BD antes del SQL | Ejecutar: CREATE DATABASE Systemsware; |
| Token JWT inválido | Token expirado o mal formado | Cerrar sesión e iniciar sesión nuevamente |
| Error 403 Forbidden | Rol sin permisos para la operación | Verificar que el usuario tenga el rol adecuado |
Para desarrollo activo con recarga automática:
npm install -g nodemon
nodemon server.js
O usando npm scripts:
npm run dev
server.js usando app.get(), app.post(), app.put() o app.delete()db de databasepg.jstry/catch y responder con códigos HTTP apropiadoscamelCasesnake_casekebab-case: /api/estado-cuentatry/catch en todos los handlers| Canal | Información |
|---|---|
| soporte@systemsware.com | |
| Teléfono | +1 (555) 123-4567 |
| Web | www.systemsware.com |
| Repositorio | github.com/FiliphNicolas/proyecto_tdg2 |
Para reportar errores o solicitar nuevas funcionalidades, abrir un Issue en el repositorio de GitHub del proyecto.
Systemsware © 2026 — Todos los derechos reservados