TRABALLA

A work hours & productivity system

Proyecto de fin de ciclo (TFC)
Desarrollo de aplicaciones web (DAW)
Estudiante: Marcos Núñez Fernández
Tutora: Silvia María Pérez Peña
Centro: CIFP A Carballeira - Marcos Valcarcel
Fecha: 16 de Junio de 2025

Sistema integral para la gestión eficiente del tiempo de trabajo, seguimiento de proyectos y análisis de productividad, diseñado para equipos de trabajo colaborativo.

Licencia: MIT License
Repositorio: github.com/markostech/traballa-tfc
Versión html mejorada: https://traballa.me/documentation


ÍNDICE

Página

Portada ................................................................ 1
Índice ................................................................ 2
Resumen del proyecto ................................................................ 3
1. Estudio preliminar ................................................................ 4
1.1 Antecedentes ................................................................ 4
1.2 Objetivos del proyecto ................................................................ 5
1.3 Descripción del proyecto ................................................................ 6
1.4 Metodología y herramientas ................................................................ 7
1.5 Análisis de viabilidad ................................................................ 9
2. Análisis: requerimientos del sistema ................................................................ 11
2.1 Requisitos funcionales ................................................................ 11
2.2 Requisitos no funcionales ................................................................ 13
2.3 Casos de uso ................................................................ 14
2.4 Normativa y cumplimiento legal ................................................................ 19
3. Diseño ................................................................ 21
3.1 Arquitectura del sistema ................................................................ 21
3.2 Modelo de datos ................................................................ 23
3.3 Interfaces de usuario ................................................................ 25
3.4 Diagramas del sistema ................................................................ 29
3.5 Arquitectura de la API REST ................................................................ 33
3.6 Sistema de suscripciones ................................................................ 35
3.6.1 Modelo de datos de suscripciones ................................................................ 35
3.6.2 Planes de suscripción ................................................................ 36
3.6.3 Gestión de suscripciones ................................................................ 37
3.6.4 Estados de suscripción ................................................................ 38
3.6.5 Control de acceso a características ................................................................ 39
3.6.6 Interfaz de usuario para gestión de suscripciones ................................................................ 40
3.7 Componentes nucleares del sistema ................................................................ 41
4. Codificación y pruebas ................................................................ 45
4.1 Tecnologías utilizadas ................................................................ 45
4.2 Estructura del código ................................................................ 46
4.3 Plan de pruebas ................................................................ 48
5. Manuales ................................................................ 51
5.1 Manual de instalación ................................................................ 51
5.2 Manual de usuario ................................................................ 53
6. Planificación ................................................................ 55
6.1 Fases del proyecto ................................................................ 55
6.2 Cronograma de desarrollo ................................................................ 56
7. Presupuesto ................................................................ 58
7.1 Costos de personal ................................................................ 58
7.2 Costos de infraestructura ................................................................ 59
7.3 Costos de software ................................................................ 60
7.4 Otros gastos ................................................................ 61
7.5 Presupuesto total ................................................................ 62
8. Conclusiones ................................................................ 64
9. Despliegue del sistema ................................................................ 66
9.1 Opciones de despliegue ................................................................ 66
9.2 Requisitos del sistema ................................................................ 67
9.3 Proceso de instalación ................................................................ 68
9.4 Configuración de producción ................................................................ 71
9.5 Mantenimiento y monitorización ................................................................ 73
10. Bibliografía ................................................................ 75
10.1 Documentación oficial ................................................................ 75
10.2 Frameworks y librerías ................................................................ 76
10.3 Bases de datos ................................................................ 77
10.4 Herramientas de desarrollo ................................................................ 77
10.5 Diseño y experiencia de usuario ................................................................ 78
10.6 Metodologías ágiles ................................................................ 78
10.7 Estándares web ................................................................ 79
10.8 Seguridad web ................................................................ 79
10.9 Recursos educativos ................................................................ 80
10.10 Hosting y despliegue ................................................................ 81

Resumen del proyecto

Este documento contiene la documentación completa del Proyecto DAW ordinario para el sistema Traballa, una aplicación web de gestión de tiempo y proyectos. La documentación sigue la estructura requerida, abordando todas las fases desde el estudio preliminar hasta los manuales de uso.

Traballa es un sistema integral diseñado para facilitar la gestión de tiempos de trabajo, proyectos y tareas. La aplicación permite a los usuarios registrar sus horas de trabajo, gestionar proyectos mediante un tablero Kanban, visualizar un calendario de actividades y generar informes detallados. El sistema está orientado tanto a profesionales independientes como a empresas que necesitan supervisar el tiempo dedicado a diferentes proyectos y clientes.

Este proyecto ha sido desarrollado como parte del ciclo formativo de grado superior en desarrollo de aplicaciones web (DAW), aplicando las competencias adquiridas en los diferentes módulos del ciclo y siguiendo una metodología de desarrollo estructurada.


1. Estudio preliminar

En esta sección se presenta el estudio preliminar del proyecto, incluyendo los antecedentes, objetivos y un análisis de viabilidad.

1.1 Antecedentes

La gestión eficiente del tiempo y los recursos es un desafío crítico para profesionales y empresas en el entorno laboral actual. Las herramientas existentes a menudo carecen de integración entre la gestión de tiempo, proyectos y reportes, creando ineficiencias y dificultando el seguimiento preciso del progreso del trabajo.

Traballa surge como respuesta a esta necesidad, ofreciendo una solución integral que combina registro de horas, gestión de proyectos mediante metodologías ágiles (Kanban) y generación de informes detallados en una única plataforma accesible desde cualquier dispositivo.

El proyecto nace de la necesidad personal de contar con una herramienta que fuera a la vez simple, potente y de código abierto, aprovechando las ventajas del software libre para crear una solución que pueda ser adoptada y mejorada por la comunidad.

1.2 Objetivos

Los objetivos principales del proyecto Traballa son:

  • Objetivo principal: Desarrollar una plataforma web completa, open source y orientada al uso personal para la gestión integrada de tiempos de trabajo y proyectos
  • Registro de tiempo eficiente: Implementar un sistema de fichar entrada y salida simple e intuitivo que permita a los usuarios registrar su actividad diaria con mínimos clics
  • Gestión ágil de proyectos: Crear un sistema de gestión de proyectos basado en la metodología Kanban para visualizar y organizar tareas de forma visual
  • Analytics y reportes: Diseñar un módulo de generación de informes para análisis de productividad, seguimiento de tiempo y ayuda en facturación
  • Experiencia de usuario moderna: Desarrollar una interfaz de usuario moderna, responsiva y accesible desde diferentes dispositivos
  • Colaboración multiusuario: Implementar un sistema de organizaciones y usuarios con diferentes niveles de permisos para facilitar la colaboración en equipos
  • Código abierto: Crear una solución de código abierto que pueda ser utilizada, modificada y mejorada por la comunidad
  • Demostración académica: Servir como proyecto de fin de ciclo que demuestre competencias en desarrollo web full-stack

1.3 Descripción del proyecto

Traballa es una aplicación web integral para la gestión de tiempo y proyectos que combina un sistema de registro de horas de trabajo con herramientas de gestión de proyectos basadas en metodología Kanban. Su objetivo principal es proporcionar a profesionales independientes, equipos pequeños y medianos una plataforma unificada para controlar su productividad, organizar tareas y generar informes detallados sobre su actividad laboral.

1.3.1 Justificación del proyecto

La idea del proyecto surgió de la necesidad personal de contar con una herramienta que integrara el registro de tiempo de trabajo con la gestión de proyectos de forma simple y eficiente. Tras analizar las soluciones existentes en el mercado, se identificó que muchas de ellas son excesivamente complejas, costosas o no ofrecen la flexibilidad necesaria para diferentes tipos de usuarios.

El objetivo principal es resolver el problema de la fragmentación de herramientas que enfrentan los profesionales, proporcionando una solución que unifique el registro de tiempo, la gestión de tareas y la generación de informes en una sola plataforma accesible y fácil de usar.

1.3.2 Funcionalidades del proyecto

Traballa ofrecerá las siguientes funcionalidades principales:

  • Registro de tiempo: Sistema de fichar entrada y salida con seguimiento de pausas y descansos
  • Gestión de proyectos: Organización de trabajo por proyectos con descripción y estado
  • Tablero Kanban: Visualización y gestión de tareas mediante metodología ágil
  • Calendario integrado: Planificación y visualización de eventos y tareas programadas
  • Informes y analytics: Generación de reportes detallados sobre productividad y tiempo invertido
  • Gestión de usuarios: Sistema de organizaciones y proyectos compartidos
  • Exportación de datos: Funcionalidades para exportar informes en diferentes formatos

1.3.3 Estudio de necesidades

En el mercado actual existen diversas aplicaciones que resuelven problemas similares, cada una con diferentes enfoques:

  • Toggl Track: Excelente para registro de tiempo, pero limitada en gestión de proyectos. Tiene una buena posición en el mercado pero es de pago para funcionalidades avanzadas.
  • Trello: Muy popular para gestión de proyectos con Kanban, pero carece de funcionalidades de registro de tiempo.
  • Asana: Completa pero compleja, orientada a grandes equipos y con curva de aprendizaje elevada.
  • Monday.com: Potente pero costosa, dirigida principalmente a empresas medianas y grandes.
  • Clockify: Buena para registro de tiempo con algunas funcionalidades de proyectos, pero interfaz menos intuitiva.

Traballa se diferencia al ofrecer una solución integrada, simple y accesible que combina lo mejor de ambos mundos: registro de tiempo eficiente y gestión de proyectos ágil.

1.3.4 Persoas destinatarias

La aplicación está dirigida principalmente a:

  • Profesionales independientes y freelancers: Que necesitan controlar su tiempo de trabajo y organizar proyectos de clientes
  • Pequeños equipos de trabajo: Especialmente en el sector tecnológico, consultoría y servicios creativos
  • Startups y empresas pequeñas: Que requieren herramientas de gestión sin la complejidad de soluciones empresariales
  • Trabajadores remotos: Que necesitan herramientas para autogestionar su tiempo y productividad
  • Estudiantes y académicos: Para gestionar proyectos de investigación y tiempo de estudio

El rango de edad objetivo está entre 25-45 años, con conocimientos básicos de tecnología y necesidad de organización profesional.

1.3.5 Promoción

Las técnicas de promoción seleccionadas incluyen:

  • Código abierto (Open Source): Publicación del código en GitHub para atraer desarrolladores y crear una comunidad
  • Redes sociales profesionales: LinkedIn, Twitter/X para llegar a profesionales y equipos
  • Plataformas de desarrolladores: Product Hunt, Hacker News, Reddit para visibilidad en comunidades tecnológicas
  • SEO y marketing de contenidos: Blog con artículos sobre productividad y gestión de tiempo
  • Participación en eventos: Meetups locales de tecnología y emprendimiento
  • Colaboraciones: Partnerships con consultoras y freelancers para casos de uso reales

1.3.6 Modelo de negocio

Traballa adopta un modelo híbrido que combina:

  • Open Source: El código fuente es público y libre, permitiendo contribuciones de la comunidad
  • Freemium: Versión gratuita con funcionalidades básicas para uso personal
  • SaaS (Software as a Service): Versión hosted de pago para equipos que prefieren no gestionar la infraestructura
  • Self-hosted: Opción de instalación propia para organizaciones que requieren control total de sus datos
  • Soporte y consultoría: Servicios profesionales para empresas que necesitan personalización o integración avanzada

Esta aproximación permite maximizar la adopción inicial mientras se genera valor para usuarios que requieren funcionalidades avanzadas o soporte profesional.

1.4 Metodología de desarrollo y herramientas

En el panorama actual del desarrollo de software, las herramientas de Inteligencia Artificial se han convertido en recursos fundamentales que complementan las habilidades del desarrollador. En este proyecto se ha aprovechado el uso de Large Language Models (LLMs) como una herramienta más del arsenal de desarrollo, similar al uso de IDEs, frameworks o librerías.

1.4.1 Uso de LLMs en el desarrollo

Los LLMs han sido utilizados en este proyecto para:

  • Generación de código base: Creación de estructuras iniciales y patrones comunes
  • Documentación: Generación de comentarios de código y documentación técnica
  • Resolución de problemas: Asistencia en debugging y optimización de código
  • Diseño de interfaces: Sugerencias para mejoras en UX/UI
  • Testing: Generación de casos de prueba y validaciones

Es importante destacar que el uso de estas herramientas no reemplaza el conocimiento técnico del desarrollador, sino que actúa como un acelerador que permite enfocarse en la lógica de negocio y la arquitectura del sistema.

1.4.2 Enfoque Open Source

El proyecto está diseñado principalmente para uso personal y como contribución a la comunidad open source. Los beneficios de este enfoque incluyen:

  • Transparencia: El código fuente está disponible para revisión y auditoría
  • Colaboración: Posibilidad de recibir contribuciones de otros desarrolladores
  • Aprendizaje: Sirve como ejemplo de implementación para otros estudiantes y profesionales
  • Flexibilidad: Los usuarios pueden modificar y adaptar el software a sus necesidades específicas
  • Sostenibilidad: La comunidad puede mantener y evolucionar el proyecto a largo plazo

1.4.3 Justificación del uso de PHP Vanilla

La decisión de utilizar PHP sin frameworks (PHP Vanilla) para el desarrollo de Traballa responde principalmente a los objetivos académicos y pedagógicos del proyecto como Trabajo de Fin de Ciclo del Grado Superior en Desarrollo de Aplicaciones Web.

Coherencia con el programa formativo

El stack tecnológico seleccionado se alinea directamente con las competencias y tecnologías desarrolladas durante el ciclo formativo DAW:

  • PHP nativo: Permite demostrar un dominio profundo del lenguaje sin dependencias externas, evidenciando comprensión de los fundamentos del desarrollo web del lado servidor (módulo de Desarrollo web en contorno servidor)
  • HTML5, CSS3 y JavaScript: Tecnologías base del desarrollo frontend abordadas en los módulos de Desarrollo web en contorno cliente (DWCC) y Diseño de interfaces web (DIW)
  • MySQL: Sistema de gestión de bases de datos estudiado en el módulo de Bases de Datos
  • Arquitectura web tradicional: Aplicación directa de los conceptos desarrollados en el módulo de Desarrollo web en contorno servidor
  • Despliegue y hosting: Implementación práctica de los conocimientos adquiridos en el módulo de Despliegue de aplicaciones web (DAW)
  • Viabilidad económica y modelo de negocio: Aplicación de competencias del módulo de Empresa e iniciativa emprendedora (EIE) en la definición del proyecto como iniciativa de código abierto
  • Documentacion técnica y de usuario: Elaboración de documentación siguiendo las pautas del módulo de Contornos de desarollo (CoDe)
