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
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.
En esta sección se presenta el estudio preliminar del proyecto, incluyendo los antecedentes, objetivos y un análisis de viabilidad.
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.
Los objetivos principales del proyecto Traballa son:
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.
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.
Traballa ofrecerá las siguientes funcionalidades principales:
En el mercado actual existen diversas aplicaciones que resuelven problemas similares, cada una con diferentes enfoques:
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.
La aplicación está dirigida principalmente a:
El rango de edad objetivo está entre 25-45 años, con conocimientos básicos de tecnología y necesidad de organización profesional.
Las técnicas de promoción seleccionadas incluyen:
Traballa adopta un modelo híbrido que combina:
Esta aproximación permite maximizar la adopción inicial mientras se genera valor para usuarios que requieren funcionalidades avanzadas o soporte profesional.
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.
Los LLMs han sido utilizados en este proyecto para:
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.
El proyecto está diseñado principalmente para uso personal y como contribución a la comunidad open source. Los beneficios de este enfoque incluyen:
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.
El stack tecnológico seleccionado se alinea directamente con las competencias y tecnologías desarrolladas durante el ciclo formativo DAW:
El desarrollo sin frameworks aporta beneficios específicos en el contexto académico:
Además de las razones académicas, el enfoque vanilla se justifica técnicamente para este proyecto:
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.
Los medios materiales y tecnologías necesarias para el desarrollo del proyecto incluyen:
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.
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.
Esta sección detalla los requisitos funcionales y no funcionales del sistema, así como los casos de uso que definen su funcionamiento.
Los requisitos funcionales principales del sistema incluyen:
Los requisitos no funcionales incluyen:
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.
Los actores identificados en el sistema son:
| ID | CU-001 |
|---|---|
| Nombre | Registro e inicio de sesión de usuario |
| Actores | Usuario final, Administrador |
| Precondiciones | El sistema debe estar disponible y funcionando |
| Descripción | El usuario se registra en el sistema o inicia sesión con credenciales existentes |
Flujo principal:
Flujos alternativos:
| ID | CU-002 |
|---|---|
| Nombre | Registro de tiempo de trabajo |
| Actores | Usuario final |
| Precondiciones | Usuario autenticado, al menos un proyecto disponible |
| Descripción | El usuario registra sus horas de trabajo en proyectos específicos |
Flujo principal:
Flujos alternativos:
| ID | CU-003 |
|---|---|
| Nombre | Gestión de proyectos |
| Actores | Usuario final, Manager de proyecto, Administrador |
| Precondiciones | Usuario autenticado con permisos adecuados |
| Descripción | Creación, edición y administración de proyectos en el sistema |
Flujo principal:
Flujos alternativos:
| ID | CU-004 |
|---|---|
| Nombre | Gestión del tablero Kanban |
| Actores | Usuario final, Manager de proyecto |
| Precondiciones | Proyecto creado y acceso autorizado |
| Descripción | Visualización y manipulación de tareas mediante metodología Kanban |
Flujo principal:
Flujos alternativos:
| ID | CU-005 |
|---|---|
| Nombre | Generación de informes |
| Actores | Usuario final, Manager de proyecto, Administrador |
| Precondiciones | Datos de tiempo registrados en el sistema |
| Descripción | Creación y exportación de informes de productividad y tiempo |
Flujo principal:
Flujos alternativos:
| ID | CU-006 |
|---|---|
| Nombre | Administración de usuarios y permisos |
| Actores | Administrador de organización, Administrador del sistema |
| Precondiciones | Permisos de administración |
| Descripción | Gestión de usuarios, roles y permisos dentro de la organización |
Flujo principal:
Flujos alternativos:
| ID | CU-006A |
|---|---|
| Nombre | Gestión de archivo de organizaciones |
| Actores | Administrador del sistema |
| Precondiciones | Permisos de administración del sistema |
| Descripción | Archivo y desarchivar organizaciones para gestión del ciclo de vida organizacional |
Flujo principal:
Flujos alternativos:
| ID | CU-007 |
|---|---|
| Nombre | Gestión de calendario |
| Actores | Usuario final |
| Precondiciones | Usuario autenticado |
| Descripción | Planificación y visualización de eventos y tareas programadas |
Flujo principal:
Flujos alternativos:
| ID | CU-008 |
|---|---|
| Nombre | Gestión de descansos y pausas |
| Actores | Usuario final |
| Precondiciones | Usuario autenticado, sesión de trabajo activa |
| Descripción | El usuario puede tomar descansos durante su jornada laboral y el sistema los registra correctamente |
Flujo principal:
Flujos alternativos:
| ID | CU-009 |
|---|---|
| Nombre | Exportación e integración de datos |
| Actores | Usuario final, Administrador |
| Precondiciones | Datos registrados en el sistema |
| Descripción | El usuario puede exportar sus datos y sincronizar con herramientas externas |
Flujo principal:
| 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.
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.
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.
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:
Deben explicarse los diferentes mecanismos utilizados para cumplir la legislación relativa a la protección de datos:
El sistema TRABALLA implementa los siguientes elementos para garantizar el cumplimiento normativo:
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.
Esta sección aborda la arquitectura del sistema, el modelo de datos y las interfaces de usuario que conforman la solución.
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:
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.
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:
La estructura actual sigue un patrón más próximo a:
El modelo de datos de Traballa está compuesto por las siguientes entidades principales:
Las relaciones entre estas entidades están diseñadas para garantizar la integridad referencial y facilitar las consultas comunes del sistema.
Las interfaces de usuario de Traballa siguen principios de diseño centrado en el usuario, con un enfoque en la simplicidad y la eficiencia:
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.
El siguiente diagrama muestra todas las interfaces de usuario del sistema Traballa, organizadas por categorías funcionales y niveles de acceso:
| 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 |
| 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 |
| 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 |
| 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 |
Todas las interfaces del sistema implementan:
Los siguientes diagramas ilustran las principales entidades y relaciones en el sistema, así como el flujo de información entre los diferentes componentes:
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.
| Método | Endpoint | Descripción | Autenticación |
|---|---|---|---|
| POST | /api/auth | Autenticar usuario y obtener token | No |
| GET | /api/users | Listar usuarios (solo admin) | Sí |
| GET | /api/users/{id} | Obtener usuario específico | Sí |
| GET | /api/projects | Listar proyectos del usuario | Sí |
| GET | /api/projects/{id} | Obtener proyecto específico | Sí |
| GET | /api/organizations | Listar organizaciones del usuario | Sí |
| GET | /api/work-hours | Obtener registros de tiempo | Sí |
| POST | /api/work-hours | Registrar entrada de tiempo | Sí |
| PUT | /api/work-hours/{id} | Actualizar registro de tiempo | Sí |
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:
El sistema implementa dos routers principales para gestionar las peticiones web y API:
Funcionalidades del Router:
Características del API Router:
El archivo functions.php contiene las funciones utilitarias y de seguridad del sistema, organizadas en las siguientes categorías:
sanitize($data): Sanitización básica con htmlspecialcharssanitize_output($data, $allow_html): Sanitiza datos para mostrar de forma segura en HTMLsanitize_attribute($data): Sanitiza datos para uso en atributos HTMLsanitize_js($data): Sanitiza datos para uso seguro en JavaScript usando json_encodesanitize_url($url): Sanitiza URLs usando filter_varsanitize_email($email): Sanitiza y valida direcciones de correo electrónicosanitize_array($data): Sanitización recursiva de arraysstrip_dangerous_tags($data): Elimina etiquetas y atributos peligrososgenerate_csrf_token(): Genera token CSRF para formulariosvalidate_csrf_token($token): Valida tokens CSRFcsrf_field(): Genera campo hidden con token CSRFcheck_csrf(): Valida CSRF en peticiones POSTset_security_headers(): Configura headers de seguridad HTTPgetSessionObject(): Obtiene instancia de Session de forma seguragetDashboardUrl($fallback_url): Genera URL del dashboard basada en configuracióngetLoginUrl($fallback_url): Genera URL de login basada en configuracióngetSMTPSettings(): Obtiene configuración SMTP del sistemaisAdmin(): Verifica si el usuario actual es administradorisProjectManager(): Verifica si el usuario es gestor de proyectoisEmployee(): Verifica si el usuario es empleadohasManagementPermissions(): Verifica permisos de gestióngetUserById($pdo, $user_id): Obtiene un usuario por su IDgetAllUsers($pdo): Obtiene todos los usuarios (solo admin)formatDateTime($timestamp): Formatea timestamps a formato legiblecalculateHours($clock_in, $clock_out): Calcula horas entre dos timestampsgetUserStatistics($pdo, $user_id): Obtiene estadísticas del usuariogetCurrentWorkStatus($pdo, $user_id): Obtiene el estado de trabajo actualgetUserWorkHours($pdo, $user_id, ...): Obtiene horas de trabajo con filtrosgetWorkSummary($pdo, $user_id, $period, ...): Obtiene resumen de trabajo por períodogetTotalTraballaToday($pdo): Obtiene total de horas trabajadas hoygetActiveUsersToday($pdo): Obtiene usuarios activos hoygetAllProjects($pdo, $organization_id): Obtiene todos los proyectosgetProjectById($pdo, $project_id): Obtiene un proyecto por IDgetUserProjects($pdo, $user_id, ...): Obtiene proyectos del usuariogetUserActiveProjects($pdo, $user_id, ...): Obtiene proyectos activos del usuarioisProjectMember($pdo, $user_id, $project_id): Verifica membresía de proyectoisProjectManagerOf($pdo, $user_id, $project_id): Verifica si es gestor del proyectogetProjectMembers($pdo, $project_id): Obtiene miembros del proyectogetProjectStatistics($pdo, $project_id): Obtiene estadísticas del proyectocanAccessProject($pdo, $user_id, $project_id): Verifica acceso al proyectoarchiveProject($pdo, $project_id): Archiva un proyecto (soft delete)unarchiveProject($pdo, $project_id): Desarchivar un proyectoisProjectArchived($pdo, $project_id): Verifica si proyecto está archivadogetArchivedProjects($pdo, $organization_id): Obtiene proyectos archivados de organizacióngetAllOrganizations($pdo): Obtiene todas las organizacionesgetOrganizationById($pdo, $organization_id): Obtiene organización por IDgetUserOrganizations($pdo, $user_id): Obtiene organizaciones del usuariogetOrganizationProjects($pdo, $organization_id): Obtiene proyectos de la organizaciónisOrganizationMember($pdo, $user_id, $organization_id): Verifica membresíaisOrganizationAdmin($pdo, $user_id, $organization_id): Verifica si es admingetOrganizationMembers($pdo, $organization_id): Obtiene miembros de la organizacióngetOrganizationStatistics($pdo, $organization_id): Obtiene estadísticas de la organizacióncanAccessOrganization($pdo, $user_id, $organization_id): Verifica acceso a organizaciónarchiveOrganization($pdo, $organization_id): Archiva una organización (soft delete)unarchiveOrganization($pdo, $organization_id): Desarchivar una organizaciónisOrganizationArchived($pdo, $organization_id): Verifica si organización está archivadagetArchivedOrganizations($pdo): Obtiene todas las organizaciones archivadasgetKanbanColumns($pdo, $project_id): Obtiene columnas del tablero KanbangetKanbanTasks($pdo, $column_id): Obtiene tareas de una columnacreateDefaultKanbanColumns($pdo, $project_id): Crea columnas por defectoaddKanbanColumn($pdo, $project_id, $name): Añade nueva columnaaddKanbanTask($pdo, $column_id, ...): Añade nueva tareaupdateKanbanTask($pdo, $task_id, ...): Actualiza tarea existentedeleteKanbanTask($pdo, $task_id): Elimina tareagetKanbanTabs($pdo, $project_id): Obtiene pestañas del proyectocreateDefaultKanbanTab($pdo, $project_id): Crea pestaña por defectoaddKanbanTab($pdo, $project_id, $name): Añade nueva pestañagetKanbanColumnsWithTabs($pdo, $project_id, $tab_id): Obtiene columnas por pestañaaddKanbanColumnWithTab($pdo, $project_id, $tab_id, $name): Añade columna a pestañaaddKanbanTaskWithTab($pdo, $column_id, ...): Añade tarea con pestañagetSubscriptionManager(): Obtiene instancia del gestor de suscripcionescanPerformAction($organization_id, $action): Verifica si puede realizar accióngetOrganizationPlan($organization_id): Obtiene plan de la organizacióngetUsageStats($organization_id): Obtiene estadísticas de usoisTrialExpiringSoon($organization_id): Verifica si el trial expira prontogetTrialDaysRemaining($organization_id): Obtiene días restantes del trialgetTotalUsers($pdo): Obtiene total de usuarios registradosgetTotalOrganizations($pdo): Obtiene total de organizacionesgetRecentRegistrations($pdo, $limit): Obtiene registros recientesgetSystemActivity($pdo, $limit): Obtiene actividad del sistemagetRecentUsersWithActivity($pdo, $limit): Obtiene usuarios recientes con actividadEl componente Calendar proporciona funcionalidad completa de calendario con eventos:
generateCalendarHTML($month, $year, $user_id, $organization_id): Genera el HTML del calendario mensual con eventos y navegacióngetEventsForDate($date, $user_id, $organization_id): Obtiene eventos para una fecha específica con filtrosgetEventsForDateRange($start_date, $end_date, $user_id, $organization_id): Obtiene eventos en un rango de fechasgetEventById($event_id): Obtiene un evento específico por ID con datos relacionadosaddEvent($title, $description, $start_date, $end_date, $event_type, $user_id, $project_id, $organization_id): Crea nuevo eventoupdateEvent($event_id, $title, $description, $start_date, $end_date, $event_type, $user_id, $project_id, $organization_id): Actualiza evento existentedeleteEvent($event_id): Elimina un evento del calendariogetProjects(): Obtiene proyectos activos accesibles por el usuario actualgetOrganizations(): Obtiene organizaciones del usuario actual para filtradoFuncionalidades del calendario:
El EmailSender maneja todas las comunicaciones por correo electrónico del sistema:
__construct($fromEmail, $fromName, $replyTo, $templatePath): Inicializa el objeto con configuración de remitente y plantillassend($to, $subject, $message, $htmlMessage, $attachments): Envía emails con soporte para texto plano y HTMLsendTemplate($to, $subject, $templateName, $variables, $attachments): Envía emails usando plantillas PHP con variablesgetGdprFooter(): Genera footer de cumplimiento GDPR con enlaces de privacidadCaracterísticas del sistema de email:
El sistema de sesiones híbrido combina almacenamiento en base de datos con compatibilidad PHP nativa:
Funcionalidades del sistema de sesiones:
El SubscriptionManager controla los planes de suscripción y límites del sistema:
Funcionalidades del gestor de suscripciones:
El sistema de breadcrumbs proporciona navegación contextual y está integrado con el sistema de rutas:
__construct($router): Constructor que inicializa el sistema con referencia al routersetupDefaultBreadcrumbs(): Configura breadcrumbs predeterminados para todas las rutas del sistemaget($route, $customItems): Obtiene breadcrumbs para una ruta específica con elementos personalizados opcionalesset($route, $breadcrumbs): Establece breadcrumbs personalizados para una rutaadd($route, $title, $url): Añade un elemento de breadcrumb a una ruta específicarender($route, $customItems): Genera HTML estándar con Bootstrap para breadcrumbsrenderCustom($route, $customItems, $separator): Genera HTML personalizado con separador configurableEl sistema incluye breadcrumbs predefinidos para todas las rutas principales:
Características del sistema de breadcrumbs:
El GdprManager implementa el cumplimiento del Reglamento General de Protección de Datos:
__construct($pdo, $emailSender): Inicializa el gestor con conexión PDO y EmailSender opcionalfetchUserData($userId): Obtiene todos los datos personales del usuario para exportación GDPRgetUserPersonalData($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)updateUserData($userId, $fields): Actualiza datos personales del usuario con validación de campos permitidosinitiateDataDeletion($userId, $reason): Inicia proceso de eliminación con plantillas de emaillogErasureRequest($userId): Registra solicitud de eliminación para auditoríacancelDeletionRequest($userId): Cancela solicitud de eliminación pendientegetPendingDeletionRequest($userId): Verifica si existe solicitud de eliminación pendientesetProcessingRestrictions($userId, $restrictions): Establece restricciones de procesamiento con notificacionesgetProcessingRestrictions($userId): Obtiene restricciones activas del usuarioregisterObjection($userId, $reason, $processingTypes): Registra objeción al procesamiento con notificacionesgetObjections($userId): Obtiene objeciones activas del usuariogenerateUserDataExport($userId, $format, $dataTypes): Genera exportación completa en JSON o CSVlogGdprAction($userId, $actionType, $details): Registra acciones GDPR para auditoríasendEmail($to, $subject, $message, $htmlMessage): Envía emails con footer GDPR automático (privado)Derechos GDPR implementados:
Traballa incorpora un sistema de suscripciones que permite ofrecer diferentes niveles de servicio según las necesidades de los usuarios y organizaciones.
El sistema de suscripciones se basa en las siguientes tablas principales:
La funcionalidad de suscripciones se implementa principalmente a través de estas tablas y está gestionada por la clase SubscriptionManager.
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
}
La clase SubscriptionManager encapsula toda la lógica relacionada con las suscripciones y proporciona los siguientes métodos principales:
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. |
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á habilitadaadvanced_reports: Comprobar si los informes avanzados están habilitadosapi_access: Comprobar si el acceso API está habilitadopriority_support: Comprobar si el soporte prioritario está habilitadocalendar_integration: Comprobar si la integración del calendario está habilitadaLa 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.
El desarrollo de Traballa ha implicado el uso de las siguientes tecnologías:
El código fuente de Traballa está organizado siguiendo una estructura modular y mantenible:
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.
El plan de pruebas de Traballa incluye:
Los resultados de las pruebas han sido documentados y los problemas identificados han sido corregidos antes de la entrega final del proyecto.
Esta sección detalla la planificación del proyecto, incluyendo las fases de desarrollo y el cronograma.
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:
Carga de trabajo: 16 horas semanales durante 10 semanas = 176 horas totales de desarrollo
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 |
| 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. |
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.Esta sección presenta el presupuesto detallado del proyecto, incluyendo los costos de personal, infraestructura, software y otros gastos asociados.
| 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.
| 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.
| 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.
| 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 |
| 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.
Para la explotación comercial de Traballa, se propone la constitución de una Sociedad Limitada (SL) por las siguientes razones:
| 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 |
| 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 |
| 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 |
| 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 | ||
| 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% |
El análisis de viabilidad comercial muestra que:
El desarrollo del proyecto Traballa ha permitido aplicar de manera integrada las competencias adquiridas durante el ciclo formativo DAW, especialmente en áreas como:
Los principales logros del proyecto incluyen:
Como propuestas de mejora para futuras versiones, se identifican:
Esta sección incluye los manuales necesarios para la instalación y uso del sistema.
El manual de instalación proporciona instrucciones detalladas para configurar el sistema Traballa en un entorno de producción:
El manual incluye también procedimientos para actualizar el sistema y solucionar problemas comunes de instalación.
El manual de usuario proporciona una guía completa para utilizar todas las funcionalidades de Traballa:
El manual incluye capturas de pantalla y ejemplos prácticos para facilitar el aprendizaje de los usuarios.
El manual de usuario completo está disponible en línea en:
📖 https://traballa.me/user-docs
Esta documentación interactiva incluye:
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.
El sistema Traballa puede desplegarse en diferentes tipos de entornos según las necesidades del usuario:
Opción recomendada para organizaciones que requieren control total sobre el servidor y personalización avanzada.
Opción ideal para usuarios individuales o pequeñas empresas que prefieren una solución gestionada.
| 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 | |
Traballa incluye un sistema de instalación automática que simplifica significativamente el proceso de despliegue.
El sistema incluye un asistente de instalación web (install.php) que automatiza todo el proceso:
config/config.php# 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
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
# 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
# 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
Para el despliegue en hosting compartido con cPanel, sigue estos pasos simplificados:
composer install desde Terminal (si está disponible)http://tu-dominio.com/install.phpinstall.php después de la instalaciónVentajas del Instalador Automático en cPanel:
Nota: En hosting compartido, LiteSpeed está preconfigurado y optimizado automáticamente para PHP, proporcionando mejor rendimiento que Apache tradicional.
Se recomienda encarecidamente habilitar HTTPS para proteger las comunicaciones:
# 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
En cPanel, el SSL generalmente se puede habilitar desde:
# 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
# Optimizaciones MySQL/MariaDB
innodb_buffer_pool_size = 128M
query_cache_size = 64M
query_cache_type = 1
max_connections = 100
install.php después de completar la instalaciónPara instrucciones detalladas paso a paso del proceso de instalación, consulte la sección 5.1 Manual de Instalación, que proporciona:
Una instancia completamente funcional de Traballa está disponible en:
A continuación se presentan los recursos web y documentación técnica consultados durante el desarrollo del proyecto.