addConnection($defaultConnection); $capsule->setAsGlobal(); $capsule->bootEloquent(); // ==================== INICIAR SESIÓN ==================== session_start(); $method = $_SERVER['REQUEST_METHOD']; $path = $_SERVER['REQUEST_URI']; $router = new App\Core\Router(); // ==================== RUTAS PÚBLICAS ==================== $router->get('/', 'AuthController@login'); $router->get('/login', 'AuthController@login'); $router->post('/login', 'AuthController@login'); $router->get('/register', 'AuthController@register'); $router->post('/register', 'AuthController@register'); $router->get('/logout', 'AuthController@logout'); // ==================== RUTAS PROTEGIDAS ==================== // Dashboard principal $router->get('/dashboard', 'DashboardController@redirectByRole', ['AuthMiddleware']); //ruta para seleccionar sede temporal $router->post('/admin/select-branch', 'AdminController@selectBranch', ['AuthMiddleware', 'CoordinationMiddleware']); // Perfil $router->get('/dashboard/profile', 'DashboardController@profile', ['AuthMiddleware']); // Dashboards específicos por rol $router->get('/dashboard/ally', 'AllyController@dashboard', ['AuthMiddleware', 'AllyMiddleware']); $router->get('/dashboard/associate', 'AssociateController@dashboard', ['AuthMiddleware', 'AssociateMiddleware']); $router->get('/dashboard/reception', 'ReceptionController@dashboard', ['AuthMiddleware', 'ReceptionMiddleware']); $router->get('/dashboard/coordination', 'CoordinationController@dashboard', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/dashboard/admin', 'AdminController@dashboard', ['AuthMiddleware', 'AdminMiddleware']); // Rutas para edición de perfil $router->post('/dashboard/update-profile', 'DashboardController@updateProfile', ['AuthMiddleware']); $router->post('/dashboard/change-password', 'DashboardController@changePassword', ['AuthMiddleware']); // ==================== RUTAS PARA GESTIÓN DE ALLIES ==================== $router->get('/admin/allies', 'AllyController@index', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->get('/admin/allies/create', 'AllyController@create', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->post('/admin/allies/store', 'AllyController@store', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->get('/admin/allies/show/{id}', 'AllyController@show', ['AuthMiddleware']); $router->get('/admin/allies/edit/{id}', 'AllyController@edit', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->post('/admin/allies/update/{id}', 'AllyController@update', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->post('/admin/allies/destroy/{id}', 'AllyController@destroy', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->post('/admin/allies/deactivate/{id}', 'AllyController@deactivate', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->post('/admin/allies/activate/{id}', 'AllyController@activate', ['AuthMiddleware', 'CanCreateAllyMiddleware']); $router->get('/admin/allies/{id}/service-history', 'AllyController@serviceHistory', ['AuthMiddleware', 'CanCreateAllyMiddleware']); // ==================== RUTAS PARA GESTIÓN DE SEDES ==================== $router->get('/admin/branches', 'BranchController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/branches/create', 'BranchController@create', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/branches/store', 'BranchController@store', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/branches/show/{id}', 'BranchController@show', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/branches/edit/{id}', 'BranchController@edit', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/branches/update/{id}', 'BranchController@update', ['AuthMiddleware', 'CoordinationMiddleware']); // ==================== RUTAS PARA GESTIÓN DE SALONES ==================== $router->get('/admin/rooms', 'RoomController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/rooms/create', 'RoomController@create', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/rooms/store', 'RoomController@store', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/rooms/show/{id}', 'RoomController@show', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/rooms/edit/{id}', 'RoomController@edit', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/rooms/update/{id}', 'RoomController@update', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/rooms/{id}/schedules', 'RoomController@schedules', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/rooms/{id}/schedules/store', 'RoomController@storeSchedule', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/rooms/{id}/schedules/delete/{schedule_id}', 'RoomController@deleteSchedule', ['AuthMiddleware', 'CoordinationMiddleware']); // Rutas para edición de horarios $router->get('/admin/rooms/{id}/schedules/edit/{schedule_id}', 'RoomController@editSchedule', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/rooms/{id}/schedules/update/{schedule_id}', 'RoomController@updateSchedule', ['AuthMiddleware', 'CoordinationMiddleware']); // ==================== RUTAS PARA SERVICIOS ==================== // CRUD de Servicios $router->get('/admin/services', 'ServiceController@index', ['ReceptionMiddleware']); $router->get('/admin/services/create', 'ServiceController@create', ['CoordinationMiddleware']); $router->post('/admin/services/store', 'ServiceController@store', ['CoordinationMiddleware']); $router->get('/admin/services/show/{id}', 'ServiceController@show', ['ReceptionMiddleware']); $router->get('/admin/services/edit/{id}', 'ServiceController@edit', ['CoordinationMiddleware']); $router->post('/admin/services/update/{id}', 'ServiceController@update', ['CoordinationMiddleware']); $router->get('/admin/services/toggle-status/{id}', 'ServiceController@toggleStatus', ['CoordinationMiddleware']); //vista de servicios de un asociado $router->get('/associate/services', 'ServiceController@associateServices', ['AuthMiddleware', 'AssociateMiddleware']); // Gestión de Sesiones $router->get('/admin/services/{id}/sessions', 'ServiceController@sessions', ['CoordinationMiddleware']); $router->post('/admin/services/{id}/sessions/store', 'ServiceController@storeSession', ['CoordinationMiddleware']); // Gestión de Sesiones Recurrentes $router->post('/admin/services/{id}/sessions/store-recurring', 'ServiceController@storeRecurringSessions', ['CoordinationMiddleware']); // Gestión de Sesiones Individuales (CRUD completo) $router->get('/admin/services/{id}/sessions/edit/{sessionId}', 'ServiceController@editSession', ['CoordinationMiddleware']); $router->post('/admin/services/{id}/sessions/update/{sessionId}', 'ServiceController@updateSession', ['CoordinationMiddleware']); $router->post('/admin/services/{id}/sessions/cancel/{sessionId}', 'ServiceController@cancelSession', ['CoordinationMiddleware']); $router->post('/admin/services/{id}/sessions/delete/{sessionId}', 'ServiceController@deleteSession', ['CoordinationMiddleware']); $router->post('/admin/services/{id}/sessions/reactivate/{sessionId}', 'ServiceController@reactivateSession', ['CoordinationMiddleware']); // Creación de servicios específicos por tipo $router->post('/admin/services/store-medical', 'ServiceController@storeMedical', ['CoordinationMiddleware']); $router->post('/admin/services/store-community', 'ServiceController@storeCommunity', ['CoordinationMiddleware']); $router->post('/admin/services/store-psychosocial', 'ServiceController@storePsychosocial', ['CoordinationMiddleware']); // Generar sesiones automáticamente $router->post('/admin/services/{id}/generate-sessions', 'ServiceController@generateSessions', ['AuthMiddleware', 'CoordinationMiddleware']); // ==================== RUTAS PARA INSCRIPCIONES ==================== // Inscripciones (solo recepción, coordinación, admin) $router->get('/registrations', 'RegistrationController@index', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/registrations/{serviceId}', 'RegistrationController@indexService', ['AuthMiddleware', 'CanRegisterMiddleware']); //Lista de inscripciones $router->get('/registrations/print/{serviceId}', 'RegistrationController@printService', ['AuthMiddleware', 'CanRegisterMiddleware']); //Lista de inscripciones para impresión $router->get('/registrations/create/{serviceId}', 'RegistrationController@create', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/registrations/store', 'RegistrationController@store', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/registrations/show/{id}', 'RegistrationController@show', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/registrations/cancel/{id}', 'RegistrationController@cancel', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/registrations/{id}/process-payment', 'RegistrationController@processInscriptionPayment', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/registrations/{id}/edit', 'RegistrationController@edit', ['AuthMiddleware', 'CanRegisterMiddleware']); // Inscripción desde vista de sesiones (solo recepción, coordinación, admin) $router->post('/services/sessions/{id}/register', 'RegistrationController@store', ['AuthMiddleware', 'CanRegisterMiddleware']); // Inscripción Masiva de aliados a una sesión específica $router->get('/registrations/bulk-create/{sessionId}', 'RegistrationController@bulkCreate', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/registrations/bulk-store', 'RegistrationController@bulkStore', ['AuthMiddleware', 'CanRegisterMiddleware']); // Inscripción Masiva por Sesiones $router->get('/bulk-registrations/create', 'BulkRegistrationController@create', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/bulk-registrations/store', 'BulkRegistrationController@store', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/bulk-registrations/create-from-service/{serviceId}', 'BulkRegistrationController@createFromService', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/bulk-registrations/create-for-ally/{allyId}', 'BulkRegistrationController@createForAlly', ['AuthMiddleware', 'CanRegisterMiddleware']); // ==================== RUTAS PARA ASISTENCIA ==================== // Historial de listas de un service $router->get('/attendance/{service_id}', 'AttendanceController@index', ['CanTakeAttendanceMiddleware']); // Ver/tomar/editar lista de una fecha $router->get('/attendance/take/{service_id}', 'AttendanceController@take', ['CanTakeAttendanceMiddleware']); // Guardar lista $router->post('/attendance/save/{service_id}', 'AttendanceController@save', ['CanSaveAttendanceMiddleware']); // Borrar lista $router->post('/attendance/delete/{id}', 'AttendanceController@delete', ['CanDeleteAttendanceMiddleware']); $router->get('/attendance/matrix/{service_id}', 'AttendanceController@matrix', ['CanTakeAttendanceMiddleware']); // Reportes de asistencia $router->get('/attendance/service-report/{serviceId}', 'AttendanceController@serviceAttendanceReport', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/attendance/ally-report/{allyId}', 'AttendanceController@allyAttendanceReport', ['AuthMiddleware', 'CoordinationMiddleware']); // cambiar fecha de asistencia $router->post('/attendance/change-date/{id}', 'AttendanceController@changeDate', ['CanChangeAttendanceDateMiddleware']); // Nuevas rutas para reportes de asistencia $router->get('/attendance/attendance-list/{serviceId}', 'AttendanceController@attendanceListReportExcel', ['AuthMiddleware', 'CanRegisterMiddleware']); // ==================== RUTAS PARA GESTIÓN DE ASOCIADOS ==================== $router->get('/admin/associates', 'AssociateController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/associates/create', 'AssociateController@create', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/store', 'AssociateController@store', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/associates/show/{id}', 'AssociateController@show', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/associates/edit/{id}', 'AssociateController@edit', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/update/{id}', 'AssociateController@update', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/destroy/{id}', 'AssociateController@destroy', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/activate/{id}', 'AssociateController@activate', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/deactivate/{id}', 'AssociateController@deactivate', ['AuthMiddleware', 'CoordinationMiddleware']); // ==================== RUTAS PARA GESTIÓN DE HORARIOS DE ASOCIADOS ==================== $router->get('/admin/associates/{id}/schedules', 'AssociateScheduleController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/associates/{id}/schedules/create', 'AssociateScheduleController@create', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/{id}/schedules/delete/{schedule_id}', 'AssociateScheduleController@delete', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/{id}/schedules/store', 'AssociateScheduleController@store', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/admin/associates/{id}/schedules/edit/{schedule_id}', 'AssociateScheduleController@edit', ['AuthMiddleware', 'CoordinationMiddleware']); $router->post('/admin/associates/{id}/schedules/update/{schedule_id}', 'AssociateScheduleController@update', ['AuthMiddleware', 'CoordinationMiddleware']); // ==================== RUTAS PARA GESTIÓN DE ADMINISTRADORES ==================== $router->get('/administrators', 'AdministratorController@index', ['AuthMiddleware', 'AdminMiddleware']); // $router->get('/administrators/create', 'AdministratorController@create', ['AuthMiddleware', 'AdminMiddleware']); // $router->post('/administrators/store', 'AdministratorController@store', ['AuthMiddleware', 'AdminMiddleware']); $router->get('/administrators/show/{id}', 'AdministratorController@show', ['AuthMiddleware', 'AdminMiddleware']); $router->get('/administrators/edit/{id}', 'AdministratorController@edit', ['AuthMiddleware', 'AdminMiddleware']); $router->post('/administrators/update/{id}', 'AdministratorController@update', ['AuthMiddleware', 'AdminMiddleware']); $router->post('/administrators/activate/{id}', 'AdministratorController@activate', ['AuthMiddleware', 'AdminMiddleware']); $router->post('/administrators/deactivate/{id}', 'AdministratorController@deactivate', ['AuthMiddleware', 'AdminMiddleware']); // ==================== RUTAS PARA COMPROBANTES ==================== $router->get('/receipts/create', 'ReceiptController@create', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/receipts/store', 'ReceiptController@store', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/receipts/{id}/pdf', 'ReceiptController@generatePDF', ['AuthMiddleware', 'CanRegisterMiddleware']); // ==================== RUTAS PARA PAGOS FLEXIBLES ==================== $router->get('/course-payments/create/{registrationId}', 'CoursePaymentController@create', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->post('/course-payments/store', 'CoursePaymentController@store', ['AuthMiddleware', 'CanRegisterMiddleware']); // ==================== RUTAS PARA RECEPCIÓN - SISTEMA INTEGRADO ==================== $router->get('/reception/payment', 'ReceptionController@payment', ['AuthMiddleware', 'ReceptionMiddleware']); $router->post('/reception/payment/store', 'ReceptionController@storePayment', ['AuthMiddleware', 'ReceptionMiddleware']); $router->get('/reception/collect-payment', 'ReceptionController@collectPayment', ['AuthMiddleware', 'CanManageCashMiddleware']); //cobro de renta de espacio $router->get('/reception/collect-payment/space', 'ReceptionController@collectSpacePayment', ['AuthMiddleware', 'CanManageCashMiddleware']); // ==================== RUTAS PARA CONTROL DE CANCELACIONES ==================== $router->get('/cancellation/movements/{id}/cancel', 'CancellationController@cancelMovement', ['AuthMiddleware', 'CanManageCashMiddleware']); // ==================== RUTAS PARA CONTROL DE CAJA ==================== // Permite: recepción, coordinación y administrador $router->get('/cash-register/open', 'CashRegisterController@open', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->post('/cash-register/open/store', 'CashRegisterController@storeOpen', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->get('/cash-register/view', 'CashRegisterController@viewCashRegister', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->post('/cash-register/close', 'CashRegisterController@close', ['AuthMiddleware', 'CanManageCashMiddleware']); // Permite: administrador $router->get('/cash-register/history', 'CashRegisterController@history', ['AuthMiddleware', 'CanReviewCashMiddleware']); $router->get('/cash-register/details/{id}', 'CashRegisterController@details', ['AuthMiddleware', 'CanReviewCashMiddleware']); // Procesar pago de inscripción $router->post('/registrations/{id}/process-payment', 'RegistrationController@processInscriptionPayment', ['AuthMiddleware', 'CanRegisterMiddleware']); // Cambiar método de pago $router->post('/update-payment-method', 'ReceiptController@updatePaymentMethod', ['AuthMiddleware', 'CanRegisterMiddleware']); // ==================== RUTAS PARA REPORTES ==================== //Rutas para reportes de aliados $router->get('/report/allies', 'Reports\ReportUserController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/report/allies/exportToExcel', 'Reports\ReportUserController@exportToExcel', ['AuthMiddleware', 'CoordinationMiddleware']); //Rutas para reportes de uso servicios $router->get('/report/use-services', 'Reports\ReportUseServicesController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/report/use-services/exportToExcel', 'Reports\ReportUseServicesController@exportToExcel', ['AuthMiddleware', 'CoordinationMiddleware']); //Ruta para reportes de usuarios del area de salud $router->get('/report/medical-users', 'Reports\ReportMedicalUsersController@index', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/report/medical-users/exportToExcel', 'Reports\ReportMedicalUsersController@exportToExcel', ['AuthMiddleware', 'CoordinationMiddleware']); //Rutas para reportes de caja $router->get('/report/cash/exportToExcel/{cashRegisterId}', 'Reports\ReportCashController@exportCashRegisterToExcel', ['AuthMiddleware', 'CanReviewCashMiddleware']); //Imprimir todas las cajas $router->get('/report/cash/exportAllToExcel', 'Reports\ReportCashController@exportAllToExcel', ['AuthMiddleware', 'CanReviewCashMiddleware']); //Rutas para reportes de inscripciones $router->get('/report/registrations', 'Reports\ReportRegistrationController@exportAllToExcel', ['AuthMiddleware', 'CoordinationMiddleware']); $router->get('/report/registrations/{serviceId}', 'Reports\ReportRegistrationController@exportServiceToExcel', ['AuthMiddleware', 'CanManageCashMiddleware']); // ==================== RUTAS API ==================== // API Guardar Escuela $router->post('/api/schools/store', 'AllyController@storeSchool', ['AuthMiddleware', 'CanRegisterMiddleware']); // API para guardar nueva colonia $router->post('/api/neighborhoods/store', 'AllyController@storeNeighborhood', ['AuthMiddleware', 'CanRegisterMiddleware']); // API para guardar nuevo tutor $router->post('/api/tutors/store', 'AllyController@storeTutor', ['AuthMiddleware', 'CanRegisterMiddleware']); // Búsqueda de aliados para Select2 $router->get('/api/allies/search', 'AllyController@search', ['AuthMiddleware']); // API para obtener sesiones de un servicio (para inscripciones) $router->get('/api/services/{id}/sessions-available', 'ReceptionController@getServiceSessions', ['AuthMiddleware', 'ReceptionMiddleware']); // APIs para búsqueda en inscripciones $router->get('/api/inscriptions/allies/search', 'RegistrationController@searchAllies', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/api/services/{id}/sessions', 'RegistrationController@getServiceSessions', ['AuthMiddleware', 'CanRegisterMiddleware']); // APIs para inscripción masiva $router->get('/api/bulk-registrations/search-ally', 'BulkRegistrationController@searchAlly', ['AuthMiddleware', 'CanRegisterMiddleware']); $router->get('/api/bulk-registrations/service-sessions/{id}', 'BulkRegistrationController@getServiceSessions', ['AuthMiddleware', 'CanRegisterMiddleware']); // API para obtener asistencia de sesión $router->get('/api/sessions/{id}/attendance', 'AttendanceController@getSessionAttendance', ['AuthMiddleware', 'CoordinationMiddleware']); // Agenda Médica $router->get('/medical/schedule', 'MedicalScheduleController@index', ['AuthMiddleware', 'CanRegisterMiddleware']); //días laborables de un asociado $router->get('/api/associate/{id}/working-days', 'MedicalScheduleController@getWorkingDays', ['AuthMiddleware', 'CanRegisterMiddleware']); //Validar contraseña de autorizador $router->post('/api/validate-authorizer-password', 'ReceptionController@validateAuthorizerPassword', ['AuthMiddleware', 'CanManageCashMiddleware']); // APIs para nuevo flujo de servicios (área -> departamento -> servicio -> asociado) $router->get('/api/areas/{areaId}/departments', 'ReceptionController@getDepartmentsByArea', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->get('/api/departments/{departmentId}/services', 'ReceptionController@getServicesByDepartment', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->get('/api/departments/{departmentId}/associates', 'ReceptionController@getAssociatesByDepartment', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->get('/api/associates/{associateId}/availability', 'ReceptionController@getAssociateAvailability', ['AuthMiddleware', 'CanManageCashMiddleware']); $router->get('/api/services/{serviceId}/rooms', 'ReceptionController@getRoomsForService', ['AuthMiddleware', 'CanManageCashMiddleware']); // // ==================== RUTAS PARA MOTIVOS DE DESCUENTO ==================== $router->get('/configuration/discount-reasons', 'DiscountReasonController@index', ['AuthMiddleware', 'AdminMiddleware']); $router->get('/configuration/discount-reasons/create', 'DiscountReasonController@create', ['AuthMiddleware', 'AdminMiddleware']); $router->post('/configuration/discount-reasons/store', 'DiscountReasonController@store', ['AuthMiddleware', 'AdminMiddleware']); $router->get('/configuration/discount-reasons/edit/{id}', 'DiscountReasonController@edit', ['AuthMiddleware', 'AdminMiddleware']); $router->post('/configuration/discount-reasons/update/{id}', 'DiscountReasonController@update', ['AuthMiddleware', 'AdminMiddleware']); $router->get('/configuration/discount-reasons/toggle-status/{id}', 'DiscountReasonController@toggleStatus', ['AuthMiddleware', 'AdminMiddleware']); // ==================== EJECUTAR RUTER ==================== try { $router->dispatch($method, $path); } catch (Exception $e) { http_response_code(500); echo "Error: " . $e->getMessage(); if (ini_get('display_errors')) { echo "
" . $e->getTraceAsString() . ""; } } error_log("🔄 Index.php cargado - Ruta: " . ($_SERVER['REQUEST_URI'] ?? 'unknown'));