Ventajas educativas del enfoque vanilla

El desarrollo sin frameworks aporta beneficios específicos en el contexto académico:

  • Comprensión integral: Obliga a implementar desde cero funcionalidades que los frameworks abstraen, demostrando comprensión completa de los procesos
  • Control total: Permite tomar decisiones arquitectónicas conscientes sobre cada aspecto del sistema
  • Depuración efectiva: Facilita la identificación y resolución de problemas al conocer todo el código implementado
  • Portabilidad: El código resultante es más portable y no depende de versiones específicas de frameworks
  • Demostración de competencias: Evidencia capacidad para desarrollar aplicaciones complejas con herramientas básicas
Justificación técnica

Además de las razones académicas, el enfoque vanilla se justifica técnicamente para este proyecto:

  • Simplicidad del dominio: Las funcionalidades de Traballa no requieren las abstracciones complejas que proporcionan los frameworks
  • Rendimiento: Menor overhead y mayor control sobre el rendimiento de la aplicación
  • Mantenibilidad: Para un proyecto de este alcance, el código vanilla es más fácil de mantener y entender
  • Escalabilidad controlada: Permite implementar solo las funcionalidades necesarias sin bloat adicional

Esta aproximación demuestra que es posible crear aplicaciones web completas y funcionales utilizando exclusivamente las tecnologías fundamentales, validando la solidez de la formación recibida en el ciclo DAW y la capacidad del desarrollador para aplicar estos conocimientos en proyectos reales.

1.5 Requirimentos

Los medios materiales y tecnologías necesarias para el desarrollo del proyecto incluyen:

1.5.1 Infraestructura

  • Servidor web: Apache/Nginx/OpenLitespeed para servir la aplicación PHP
  • Base de datos: MySQL/MariaDB para almacenamiento de datos
  • Dominio web: Para la versión de demostración online
  • SSL/TLS: Certificados de seguridad para conexiones HTTPS de Let's encrypt
  • Almacenamiento: Espacio en disco para archivos del sistema y backups
  • CDN: Para optimización de recursos estáticos (Cloudflare)

1.5.2 Backend

  • PHP 8.1+: Lenguaje principal del backend
  • MySQL/MariaDB: Sistema de gestión de base de datos
  • Composer: Gestor de dependencias PHP
  • PHPUnit: Framework de testing para PHP
  • PHPMailer: Librería para envío de emails
  • Arquitectura por capas: Separación básica de responsabilidades sin MVC estricto

1.5.3 Frontend

  • HTML5: Estructura semántica de las páginas
  • CSS3: Estilos y diseño responsivo
  • JavaScript ES6+: Interactividad y funcionalidades del cliente
  • Mermaid.js: Generación de diagramas y gráficos
  • Chart.js: Gráficos para analytics y reportes
  • Fetch API: Comunicación asíncrona con el servidor

1.5.4 Herramientas de desarrollo

  • Linux: Sistema operativo utilizado para el desarrollo.
  • Git: Control de versiones
  • GitHub: Repositorio remoto y colaboración
  • VS Code: Entorno de desarrollo integrado
  • XAMPP/Docker: Entorno de desarrollo local
  • Postman/Curl: Testing de APIs

1.6 Planificación preeliminar

El cronograma real del proyecto se ejecutó del 7 de abril al 16 de junio de 2025, disponible en detalle en la sección 6.2 Cronograma.

1.6.1 Desglose de fases

Fase 1: Estudio preliminar y análisis (2 semanas - 32 horas)
  • Semana 1 (16h): Análisis de la problemática, definición de objetivos, estudio de soluciones existentes
  • Semana 2 (16h): Análisis detallado de requisitos, definición de casos de uso, documentación preliminar
Fase 2: Diseño (2 semanas - 32 horas)
  • Semana 3 (16h): Diseño de arquitectura del sistema, modelo de datos, especificación de APIs
  • Semana 4 (16h): Diseño de interfaces de usuario, prototipado, definición de flujos de trabajo
Fase 3: Codificación y desarrollo (6 semanas - 96 horas) - Fase principal
  • Semana 5 (16h): Configuración del entorno, estructura del proyecto, sistema de usuarios y autenticación
  • Semana 6 (16h): Módulo de registro de tiempo, fichar entrada/salida, gestión de pausas
  • Semana 7 (16h): Gestión de proyectos, CRUD de proyectos, asignación de usuarios
  • Semana 8 (16h): Sistema Kanban, tableros, columnas, arrastrar y soltar
  • Semana 9 (16h): Calendario integrado, eventos, planificación de tareas
  • Semana 10 (16h): Sistema de informes, analytics, gráficos, exportación de datos
Fase 4: Testing y optimización (1 semana - 16 horas)
  • Semana 11 (16h): Pruebas unitarias e integración, corrección de bugs, optimización de rendimiento
Fase 5: Documentación y entrega (1 semana - 16 horas)
  • Semana 12 (16h): Manual de usuario, documentación técnica, preparación de presentación final

Duración total: 12 semanas (3 meses)

Esfuerzo total: 192 horas (16 horas semanales)

Distribución semanal: 4 horas diarias durante 4 días por semana

Nota: Este cronograma corresponde a la planificación inicial teórica. El cronograma real ejecutado del proyecto (7 de abril al 16 de junio de 2025) junto con recursos, gestión de riesgos y control de seguimiento se encuentra en la sección 6. Planificación.


2. Análisis: requerimientos del sistema

Esta sección detalla los requisitos funcionales y no funcionales del sistema, así como los casos de uso que definen su funcionamiento.

2.1 Requisitos funcionales

Los requisitos funcionales principales del sistema incluyen:

  • Gestión de usuarios: Registro, inicio de sesión, recuperación de contraseña, perfiles de usuario.
  • Registro de tiempo: Creación, edición y eliminación de registros de tiempo, inicio y pausa de temporizadores, categorización por proyectos y tareas.
  • Gestión de proyectos: Creación y administración de proyectos, asignación de miembros, seguimiento de progreso.
  • Tablero Kanban: Visualización de tareas en columnas personalizables, arrastrar y soltar para cambiar estados, filtros y etiquetas.
  • Calendario: Vista de calendario con eventos de trabajo programados, integración con registros de tiempo.
  • Reportes: Generación de informes de tiempo por usuario, proyecto o cliente, exportación en diferentes formatos.
  • Notificaciones: Alertas sobre deadlines, asignaciones de tareas y actualizaciones de proyectos.

2.2 Requisitos no funcionales

Los requisitos no funcionales incluyen:

  • Usabilidad: Interfaz intuitiva y fácil de usar, con tiempos de aprendizaje mínimos.
  • Rendimiento: Tiempos de respuesta rápidos, incluso con múltiples usuarios simultáneos.
  • Seguridad: Protección de datos de usuario, autenticación segura, cifrado de información sensible.
  • Escalabilidad: Capacidad para crecer con el aumento de usuarios y proyectos sin degradar el rendimiento.
  • Disponibilidad: Funcionamiento 24/7 con mínimo tiempo de inactividad para mantenimiento.
  • Accesibilidad: Cumplimiento de estándares WCAG 2.1 para garantizar acceso a usuarios con discapacidades.
  • Compatibilidad: Funcionamiento en diferentes navegadores y dispositivos (responsive design).

2.3 Casos de uso

Los casos de uso del sistema han sido diseñados siguiendo las mejores prácticas de ingeniería de software, identificando actores, precondiciones, flujos principales y alternativos para cada funcionalidad.


2.3.1 Actores del sistema

Los actores identificados en el sistema son:

  • Usuario final: Profesional que utiliza el sistema para registrar tiempo y gestionar proyectos
  • Administrador de organización: Usuario con permisos para gestionar otros usuarios y configuraciones
  • Manager de proyecto: Usuario responsable de la supervisión y coordinación de proyectos específicos
  • Administrador del sistema: Responsable técnico del mantenimiento y configuración global

2.3.2 Casos de uso detallados

CU-001: Registro e inicio de sesión de usuario
IDCU-001
NombreRegistro e inicio de sesión de usuario
ActoresUsuario final, Administrador
PrecondicionesEl sistema debe estar disponible y funcionando
DescripciónEl usuario se registra en el sistema o inicia sesión con credenciales existentes

Flujo principal:

  1. El usuario accede a la página de login
  2. El usuario introduce email y contraseña
  3. El sistema valida las credenciales
  4. El sistema redirige al dashboard principal
  5. Se registra la actividad de login

Flujos alternativos:

  • A1 - Registro nuevo: Si el usuario no tiene cuenta, puede registrarse proporcionando nombre, email y contraseña
  • A2 - Credenciales incorrectas: El sistema muestra error y permite reintentar o recuperar contraseña
  • A3 - Recuperación de contraseña: El usuario puede solicitar un enlace de recuperación por email

CU-002: Registro de tiempo de trabajo
IDCU-002
NombreRegistro de tiempo de trabajo
ActoresUsuario final
PrecondicionesUsuario autenticado, al menos un proyecto disponible
DescripciónEl usuario registra sus horas de trabajo en proyectos específicos

Flujo principal:

  1. El usuario selecciona un proyecto
  2. El usuario hace clic en "Fichar entrada"
  3. El sistema registra la hora de inicio
  4. El usuario trabaja en el proyecto
  5. El usuario hace clic en "Fichar salida"
  6. El sistema calcula y guarda las horas trabajadas

Flujos alternativos:

  • A1 - Pausas: El usuario puede pausar el trabajo y reanudar posteriormente
  • A2 - Edición manual: El usuario puede editar registros de tiempo existentes
  • A3 - Notas adicionales: El usuario puede agregar descripción del trabajo realizado
CU-003: Gestión de proyectos
IDCU-003
NombreGestión de proyectos
ActoresUsuario final, Manager de proyecto, Administrador
PrecondicionesUsuario autenticado con permisos adecuados
DescripciónCreación, edición y administración de proyectos en el sistema

Flujo principal:

  1. El usuario accede a la sección de proyectos
  2. El usuario hace clic en "Nuevo proyecto"
  3. El usuario completa información: nombre, descripción, fechas
  4. El usuario asigna miembros del equipo
  5. El sistema crea el proyecto y notifica a los miembros

Flujos alternativos:

  • A1 - Edición: Modificación de datos de proyectos existentes
  • A2 - Archivo: Cambio de estado del proyecto a archivado para ocultarlo de la vista principal
  • A3 - Desarchivar: Restauración de proyectos archivados a estado activo
  • A4 - Permisos: Asignación de roles específicos dentro del proyecto
  • A5 - Gestión del ciclo de vida: Cambio entre estados activo, completado, en pausa y archivado
CU-004: Gestión del tablero Kanban
IDCU-004
NombreGestión del tablero Kanban
ActoresUsuario final, Manager de proyecto
PrecondicionesProyecto creado y acceso autorizado
DescripciónVisualización y manipulación de tareas mediante metodología Kanban

Flujo principal:

  1. El usuario accede al tablero Kanban del proyecto
  2. El usuario visualiza las columnas (Por hacer, En progreso, Hecho)
  3. El usuario crea nueva tarea completando título y descripción
  4. El usuario arrastra tareas entre columnas según el progreso
  5. El sistema actualiza automáticamente el estado de las tareas

Flujos alternativos:

  • A1 - Personalización: Creación de columnas personalizadas
  • A2 - Asignaciones: Asignación de tareas a miembros específicos
  • A3 - Filtros: Aplicación de filtros por asignado, fecha, etc.
  • A4 - Etiquetas: Uso de etiquetas para categorizar tareas
CU-005: Generación de informes
IDCU-005
NombreGeneración de informes
ActoresUsuario final, Manager de proyecto, Administrador
PrecondicionesDatos de tiempo registrados en el sistema
DescripciónCreación y exportación de informes de productividad y tiempo

Flujo principal:

  1. El usuario accede a la sección de informes
  2. El usuario selecciona tipo de informe (por usuario, proyecto, periodo)
  3. El usuario configura filtros y parámetros
  4. El sistema genera el informe con gráficos y estadísticas
  5. El usuario puede exportar en PDF, Excel o CSV

Flujos alternativos:

  • A1 - Informes programados: Configuración de informes automáticos periódicos
  • A2 - Comparativas: Informes comparativos entre periodos o proyectos
  • A3 - Personalización: Creación de plantillas de informes personalizadas
CU-006: Administración de usuarios y permisos
IDCU-006
NombreAdministración de usuarios y permisos
ActoresAdministrador de organización, Administrador del sistema
PrecondicionesPermisos de administración
DescripciónGestión de usuarios, roles y permisos dentro de la organización

Flujo principal:

  1. El administrador accede al panel de administración
  2. El administrador visualiza la lista de usuarios
  3. El administrador invita nuevos usuarios por email
  4. El administrador asigna roles y permisos específicos
  5. El sistema envía invitaciones y actualiza permisos

Flujos alternativos:

  • A1 - Desactivación: Desactivación temporal de cuentas de usuario
  • A2 - Archivo de organizaciones: Archivo de organizaciones inactivas manteniéndolos ocultos
  • A3 - Desarchivar organizaciones: Restauración de organizaciones archivadas
CU-006A: Gestión de archivo de organizaciones
IDCU-006A
NombreGestión de archivo de organizaciones
ActoresAdministrador del sistema
PrecondicionesPermisos de administración del sistema
DescripciónArchivo y desarchivar organizaciones para gestión del ciclo de vida organizacional

Flujo principal:

  1. El administrador accede al panel de gestión de organizaciones
  2. El administrador selecciona una organización inactiva
  3. El administrador elige la opción "Archivar organización"
  4. El sistema confirma la acción de archivado
  5. El sistema oculta la organización de la vista principal manteniendo todos los datos
  6. Los miembros de la organización mantienen acceso a datos históricos

Flujos alternativos:

  • A1 - Desarchivar: Restauración de organizaciones archivadas a estado activo
  • A2 - Vista de archivados: Visualización de organizaciones archivadas mediante toggle
  • A3 - Preservación de datos: Mantenimiento de integridad de datos durante archivo
CU-007: Gestión de calendario
IDCU-007
NombreGestión de calendario
ActoresUsuario final
PrecondicionesUsuario autenticado
DescripciónPlanificación y visualización de eventos y tareas programadas

Flujo principal:

  1. El usuario accede a la vista de calendario
  2. El usuario selecciona una fecha
  3. El usuario crea un evento con título, descripción y duración
  4. El usuario asocia el evento con un proyecto (opcional)
  5. El sistema guarda el evento y muestra recordatorios

Flujos alternativos:

  • A1 - Notificaciones: Configuración de recordatorios por email o popup
