Skip to content

Repository files navigation

PROPLAN — Sistema de planificación de proyectos

Sistema web interno de LogistiSoft para elaborar, visualizar y controlar la planificación de proyectos tecnológicos: EDT, cronograma, dependencias, recursos, presupuesto y reportes.

Construido con Laravel 12 (MVC), MySQL de XAMPP y librerías web instaladas localmente (Bootstrap 5.3, Chart.js 4, Frappe Gantt, SweetAlert2 y simple-datatables). La interfaz y los reportes funcionan sin depender de una conexión a internet.

Incluye un asistente integrado que responde con los datos reales de cada usuario y explica cómo se usa el sistema según su rol.


1. Requisitos

Componente Versión usada
XAMPP (Apache + MySQL/MariaDB) 8.2.x
PHP 8.2 o superior
Composer 2.x
Node.js + npm 20.x o superior (solo para reconstruir los recursos web)
Laravel 12.x

Extensiones PHP necesarias (todas vienen activas en XAMPP): pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json, fileinfo, zip, gd.


2. Instalación paso a paso

# 1. Instalar dependencias
composer install
npm install
npm run vendor
npm run build

# 2. Copiar la configuración y generar la clave de la aplicación
copy .env.example .env
php artisan key:generate

3. Arrancar MySQL desde el panel de control de XAMPP.

4. Crear la base de datos con las migraciones y datos de demostración:

php artisan migrate:fresh --seed

Crea las 14 tablas y carga 30 proyectos de demostración coherentes con tareas, dependencias, objetivos, riesgos, comunicaciones, recursos, costos y avances.

Si la base proplan_db todavía no existe, créala una vez desde phpMyAdmin (cotejamiento utf8mb4_unicode_ci) o con: C:\xampp\mysql\bin\mysql -u root -e "CREATE DATABASE proplan_db"

Como alternativa, database/proplan_db.sql contiene un respaldo completo y actualizado de la estructura y los datos de demostración usados en la validación integral.

5. Levantar el sistema:

php artisan serve

Y entra a http://localhost:8000.

Cuentas de demostración

Todas usan la contraseña Admin123!

Correo Rol Qué puede hacer
admin@proplan.local Administrador Todo: proyectos, usuarios, recursos y bitácora
jefe@proplan.local Jefe de Proyecto Planifica los proyectos que dirige
usuario@proplan.local Usuario Consulta sus tareas y reporta avance

3. Arquitectura MVC

app/
├── Models/          Modelo   → Rol, Usuario, Proyecto, Tarea, Dependencia,
│                              Recurso, Asignacion, Avance, Costo, Bitacora,
│                              Objetivo, Riesgo y Comunicacion
├── Http/
│   ├── Controllers/ Controlador → un controlador por módulo del sistema
│   ├── Requests/    Validación de cada formulario (Form Requests)
│   └── Middleware/  VerificarRol y VerificarClaveIntegracion
├── Services/        Reglas de negocio fuera del controlador
├── Policies/        Permisos por proyecto (ProyectoPolicy)
├── Support/         ConfiguracionSistema (patrón Singleton)
└── Exports/         LibroExcel: generador de planillas .xlsx reutilizable

resources/views/     Vista
├── layouts/         Plantilla general y plantilla de PDF
├── components/      Componentes Blade reutilizables
├── proyectos/ tareas/ recursos/ usuarios/ reportes/ pdf/

Patrón Singleton

App\Support\ConfiguracionSistema es un Singleton clásico:

  • constructor privado — nadie puede hacer new,
  • getInstance() crea la instancia la primera vez y después la reutiliza,
  • __clone() privado y __wakeup() que lanza excepción, para que no se pueda duplicar.

Guarda los parámetros de negocio (moneda, umbrales del semáforo, jornada laboral) y da el formato de importes de todo el sistema. Además está registrado en el contenedor de Laravel (AppServiceProvider), de modo que al inyectarlo por constructor se recibe esa misma instancia. Los seis servicios de negocio también se registran como singleton.

Servicios (capa de negocio)

Servicio Responsabilidad
IndicadorService Avance real, avance esperado, desviación y semáforo
PlanificacionService Avance de tareas, jerarquía EDT y ciclos en dependencias
PresupuestoService Presupuesto vs. costo ejecutado
RecursoService Carga de trabajo y utilización de cada recurso
GanttService Arma los datos del diagrama de Gantt
BitacoraService Registra la trazabilidad de las operaciones
Asistente\ContextoUsuario Fotografía de lo que cada usuario puede ver, según su rol
Asistente\MotorLocal Responde por reglas: manual del sistema + datos del usuario
Asistente\MotorClaude Redacción opcional con la API de Claude

Componentes reutilizables

Los componentes Blade delgados envuelven clases de Bootstrap y evitan repetir la estructura visual:

x-encabezado, x-tarjeta, x-indicador, x-campo, x-selector, x-badge-estado, x-semaforo, x-barra, x-boton-eliminar, x-alertas, x-vacio, x-moneda, x-enlace-menu, x-exportador, x-asistente.

Las tablas de reportes se vuelven ordenables y buscables con solo agregarles el atributo data-tabla="10"; el resto lo hace simple-datatables.

