Sentinel Core es una plataforma web centralizada de gestión de tickets y monitoreo de SLA diseñada específicamente para centros comerciales. El sistema permite optimizar la transparencia y el control operativo mediante el registro digital de incidencias, asignación inteligente de técnicos, seguimiento de acuerdos de nivel de servicio (SLA) y trazabilidad completa de todas las acciones realizadas.
Los centros comerciales enfrentan desafíos operativos derivados de la comunicación verbal e informal:
- Falta de trazabilidad: Los reportes de fallas se realizan de manera verbal, sin registro formal ni evidencia documental
- Sin indicadores de rendimiento: No hay forma de medir tiempos de respuesta ni resolución para evaluar la eficiencia operativa
- Asignación opaca: Los técnicos reciben tareas sin visibilidad de su carga de trabajo actual
- Incidentes duplicados: No existe verificación de tickets previos similares, generando dispersión de esfuerzos
- Sin auditoría: Imposible demostrar qué acciones se tomaron, cuándo y por quién ante situaciones críticas
- Diagnosticar los procesos actuales de reporte y atención de fallas para identificar vulnerabilidades
- Diseñar la arquitectura del sistema y el modelado de base de datos relacional
- Prototipar interfaces intuitivas para registro de tickets y visualización de alertas
- Automatizar el flujo de trabajo de incidencias con persistencia de datos
- Evaluar mediante pruebas de usuario y estrés de datos
| Tecnología | Versión | Descripción |
|---|---|---|
| React | 19.2.4 | Biblioteca UI construir interfaces |
| Vite | 8.0.4 | Build tool y dev server |
| Tailwind CSS | 4.2.2 | Framework CSS utility-first |
| Framer Motion | 12.38.0 | Animaciones y micro-interacciones |
| React Router | 7.14.1 | Enrutamiento SPA |
| Recharts | - | Gráficos y visualizaciones |
| Lucide React | - | Iconos SVG |
| SweetAlert2 | 11.26.24 | Modales y notificaciones |
| Sonner | 2.0.7 | Notificaciones toast |
| XLSX | 0.18.5 | Exportación a Excel |
| Vitest | 4.1.5 | Testing unitario |
| JSdom | 29.0.2 | DOM para testing |
| Tecnología | Versión | Descripción |
|---|---|---|
| Express | 5.2.1 | Framework webNode.js |
| TypeScript | 6.0.2 | Tipado estático |
| Prisma | 7.7.0 | ORM PostgreSQL |
| PostgreSQL | 15+ | Base de datos relacional |
| Zod | 4.3.6 | Validación de esquemas |
| Argon2 | 0.44.0 | Hashing de contraseñas |
| JWT | 9.0.3 | Autenticación tokens |
| Swagger UI | 5.0.1 | Documentación API |
| Vitest | 4.1.4 | Testing |
sentinel-core/
├── frontend/ # Aplicación React
│ ├── src/
│ │ ├── api/ # Cliente API REST
│ │ ├── components/ # Componentes reutilizables
│ │ │ ├── auth/ # Autenticación
│ │ │ ├── common/ # Componentes comunes
│ │ │ ├── dashboard/ # Dashboard KPIs
│ │ │ ├── layout/ # Layout principal
│ │ │ └── ui/ # Componentes UI
│ │ ├── contexts/ # React Context
│ │ ├── hooks/ # Custom hooks
│ │ ├── pages/ # Vistas por rol
│ │ │ ├── admin/ # Panel Admin
│ │ │ ├── requester/# Panel Usuario
│ │ │ └── technician/# Panel Técnico
│ │ ├── routes/ # Definición rutas
│ │ ├── store/ # Estado global
│ │ ├── test/ # Tests componentes
│ │ └── api/ # Mocks API
│ ├── public/ # Assets estáticos
│ └── package.json
│
├── backend/ # API REST
│ ├── prisma/
│ │ ├── migrations/ # Migraciones DB
│ └── seed.ts # Datos iniciales
│ ├── src/
│ │ ├── __tests__/ # Tests unitarios
│ │ ├── middlewares/# Middlewares Express
│ │ ├── routes/ # Endpoints API
│ │ ├── schemas/ # Zod esquemas
│ │ ├── services/ # Lógica negocio
│ │ ├── types/ # Tipos TypeScript
│ │ └── utils/ # Utilidades
│ └── package.json
│
└── README.md
┌─────────────────┐ ┌─────────────────┐
│ User │ │ Category │
├─────────────────┤ ├─────────────────┤
│ id │ │ id │
│ email │ │ name │
│ password │ │ description │
│ firstName │────<│ departmentId │
│ lastName │ │ priority │
│ phone │ │ slaHours │
│ role │ │ active │
│ departmentId │ └─────────────────┘
│ active │ │
│ createdAt │ │
│ updatedAt │ │
└─────────────────┘ │
│ │
│ 1:N │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Assignment │ │ Department │
├─────────────────┤ ├─────────────────┤
│ id │ │ id │
│ ticketId │ │ name │
│ technicianId │ │ description │
│ assignedAt │ │ active │
│ unassignedAt │ └─────────────────┘
│ active │
└─────────────────┘
│
│ 1:N
▼
┌─────────────────┐ ┌─────────────────┐
│ Ticket │ │ Comment │
├─────────────────┤ ├─────────────────┤
│ id │ │ id │
│ ticketCode │────>│ ticketId │
│ title │ │ userId │
│ description │ │ content │
│ location │ │ isInternal │
│ status │ │ createdAt │
│ priority │ └─────────────────┘
│ dueDate │
│ creatorId │ ┌─────────────────┐
│ categoryId │ │ AuditLog
│ slaBreached │ ├─────────────────┤
│ resolutionNote │ │ id │
│ timeSpentMinutes│ │ ticketId │
│ materialsUsed │ │ userId │
│ resolvedAt │ │ action │
│ ratingComment │ │ oldValue │
│ rating │ │ newValue │
│ createdAt │ │ createdAt │
│ updatedAt │ └─────────────────┘
└─────────────────┘
┌──────────────┐
│ OPEN │──── Nuevo ticket creado
└──────┬───────┘
│ Asignado a técnico
▼
┌──────────────┐
│ ASSIGNED │──── Ticket asignado
└──────┬───────┘
│ Inicia trabajo
▼
┌──────────────┐
│ IN_PROGRESS │──── Trabajando activamente
└──────┬───────┘
│ En espera repuesto
▼
┌──────────────┐
│ ON_HOLD │──── Esperando repuesto
└──────┬───────┘
│ Listo para confirmar
▼
┌──────────────┐
│ AWAITING_ │──── Esperando confirmación
│ CONFIRMATION │──── del solicitante
└──────┬───────┘
│ Confirmado
▼
┌──────────────┐
│ RESOLVED │──── Completado
└──────┬───────┘
│ Cerrado definit
▼
┌──────────────┐
│ CLOSED │──── Finalizado
└──────────────┘
| Rol | Descripción | Permisos |
|---|---|---|
| ADMIN | Administrador | Gestionar usuarios,ver todos tickets,asignar técnicoss,reportes |
| TECHNICIAN | Técnico | Ver tickets asignados,actualizar estado,resolver |
| REQUESTER | Solicitante | Crear tickets,ver mis tickets,confirmar resolución |
El sistema calcula automáticamente el tiempo de vencimiento basado en:
prioridad → slaHours
CRITICAL → 4 horas
HIGH → 8 horas
MEDIUM → 24 horas
LOW → 72 horas
- Normal: Tiempo restante > 2 horas
- At Risk: Tiempo restante < 2 horas
- Breached: Tiempo vencido
- KPIs en tiempo real (tickets totales,abiertos,vencidos,SLA)
- Distribución por categoría y estado
- Listado filtrable de todos los tickets
- Asignación inteligente de técnicos (menor carga)
- Reasignación de tickets
- Reportes exportables a Excel
- Auditoría completa de acciones
- Crear tickets con categoría y prioridad
- Seguimiento de mis tickets
- Confirmar resolución con calificación
- Comentarios y comunicaciones
- Tickets asignados con filtros
- Actualización de estado
- Notas de resolución
- Carga de trabajo visible
- Generación automática de códigos de ticket
- Cálculo automático de vencimiento SLA
- Notificaciones en tiempo real
- Trail de auditoría completo
- Validación de esquemas con Zod
- Documentación Swagger
- Node.js 20+
- PostgreSQL 15+
- Clonar el repositorio
git clone https://github.com/tu-usuario/sentinel-core.git
cd sentinel-core- Configurar base de datos
# Crear base de datos PostgreSQL
createdb sentinel_core
# Configurar variables de entorno
cp backend/.env.example backend/.env
# Editar .env con credenciales- Instalar dependencias
# Backend
cd backend && npm install
# Frontend
cd ../frontend && npm install- Ejecutar migraciones
cd backend
npx prisma migrate dev
npx prisma db seed- Iniciar desarrollo
# Terminal 1 - Backend
cd backend && npm run dev
# Terminal 2 - Frontend
cd frontend && npm run devnpm run dev # Iniciar desarrollo
npm run build # Production build
npm run preview # Preview build
npm run lint # Linting
npm run test # Tests unitariosnpm run dev # Desarrollo con watch
npm run build # Compilar TypeScript
npm run start # Production
npm run test # Tests
npm run test:watch # Tests watch modeAccede a /api/docs cuando el backend esté运行ando para ver Swagger UI.
- Frontend: 33 tests passing
- Backend: 31 tests passing
# Frontend
cd frontend && npm test
# Backend
cd backend && npm testEl sistema se encuentra desplegado y funcional en la nube para su evaluación:
- Plataforma Web (Frontend): https://sentinel-core.vercel.app
- Documentación API (Swagger): https://sentinel-core-api.onrender.com/api/docs
| Rol | Usuario (Email) | Contraseña | Descripción |
|---|---|---|---|
| Administrador | profesor.admin@sentinel.local |
SentinelAdmin2026! |
Acceso total: Dashboard de métricas, reportes Excel y control de usuarios. |
| Locatario | profesor.locatario@sentinel.local |
Locatario2026! |
Vista de cliente: Creación de tickets y seguimiento de incidencias. |
| Técnico | carlos.perez@sentinel.local |
Tecnico2026! |
Vista operativa: Revisión de tickets asignados y resolución de fallas. |
- Fork el repositorio
- Crear rama feature (
git checkout -b feature:Nombre) - commit cambios (
git commit -m 'Add feature') - push a rama (
git push origin feature:Nombre) - Crear Pull Request
MIT License - Ver LICENSE.md
Proyecto desarrollado en 2026 para el Centro Comercial Sambil Paraguaná.