CU-008: Gestión de descansos y pausas
IDCU-008
NombreGestión de descansos y pausas
ActoresUsuario final
PrecondicionesUsuario autenticado, sesión de trabajo activa
DescripciónEl usuario puede tomar descansos durante su jornada laboral y el sistema los registra correctamente

Flujo principal:

  1. El usuario está trabajando en un proyecto (tiempo corriendo)
  2. El usuario hace clic en "Iniciar descanso"
  3. El sistema pausa el temporizador de trabajo
  4. El sistema inicia el temporizador de descanso
  5. El usuario hace clic en "Finalizar descanso"
  6. El sistema reanuda el temporizador de trabajo
  7. El sistema registra la duración del descanso

Flujos alternativos:

  • A1 - Tipos de descanso: El usuario puede categorizar el descanso (almuerzo, café, personal)
  • A2 - Descanso prolongado: Si el descanso excede un tiempo límite, el sistema solicita confirmación
CU-009: Exportación e integración de datos
IDCU-009
NombreExportación e integración de datos
ActoresUsuario final, Administrador
PrecondicionesDatos registrados en el sistema
DescripciónEl usuario puede exportar sus datos y sincronizar con herramientas externas

Flujo principal:

  1. El usuario accede a la sección de exportación
  2. El usuario selecciona el rango de fechas y tipo de datos
  3. El usuario elige el formato de exportación (CSV, PDF, Excel)
  4. El sistema genera el archivo con los datos solicitados
  5. El usuario descarga el archivo generado

2.3.3 Diagrama de casos de uso

flowchart TD subgraph sistema[Sistema Traballa] subgraph autenticacion[Módulo de Autenticación] CU001[CU-001: Login/Registro] CU006[CU-006: Admin Usuarios] end subgraph tiempo[Módulo de Gestión de Tiempo] CU002[CU-002: Registro Tiempo] CU008[CU-008: Gestión Pausas] CU005[CU-005: Informes] end subgraph proyectos[Módulo de Proyectos] CU003[CU-003: Gestión Proyectos] CU004[CU-004: Tablero Kanban] end subgraph calendario[Módulo de Planificación] CU007[CU-007: Calendario] end subgraph integracion[Módulo de Integración] CU009[CU-009: Exportación Datos] end end usuario[Usuario Final] --> CU001 usuario --> CU002 usuario --> CU003 usuario --> CU004 usuario --> CU005 usuario --> CU007 usuario --> CU008 usuario --> CU009 admin[Administrador] --> CU001 admin --> CU006 admin --> CU005 admin --> CU009 manager[Manager Proyecto] --> CU003 manager --> CU004 manager --> CU005 sistema_externo[Sistema Externo] --> CU009 classDef actor fill:#e1f5fe,stroke:#01579b,color:#000 classDef usecase fill:#f3e5f5,stroke:#4a148c,color:#000 classDef system fill:#e8f5e8,stroke:#1b5e20,color:#000 class usuario,admin,manager,sistema_externo actor class CU001,CU002,CU003,CU004,CU005,CU006,CU007,CU008,CU009 usecase class sistema,autenticacion,tiempo,proyectos,calendario,integracion system

2.3.5 Matriz de trazabilidad

Caso de Uso Requisito Funcional Prioridad Complejidad Sprint
CU-001 RF-001: Autenticación de usuarios Alta Media 1
CU-002 RF-002: Registro de tiempo Alta Alta 2
CU-003 RF-003: Gestión de proyectos Alta Media 3
CU-004 RF-004: Tablero Kanban Media Alta 4
CU-005 RF-005: Generación de informes Media Media 6
CU-006 RF-006: Administración de usuarios Media Media 1
CU-007 RF-007: Calendario integrado Baja Media 5
CU-008 RF-002: Registro de tiempo (descansos) Media Baja 2
CU-009 RF-009: Exportación de datos Media Baja 6

Los casos de uso han sido priorizados según su importancia para el MVP (Producto Mínimo Viable) y su impacto en la experiencia del usuario. La implementación seguirá un enfoque iterativo, comenzando por los casos de uso fundamentales (autenticación y registro de tiempo) y progresando hacia funcionalidades más avanzadas.

La matriz de trazabilidad permite verificar que todos los requisitos funcionales estén cubiertos por al menos un caso de uso, garantizando la completitud del análisis y facilitando la planificación del desarrollo en sprints de una semana cada uno.

2.3.6 Criterios de aceptación generales

  • Funcionalidad: Todas las funciones deben comportarse según lo especificado en los flujos principales
  • Usabilidad: Las interfaces deben ser intuitivas y requerir mínima curva de aprendizaje
  • Rendimiento: Los tiempos de respuesta no deben exceder 3 segundos en condiciones normales
  • Seguridad: Todos los datos sensibles deben estar protegidos y encriptados
  • Compatibilidad: El sistema debe funcionar en los principales navegadores web modernos
  • Accesibilidad: Cumplimiento básico de estándares WCAG para usuarios con discapacidades

2.4 Normativa

En esta sección se investiga qué normativa vigente afecta al desarrollo del proyecto y de qué manera. El proyecto debe adaptarse a las exigencias legales de los territorios donde va a operar.

2.4.1 Legislación de Protección de Datos

Por la naturaleza del sistema de información, una ley que se va a tener que mencionar de forma obligatoria es la Ley Orgánica 3/2018, de 5 de diciembre, de Protección de Datos Personales y garantía de los derechos digitales (LOPDPGDD). El ámbito de la LOPDPGDD es nacional.

Si la aplicación está pensada para operar a nivel europeo, también se debe hacer referencia al General Data Protection Regulation (GDPR). En la documentación debe afirmarse que el proyecto cumple con la normativa vigente.

2.4.2 Cumplimiento de la Normativa

Para cumplir la LOPDPGDD y/o GDPR debe tener un apartado en la web donde se indique quién es la persona responsable del tratamiento de los datos y para qué fines se van a utilizar. Habitualmente esta información se estructura en los siguientes apartados:

  • Aviso legal: Información sobre la titularidad del sitio web y los datos de contacto.
  • Política de privacidad: Detalle sobre qué datos se recopilan, cómo se utilizan, con quién se comparten y los derechos del usuario.
  • Política de cookies: Información sobre el uso de cookies y tecnologías de seguimiento.

2.4.3 Mecanismos de Cumplimiento

Deben explicarse los diferentes mecanismos utilizados para cumplir la legislación relativa a la protección de datos:

  • Consentimiento informado: Obtención del consentimiento explícito del usuario antes de procesar sus datos personales.
  • Minimización de datos: Recopilación únicamente de los datos necesarios para el funcionamiento del servicio.
  • Derecho de acceso: Mecanismos para que los usuarios puedan consultar qué datos personales se almacenan.
  • Derecho de rectificación: Posibilidad de corregir datos inexactos o incompletos.
  • Derecho de supresión: Implementación del "derecho al olvido" permitiendo eliminar datos cuando sea solicitado.
  • Portabilidad de datos: Capacidad de exportar los datos del usuario en un formato legible por máquina.
  • Seguridad de los datos: Implementación de medidas técnicas y organizativas apropiadas.
  • Notificación de brechas: Procedimientos para notificar violaciones de seguridad dentro de las 72 horas establecidas por la normativa.

2.4.4 Implementación en el Sistema

El sistema TRABALLA implementa los siguientes elementos para garantizar el cumplimiento normativo:

  • Páginas legales: Se han implementado las páginas de aviso legal, política de privacidad y política de cookies accesibles desde el footer del sitio.
  • Gestión de consentimientos: Banner de cookies y formularios de consentimiento para el procesamiento de datos.
  • Panel de privacidad: Sección en el perfil del usuario para gestionar sus derechos de protección de datos.
  • Cifrado de datos: Uso de HTTPS y cifrado de contraseñas mediante algoritmos seguros.
  • Logs de auditoría: Registro de accesos y modificaciones para cumplir con los requisitos de trazabilidad.
  • Procedimientos de eliminación: Implementación de rutinas de limpieza y anonimización de datos.

Declaración de cumplimiento: El proyecto TRABALLA cumple con la normativa vigente en materia de protección de datos, incluyendo la LOPDPGDD y el GDPR, implementando todas las medidas técnicas y organizativas necesarias para garantizar la privacidad y seguridad de los datos de los usuarios.


3. Diseño

Esta sección aborda la arquitectura del sistema, el modelo de datos y las interfaces de usuario que conforman la solución.

3.1 Arquitectura del sistema

Traballa implementa una arquitectura de aplicación web estructurada en capas con separación de responsabilidades, pero sin seguir estrictamente el patrón MVC tradicional. La aplicación está organizada en las siguientes capas:

  • Capa de Presentación: Interfaces de usuario desarrolladas con HTML5, CSS3 y JavaScript, con lógica de vista integrada mediante PHP.
  • Capa de Aplicación: Scripts PHP que combinan lógica de presentación y de negocio, procesando las solicitudes del usuario directamente en las páginas.
  • Capa de Datos: Funciones y clases PHP para acceso a la base de datos MySQL, con algunas abstracciones básicas.

El sistema sigue un enfoque pragmático que prioriza la simplicidad y rapidez de desarrollo, con separación modular básica que permite la mantenibilidad del código.

flowchart TD CLIENTE["CLIENTE (BROWSER)"] SERVIDOR["SERVIDOR WEB"] PAGINAS_PHP["PÁGINAS PHP\n(Vista + Lógica integrada)"] FUNCIONES["FUNCIONES Y CLASES\n(Lógica de negocio y acceso a datos)"] DB["BASE DE DATOS\n(MySQL)"] CLIENTE -- "HTTP Request" --> SERVIDOR SERVIDOR -- "HTTP Response" --> CLIENTE SERVIDOR -- "PHP Request" --> PAGINAS_PHP PAGINAS_PHP -- "Llamadas a funciones" --> FUNCIONES FUNCIONES -- "Datos procesados" --> PAGINAS_PHP PAGINAS_PHP --> SERVIDOR FUNCIONES -- "SQL Queries" --> DB DB -- "Resultados" --> FUNCIONES classDef box rx:5,ry:5; class CLIENTE,SERVIDOR,PAGINAS_PHP,FUNCIONES,DB box;

Diagrama de arquitectura

flowchart TB subgraph cliente[CLIENTE] navegador[Navegador Web
HTML, CSS, JavaScript] end subgraph servidor[SERVIDOR] presentacion[Capa de Presentación
PHP - Páginas con Vista y Lógica] servicios[Capa de Servicios
PHP - Funciones y Clases Auxiliares] datos[Capa de Datos
MySQL/MariaDB] end navegador -->|HTTP/HTTPS| presentacion presentacion --> servicios servicios --> datos




Flujo de comunicación

sequenceDiagram participant Cliente participant Servidor participant DB as Base de Datos Cliente->>Servidor: 1. Solicitud HTTP Servidor->>DB: 2. Consulta SQL DB-->>Servidor: 3. Respuesta SQL Servidor-->>Cliente: 4. Respuesta HTTP Cliente->>Servidor: 5. Actualización AJAX Servidor->>DB: 6. Consulta SQL DB-->>Servidor: 7. Respuesta SQL Servidor-->>Cliente: 8. Respuesta JSON

3.1.1 Consideraciones sobre el patrón arquitectónico

Es importante aclarar que Traballa no implementa el patrón MVC (Modelo-Vista-Controlador) en su forma tradicional. En su lugar, utiliza una arquitectura simplificada que mezcla la lógica de presentación con la lógica de negocio en las mismas páginas PHP. Esta decisión arquitectónica se justifica por:

  • Simplicidad de desarrollo: Reduce la complejidad del código para un proyecto de alcance específico
  • Rapidez de implementación: Permite el desarrollo ágil sin la sobrecarga de múltiples capas de abstracción
  • Mantenibilidad adecuada: Para el tamaño y complejidad del proyecto, la separación es suficiente
  • Facilidad de comprensión: La lógica completa de cada página está contenida en un solo archivo

La estructura actual sigue un patrón más próximo a:

  • Páginas monolíticas con separación modular: Cada página maneja su propia lógica de presentación y negocio
  • Funciones auxiliares centralizadas: Lógica común en includes/ para reutilización
  • Acceso a datos mediante funciones: Sin capa de abstracción ORM, usando funciones directas


3.2 Modelo de datos

El modelo de datos de Traballa está compuesto por las siguientes entidades principales:

  • Users: Información de usuarios y credenciales.
  • Projects: Datos de proyectos, incluyendo nombre, descripción, fechas y estado.
  • TimeEntries: Registros de tiempo asociados a usuarios y proyectos.
  • Tasks: Tareas individuales dentro de proyectos, con estados para el tablero Kanban.
  • Organizations: Grupos de usuarios que comparten proyectos y recursos.
  • Reports: Configuraciones y plantillas para la generación de informes.

Las relaciones entre estas entidades están diseñadas para garantizar la integridad referencial y facilitar las consultas comunes del sistema.

flowchart TD USUARIOS["USUARIOS"] ORGANIZACIONES["ORGANIZACIONES"] PROYECTOS["PROYECTOS"] REGISTRO_HORAS["REGISTRO HORAS"] TAREAS["TAREAS"] INFORMES["INFORMES"] KANBAN_TABS["KANBAN TABS"] ORGANIZACIONES -- "relación" --> USUARIOS ORGANIZACIONES -- "contiene" --> PROYECTOS USUARIOS --> REGISTRO_HORAS ORGANIZACIONES --> TAREAS PROYECTOS --> INFORMES TAREAS --> KANBAN_TABS KANBAN_TABS --> TAREAS classDef entity rx:5,ry:5,fill:#f9f9f9,stroke:#333; class USUARIOS,ORGANIZACIONES,PROYECTOS,REGISTRO_HORAS,TAREAS,INFORMES,KANBAN_TABS entity;

3.3 Interfaces de usuario

Las interfaces de usuario de Traballa siguen principios de diseño centrado en el usuario, con un enfoque en la simplicidad y la eficiencia:

  • Dashboard: Panel principal con resumen de actividad reciente y acceso rápido a funciones principales.
  • Registro de Tiempo: Interfaz intuitiva para iniciar, pausar y registrar tiempos con mínimos clics.
  • Tablero Kanban: Vista de columnas personalizables con tarjetas de tareas que se pueden arrastrar y soltar.
  • Calendario: Vista mensual, semanal y diaria de actividades programadas.
  • Reportes: Interfaces para configurar, visualizar y exportar informes con diferentes filtros y formatos.
  • Configuración: Paneles para la administración de usuarios, proyectos y preferencias del sistema.

Todas las interfaces siguen un diseño responsivo que se adapta a diferentes tamaños de pantalla, desde dispositivos móviles hasta monitores de escritorio.

3.3.1 Diagrama completo de interfaces de usuario

El siguiente diagrama muestra todas las interfaces de usuario del sistema Traballa, organizadas por categorías funcionales y niveles de acceso:

flowchart TD subgraph "ACCESO PÚBLICO" LANDING[🏠 Landing Page
Página de inicio público] LOGIN[🔐 Login
Autenticación] REGISTER[📝 Register
Registro de usuario] FORGOT_PASSWORD[❓ Forgot Password
Recuperar contraseña] RESET_PASSWORD[🔄 Reset Password
Restablecer contraseña] GDPR_PUBLIC[⚖️ GDPR
Derechos de privacidad] LEGAL[📋 Legal Pages
Terms, Privacy, Cookies] end subgraph "ÁREA PRINCIPAL DE TRABAJO" DASHBOARD[📊 Dashboard
Panel de control principal] WORK_HOURS[⏰ Work Hours
Registro de tiempo] PROJECTS[📁 Projects
Gestión de proyectos] PROJECT_DETAILS[📄 Project Details
Detalles específicos] KANBAN[📋 Kanban Board
Tablero de tareas] CALENDAR[📅 Calendar
Calendario de eventos] REPORTS[📈 Reports
Informes y análisis] end subgraph "GESTIÓN Y ADMINISTRACIÓN" ORGANIZATIONS[🏢 Organizations
Gestión de organizaciones] USERS[👥 Users
Administración de usuarios] PROFILE[👤 Profile
Perfil de usuario] SETTINGS[⚙️ Settings
Configuración del sistema] SUBSCRIPTION[💳 Subscription
Planes y facturación] end subgraph "DOCUMENTACIÓN Y AYUDA" USER_DOCS[📚 User Documentation
Manual de usuario] API_DOCS[🔧 API Documentation
Documentación técnica] API_TEST[🧪 API Test
Herramientas de prueba] DOCUMENTATION[📖 Technical Docs
Documentación técnica] end subgraph "PÁGINAS DE ERROR" ERROR_403[🚫 403 Forbidden
Acceso denegado] ERROR_404[❌ 404 Not Found
Página no encontrada] end subgraph "MODALES Y COMPONENTES" MODAL_PROJECT_SELECT[🎯 Project Selector
Modal selección proyecto] MODAL_KANBAN_TASK[✏️ Task Management
Crear/editar tareas] MODAL_CALENDAR_EVENT[📅 Event Management
Crear/editar eventos] MODAL_USER_INVITE[👋 User Invitation
Invitar usuarios] MODAL_BREAK_MANAGE[☕ Break Management
Gestión de descansos] end %% Flujos de navegación principales LANDING --> LOGIN LOGIN --> DASHBOARD REGISTER --> DASHBOARD DASHBOARD --> WORK_HOURS DASHBOARD --> PROJECTS DASHBOARD --> CALENDAR DASHBOARD --> KANBAN DASHBOARD --> REPORTS PROJECTS --> PROJECT_DETAILS PROJECT_DETAILS --> KANBAN KANBAN --> MODAL_KANBAN_TASK CALENDAR --> MODAL_CALENDAR_EVENT WORK_HOURS --> MODAL_BREAK_MANAGE DASHBOARD --> PROFILE PROFILE --> SETTINGS SETTINGS --> SUBSCRIPTION %% Acceso a documentación DASHBOARD --> USER_DOCS USER_DOCS --> API_DOCS API_DOCS --> API_TEST %% Gestión organizacional ORGANIZATIONS --> USERS ORGANIZATIONS --> MODAL_USER_INVITE %% Estilos classDef public fill:#e3f2fd,stroke:#1976d2,color:#000 classDef main fill:#e8f5e8,stroke:#388e3c,color:#000 classDef admin fill:#fff3e0,stroke:#f57c00,color:#000 classDef docs fill:#f3e5f5,stroke:#7b1fa2,color:#000 classDef error fill:#ffebee,stroke:#c62828,color:#000 classDef modal fill:#f9f9f9,stroke:#666,color:#000 class LANDING,LOGIN,REGISTER,FORGOT_PASSWORD,RESET_PASSWORD,GDPR_PUBLIC,LEGAL public class DASHBOARD,WORK_HOURS,PROJECTS,PROJECT_DETAILS,KANBAN,CALENDAR,REPORTS main class ORGANIZATIONS,USERS,PROFILE,SETTINGS,SUBSCRIPTION admin class USER_DOCS,API_DOCS,API_TEST,DOCUMENTATION docs class ERROR_403,ERROR_404 error class MODAL_PROJECT_SELECT,MODAL_KANBAN_TASK,MODAL_CALENDAR_EVENT,MODAL_USER_INVITE,MODAL_BREAK_MANAGE modal

3.3.2 Detalle de interfaces por categoría

Acceso público
Interfaz Funcionalidad Características principales
Landing Page Página de presentación del producto Hero section, características, precios, testimonios, CTA
Login Autenticación de usuarios Formulario email/password, recordar sesión, enlace recuperación
Register Registro de nuevos usuarios Formulario completo, validación, términos y condiciones
Forgot Password Recuperación de contraseña Envío de email de recuperación, validación de email
Reset Password Restablecimiento de contraseña Formulario nueva contraseña, validación de token
GDPR Gestión de derechos de privacidad Exportar datos, solicitar eliminación, gestionar consentimientos
Legal Pages Términos, privacidad, cookies Contenido legal estático, navegación, aceptación


Área principal de trabajo
Interfaz Funcionalidad Características principales
Dashboard Panel de control principal Widgets de tiempo, resumen de actividad, accesos rápidos, estadísticas
Work Hours Registro y gestión de tiempo Clock in/out, gestión descansos, histórico, edición de registros
Projects Gestión de proyectos Lista de proyectos, crear/editar, asignar miembros, estadísticas, archivo/desarchivar
Project Details Vista detallada de proyecto Información completa, miembros, estadísticas, acceso a Kanban
Kanban Board Tablero de gestión de tareas Drag & drop, pestañas, columnas personalizables, tiempo real
Calendar Calendario de eventos Vista mensual, crear/editar eventos, integración proyectos
Reports Informes y análisis Filtros avanzados, gráficos, exportación, múltiples formatos
Gestión y administración
Interfaz Funcionalidad Características principales
Organizations Gestión de organizaciones CRUD organizaciones, miembros, configuración, estadísticas, archivo/desarchivar
Users Administración de usuarios Lista usuarios, invitaciones, roles, permisos, desactivación
Profile Perfil de usuario Información personal, cambio contraseña, preferencias
Settings Configuración del sistema Configuraciones generales, notificaciones, integraciones
Subscription Gestión de suscripciones Planes disponibles, facturación, límites de uso, pagos









Modales y componentes interactivos
Modal/Componente Funcionalidad Características principales
Project Selector Selección de proyecto Lista filtrable, información proyecto, acceso directo
Task Management Crear/editar tareas Kanban Formulario completo, asignación, fechas, validación
Event Management Crear/editar eventos calendario Fecha/hora, recurrencia, notificaciones, tipos de evento
User Invitation Invitar nuevos usuarios Formulario email, roles, mensaje personalizado
Break Management Gestión de descansos Iniciar/finalizar descansos, tipos, duración

3.3.3 Flujo de navegación entre interfaces

3.3.4 Características responsivas y accesibilidad

Todas las interfaces del sistema implementan:

  • Diseño responsivo: Adaptación automática a dispositivos móviles, tabletas y escritorio
  • Accesibilidad: Cumplimiento de estándares WCAG 2.1 AA
  • Navegación táctil: Optimización para dispositivos táctiles
  • Temas: Soporte para modo claro y oscuro
  • Internacionalización: Preparado para múltiples idiomas
  • Performance: Carga optimizada y lazy loading

3.4 Diagramas del sistema

Los siguientes diagramas ilustran las principales entidades y relaciones en el sistema, así como el flujo de información entre los diferentes componentes:

Modelo entidad-relación