El CSS y JavaScript propios del proyecto están en public/css/proplan.css, public/js/proplan.js y resources/; Vite genera los archivos de producción.

Librerías locales

Librería Uso
Bootstrap 5.3.3 + Bootstrap Icons 1.11.3 Toda la interfaz
Chart.js 4.4.2 Gráficos de avance, carga y presupuesto
Frappe Gantt 0.6.1 Diagrama de Gantt con dependencias
SweetAlert2 11 Confirmaciones de borrado y avisos
simple-datatables 9 Búsqueda y orden en las tablas de reportes

npm run vendor copia versiones fijadas de estas dependencias a public/vendor, por lo que los reportes y gráficos no fallan durante una defensa sin internet.


4. Base de datos

14 tablas InnoDB, utf8mb4_unicode_ci, relacionadas mediante claves foráneas.

roles      1 ──< usuarios
usuarios   1 ──< proyectos        (jefe_id)
usuarios   1 ──< tareas           (responsable_id)
usuarios   1 ──< avances / costos / bitacoras / recursos
proyectos  1 ──< tareas
proyectos  1 ──< objetivos / riesgos / comunicaciones / equipo / costos generales
tareas     1 ──< tareas           (tarea_padre_id: EDT jerárquica)
tareas     N >── 1 objetivos      (alineación de la EDT)
tareas     1 ──< dependencias     (como sucesora y como predecesora)
tareas     1 ──< asignaciones >── 1 recursos
tareas     1 ──< avances
tareas     1 ──< costos

dependencias y asignaciones no son tablas pivote anónimas: son entidades propias con datos propios (tipo de dependencia, desfase, horas estimadas y reales) y cada una recibe dos relaciones 1:N.

Normalización

  • 1FN — cada columna guarda un solo valor; no hay listas ni campos repetidos.
  • 2FN — todas las tablas tienen clave primaria simple (id) y cada atributo depende de esa clave completa. Las claves candidatas (proyectos.codigo, usuarios.email, roles.nombre) están declaradas como UNIQUE.
  • 3FN — no hay dependencias transitivas ni datos derivados almacenados:
    • el nombre del responsable no se copia en tareas, solo va responsable_id;
    • el costo ejecutado no es columna: se calcula sumando costos;
    • el avance del proyecto se calcula desde las tareas hoja, no se guarda;
    • la tarifa del recurso vive únicamente en recursos.costo_hora.

Reglas de negocio

  • Avance real del proyecto = promedio del avance de las tareas hoja ponderado por su presupuesto.
  • Avance esperado = porcentaje del calendario del proyecto ya transcurrido.
  • Desviación = avance esperado − avance real.
  • Semáforo: 🟢 Óptimo (desviación < 1) · 🟡 Precaución (1 a 15) · 🔴 Crítico (> 15). Los umbrales se configuran en .env (PROPLAN_UMBRAL_PRECAUCION, PROPLAN_UMBRAL_CRITICO).

5. Qué pide el proyecto formativo y dónde está

Requisito Implementación
1. Crear, editar, eliminar proyectos ProyectoController · /proyectos
2. Tareas, subtareas, fechas y responsables TareaController · EDT en la ficha del proyecto + listado global en /tareas
3. Cargar equipo y asignarlo por tarea RecursoController + AsignacionController
4. Presupuesto y costo ejecutado por tarea y proyecto CostoController + PresupuestoService
5. Roles Administrador / Jefe / Usuario tabla roles, VerificarRol, ProyectoPolicy
6.1 Diagrama de Gantt con dependencias y avance /proyectos/{id}/reportes/gantt
6.2 Carga de trabajo por recurso /proyectos/{id}/reportes/recursos
6.3 Presupuesto vs. costos reales /proyectos/{id}/reportes/presupuesto
6.4 Estado general tipo semáforo /proyectos/{id}/reportes/estado
Dependencias entre actividades tabla dependencias + control de ciclos
Objetivos y alineación de la EDT ObjetivoController · /proyectos/{id}/seguimiento
Matriz de riesgos y respuesta RiesgoController · /proyectos/{id}/seguimiento
Comunicaciones y acuerdos ComunicacionController · /proyectos/{id}/seguimiento
Exportar en PDF y Excel /proyectos/{id}/exportar/{reporte}/{formato}?alcance=…
Integración con otros sistemas API JSON /api/v1/proyectos, protegida por clave
Trazabilidad tabla bitacoras · /bitacora

6. Reportes y exportación

El botón Exportar de la ficha del proyecto abre una ventana con tres decisiones:

Decisión Opciones
Qué reporte Plan de trabajo · Presupuesto vs. real · Carga por recurso
Cuánto detalle (alcance) Toda la EDT · Solo fases · Solo subtareas · Solo retrasadas · Por responsable
Formato PDF (para imprimir) · Excel (para seguir trabajando)

El Excel sale con filtro automático, columnas con formato de moneda y porcentaje, encabezado congelado y fila de totales. Los totales suman solo las tareas que no tienen otra tarea listada por debajo, porque una fase ya acumula el importe de sus subtareas: así el total es el mismo se exporte «toda la EDT», «solo fases» o «solo subtareas».