erDiagram USERS { string id PK string name string email string role } ORGANIZATIONS { string id PK string name string description } PROJECTS { string id PK string name string organization_id FK string status } API_TOKENS { string id PK string user_id FK string token datetime expire_at } USERS ||--o{ ORGANIZATIONS : "pertenece a" ORGANIZATIONS ||--o{ PROJECTS : "contiene" USERS ||--o{ API_TOKENS : "posee"

Gestión de tiempo y trabajo

erDiagram USERS { string id PK string name string email } PROJECTS { string id PK string name } WORK_HOURS { string id PK string user_id FK string project_id FK datetime clock_in datetime clock_out float total_hours } BREAKS { string id PK string work_hour_id FK datetime start_time datetime end_time float duration } USERS ||--o{ WORK_HOURS : "registra" PROJECTS ||--o{ WORK_HOURS : "incluye" WORK_HOURS ||--o{ BREAKS : "contiene"

Sistema kanban

erDiagram PROJECTS { string id PK string name } USERS { string id PK string name } KANBAN_COLUMNS { string id PK string project_id FK string name int position } KANBAN_TASKS { string id PK string column_id FK string title string assigned_to FK string status string created_by FK } PROJECTS ||--o{ KANBAN_COLUMNS : "tiene" KANBAN_COLUMNS ||--o{ KANBAN_TASKS : "contiene" USERS ||--o{ KANBAN_TASKS : "asignado a" USERS ||--o{ KANBAN_TASKS : "creado por"

Diagrama de entidad-relación completo

erDiagram USERS { int id PK string name string email string password string role datetime created_at } ORGANIZATIONS { int id PK string name string description string logo datetime created_at datetime updated_at datetime archived_at } ORGANIZATION_MEMBERS { int id PK int organization_id FK int user_id FK boolean is_admin datetime joined_at } PROJECTS { int id PK int organization_id FK string name string description string status datetime created_at datetime updated_at datetime archived_at datetime last_kanban_update } PROJECT_MEMBERS { int id PK int project_id FK int user_id FK boolean is_manager datetime joined_at } WORK_HOURS { int id PK int user_id FK int project_id FK datetime clock_in datetime clock_out float total_hours string notes string status } BREAKS { int id PK int work_hour_id FK datetime start_time datetime end_time float duration string break_type string notes string status } KANBAN_TABS { int id PK int project_id FK string name int position boolean is_default datetime created_at datetime updated_at } KANBAN_COLUMNS { int id PK int project_id FK int tab_id FK string name int position datetime created_at datetime updated_at } KANBAN_TASKS { int id PK int column_id FK int project_id FK int tab_id FK string title string description int assigned_to FK int position string status int created_by FK datetime due_date datetime created_at datetime updated_at } CALENDAR_EVENTS { int id PK string title string description datetime start_date datetime end_date string event_type int user_id FK int project_id FK int organization_id FK datetime created_at datetime updated_at } ANALYTICS { int id PK int user_id FK int project_id FK datetime record_date float total_hours float overtime } API_TOKENS { int id PK int user_id FK string token string name datetime expires_at datetime created_at } PASSWORD_RESETS { int id PK int user_id FK string token datetime expires_at datetime created_at } USER_SESSIONS { string session_id PK string session_data int expiry datetime created_at } ORGANIZATIONS ||--o{ ORGANIZATION_MEMBERS : has USERS ||--o{ ORGANIZATION_MEMBERS : belongs_to ORGANIZATIONS ||--o{ PROJECTS : owns PROJECTS ||--o{ PROJECT_MEMBERS : has USERS ||--o{ PROJECT_MEMBERS : member_of USERS ||--o{ WORK_HOURS : records PROJECTS ||--o{ WORK_HOURS : includes WORK_HOURS ||--o{ BREAKS : contains PROJECTS ||--o{ KANBAN_TABS : has PROJECTS ||--o{ KANBAN_COLUMNS : has KANBAN_TABS ||--o{ KANBAN_COLUMNS : organizes KANBAN_COLUMNS ||--o{ KANBAN_TASKS : contains PROJECTS ||--o{ KANBAN_TASKS : includes KANBAN_TABS ||--o{ KANBAN_TASKS : organizes USERS ||--o{ KANBAN_TASKS : assigned_to USERS ||--o{ KANBAN_TASKS : created_by USERS ||--o{ CALENDAR_EVENTS : personal_events PROJECTS ||--o{ CALENDAR_EVENTS : project_events ORGANIZATIONS ||--o{ CALENDAR_EVENTS : org_events USERS ||--o{ ANALYTICS : generates PROJECTS ||--o{ ANALYTICS : tracked_in USERS ||--o{ API_TOKENS : owns USERS ||--o{ PASSWORD_RESETS : requests

Diagrama de flujo de procesos principales

flowchart TD A[Usuario inicia sesión] --> B{¿Autenticado?} B -->|No| C[Mostrar error] B -->|Sí| D[Cargar dashboard] D --> E[Seleccionar proyecto] E --> F[Registrar entrada] F --> G[Trabajar en proyecto] G --> H{¿Tomar descanso?} H -->|Sí| I[Iniciar descanso] I --> J[Finalizar descanso] J --> G H -->|No| K{¿Continuar trabajando?} K -->|Sí| G K -->|No| L[Registrar salida] L --> M[Calcular horas totales] M --> N[Guardar registro] N --> O[Actualizar analytics] G --> P{¿Usar Kanban?} P -->|Sí| Q[Gestionar tareas] Q --> R[Actualizar estado] R --> G P -->|No| S{¿Programar eventos?} S -->|Sí| T[Crear evento calendario] T --> G S -->|No| U{¿Generar reportes?} U -->|Sí| V[Configurar filtros] V --> W[Generar reporte] W --> X[Exportar datos] classDef startEnd fill:#4caf50,stroke:#2e7d32,color:#fff classDef process fill:#2196f3,stroke:#1565c0,color:#fff classDef decision fill:#ff9800,stroke:#ef6c00,color:#fff classDef data fill:#9c27b0,stroke:#6a1b9a,color:#fff class A,C,X startEnd class D,E,F,G,I,J,L,M,N,O,Q,R,T,V,W process class B,H,K,P,S,U decision

3.5 Arquitectura de la API REST

Traballa incluye una API REST completa que permite la integración con sistemas externos y el desarrollo de aplicaciones cliente personalizadas. La API sigue los principios REST y utiliza JSON para el intercambio de datos.

Estructura de la API

  • Autenticación: Sistema de tokens JWT para autenticación segura
  • Endpoints: Rutas bien definidas siguiendo convenciones REST
  • Validación: Validación de datos de entrada y manejo de errores
  • Respuestas: Formato JSON consistente con códigos de estado HTTP apropiados

Flujo de autenticación API

sequenceDiagram participant Cliente as Cliente/App participant API as API Traballa participant Auth as Sistema Auth participant DB as Base de Datos Cliente->>API: POST /api/auth (email, password) API->>Auth: Validar credenciales Auth->>DB: Consultar usuario DB-->>Auth: Datos usuario Auth-->>API: Usuario autenticado API-->>Cliente: Token JWT + datos usuario Note over Cliente: Almacenar token Cliente->>API: GET /api/projects (Bearer token) API->>Auth: Validar token Auth-->>API: Token válido API->>DB: Consultar proyectos DB-->>API: Lista proyectos API-->>Cliente: JSON con proyectos

Endpoints principales

Método Endpoint Descripción Autenticación
POST /api/auth Autenticar usuario y obtener token No
GET /api/users Listar usuarios (solo admin)
GET /api/users/{id} Obtener usuario específico
GET /api/projects Listar proyectos del usuario
GET /api/projects/{id} Obtener proyecto específico
GET /api/organizations Listar organizaciones del usuario
GET /api/work-hours Obtener registros de tiempo
POST /api/work-hours Registrar entrada de tiempo
PUT /api/work-hours/{id} Actualizar registro de tiempo

3.6 Componentes nucleares del sistema

El sistema Traballa está construido sobre un conjunto de componentes nucleares que proporcionan la funcionalidad esencial y gestionan los aspectos críticos de la aplicación:

3.6.1 Sistema de enrutamiento

El sistema implementa dos routers principales para gestionar las peticiones web y API:

Router principal (Router.php)
flowchart TD REQUEST["Petición HTTP"] --> ROUTER["Router"] ROUTER --> AUTH{¿Requiere autenticación?} AUTH -->|No| PUBLIC["Rutas públicas"] AUTH -->|Sí| VALIDATE{¿Usuario autenticado?} VALIDATE -->|No| LOGIN["Redirigir a login"] VALIDATE -->|Sí| PROTECTED["Rutas protegidas"] PUBLIC --> LOGIN_PAGE["login.php"] PUBLIC --> REGISTER_PAGE["register.php"] PUBLIC --> LANDING["landing.php"] PROTECTED --> DASHBOARD["dashboard.php"] PROTECTED --> PROJECTS["projects.php"] PROTECTED --> CALENDAR["calendar.php"] PROTECTED --> KANBAN["kanban.php"] classDef router fill:#2196f3,stroke:#1565c0,color:#fff classDef page fill:#4caf50,stroke:#2e7d32,color:#fff classDef decision fill:#ff9800,stroke:#ef6c00,color:#fff class ROUTER router class LOGIN_PAGE,REGISTER_PAGE,LANDING,DASHBOARD,PROJECTS,CALENDAR,KANBAN page class AUTH,VALIDATE decision

Funcionalidades del Router:

  • Públicas: login, register, forgot-password, reset-password, gdpr, landing, terms-of-service, privacy-policy, cookies-policy, legal-advice
  • Protegidas estándar: dashboard, profile, work-hours, reports, calendar, kanban, settings, subscription, project-details, organization-details
  • Gestión: projects, organizations (requieren permisos de management)
  • Administrador: users, smtp-settings (requieren permisos de admin)
  • Documentación: user-docs, documentation, technical-documentation, api-docs, api-test
API Router (ApiRouter.php)
flowchart TD API_REQUEST["Petición API"] --> API_ROUTER["ApiRouter"] API_ROUTER --> PARSE_ENDPOINT["Procesar endpoint"] PARSE_ENDPOINT --> PARSE_AUTH["Procesar autenticación"] PARSE_AUTH --> AUTH_VALIDATE{¿Token válido?} AUTH_VALIDATE -->|No| UNAUTHORIZED["HTTP 401"] AUTH_VALIDATE -->|Sí| ROUTE_REQUEST["Enrutar petición"] ROUTE_REQUEST --> AUTH_ENDPOINT["auth"] ROUTE_REQUEST --> USERS_ENDPOINT["users"] ROUTE_REQUEST --> PROJECTS_ENDPOINT["projects"] ROUTE_REQUEST --> ORGANIZATIONS_ENDPOINT["organizations"] ROUTE_REQUEST --> WORKHOURS_ENDPOINT["work-hours"] AUTH_ENDPOINT --> AUTH_RESPONSE["JSON Response"] USERS_ENDPOINT --> USERS_RESPONSE["JSON Response"] PROJECTS_ENDPOINT --> PROJECTS_RESPONSE["JSON Response"] ORGANIZATIONS_ENDPOINT --> ORG_RESPONSE["JSON Response"] WORKHOURS_ENDPOINT --> WORK_RESPONSE["JSON Response"] classDef router fill:#2196f3,stroke:#1565c0,color:#fff classDef endpoint fill:#4caf50,stroke:#2e7d32,color:#fff classDef response fill:#9c27b0,stroke:#6a1b9a,color:#fff classDef error fill:#f44336,stroke:#c62828,color:#fff class API_ROUTER router class AUTH_ENDPOINT,USERS_ENDPOINT,PROJECTS_ENDPOINT,ORGANIZATIONS_ENDPOINT,WORKHOURS_ENDPOINT endpoint class AUTH_RESPONSE,USERS_RESPONSE,PROJECTS_RESPONSE,ORG_RESPONSE,WORK_RESPONSE response class UNAUTHORIZED error

Características del API Router:

  • Autenticación Bearer Token: Tokens almacenados en tabla api_tokens
  • Expiración automática: Tokens válidos por 24 horas
  • Limpieza automática: Elimina tokens previos al generar nuevos
  • Validación de permisos: Verificación de acceso a recursos por usuario
  • Respuestas consistentes: Formato JSON estándar con status y data/message

3.6.2 Funciones centrales (functions.php)

El archivo functions.php contiene las funciones utilitarias y de seguridad del sistema, organizadas en las siguientes categorías:

Funciones de sanitización
  • sanitize($data): Sanitización básica con htmlspecialchars
  • sanitize_output($data, $allow_html): Sanitiza datos para mostrar de forma segura en HTML
  • sanitize_attribute($data): Sanitiza datos para uso en atributos HTML
  • sanitize_js($data): Sanitiza datos para uso seguro en JavaScript usando json_encode
  • sanitize_url($url): Sanitiza URLs usando filter_var
  • sanitize_email($email): Sanitiza y valida direcciones de correo electrónico
  • sanitize_array($data): Sanitización recursiva de arrays
  • strip_dangerous_tags($data): Elimina etiquetas y atributos peligrosos
Funciones de seguridad CSRF
  • generate_csrf_token(): Genera token CSRF para formularios
  • validate_csrf_token($token): Valida tokens CSRF
  • csrf_field(): Genera campo hidden con token CSRF
  • check_csrf(): Valida CSRF en peticiones POST
  • set_security_headers(): Configura headers de seguridad HTTP
Funciones de configuración y utilidades
  • getSessionObject(): Obtiene instancia de Session de forma segura
  • getDashboardUrl($fallback_url): Genera URL del dashboard basada en configuración
  • getLoginUrl($fallback_url): Genera URL de login basada en configuración
  • getSMTPSettings(): Obtiene configuración SMTP del sistema
Funciones de autorización y roles
  • isAdmin(): Verifica si el usuario actual es administrador
  • isProjectManager(): Verifica si el usuario es gestor de proyecto
  • isEmployee(): Verifica si el usuario es empleado
  • hasManagementPermissions(): Verifica permisos de gestión
Funciones de gestión de usuarios
  • getUserById($pdo, $user_id): Obtiene un usuario por su ID
  • getAllUsers($pdo): Obtiene todos los usuarios (solo admin)
  • formatDateTime($timestamp): Formatea timestamps a formato legible
  • calculateHours($clock_in, $clock_out): Calcula horas entre dos timestamps
  • getUserStatistics($pdo, $user_id): Obtiene estadísticas del usuario
Funciones de gestión de horas de trabajo
  • getCurrentWorkStatus($pdo, $user_id): Obtiene el estado de trabajo actual
  • getUserWorkHours($pdo, $user_id, ...): Obtiene horas de trabajo con filtros
  • getWorkSummary($pdo, $user_id, $period, ...): Obtiene resumen de trabajo por período
  • getTotalTraballaToday($pdo): Obtiene total de horas trabajadas hoy
  • getActiveUsersToday($pdo): Obtiene usuarios activos hoy
Funciones de gestión de proyectos
  • getAllProjects($pdo, $organization_id): Obtiene todos los proyectos
  • getProjectById($pdo, $project_id): Obtiene un proyecto por ID
  • getUserProjects($pdo, $user_id, ...): Obtiene proyectos del usuario
  • getUserActiveProjects($pdo, $user_id, ...): Obtiene proyectos activos del usuario
  • isProjectMember($pdo, $user_id, $project_id): Verifica membresía de proyecto
  • isProjectManagerOf($pdo, $user_id, $project_id): Verifica si es gestor del proyecto
  • getProjectMembers($pdo, $project_id): Obtiene miembros del proyecto
  • getProjectStatistics($pdo, $project_id): Obtiene estadísticas del proyecto
  • canAccessProject($pdo, $user_id, $project_id): Verifica acceso al proyecto
  • archiveProject($pdo, $project_id): Archiva un proyecto (soft delete)
  • unarchiveProject($pdo, $project_id): Desarchivar un proyecto
  • isProjectArchived($pdo, $project_id): Verifica si proyecto está archivado
  • getArchivedProjects($pdo, $organization_id): Obtiene proyectos archivados de organización
Funciones de gestión de organizaciones
  • getAllOrganizations($pdo): Obtiene todas las organizaciones
  • getOrganizationById($pdo, $organization_id): Obtiene organización por ID
  • getUserOrganizations($pdo, $user_id): Obtiene organizaciones del usuario
  • getOrganizationProjects($pdo, $organization_id): Obtiene proyectos de la organización
  • isOrganizationMember($pdo, $user_id, $organization_id): Verifica membresía
  • isOrganizationAdmin($pdo, $user_id, $organization_id): Verifica si es admin
  • getOrganizationMembers($pdo, $organization_id): Obtiene miembros de la organización
  • getOrganizationStatistics($pdo, $organization_id): Obtiene estadísticas de la organización
  • canAccessOrganization($pdo, $user_id, $organization_id): Verifica acceso a organización
  • archiveOrganization($pdo, $organization_id): Archiva una organización (soft delete)
  • unarchiveOrganization($pdo, $organization_id): Desarchivar una organización
  • isOrganizationArchived($pdo, $organization_id): Verifica si organización está archivada
  • getArchivedOrganizations($pdo): Obtiene todas las organizaciones archivadas
Funciones del sistema Kanban
  • getKanbanColumns($pdo, $project_id): Obtiene columnas del tablero Kanban
  • getKanbanTasks($pdo, $column_id): Obtiene tareas de una columna
  • createDefaultKanbanColumns($pdo, $project_id): Crea columnas por defecto
  • addKanbanColumn($pdo, $project_id, $name): Añade nueva columna
  • addKanbanTask($pdo, $column_id, ...): Añade nueva tarea
  • updateKanbanTask($pdo, $task_id, ...): Actualiza tarea existente
  • deleteKanbanTask($pdo, $task_id): Elimina tarea
Funciones de pestañas Kanban
  • getKanbanTabs($pdo, $project_id): Obtiene pestañas del proyecto
  • createDefaultKanbanTab($pdo, $project_id): Crea pestaña por defecto
  • addKanbanTab($pdo, $project_id, $name): Añade nueva pestaña
  • getKanbanColumnsWithTabs($pdo, $project_id, $tab_id): Obtiene columnas por pestaña
  • addKanbanColumnWithTab($pdo, $project_id, $tab_id, $name): Añade columna a pestaña
  • addKanbanTaskWithTab($pdo, $column_id, ...): Añade tarea con pestaña
Funciones del sistema de suscripciones
  • getSubscriptionManager(): Obtiene instancia del gestor de suscripciones
  • canPerformAction($organization_id, $action): Verifica si puede realizar acción
  • getOrganizationPlan($organization_id): Obtiene plan de la organización
  • getUsageStats($organization_id): Obtiene estadísticas de uso
  • isTrialExpiringSoon($organization_id): Verifica si el trial expira pronto
  • getTrialDaysRemaining($organization_id): Obtiene días restantes del trial
Funciones de administración y estadísticas
  • getTotalUsers($pdo): Obtiene total de usuarios registrados
  • getTotalOrganizations($pdo): Obtiene total de organizaciones
  • getRecentRegistrations($pdo, $limit): Obtiene registros recientes
  • getSystemActivity($pdo, $limit): Obtiene actividad del sistema
  • getRecentUsersWithActivity($pdo, $limit): Obtiene usuarios recientes con actividad

3.6.3 Sistema de calendario (Calendar.php)

El componente Calendar proporciona funcionalidad completa de calendario con eventos:

Métodos de generación de calendario
  • generateCalendarHTML($month, $year, $user_id, $organization_id): Genera el HTML del calendario mensual con eventos y navegación
  • getEventsForDate($date, $user_id, $organization_id): Obtiene eventos para una fecha específica con filtros
  • getEventsForDateRange($start_date, $end_date, $user_id, $organization_id): Obtiene eventos en un rango de fechas
  • getEventById($event_id): Obtiene un evento específico por ID con datos relacionados
Métodos de gestión de eventos CRUD
  • addEvent($title, $description, $start_date, $end_date, $event_type, $user_id, $project_id, $organization_id): Crea nuevo evento
  • updateEvent($event_id, $title, $description, $start_date, $end_date, $event_type, $user_id, $project_id, $organization_id): Actualiza evento existente
  • deleteEvent($event_id): Elimina un evento del calendario
Métodos de consulta de datos relacionados
  • getProjects(): Obtiene proyectos activos accesibles por el usuario actual
  • getOrganizations(): Obtiene organizaciones del usuario actual para filtrado

Funcionalidades del calendario:

  • Generación de vistas HTML: Calendario mensual completo con navegación por días
  • Gestión completa de eventos: CRUD con validación de campos opcionales y nulos
  • Filtrado inteligente: Por usuario, proyecto y organización con permisos
  • Tipos de eventos: Personal, proyecto y organización con diferentes estilos
  • Optimización de rendimiento: Límite de eventos mostrados y paginación automática
  • Integración con proyectos: Vinculación directa con proyectos activos del usuario

3.6.4 Sistema de correo electrónico (EmailSender.php)

El EmailSender maneja todas las comunicaciones por correo electrónico del sistema:

Constructor y configuración
  • __construct($fromEmail, $fromName, $replyTo, $templatePath): Inicializa el objeto con configuración de remitente y plantillas
Métodos principales de envío
  • send($to, $subject, $message, $htmlMessage, $attachments): Envía emails con soporte para texto plano y HTML
  • sendTemplate($to, $subject, $templateName, $variables, $attachments): Envía emails usando plantillas PHP con variables
Funciones de cumplimiento GDPR
  • getGdprFooter(): Genera footer de cumplimiento GDPR con enlaces de privacidad

Características del sistema de email:

  • Emails multipart automáticos: Soporte nativo para texto plano y HTML con boundaries automáticos
  • Sistema de plantillas PHP: Templates usando include con variables extraídas automáticamente
  • Cumplimiento GDPR básico: Footer automático con información de privacidad y gestión de datos
  • Configuración flexible: Parámetros configurables para remitente, nombre y reply-to
  • Soporte para adjuntos: Preparado para recibir array de archivos adjuntos
  • Headers personalizados: Generación automática de headers MIME y X-Mailer

3.6.5 Gestión de sesiones (Session.php)

El sistema de sesiones híbrido combina almacenamiento en base de datos con compatibilidad PHP nativa:

flowchart TD SESSION_START["Inicio de sesión"] --> COOKIE_CHECK{¿Cookie existe?} COOKIE_CHECK -->|No| GENERATE_ID["Generar session_id"] COOKIE_CHECK -->|Sí| LOAD_SESSION["Cargar desde BD"] GENERATE_ID --> SET_COOKIE["Establecer cookie"] LOAD_SESSION --> VALIDATE{¿Sesión válida?} VALIDATE -->|No| GENERATE_ID VALIDATE -->|Sí| CHECK_REFRESH{¿Necesita refresh?} CHECK_REFRESH -->|Sí| REFRESH_SESSION["Refrescar sesión"] CHECK_REFRESH -->|No| SYNC_PHP["Sincronizar con $_SESSION"] SET_COOKIE --> UPDATE_DB["Actualizar BD"] REFRESH_SESSION --> UPDATE_DB UPDATE_DB --> CLEAN_EXPIRED["Limpiar sesiones expiradas"] CLEAN_EXPIRED --> SYNC_PHP classDef start fill:#4caf50,stroke:#2e7d32,color:#fff classDef process fill:#2196f3,stroke:#1565c0,color:#fff classDef decision fill:#ff9800,stroke:#ef6c00,color:#fff classDef database fill:#9c27b0,stroke:#6a1b9a,color:#fff class SESSION_START start class GENERATE_ID,SET_COOKIE,LOAD_SESSION,REFRESH_SESSION,SYNC_PHP process class COOKIE_CHECK,VALIDATE,CHECK_REFRESH decision class UPDATE_DB,CLEAN_EXPIRED database

Funcionalidades del sistema de sesiones:

  • Almacenamiento en BD: Sesiones persistentes en base de datos
  • Cookies seguras: Configuración con flags HttpOnly, Secure y SameSite
  • Regeneración automática: Refresh periódico de IDs de sesión
  • Limpieza automática: Eliminación de sesiones expiradas
  • Sincronización PHP: Compatibilidad con $_SESSION nativa

3.6.6 Gestión de suscripciones (SubscriptionManager.php)

El SubscriptionManager controla los planes de suscripción y límites del sistema:

flowchart TD SUBSCRIPTION["SubscriptionManager"] --> GET_PLANS["getPlans()"] SUBSCRIPTION --> GET_ORG_PLAN["getOrganizationPlan()"] SUBSCRIPTION --> CAN_PERFORM["canPerformAction()"] SUBSCRIPTION --> CHECK_LIMITS["checkLimits()"] GET_PLANS --> ACTIVE_PLANS["Planes activos"] GET_ORG_PLAN --> CURRENT_PLAN["Plan actual"] GET_ORG_PLAN --> TRIAL_STATUS["Estado de trial"] CAN_PERFORM --> VALIDATE_SUBSCRIPTION["Validar suscripción"] CAN_PERFORM --> CHECK_FEATURES["Verificar características"] CAN_PERFORM --> USAGE_LIMITS["Límites de uso"] CHECK_LIMITS --> USER_COUNT["Contar usuarios"] CHECK_LIMITS --> PROJECT_COUNT["Contar proyectos"] CHECK_LIMITS --> COMPARE_LIMITS["Comparar con límites"] classDef manager fill:#2196f3,stroke:#1565c0,color:#fff classDef method fill:#4caf50,stroke:#2e7d32,color:#fff classDef validation fill:#ff9800,stroke:#ef6c00,color:#fff classDef data fill:#9c27b0,stroke:#6a1b9a,color:#fff class SUBSCRIPTION manager class GET_PLANS,GET_ORG_PLAN,CAN_PERFORM,CHECK_LIMITS method class VALIDATE_SUBSCRIPTION,CHECK_FEATURES,USAGE_LIMITS validation class ACTIVE_PLANS,CURRENT_PLAN,TRIAL_STATUS,USER_COUNT,PROJECT_COUNT,COMPARE_LIMITS data

Funcionalidades del gestor de suscripciones:

  • Gestión de planes: CRUD de planes de suscripción con características
  • Validación de límites: Control automático de usuarios y proyectos
  • Períodos de prueba: Gestión de trials con fechas de expiración
  • Control de características: Habilitación/deshabilitación por plan
  • Facturación: Integración preparada para sistemas de pago

3.6.7 Sistema de navegación (Breadcrumb.php)

El sistema de breadcrumbs proporciona navegación contextual y está integrado con el sistema de rutas:

Métodos principales
  • __construct($router): Constructor que inicializa el sistema con referencia al router
  • setupDefaultBreadcrumbs(): Configura breadcrumbs predeterminados para todas las rutas del sistema
  • get($route, $customItems): Obtiene breadcrumbs para una ruta específica con elementos personalizados opcionales
  • set($route, $breadcrumbs): Establece breadcrumbs personalizados para una ruta
  • add($route, $title, $url): Añade un elemento de breadcrumb a una ruta específica
Renderizado y salida
  • render($route, $customItems): Genera HTML estándar con Bootstrap para breadcrumbs
  • renderCustom($route, $customItems, $separator): Genera HTML personalizado con separador configurable
Rutas predefinidas

El sistema incluye breadcrumbs predefinidos para todas las rutas principales:

  • Dashboard, Projects, Organizations, Users: Rutas principales de navegación
  • Work Hours, Reports, Calendar, Kanban: Funcionalidades de productividad
  • Profile, Settings, Subscription, GDPR: Configuración de usuario
  • API Docs, API Test: Documentación y herramientas de desarrollo
  • Páginas de error: 404, 403 con navegación contextual

Características del sistema de breadcrumbs:

  • Configuración automática: Breadcrumbs predefinidos para rutas comunes
  • Navegación dinámica: Adición de elementos contextuales
  • Integración con router: Detección automática de la ruta actual
  • Renderizado HTML: Generación automática del markup de navegación
  • Accesibilidad: Marcado semántico para lectores de pantalla

3.6.8 Gestión GDPR (GdprManager.php)

El GdprManager implementa el cumplimiento del Reglamento General de Protección de Datos:

Constructor y configuración
  • __construct($pdo, $emailSender): Inicializa el gestor con conexión PDO y EmailSender opcional
Funciones de acceso a datos (Art. 15)
  • fetchUserData($userId): Obtiene todos los datos personales del usuario para exportación GDPR
  • getUserPersonalData($userId): Extrae datos personales básicos (privado)
  • getUserWorkData($userId): Obtiene registros de trabajo y proyectos (privado)
  • getUserSettings($userId): Obtiene configuraciones del usuario (privado)
  • getUserAccessLogs($userId): Recupera logs de acceso y actividad (privado)
  • getUserOrganizations($userId): Obtiene membresías de organizaciones (privado)
  • getUserProjects($userId): Obtiene membresías de proyectos (privado)
Funciones de rectificación (Art. 16)
  • updateUserData($userId, $fields): Actualiza datos personales del usuario con validación de campos permitidos
Funciones de eliminación (Art. 17)
  • initiateDataDeletion($userId, $reason): Inicia proceso de eliminación con plantillas de email
  • logErasureRequest($userId): Registra solicitud de eliminación para auditoría
  • cancelDeletionRequest($userId): Cancela solicitud de eliminación pendiente
  • getPendingDeletionRequest($userId): Verifica si existe solicitud de eliminación pendiente
Funciones de limitación y restricciones (Art. 18)
  • setProcessingRestrictions($userId, $restrictions): Establece restricciones de procesamiento con notificaciones
  • getProcessingRestrictions($userId): Obtiene restricciones activas del usuario
Funciones de oposición (Art. 21)
  • registerObjection($userId, $reason, $processingTypes): Registra objeción al procesamiento con notificaciones
  • getObjections($userId): Obtiene objeciones activas del usuario
Funciones de portabilidad (Art. 20)
  • generateUserDataExport($userId, $format, $dataTypes): Genera exportación completa en JSON o CSV
Funciones de auditoría y logging
  • logGdprAction($userId, $actionType, $details): Registra acciones GDPR para auditoría
  • sendEmail($to, $subject, $message, $htmlMessage): Envía emails con footer GDPR automático (privado)

Derechos GDPR implementados:

  • Derecho de acceso (Art. 15): Exportación completa de datos del usuario con métodos privados especializados
  • Derecho de rectificación (Art. 16): Actualización controlada de campos permitidos
  • Derecho al olvido (Art. 17): Proceso de eliminación con período de gracia y plantillas de email
  • Derecho a la limitación (Art. 18): Sistema de restricciones almacenado en sesión
  • Derecho de oposición (Art. 21): Registro de objeciones con notificaciones automáticas
  • Derecho a la portabilidad (Art. 20): Exportación en JSON/CSV con aplanamiento automático
  • Auditoría completa: Logging de todas las acciones GDPR con notificaciones a administradores

3.6.9 Diagrama de interacciones entre componentes

graph TD subgraph "Frontend" UI[Interfaz Usuario] end subgraph "Routing Layer" ROUTER[Router] API_ROUTER[ApiRouter] end subgraph "Business Logic" FUNCTIONS[functions.php] CALENDAR[Calendar] EMAIL[EmailSender] GDPR[GdprManager] SUBSCRIPTION[SubscriptionManager] end subgraph "Infrastructure" SESSION[Session] BREADCRUMB[Breadcrumb] DATABASE[(Database)] end UI --> ROUTER UI --> API_ROUTER ROUTER --> SESSION ROUTER --> BREADCRUMB ROUTER --> FUNCTIONS API_ROUTER --> SESSION API_ROUTER --> FUNCTIONS CALENDAR --> DATABASE CALENDAR --> EMAIL GDPR --> DATABASE GDPR --> EMAIL SUBSCRIPTION --> DATABASE SESSION --> DATABASE FUNCTIONS --> DATABASE classDef frontend fill:#e3f2fd,stroke:#1976d2 classDef routing fill:#f3e5f5,stroke:#7b1fa2 classDef business fill:#e8f5e8,stroke:#388e3c classDef infrastructure fill:#fff3e0,stroke:#f57c00 class UI frontend class ROUTER,API_ROUTER routing class FUNCTIONS,CALENDAR,EMAIL,GDPR,SUBSCRIPTION business class SESSION,BREADCRUMB,DATABASE infrastructure

3.6 Sistema de suscripciones

Traballa incorpora un sistema de suscripciones que permite ofrecer diferentes niveles de servicio según las necesidades de los usuarios y organizaciones.

3.6.1 Modelo de datos de suscripciones

El sistema de suscripciones se basa en las siguientes tablas principales:

erDiagram subscription_plans { int id PK string name string description decimal price enum billing_cycle int max_users int max_projects json features boolean is_active datetime created_at datetime updated_at } organizations { int id PK string name string description int current_plan_id FK enum subscription_status datetime trial_ends_at } organization_subscriptions { int id PK int organization_id FK int plan_id FK enum status datetime start_date datetime end_date datetime trial_end_date string payment_method string payment_id } subscription_usage { int id PK int organization_id FK date month int users_count int projects_count int api_calls bigint storage_used } organizations ||--o{ organization_subscriptions : "has" subscription_plans ||--o{ organization_subscriptions : "used in" subscription_plans ||--o{ organizations : "current plan" organizations ||--o{ subscription_usage : "tracks usage"

La funcionalidad de suscripciones se implementa principalmente a través de estas tablas y está gestionada por la clase SubscriptionManager.

3.6.2 Planes de suscripción

El sistema está configurado con tres planes de suscripción predeterminados:

Plan Descripción Precio (€/mes) Máx. usuarios Máx. proyectos
Free Perfect for individuals 0.00 1 3
Pro Ideal for small teams 9.00 10 Ilimitado (-1)
Enterprise Built for organizations 15.00 Ilimitado (-1) Ilimitado (-1)

Cada plan incluye un conjunto definido de características almacenadas como un objeto JSON en la tabla subscription_plans:

{
    "time_tracking": true|false,
    "basic_reports": true|false,
    "team_collaboration": true|false,
    "advanced_reports": true|false,
    "api_access": true|false,
    "priority_support": true|false,
    "calendar_integration": true|false,
    "custom_branding": true|false
}

3.6.3 Gestión de suscripciones

La clase SubscriptionManager encapsula toda la lógica relacionada con las suscripciones y proporciona los siguientes métodos principales:

  • getPlans(): Recupera todos los planes de suscripción disponibles.
  • getPlan($plan_id): Obtiene un plan específico por ID.
  • getPlanByName($plan_name): Obtiene un plan específico por nombre.
  • getOrganizationSubscription($organization_id): Obtiene la suscripción actual de una organización.
  • getOrganizationPlan($organization_id): Obtiene el plan actual de una organización desde la tabla organizations.
  • canPerformAction($organization_id, $action): Comprueba si una organización puede realizar una acción basada en su plan.
  • getUsageStats($organization_id): Obtiene estadísticas de uso para una organización.
  • upgradePlan($organization_id, $new_plan_id): Actualiza el plan de una organización.
  • startTrial($organization_id, $plan_id, $trial_days): Inicia un período de prueba para una organización.
  • cancelSubscription($organization_id): Cancela la suscripción de una organización.
  • updateUsageStats($organization_id): Actualiza las estadísticas de uso para una organización.
  • assignPlan($organization_id, $plan_id): Asigna un plan a una organización (para organizaciones nuevas).
  • getPlanLimitsText($plan): Obtiene los límites del plan como texto formateado.

3.6.4 Estados de suscripción

Las suscripciones pueden tener varios estados que se gestionan a través del campo subscription_status en la tabla organizations y el campo status en la tabla organization_subscriptions:

Estado Descripción
active La suscripción está activa y el plan se está pagando.
trial La organización está en un período de prueba gratuito.
expired La suscripción ha expirado (no implementado activamente).
cancelled La suscripción ha sido cancelada y se ha vuelto al plan gratuito.

3.6.5 Control de acceso a características

El control de acceso a las características basado en el plan se implementa principalmente a través del método canPerformAction(), que comprueba si una organización puede realizar una acción específica según su plan actual:

// Comprobación de permisos basados en suscripción
if (!canPerformAction($organization_id, 'advanced_reports')) {
    // Mostrar mensaje de error o redireccionar
    return;
}

Las acciones comprobadas incluyen:

  • add_user: Comprobar si se puede añadir más usuarios (límite de usuarios)
  • create_project: Comprobar si se pueden crear más proyectos (límite de proyectos)
  • team_collaboration: Comprobar si la colaboración en equipo está habilitada
  • advanced_reports: Comprobar si los informes avanzados están habilitados
  • api_access: Comprobar si el acceso API está habilitado
  • priority_support: Comprobar si el soporte prioritario está habilitado
  • calendar_integration: Comprobar si la integración del calendario está habilitada

3.6.6 Interfaz de usuario para gestión de suscripciones

La gestión de suscripciones se realiza principalmente a través de la página subscription.php, que permite a los usuarios ver su plan actual, explorar planes disponibles, actualizar su plan y cancelar suscripciones.

Además, el estado de la suscripción se muestra en la barra lateral para proporcionar contexto constante sobre el plan actual y notificar cuando un período de prueba está por finalizar.


4. Codificación y pruebas

4.1 Tecnologías utilizadas

El desarrollo de Traballa ha implicado el uso de las siguientes tecnologías:

  • Frontend: HTML5, CSS3, JavaScript (ES6+), Bootstrap 5
  • Backend: PHP 8, MySQL 8
  • Librerías y Frameworks: jQuery, Chart.js (para gráficos), PHPMailer (para envío de emails)
  • Herramientas de Desarrollo: Git para control de versiones, Composer para gestión de dependencias PHP
  • Entorno de Despliegue: Servidor Apache, HTTPS con certificados SSL

4.2 Estructura del código

El código fuente de Traballa está organizado siguiendo una estructura modular y mantenible:

  • config/: Archivos de configuración del sistema
  • includes/: Clases y funciones compartidas (modelos, utilidades)
  • pages/: Controladores y vistas principales
  • webroot/: Punto de entrada público y activos web (CSS, JS, imágenes)
  • ajax/: Endpoints para peticiones asíncronas
  • vendor/: Dependencias de terceros gestionadas por Composer

El código sigue los estándares PSR para PHP y utiliza patrones de diseño como Singleton y Factory, junto con una separación básica de responsabilidades para mejorar la mantenibilidad y extensibilidad, sin seguir estrictamente el patrón MVC.

4.3 Plan de pruebas

El plan de pruebas de Traballa incluye:

  • Pruebas Unitarias: Para componentes críticos como la lógica de cálculo de tiempos y la generación de informes.
  • Pruebas de Integración: Para verificar la correcta interacción entre módulos (por ejemplo, entre el registro de tiempo y el sistema de informes).
  • Pruebas de Usabilidad: Realizadas con usuarios potenciales para evaluar la experiencia de usuario y detectar problemas de diseño.
  • Pruebas de Rendimiento: Para garantizar tiempos de respuesta aceptables bajo diferentes niveles de carga.
  • Pruebas de Seguridad: Incluyendo análisis de vulnerabilidades comunes como inyección SQL, XSS y CSRF.

Los resultados de las pruebas han sido documentados y los problemas identificados han sido corregidos antes de la entrega final del proyecto.


6. Planificación

Esta sección detalla la planificación del proyecto, incluyendo las fases de desarrollo y el cronograma.

6.1 Fases del proyecto

El desarrollo de Traballa se ha dividido en las siguientes fases, ajustadas para un periodo de 3 meses con una dedicación de 16 horas semanales:

  1. Estudio preliminar y análisis (Semanas 1-2): Definición del alcance, objetivos, viabilidad del proyecto y análisis de requisitos.
  2. Diseño (Semanas 3-4): Arquitectura del sistema, modelo de datos, diseño de interfaces y prototipación.
  3. Codificación y pruebas (Semanas 5-10):
    • Semana 5: Desarrollo de la infraestructura base y módulo de usuarios
    • Semana 6: Implementación del módulo de registro de tiempo
    • Semana 7: Desarrollo de gestión de proyectos
    • Semana 8: Implementación del tablero Kanban
    • Semana 9: Desarrollo del calendario y sistema de eventos
    • Semana 10: Implementación del sistema de informes y analytics
  4. Testing y optimización (Semana 11): Pruebas integrales, corrección de errores y optimización de rendimiento.
  5. Documentación y entrega (Semana 12): Elaboración de manuales de usuario, documentación técnica y preparación de la presentación final.

Carga de trabajo: 16 horas semanales durante 10 semanas = 176 horas totales de desarrollo

6.2 Cronograma

El cronograma detallado del proyecto incluye:

Fase Duración Fecha Inicio Fecha Fin Horas Semanales Horas Totales
Estudio Preliminar y Análisis 2 semanas 07/04/2025 20/04/2025 16 32
Diseño 2 semanas 21/04/2025 04/05/2025 16 32
Codificación y Desarrollo 6 semanas 05/05/2025 15/06/2025 16 96
Testing y Optimización 1 día 16/06/2025 16/06/2025 8 8
Documentación y Entrega 1 día 16/06/2025 16/06/2025 8 8
Total 10 semanas 16 176

Recursos necesarios

Recursos humanos
  • Estudiante desarrollador (autor del TFG)
  • Tutor académico (supervisión y orientación)
Recursos técnicos
  • Ordenador personal para desarrollo
  • Servidor web compartido para pruebas y despliegue
  • Herramientas de desarrollo (IDE, controlador de versiones)
  • Herramientas de diseño (Figma o similar)
  • Software de código abierto y frameworks

Gestión de riesgos

Riesgo Probabilidad Impacto Estrategia de Mitigación
Cambios en los requisitos Media Alto Definir claramente el alcance al inicio y mantener comunicación constante con el tutor.
Retrasos en el desarrollo Alta Alto Planificación realista con margen para imprevistos. Enfoque en MVP (Producto Mínimo Viable).
Problemas técnicos Media Medio Usar tecnologías conocidas. Buscar soluciones alternativas si surgen obstáculos.
Falta de tiempo por otras obligaciones académicas Alta Alto Reservar tiempo específico para el TFG. Priorizar tareas fundamentales.
Problemas con el servidor Baja Medio Realizar copias de seguridad frecuentes. Tener preparado un servidor alternativo.

Control y seguimiento (Diagrama Gantt)

  • Reuniones quincenales: Con el tutor para revisar avances y orientar el desarrollo.
  • Hitos de control: Revisión al finalizar cada fase del proyecto.
  • Documentación continua: Mantener actualizada la memoria del TFG durante todo el proceso.
  • Control de versiones: Uso de Git para gestionar el código fuente y los cambios.
gantt title Cronograma del Proyecto TFC - Cronograma Real (16h/semana) dateFormat YYYY-MM-DD axisFormat %b-%d section Fases del Proyecto Estudio Preliminar :done, a1, 2025-04-07, 2025-04-13 Análisis de Requisitos:done, a2, 2025-04-14, 2025-04-20 Diseño Arquitectura :done, a3, 2025-04-21, 2025-04-27 Diseño Interfaces :done, a4, 2025-04-28, 2025-05-04 section Desarrollo Infraestructura Base :done, d1, 2025-05-05, 2025-05-11 Módulo Usuarios :done, d2, 2025-05-05, 2025-05-11 Registro de Tiempo :done, d3, 2025-05-12, 2025-05-18 Gestión Proyectos :done, d4, 2025-05-19, 2025-05-25 Tablero Kanban :done, d5, 2025-05-26, 2025-06-01 Calendario :done, d6, 2025-06-02, 2025-06-08 Sistema de Archivado :done, d8, 2025-06-10, 2025-06-12 Informes y Analytics :active, d7, 2025-06-09, 2025-06-15 section Finalización Testing y Optimización:t1, 2025-06-16, 2025-06-16 Documentación Final :doc, 2025-06-16, 2025-06-16 section Hitos Entrega Final :milestone, m1, 2025-06-16, 0d

6.2.1 Desglose detallado de fases

Fase 1: Estudio preliminar y análisis (2 semanas - 32 horas)
  • Semana 1 (16h) - 07/04 al 13/04: Análisis de la problemática, definición de objetivos, estudio de soluciones existentes
  • Semana 2 (16h) - 14/04 al 20/04: Análisis detallado de requisitos, definición de casos de uso, documentación preliminar
Fase 2: Diseño (2 semanas - 32 horas)
  • Semana 3 (16h) - 21/04 al 27/04: Diseño de arquitectura del sistema, modelo de datos, especificación de APIs
  • Semana 4 (16h) - 28/04 al 04/05: Diseño de interfaces de usuario, prototipado, definición de flujos de trabajo
Fase 3: Codificación y desarrollo (6 semanas - 96 horas) - Fase principal
  • Semana 5 (16h) - 05/05 al 11/05: Configuración del entorno, estructura del proyecto, sistema de usuarios y autenticación
  • Semana 6 (16h) - 12/05 al 18/05: Módulo de registro de tiempo, fichar entrada/salida, gestión de pausas
  • Semana 7 (16h) - 19/05 al 25/05: Gestión de proyectos, CRUD de proyectos, asignación de usuarios
  • Semana 8 (16h) - 26/05 al 01/06: Sistema Kanban, tableros, columnas, arrastrar y soltar
  • Semana 9 (16h) - 02/06 al 08/06: Calendario integrado, eventos, planificación de tareas
  • Semana 10 (16h) - 09/06 al 15/06: Sistema de informes, analytics, gráficos, exportación de datos
  • Sistema de archivado (4h) - 10/06 al 12/06: Implementación de soft delete para organizaciones y proyectos, interfaces de archivo/desarchivar
Fase 4: Testing y optimización (0.5 días - 8 horas)
  • 16/06 (8h): Pruebas finales, corrección de bugs críticos, optimización de rendimiento
Fase 5: Documentación y entrega (0.5 días - 8 horas)
  • 16/06 (8h): Documentación final, preparación de entrega

Duración total: 10 semanas

Esfuerzo total: 176 horas (16 horas semanales)

Distribución semanal: 4 horas diarias durante 4 días por semana

Nota: Orientativo.

7. Presupuesto

Esta sección presenta el presupuesto detallado del proyecto, incluyendo los costos de personal, infraestructura, software y otros gastos asociados.

7.1 Costos de personal

Rol Coste Teórico/Hora (€) Horas Estimadas Coste Teórico (€) Coste Real (€)
Estudiante desarrollador 15 192 (12 semanas × 16h) 2.880 0
Total personal 2.880 0

Nota: El trabajo es realizado por un estudiante como parte de su TFG, sin recibir remuneración real. El coste teórico refleja el valor de mercado de un desarrollador junior.

7.2 Costos de infraestructura y tecnología

Hardware

Concepto Coste Teórico Unitario (€) Cantidad Coste Teórico (€) Coste Real (€)
Ordenador personal (desarrollo) 1.200 1 1.200 0
Total hardware 1.200 0

Nota: El estudiante ya dispone de un ordenador adecuado, por lo que no supone un gasto adicional. El coste teórico refleja el precio de un equipo de desarrollo profesional.

Software y servicios

Concepto Coste Teórico Mensual (€) Meses Coste Teórico (€) Coste Real (€)
Servicios de hosting compartido 25 3 75 0
Dominio .me 12 12 12 0
Total software y servicios 95 0

Nota: Se utiliza software de código abierto exclusivamente.

Nota: Se utiliza hosting propio con certificado SSL gratuito (Let's Encrypt), sin coste adicional.

Nota: El dominio se obtuvo de forma gratuita gracias al Github Student Developer Pack.

7.3 Otros costos

Gastos generales

Concepto Coste Teórico Mensual (€) Meses Coste Teórico (€) Coste Real (€)
Internet y electricidad (porcentaje atribuible al proyecto) 25 3 75 0
Café y bebidas energéticas (combustible para desarrollador) 20 3 60 0
Total gastos generales 180 0

7.4 Resumen del presupuesto

Categoría Coste Teórico (€) Coste Real (€)
Personal 2.880 0
Hardware 1.200 0
Software y Servicios 95 0
Gastos Generales 180 0
Total del proyecto 4.355 0

Nota: No se han generado gastos adicionales, ya que se utilizan recursos propios, software gratuito/open source y herramientas de desarrollo gratuitas.

7.5 Estudio de viabilidad comercial

7.5.1 Forma jurídica de explotación

Para la explotación comercial de Traballa, se propone la constitución de una Sociedad Limitada (SL) por las siguientes razones:

  1. Responsabilidad limitada: Los socios solo responden hasta el importe de sus aportaciones.
  2. Flexibilidad fiscal: Posibilidad de optar por diferentes regímenes fiscales según el crecimiento.
  3. Credibilidad comercial: Mayor confianza de clientes y proveedores frente a otras formas jurídicas.
  4. Capital mínimo: No se requiere capital mínimo para su constitución (0€ desde 2022).
  5. Facilidad de ampliación: Posibilidad de incorporar nuevos socios inversores fácilmente.

7.5.2 Costos de constitución y puesta en marcha

Concepto Coste (€) Descripción
Capital social mínimo 0 No se requiere capital mínimo desde 2022
Notario 600 Escritura de constitución
Registro Mercantil 250 Inscripción de la sociedad
Gestoría (primer año) 1.200 Tramitación fiscal y contable
Seguro de responsabilidad civil 400 Protección frente a terceros
Total constitución 2.450

7.5.3 Gastos de marketing y publicidad

Concepto Coste Mensual (€) Coste Anual (€) Descripción
Marketing digital (Google Ads, LinkedIn) 300 3.600 Publicidad segmentada para empresas
Redes sociales y contenido 150 1.800 Gestión de RRSS y creación de contenido
Eventos y networking 100 1.200 Participación en eventos del sector
Material promocional 50 600 Folletos, presentaciones, demos
Total marketing 600 7.200

7.5.4 Subvenciones y ayudas disponibles

Programa Organismo Importe Máximo (€) Descripción
Programa de Emprendimiento Digital Xunta de Galicia 15.000 Para proyectos tecnológicos innovadores
Ayudas para jóvenes emprendedores Ministerio de Industria 10.000 Menores de 30 años con proyectos viables
NEOTEC (CDTI) Gobierno de España 250.000 Empresas de base tecnológica
Programa PEME Xunta de Galicia 8.000 Apoyo a pequeñas empresas
Total potencial 283.000 Suma de todas las ayudas disponibles

7.5.5 Balance previsional (Año 1)

ACTIVO PASIVO
ACTIVO NO CORRIENTE PATRIMONIO NETO
Inmovilizado intangible 4.355 Capital social 0
Aplicaciones informáticas 2.000 Reservas 0
Equipos informáticos 1.200 Resultado del ejercicio 8.500
ACTIVO CORRIENTE PASIVO NO CORRIENTE
Clientes 3.200 Deudas a largo plazo 0
Tesorería 12.000 PASIVO CORRIENTE
Proveedores 800
Hacienda Pública 1.200
Seguridad Social 1.250
Otras deudas 6.000
TOTAL ACTIVO 19.749 TOTAL PASIVO 19.749

7.5.6 Cuenta de resultados previsional (Año 1)

Concepto Importe (€) %
INGRESOS DE EXPLOTACIÓN
Ventas de servicios (suscripciones) 45.000 100%
- Plan Básico (25€/mes × 50 clientes × 12) 15.000 33%
- Plan Pro (50€/mes × 35 clientes × 12) 21.000 47%
- Plan Enterprise (150€/mes × 6 clientes × 12) 10.800 24%
GASTOS DE EXPLOTACIÓN
Gastos de personal 18.000 40%
Servicios externos (hosting, dominio, etc.) 2.400 5%
Marketing y publicidad 7.200 16%
Servicios profesionales (gestoría, legal) 3.600 8%
Otros gastos (seguros, material, etc.) 1.800 4%
Amortizaciones 1.200 3%
RESULTADO DE EXPLOTACIÓN 10.800 24%
Gastos financieros 300 1%
RESULTADO ANTES DE IMPUESTOS 10.500 23%
Impuesto sobre sociedades (19%) 2.000 4%
RESULTADO DEL EJERCICIO 8.500 19%

7.5.7 Análisis de viabilidad

El análisis de viabilidad comercial muestra que:

  1. Rentabilidad positiva: Se proyecta un beneficio del 19% sobre ventas en el primer año.
  2. Inversión inicial razonable: Con 9.650€ (constitución + marketing inicial) se puede lanzar el proyecto.
  3. Punto de equilibrio: Se alcanza con aproximadamente 60 clientes activos.
  4. Escalabilidad: Los costos variables son bajos, permitiendo mayor rentabilidad con el crecimiento.
  5. Apoyo institucional: Existen múltiples programas de subvenciones disponibles.

7.6 Notas adicionales

  1. Este presupuesto muestra tanto el coste teórico de mercado como el coste real del proyecto (0€).
  2. El coste teórico asciende a 4.355€, pero el coste real es 0€ gracias a los recursos disponibles.
  3. El trabajo es realizado como Trabajo de Fin de Grado sin remuneración.
  4. Se utilizan exclusivamente recursos propios y software gratuito/open source.
  5. El hosting es propio y el dominio se obtuvo gratuitamente mediante el Github Student Developer Pack.
  6. Las tarifas teóricas están basadas en precios de mercado estándar para proyectos similares.
  7. La viabilidad comercial está basada en proyecciones conservadoras del mercado gallego de gestión empresarial.

8. Conclusiones

El desarrollo del proyecto Traballa ha permitido aplicar de manera integrada las competencias adquiridas durante el ciclo formativo DAW, especialmente en áreas como:

  • Desarrollo de aplicaciones web con arquitecturas modernas
  • Diseño y gestión de bases de datos relacionales
  • Implementación de interfaces de usuario responsivas y accesibles
  • Integración de diferentes tecnologías y frameworks
  • Gestión de proyectos de desarrollo de software

Los principales logros del proyecto incluyen:

  • Creación de un sistema completo que cumple con todos los requisitos establecidos
  • Implementación de una interfaz de usuario intuitiva y eficiente
  • Desarrollo de un sistema modular y extensible que permite futuras ampliaciones
  • Implementación de una API REST completa para facilitar integraciones con otros sistemas

Como propuestas de mejora para futuras versiones, se identifican:

  • Desarrollo de worly como chatbot para asistencia a usuarios utilizando OpenAI y MCP que consuma nuestra API REST.
  • Desarrollo de aplicaciones móviles nativas para mejorar la experiencia en dispositivos móviles
  • Incorporación de funcionalidades avanzadas de analítica y business intelligence
  • Mejora del sistema de notificaciones con opciones personalizables por usuario

5. Manuales

Esta sección incluye los manuales necesarios para la instalación y uso del sistema.

5.1 Manual de instalación

El manual de instalación proporciona instrucciones detalladas para configurar el sistema Traballa en un entorno de producción:

  1. Requisitos previos: Servidor web Apache, PHP 8.0+, MySQL 8.0+, Composer
  2. Descarga del código: Instrucciones para clonar el repositorio desde GitHub
  3. Configuración de la base de datos: Creación de la base de datos y ejecución de scripts SQL
  4. Configuración del entorno: Ajuste de parámetros en archivos de configuración
  5. Instalación de dependencias: Uso de Composer para instalar paquetes requeridos
  6. Configuración del servidor web: Ajustes de Apache y PHP para optimizar el rendimiento
  7. Verificación de la instalación: Pruebas para confirmar el correcto funcionamiento

El manual incluye también procedimientos para actualizar el sistema y solucionar problemas comunes de instalación.

5.2 Manual de usuario

El manual de usuario proporciona una guía completa para utilizar todas las funcionalidades de Traballa:

  • Primeros pasos: Registro, inicio de sesión y configuración inicial del perfil
  • Gestión de tiempo: Cómo registrar tiempo, iniciar temporizadores y categorizar el trabajo
  • Trabajo con proyectos: Creación y gestión de proyectos, invitación de colaboradores
  • Uso del tablero Kanban: Organización de tareas, cambio de estados, filtros
  • Calendario: Visualización y programación de actividades
  • Generación de informes: Configuración, visualización y exportación de reportes
  • Planes de suscripción: Tipos de planes, características y proceso de actualización
  • Administración: Gestión de usuarios, permisos y configuraciones del sistema

El manual incluye capturas de pantalla y ejemplos prácticos para facilitar el aprendizaje de los usuarios.

Documentación de usuario online

El manual de usuario completo está disponible en línea en:

📖 https://traballa.me/user-docs

Esta documentación interactiva incluye:

  • Tutoriales paso a paso con capturas de pantalla actualizadas
  • Videos demostrativos de las funcionalidades principales
  • Preguntas frecuentes (FAQ) y solución de problemas
  • Ejemplos de uso para diferentes tipos de organizaciones
  • Guías de mejores prácticas para maximizar la productividad

6. Despliegue del sistema

Esta sección describe las diferentes opciones y procedimientos para el despliegue del sistema Traballa en entornos de producción, incluyendo configuraciones para servidores dedicados y hosting compartido.

6.1 Opciones de despliegue

El sistema Traballa puede desplegarse en diferentes tipos de entornos según las necesidades del usuario:

6.1.1 Servidor Dedicado/VPS con AlmaLinux 9

Opción recomendada para organizaciones que requieren control total sobre el servidor y personalización avanzada.

  • Sistema Operativo: AlmaLinux 9 (distribución empresarial basada en RHEL)
  • Servidores Web Soportados:
    • Apache HTTP Server - Servidor web estable y ampliamente compatible
    • OpenLiteSpeed - Alternativa de alto rendimiento con interfaz web
    • NGINX - Servidor web de alto rendimiento para cargas elevadas
  • Ventajas: Control total, personalización completa, mejor rendimiento
  • Requisitos técnicos: Conocimientos de administración de sistemas Linux

6.1.2 Hosting compartido con cPanel y LiteSpeed

Opción ideal para usuarios individuales o pequeñas empresas que prefieren una solución gestionada.

  • Proveedor: Hosting compartido propiedad del estudiante
  • Panel de Control: cPanel para gestión simplificada
  • Servidor Web: LiteSpeed (optimizado para PHP)
  • Ventajas: Configuración simplificada, mantenimiento gestionado, costo reducido
  • Limitaciones: Menos control sobre configuraciones del servidor

6.2 Requisitos del sistema

Componente Mínimo Recomendado
PHP 8.0 8.2 o superior
MySQL/MariaDB 8.0 / 10.5 8.0+ / 10.11+
RAM 512 MB 2 GB o más
Espacio en Disco 1 GB 5 GB o más
Extensiones PHP mysqli, pdo, json, curl, mbstring, openssl

6.3 Proceso de Instalación

Traballa incluye un sistema de instalación automática que simplifica significativamente el proceso de despliegue.

6.3.1 Instalación Automática (Recomendado)

El sistema incluye un asistente de instalación web (install.php) que automatiza todo el proceso:

Paso 1: Configuración de Base de Datos
  • Prueba automática de conexión a la base de datos
  • Creación automática de la base de datos si no existe
  • Validación de credenciales y permisos
Paso 2: Configuración de Aplicación y Usuario Admin
  • Creación segura del usuario administrador
  • Configuración de ajustes de aplicación (nombre, URL, zona horaria)
  • Configuración opcional de SMTP para notificaciones por email
  • Instalación automática de todas las tablas de base de datos
Paso 3: Finalización
  • Generación automática del archivo config/config.php
  • Verificación de la instalación
  • Recomendaciones de seguridad post-instalación
# 1. Clonar repositorio y instalar dependencias
git clone https://github.com/markostech/traballa-tfc.git
cd traballa-tfc
composer install

# 2. Acceder al instalador web
# Navegar a: http://tu-dominio.com/install.php

# 3. Seguir el asistente de 3 pasos
# 4. Eliminar install.php por seguridad

6.3.2 Instalación Manual

Para usuarios avanzados que prefieren configurar manualmente:

# 1. Configurar base de datos manualmente
mysql -u root -p
CREATE DATABASE traballa_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SOURCE config/migrations/01_traballa.sql;

# 2. Copiar y configurar archivo de configuración
cp config/config.example.php config/config.php
# Editar config/config.php con tus ajustes

6.4 Despliegue en AlmaLinux 9

6.4.1 Instalación con Apache

# Actualizar el sistema
sudo dnf update -y

# Instalar Apache, PHP y MySQL
sudo dnf install httpd php php-mysqli php-json php-curl php-mbstring php-openssl mariadb-server -y

# Habilitar servicios
sudo systemctl enable --now httpd mariadb

# Configurar firewall
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

# Desplegar Traballa
cd /var/www/html
git clone https://github.com/markostech/traballa-tfc.git traballa
cd traballa
composer install

# Configurar permisos
sudo chown -R apache:apache /var/www/html/traballa
sudo chmod -R 755 /var/www/html/traballa

# Acceder al instalador: http://tu-servidor.com/traballa/install.php

6.4.2 Alternativa con OpenLiteSpeed

# Agregar repositorio OpenLiteSpeed
sudo dnf install epel-release -y
sudo rpm -ivh http://rpms.litespeedtech.com/centos/litespeed-repo-1.3-1.el9.noarch.rpm

# Instalar OpenLiteSpeed y PHP
sudo dnf install openlitespeed lsphp82 lsphp82-mysql lsphp82-json lsphp82-curl -y

# Iniciar OpenLiteSpeed
sudo systemctl enable --now lsws

# Configurar admin de OpenLiteSpeed
sudo /usr/local/lsws/admin/misc/admpass.sh

# Desplegar aplicación y usar instalador web
# Panel Admin: https://tu-servidor:7080

6.5 Despliegue en hosting compartido cPanel

Para el despliegue en hosting compartido con cPanel, sigue estos pasos simplificados:

  1. Acceso al cPanel: Ingresa a tu panel de control cPanel
  2. Gestor de Archivos: Navega al directorio public_html
  3. Subir Archivos: Sube el código de Traballa o clona desde Git
  4. Instalar Dependencias: Ejecuta composer install desde Terminal (si está disponible)
  5. Ejecutar Instalador: Navega a http://tu-dominio.com/install.php
  6. Seguir Asistente: Completa los 3 pasos del instalador automático
  7. Seguridad: Elimina install.php después de la instalación

Ventajas del Instalador Automático en cPanel:

  • No requiere conocimientos técnicos avanzados
  • Creación automática de base de datos (si tienes permisos)
  • Configuración automática de ajustes optimizados para hosting compartido
  • Validación automática de requisitos del sistema

Nota: En hosting compartido, LiteSpeed está preconfigurado y optimizado automáticamente para PHP, proporcionando mejor rendimiento que Apache tradicional.

6.6 Configuración SSL/HTTPS

Se recomienda encarecidamente habilitar HTTPS para proteger las comunicaciones:

6.6.1 SSL en Servidor Dedicado

# Instalar Certbot para Let's Encrypt
sudo dnf install certbot python3-certbot-apache -y

# Obtener certificado SSL
sudo certbot --apache -d traballa.me -d www.traballa.me

# Configurar renovación automática
sudo crontab -e
# Agregar: 0 2 * * * /usr/bin/certbot renew --quiet

6.6.2 SSL en cPanel

En cPanel, el SSL generalmente se puede habilitar desde:

  • Sección "Seguridad" → "SSL/TLS"
  • Let's Encrypt (gratuito) o certificado comercial
  • Habilitar "Forzar HTTPS" para redirigir automáticamente

6.7 Optimización de Rendimiento

6.7.1 Configuración PHP

# Ajustes recomendados en php.ini
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 20M
post_max_size = 20M
opcache.enable = 1
opcache.memory_consumption = 128

6.7.2 Configuración de Base de Datos

# Optimizaciones MySQL/MariaDB
innodb_buffer_pool_size = 128M
query_cache_size = 64M
query_cache_type = 1
max_connections = 100

6.8 Consideraciones de Seguridad

  • Actualizaciones: Mantener PHP, servidor web y base de datos actualizados
  • Firewall: Configurar firewall para permitir solo puertos necesarios (80, 443, 22)
  • Acceso SSH: Usar claves SSH en lugar de contraseñas
  • Permisos: Configurar permisos de archivos apropiados (644 para archivos, 755 para directorios)
  • Backup: Implementar sistema de copias de seguridad automáticas
  • Monitoreo: Configurar monitoreo de logs y alertas de seguridad
  • Instalador: Eliminar install.php después de completar la instalación
  • Configuración: Revisar y endurecer la configuración generada automáticamente

6.9 Referencia al Manual de Instalación

Para instrucciones detalladas paso a paso del proceso de instalación, consulte la sección 5.1 Manual de Instalación, que proporciona:

6.10 Instancia de Demostración

Una instancia completamente funcional de Traballa está disponible en:

🌐 https://traballa.me


9. Bibliografía

A continuación se presentan los recursos web y documentación técnica consultados durante el desarrollo del proyecto.

9.1 Documentación oficial

9.2 Tutoriales y guías de desarrollo

9.3 Comunidades y resolución de problemas

9.4 Herramientas de desarrollo

9.5 Diseño y experiencia de usuario

9.6 Metodologías ágiles y gestión

9.7 Compatibilidad y estándares web

9.8 Seguridad web

9.9 Blogs y artículos técnicos

9.10 Hosting y despliegue