Pantalla «Tareas» (menú lateral)

Listado global de tareas, sin entrar proyecto por proyecto. Cada rol ve un alcance distinto (Tarea::visiblesPara(), espejo de Proyecto::visiblesPara()):

Rol Qué tareas ve en el listado
Administrador Todas
Jefe de Proyecto Las de los proyectos que dirige, más las suyas en proyectos ajenos
Usuario Únicamente aquellas de las que es responsable

A un Usuario se le ocultan además la columna y el filtro de responsable, porque todas las filas son suyas. El asistente aplica exactamente el mismo alcance: si la pantalla no lo muestra, el chat tampoco lo cuenta.

La pantalla trae:

  • Cuatro accesos rápidos que son filtros de un clic: mis tareas abiertas, retrasadas, en curso y vencen en 7 días.
  • Filtros por texto, proyecto, estado, responsable (con «solo mis tareas») y vencimiento.
  • Reporte de avance en un clic: el botón de la fila abre una ventana con barra deslizante y comentario, sin salir del listado. Solo aparece donde el usuario puede reportar: su propia tarea o una de un proyecto que dirige.
  • Por defecto lista solo proyectos vigentes — una tarea de un proyecto entregado o cancelado no es trabajo pendiente de nadie. Un filtro permite incluirlos.

En el menú lateral, la entrada Tareas lleva una insignia roja con la cantidad de tareas abiertas del usuario, para que no haga falta entrar a buscarlas.

Leer la EDT con comodidad

Sobre la tabla de la EDT hay una barra con: búsqueda por texto, filtro por estado, filtro por responsable (incluye «Solo mis tareas») y botones para expandir o contraer todas las fases. Cada fase tiene además su propio triángulo para plegarla. Todo funciona en el navegador, sin recargar la página.


7. Asistente del sistema

Un botón flotante abre un panel de conversación disponible en todas las pantallas. Responde dos tipos de pregunta:

  • Sobre tus datos: «¿cómo va la cartera?», «¿cuáles están en rojo?», «¿qué vence esta semana?», «¿qué tareas tengo?», «¿quién está sobrecargado?», «¿cómo va el PRJ-2026-02?».
  • Sobre el uso del sistema: crear proyectos y tareas, dependencias, recursos, costos, reporte de avance, Gantt, exportaciones y qué permite cada rol.

Solo ve lo que el usuario puede ver: el contexto se arma con Proyecto::visiblesPara(), así que un Usuario nunca recibe datos de proyectos ajenos, y las respuestas de «cómo hacer» se adaptan al rol (a un Usuario no se le explican pasos que su rol no permite).

Dos motores

Motor Cuándo Requiere
local (por defecto) Siempre. Reconoce la intención de la pregunta y responde con reglas Nada
claude Opcional: redacta las respuestas con la API de Claude Clave de API e internet

Para activar el motor con IA, en .env:

PROPLAN_ASISTENTE=claude
ANTHROPIC_API_KEY=sk-ant-...

Usa el SDK oficial anthropic-ai/sdk con el modelo claude-opus-5. El motor local sigue siendo la red de seguridad: si no hay clave, no hay internet, la API falla o la petición es declinada, la respuesta se resuelve localmente y el usuario no percibe el error. En una defensa sin internet el sistema funciona igual, por eso el motor local es el que viene activado de fábrica.


8. Integración API

El sistema expone una integración JSON de solo lectura para consultar la cartera desde otro sistema. La comprobación de servicio es pública:

GET /api/v1/salud

La lista y el detalle de proyectos requieren la cabecera X-PROPLAN-KEY. La clave se define en .env y nunca se incluye en el código fuente:

PROPLAN_INTEGRATION_KEY=una-clave-segura
GET /api/v1/proyectos
GET /api/v1/proyectos/{id}

La respuesta de detalle incluye objetivos, EDT, responsables, dependencias, riesgos, presupuesto, costo real, avance y semáforo. Si no se configura la clave, los endpoints de datos quedan deshabilitados.


9. Pruebas automatizadas

99 pruebas (253 aserciones) sobre SQLite en memoria: no tocan la base de XAMPP.

php artisan test

Cubren autenticación y roles, permisos por proyecto, validaciones, jerarquía EDT, dependencias circulares, cálculo del semáforo en sus tres niveles, presupuesto y sobregiro, acumulados por fase, carga por recurso, orden y numeración del Gantt, las seis exportaciones, objetivos y riesgos, comunicaciones, integración API, el listado global de tareas (filtros y alcance por rol), la vinculación única entre cada persona y su cuenta de acceso, y el asistente (respuestas con datos, respeto de roles y aislamiento entre usuarios).


10. Comandos útiles

php artisan serve                 # levantar el sistema
php artisan migrate:fresh --seed  # rehacer la base con datos de demostración
php artisan test                  # ejecutar las pruebas
php artisan route:list            # ver todas las rutas
npm run vendor                    # actualizar las librerías web locales
npm run build                     # compilar los recursos de producción

About

PROPLAN - Sistema de planificación y gestión de proyectos

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages