diff --git a/core/Auth.php b/core/Auth.php index 0a370d9..eb3066b 100755 --- a/core/Auth.php +++ b/core/Auth.php @@ -1,96 +1,121 @@ $timeout)) { session_destroy(); return false; } - + $_SESSION['last_activity'] = time(); return true; } - - public static function user() { + + public static function user() + { if (!self::check()) { return null; } return $_SESSION; } - - public static function id() { + + public static function id() + { return $_SESSION['user_id'] ?? null; } - - public static function role() { + + public static function role() + { return $_SESSION['role'] ?? null; } - - public static function isAdmin() { + + public static function isAdmin() + { return self::role() === 'ADMIN'; } - - public static function isCapturist() { + + public static function isCapturist() + { return self::role() === 'CAPTURIST' || self::isAdmin(); } - - public static function isViewer() { + + public static function isViewer() + { return self::role() === 'VIEWER'; } - public static function isLector() { + public static function isLector() + { return self::role() === 'LECTOR'; } - public static function getAccessibleHouseIds() { + public static function getAccessibleHouseIds() + { $db = Database::getInstance(); if (self::isAdmin()) { $result = $db->fetchAll("SELECT id FROM houses"); return array_column($result, 'id'); - } elseif (self::isLector()) { + } + elseif (self::isLector()) { $userId = self::id(); $result = $db->fetchAll( "SELECT house_id FROM user_house_permissions WHERE user_id = ?", - [$userId] + [$userId] ); return array_column($result, 'house_id'); - } else { + } + else { $result = $db->fetchAll("SELECT id FROM houses"); return array_column($result, 'id'); } } - - public static function requireAuth() { + + public static function canViewHouse($houseId) + { + if (self::isAdmin()) { + return true; + } + $accessibleIds = self::getAccessibleHouseIds(); + return in_array($houseId, $accessibleIds); + } + + public static function requireAuth() + { if (!self::check()) { header('Location: /login.php'); exit; } } - - public static function requireAdmin() { + + public static function requireAdmin() + { self::requireAuth(); if (!self::isAdmin()) { header('Location: /dashboard.php'); exit; } } - - public static function requireCapturist() { + + public static function requireCapturist() + { self::requireAuth(); if (!self::isCapturist()) { header('Location: /dashboard.php'); exit; } } - - public static function login($user) { + + public static function login($user) + { session_regenerate_id(true); $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; @@ -98,37 +123,39 @@ class Auth { $_SESSION['first_name'] = $user['first_name']; $_SESSION['last_name'] = $user['last_name']; $_SESSION['last_activity'] = time(); - + $db = Database::getInstance(); $db->execute( "UPDATE users SET last_login = NOW() WHERE id = ?", - [$user['id']] + [$user['id']] ); - + self::logActivity('login', "Usuario {$user['username']} inició sesión"); } - - public static function logout() { + + public static function logout() + { self::logActivity('logout', "Usuario {$_SESSION['username']} cerró sesión"); session_destroy(); header('Location: /login.php'); exit; } - - public static function logActivity($action, $details = '') { + + public static function logActivity($action, $details = '') + { if (!self::check()) { return; } - + $db = Database::getInstance(); $db->execute( "INSERT INTO activity_logs (user_id, action, details, ip_address) VALUES (?, ?, ?, ?)", - [ - self::id(), - $action, - $details, - $_SERVER['REMOTE_ADDR'] ?? null - ] + [ + self::id(), + $action, + $details, + $_SERVER['REMOTE_ADDR'] ?? null + ] ); } -} +} \ No newline at end of file diff --git a/dashboard.php b/dashboard.php index b33dc8a..60dc92b 100755 --- a/dashboard.php +++ b/dashboard.php @@ -310,8 +310,7 @@ switch ($page) { exit; } echo json_encode(['success' => false, 'message' => 'Acción no válida']); - exit; - break; + case 'pagos': $matrix = Payment::getMatrix($year); @@ -638,6 +637,15 @@ switch ($page) { $conceptDebtors = Report::getConceptDebtorsFiltered($filteredHouses, $filteredConcepts); } + elseif ($reportType == 'electricity-debtors') { + $filters = [ + 'year' => $_GET['filter_year'] ?? null, + 'periods' => isset($_GET['filter_periods']) ? explode(',', $_GET['filter_periods']) : null, + 'house_id' => $_GET['filter_house'] ?? null, + 'accessible_house_ids' => $accessibleHouseIds + ]; + $electricityDebtors = Report::getElectricityDebtors($filters); + } $view = 'reports/index'; break; @@ -672,135 +680,7 @@ switch ($page) { $concepts = CollectionConcept::all(true); $view = 'import/index'; break; - case 'concept_view_actions': // Nuevo case para acciones AJAX de concept_view - if (isset($_GET['action'])) { - header('Content-Type: application/json'); - $userId = Auth::id(); // Obtener el ID del usuario actual - switch ($_GET['action']) { - case 'initialize_concept_payments': - $conceptId = $_GET['concept_id'] ?? 0; - if (!$conceptId) { - echo json_encode(['success' => false, 'message' => 'ID de concepto no proporcionado']); - exit; - } - if (!Auth::isCapturist()) { - echo json_encode(['success' => false, 'message' => 'Permiso denegado']); - exit; - } - - // Se requiere el modelo House para CollectionPayment::initializePayments - require_once __DIR__ . '/models/House.php'; - $result = CollectionPayment::initializePayments($conceptId, $userId); - if ($result) { - Auth::logActivity('initialize_concept_payments', 'Pagos de concepto inicializados: ID ' . $conceptId); - echo json_encode(['success' => true, 'message' => 'Pagos inicializados exitosamente']); - } - else { - echo json_encode(['success' => false, 'message' => 'Error al inicializar pagos']); - } - exit; - - case 'save_concept_payment': - if ($_SERVER['REQUEST_METHOD'] !== 'POST') { - echo json_encode(['success' => false, 'message' => 'Método no permitido']); - exit; - } - $input = json_decode(file_get_contents('php://input'), true); - if ($input) { - $conceptId = $input['concept_id'] ?? 0; - $houseId = $input['house_id'] ?? 0; - $amount = $input['amount'] ?? 0; - $paymentDate = $input['payment_date'] ?? null; - - if (!$conceptId || !$houseId || !is_numeric($amount)) { - echo json_encode(['success' => false, 'message' => 'Datos de pago incompletos o inválidos']); - exit; - } - if (!Auth::isCapturist()) { - echo json_encode(['success' => false, 'message' => 'Permiso denegado']); - exit; - } - - $result = CollectionPayment::update($conceptId, $houseId, $amount, $userId, 'Pago actualizado', $paymentDate); - if ($result) { - Auth::logActivity('save_concept_payment', 'Pago de concepto guardado: Concepto ' . $conceptId . ', Casa ' . $houseId . ', Monto ' . $amount); - echo json_encode(['success' => true, 'message' => 'Pago guardado exitosamente']); - } - else { - echo json_encode(['success' => false, 'message' => 'Error al guardar pago']); - } - } - else { - echo json_encode(['success' => false, 'message' => 'Datos inválidos']); - } - exit; - - case 'save_all_concept_payments': - if ($_SERVER['REQUEST_METHOD'] !== 'POST') { - echo json_encode(['success' => false, 'message' => 'Método no permitido']); - exit; - } - $input = json_decode(file_get_contents('php://input'), true); - if ($input) { - $conceptId = $input['concept_id'] ?? 0; - $payments = $input['payments'] ?? []; - - if (!$conceptId || !is_array($payments)) { - echo json_encode(['success' => false, 'message' => 'Datos de pago incompletos o inválidos']); - exit; - } - if (!Auth::isCapturist()) { - echo json_encode(['success' => false, 'message' => 'Permiso denegado']); - exit; - } - - $savedCount = 0; - $errorCount = 0; - - foreach ($payments as $payment) { - $houseId = $payment['house_id'] ?? 0; - $amount = $payment['amount'] ?? 0; - $paymentDate = $payment['payment_date'] ?? null; - - if (!$houseId) { - $errorCount++; - continue; - } - - $result = CollectionPayment::update($conceptId, $houseId, $amount, $userId, 'Pago actualizado', $paymentDate); - if ($result) { - $savedCount++; - } - else { - $errorCount++; - } - } - - if ($savedCount > 0) { - Auth::logActivity('save_all_concept_payments', 'Múltiples pagos de concepto guardados: Concepto ' . $conceptId . ', ' . $savedCount . ' pagos guardados'); - if ($errorCount > 0) { - echo json_encode(['success' => true, 'message' => 'Se guardaron ' . $savedCount . ' pagos. Hubo ' . $errorCount . ' errores.']); - } - else { - echo json_encode(['success' => true, 'message' => 'Se guardaron ' . $savedCount . ' pagos exitosamente']); - } - } - else { - echo json_encode(['success' => false, 'message' => 'No se pudo guardar ningún pago']); - } - } - else { - echo json_encode(['success' => false, 'message' => 'Datos inválidos']); - } - exit; - - default: - echo json_encode(['success' => false, 'message' => 'Acción no válida para la vista de concepto']); - exit; - } - } - break; case 'charts_export': // Exportación de gráficos a PDF usando TCPDF (igual que otras exportaciones) @@ -946,8 +826,8 @@ switch ($page) { 'balance' => 'Balance_General', 'expenses' => 'Gastos_por_Categoria', 'water-debtors' => 'Deudores_de_Agua', - 'concept-debtors' => 'Deudores_de_Conceptos', - 'concepts' => 'Conceptos_Especiales' + 'concepts' => 'Conceptos_Especiales', + 'electricity-debtors' => 'Deudores_de_Luz' ]; $reportName = $reportNames[$reportType] ?? ucfirst($reportType); @@ -996,6 +876,20 @@ switch ($page) { $waterDebtors = Report::getWaterDebtors($filters); include __DIR__ . '/views/reports/pdf_water_debtors.php'; break; + case 'electricity-debtors': + $filters = [ + 'year' => $_GET['filter_year'] ?? null, + 'periods' => $_GET['filter_periods'] ?? null, + 'house_id' => $_GET['filter_house'] ?? null, + 'accessible_house_ids' => $accessibleHouseIds + ]; + if ($filters['periods'] && !is_array($filters['periods'])) { + $filters['periods'] = explode(',', $filters['periods']); + } + require_once __DIR__ . '/models/Report.php'; + $electricityDebtors = Report::getElectricityDebtors($filters); + include __DIR__ . '/views/reports/pdf_electricity_debtors.php'; + break; case 'concept-debtors': // Requerimos el modelo Report require_once __DIR__ . '/models/Report.php'; @@ -1293,7 +1187,8 @@ switch ($page) { $targetUserId = $_GET['user_id'] ?? 0; $userHouses = UserPermission::getUserHouseIds($targetUserId); echo json_encode(['success' => true, 'houses' => array_map(function ($id) { - return ['id' => $id]; }, $userHouses)]); + return ['id' => $id]; + }, $userHouses)]); exit; case 'create': @@ -1538,6 +1433,141 @@ switch ($page) { } } break; + case 'luz_camara': + $year = $_GET['year'] ?? date('Y'); + require_once __DIR__ . '/models/ElectricityPayment.php'; + require_once __DIR__ . '/models/ElectricityBill.php'; + + $matrix = ElectricityPayment::getMatrix($year); + $electricityBills = ElectricityBill::getYear($year); + + if (isset($_GET['action']) && $_GET['action'] == 'export_electricity_pdf') { + date_default_timezone_set('America/Mexico_City'); + require_once __DIR__ . '/vendor/autoload.php'; + require_once __DIR__ . '/vendor/tecnickcom/tcpdf/tcpdf.php'; + + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor('Ibiza Condominium'); + $pdf->SetTitle('Reporte de Pagos Luz Cámara ' . $year); + $pdf->SetSubject('Pagos de Luz Cámara'); + + $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, 'Condominio IBIZA - Reporte Luz Cámara ' . $year, 'Generado el ' . date('d/m/Y H:i')); + + $pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); + $pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); + + $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); + + $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); + $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); + $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); + + $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); + $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); + + if (@file_exists(dirname(__FILE__) . '/lang/eng.php')) { + require_once(dirname(__FILE__) . '/lang/eng.php'); + $pdf->setLanguageArray($l); + } + + $pdf->SetFont('helvetica', '', 9); + $pdf->AddPage(); + + // Filtrar periodos seleccionados si existen + $periods = ElectricityBill::getPeriods(); + $selectedPeriods = $_GET['periods'] ?? []; + if (!empty($selectedPeriods)) { + $filteredPeriods = []; + foreach ($periods as $p) { + if (in_array($p, $selectedPeriods)) { + $filteredPeriods[] = $p; + } + } + $periods = $filteredPeriods; + } + + // Datos ya cargados arriba ($matrix, $electricityBills) + $houses = House::all(); + + ob_start(); + include __DIR__ . '/views/electricity/pdf_template.php'; + $html = ob_get_clean(); + + $pdf->writeHTML($html, true, false, true, false, ''); + $pdf->Output('Pagos_Luz_Camara_' . $year . '.pdf', 'D'); + exit; + } + + $view = 'electricity/index'; + break; + + case 'luz_camara_actions': + header('Content-Type: application/json'); + require_once __DIR__ . '/models/ElectricityPayment.php'; + + if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + echo json_encode(['success' => false, 'message' => 'Método no permitido']); + exit; + } + + $input = json_decode(file_get_contents('php://input'), true); + if (!$input || !isset($input['changes'])) { + echo json_encode(['success' => false, 'message' => 'Datos inválidos']); + exit; + } + + if (!Auth::isCapturist()) { + echo json_encode(['success' => false, 'message' => 'Permiso denegado']); + exit; + } + + $userId = Auth::id(); + $result = ElectricityPayment::updateBatch($input['changes'], $userId); + + if ($result['success']) { + $details = "Actualización masiva de pagos luz: " . $result['count'] . " cambios"; + Auth::logActivity('save_electricity_payment_batch', $details); + echo json_encode($result); + } + else { + echo json_encode($result); + } + exit; + + case 'luz_camara_config': + header('Content-Type: application/json'); + require_once __DIR__ . '/models/ElectricityBill.php'; + + if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + echo json_encode(['success' => false, 'message' => 'Método no permitido']); + exit; + } + + $input = json_decode(file_get_contents('php://input'), true); + if (!$input) { + echo json_encode(['success' => false, 'message' => 'Datos inválidos']); + exit; + } + + if (!Auth::isCapturist()) { // O isAdmin, dependiendo de la política + echo json_encode(['success' => false, 'message' => 'Permiso denegado']); + exit; + } + + $userId = Auth::id(); + $id = ElectricityBill::save($input, $userId); + + if ($id) { + Auth::logActivity('save_electricity_config', "Configuración luz actualizada: " . $input['period'] . " " . $input['year']); + echo json_encode(['success' => true, 'id' => $id]); + } + else { + echo json_encode(['success' => false, 'message' => 'Error al guardar configuración']); + } + exit; + default: $stats = Report::getDashboardStats($year); $recentActivity = ActivityLog::all(15); diff --git a/database/schema.sql b/database/schema.sql index 34a9cad..95b65fa 100755 --- a/database/schema.sql +++ b/database/schema.sql @@ -3,7 +3,7 @@ -- https://www.phpmyadmin.net/ -- -- Servidor: 10.10.4.17:3390 --- Tiempo de generación: 29-12-2025 a las 23:34:18 +-- Tiempo de generación: 14-02-2026 a las 16:04:36 -- Versión del servidor: 9.5.0 -- Versión de PHP: 8.3.26 @@ -18,7 +18,7 @@ SET time_zone = "+00:00"; /*!40101 SET NAMES utf8mb4 */; -- --- Base de datos: `ibiza_db2` +-- Base de datos: `ibiza_db` -- -- -------------------------------------------------------- @@ -30,9 +30,9 @@ SET time_zone = "+00:00"; CREATE TABLE `activity_logs` ( `id` int NOT NULL, `user_id` int DEFAULT NULL, - `action` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `details` text COLLATE utf8mb4_unicode_ci, - `ip_address` varchar(45) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `action` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `details` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, + `ip_address` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -41,9 +41,435 @@ CREATE TABLE `activity_logs` ( -- INSERT INTO `activity_logs` (`id`, `user_id`, `action`, `details`, `ip_address`, `created_at`) VALUES -(404, 1, 'clear_history', 'Historial de actividad eliminado', '10.10.4.3', '2025-12-29 23:21:25'), -(405, 1, 'update_house', 'Casa 011 actualizada', '10.10.4.3', '2025-12-29 23:21:50'), -(406, 1, 'update_config', 'Configuración actualizada: Enero 2025', '10.10.4.3', '2025-12-29 23:22:06'); +(357, 4, 'login', 'Usuario casa11 inició sesión', '172.17.0.5', '2025-12-27 16:52:50'), +(369, 2, 'login', 'Usuario ana inició sesión', '172.17.0.5', '2025-12-29 18:39:33'), +(370, 2, 'editar_pago', 'Casa 004: Diciembre 2025 - $: 712.00', '172.17.0.5', '2025-12-29 18:40:01'), +(371, 2, 'editar_pago', 'Casa 009: Diciembre 2025 - $: 712.00', '172.17.0.5', '2025-12-29 18:40:38'), +(372, 2, 'editar_pago', 'Casa 090: Diciembre 2025 - $: 720.00', '172.17.0.5', '2025-12-29 18:41:02'), +(373, 2, 'editar_pago', 'Casa 029: Diciembre 2025 - $: 712.00', '172.17.0.5', '2025-12-29 18:41:23'), +(374, 2, 'eliminar_pago', 'Casa 017: Febrero 2025 - $: 0.00', '172.17.0.5', '2025-12-29 18:42:45'), +(375, 2, 'eliminar_pago', 'Casa 044: Marzo 2025 - $: 0.00', '172.17.0.5', '2025-12-29 18:44:41'), +(376, 2, 'editar_pago', 'Casa 017: Febrero 2025 - $: 265.00', '172.17.0.5', '2025-12-29 18:45:12'), +(377, 2, 'editar_pago', 'Casa 044: Marzo 2025 - $: 166.00', '172.17.0.5', '2025-12-29 18:45:32'), +(379, 2, 'login', 'Usuario ana inició sesión', '172.17.0.5', '2025-12-29 20:49:37'), +(382, 2, 'login', 'Usuario ana inició sesión', '172.17.0.5', '2025-12-29 23:09:31'), +(383, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 5, Casa 1, Monto 65', '172.17.0.5', '2025-12-29 23:10:45'), +(384, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.5', '2025-12-29 23:11:30'), +(403, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.5', '2025-12-31 11:23:57'), +(404, 1, 'login', 'Usuario admin inició sesión', '172.17.0.5', '2025-12-31 14:34:08'), +(405, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.5', '2025-12-31 14:34:21'), +(406, 1, 'login', 'Usuario admin inició sesión', '172.17.0.2', '2026-01-03 16:02:45'), +(407, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.2', '2026-01-03 16:03:07'), +(408, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-03 21:05:24'), +(409, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-03 21:07:05'), +(410, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-03 21:18:10'), +(411, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-03 22:29:45'), +(412, 2, 'login', 'Usuario ana inició sesión', '172.17.0.6', '2026-01-05 13:41:19'), +(413, 2, 'save_payment', 'Pago actualizado: Casa 001 - Diciembre 2025 - $612.00', '172.17.0.6', '2026-01-05 13:42:45'), +(414, 2, 'save_payment', 'Pago actualizado: Casa 006 - Diciembre 2025 - $712.00', '172.17.0.6', '2026-01-05 13:42:45'), +(415, 2, 'save_payment', 'Pago actualizado: Casa 039 - Diciembre 2025 - $612.00', '172.17.0.6', '2026-01-05 13:43:56'), +(416, 2, 'save_payment', 'Pago actualizado: Casa 081 - Diciembre 2025 - $712.00', '172.17.0.6', '2026-01-05 13:44:36'), +(417, 2, 'save_payment', 'Pago actualizado: Casa 092 - Diciembre 2025 - $712.00', '172.17.0.6', '2026-01-05 13:45:01'), +(418, 2, 'save_payment', 'Pago actualizado: Casa 100 - Diciembre 2025 - $712.00', '172.17.0.6', '2026-01-05 13:45:37'), +(419, 2, 'save_payment', 'Pago actualizado: Casa 083 - Diciembre 2025 - $612.00', '172.17.0.6', '2026-01-05 13:45:38'), +(420, 2, 'save_payment', 'Pago actualizado: Casa 043 - Diciembre 2025 - $712.00', '172.17.0.6', '2026-01-05 13:49:12'), +(421, 2, 'save_payment', 'Pago actualizado: Casa 043 - Noviembre 2025 - $252.00', '172.17.0.6', '2026-01-05 13:49:13'), +(422, 2, 'save_payment', 'Pago actualizado: Casa 043 - Octubre 2025 - $251.00', '172.17.0.6', '2026-01-05 13:49:13'), +(423, 2, 'save_payment', 'Pago actualizado: Casa 043 - Septiembre 2025 - $276.00', '172.17.0.6', '2026-01-05 13:49:13'), +(424, 2, 'save_payment', 'Pago actualizado: Casa 043 - Agosto 2025 - $250.00', '172.17.0.6', '2026-01-05 13:49:13'), +(425, 2, 'save_payment', 'Pago actualizado: Casa 043 - Julio 2025 - $268.00', '172.17.0.6', '2026-01-05 13:49:14'), +(426, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-05 14:07:05'), +(427, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-05 14:21:40'), +(428, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-05 14:27:05'), +(429, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-05 14:31:40'), +(430, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-05 14:32:08'), +(431, 1, 'update_user', 'Usuario actualizado: ID 4 - casa11', '172.17.0.6', '2026-01-05 14:32:28'), +(432, 1, 'assign_user_houses', 'Casas asignadas a usuario ID: 4', '172.17.0.6', '2026-01-05 14:32:28'), +(433, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-05 14:32:32'), +(434, 4, 'login', 'Usuario casa11 inició sesión', '172.17.0.6', '2026-01-05 14:32:42'), +(435, 4, 'logout', 'Usuario casa11 cerró sesión', '172.17.0.6', '2026-01-05 14:43:45'), +(436, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-05 15:41:31'), +(437, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-05 16:43:39'), +(438, 1, 'login', 'Usuario admin inició sesión', '172.17.0.6', '2026-01-07 01:59:29'), +(439, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.6', '2026-01-07 02:03:36'), +(440, 1, 'login', 'Usuario admin inició sesión', '172.17.0.4', '2026-01-10 15:15:11'), +(441, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.4', '2026-01-10 15:15:34'), +(442, 1, 'login', 'Usuario admin inició sesión', '10.10.4.3', '2026-01-10 17:22:24'), +(443, 1, 'logout', 'Usuario admin cerró sesión', '10.10.4.3', '2026-01-10 17:22:52'), +(444, 1, 'login', 'Usuario admin inició sesión', '172.17.0.2', '2026-01-10 17:33:29'), +(445, 1, 'login', 'Usuario admin inició sesión', '172.17.0.2', '2026-01-11 12:15:24'), +(446, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.2', '2026-01-11 12:15:37'), +(447, 1, 'login', 'Usuario admin inició sesión', '172.17.0.2', '2026-01-11 12:16:03'), +(448, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-11 14:07:39'), +(449, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-11 14:08:02'), +(450, 1, 'login', 'Usuario admin inició sesión', '10.10.4.3', '2026-01-11 14:09:29'), +(451, 1, 'logout', 'Usuario admin cerró sesión', '10.10.4.3', '2026-01-11 14:09:36'), +(452, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-14 12:29:44'), +(453, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-01-14 12:34:15'), +(454, 2, 'save_payment', 'Pago actualizado: Casa 015 - Diciembre 2025 - $300.00', '172.17.0.1', '2026-01-14 12:34:53'), +(455, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-14 17:17:56'), +(456, 1, 'update_config', 'Configuración actualizada: Enero 2026', '172.17.0.1', '2026-01-14 17:19:30'), +(457, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-14 17:25:05'), +(458, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-15 17:20:41'), +(459, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-15 17:21:15'), +(460, 1, 'login', 'Usuario admin inició sesión', '10.10.4.3', '2026-01-16 15:26:37'), +(461, 1, 'login', 'Usuario admin inició sesión', '10.10.4.3', '2026-01-16 16:05:23'), +(462, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-16 16:05:37'), +(463, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-16 16:06:03'), +(464, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-16 17:04:11'), +(465, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-16 17:18:43'), +(466, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-16 18:22:55'), +(467, 1, 'save_payment', 'Pago actualizado: Casa 044 - Diciembre 2026 - $452.00', '172.17.0.1', '2026-01-16 18:23:12'), +(468, 1, 'save_payment', 'Pago actualizado: Casa 044 - Diciembre 2026 - $0.00', '172.17.0.1', '2026-01-16 18:23:26'), +(469, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-16 18:23:43'), +(470, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-19 06:34:30'), +(471, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-19 06:35:13'), +(472, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-01-23 12:37:34'), +(473, 2, 'save_payment', 'Pago actualizado: Casa 053 - Diciembre 2025 - $700.00', '172.17.0.1', '2026-01-23 12:39:01'), +(474, 2, 'save_payment', 'Pago actualizado: Casa 042 - Diciembre 2025 - $712.00', '172.17.0.1', '2026-01-23 12:39:02'), +(475, 2, 'save_payment', 'Pago actualizado: Casa 055 - Diciembre 2025 - $712.00', '172.17.0.1', '2026-01-23 12:39:02'), +(476, 2, 'save_payment', 'Pago actualizado: Casa 091 - Diciembre 2025 - $712.00', '172.17.0.1', '2026-01-23 12:40:56'), +(477, 2, 'save_payment', 'Pago actualizado: Casa 028 - Diciembre 2025 - $712.00', '172.17.0.1', '2026-01-23 12:40:56'), +(478, 2, 'save_payment', 'Pago actualizado: Casa 020 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:17'), +(479, 2, 'save_payment', 'Pago actualizado: Casa 022 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:17'), +(480, 2, 'save_payment', 'Pago actualizado: Casa 062 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:17'), +(481, 2, 'save_payment', 'Pago actualizado: Casa 017 - Febrero 2026 - $4,524.00', '172.17.0.1', '2026-01-23 12:50:18'), +(482, 2, 'save_payment', 'Pago actualizado: Casa 027 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:18'), +(483, 2, 'save_payment', 'Pago actualizado: Casa 031 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:18'), +(484, 2, 'save_payment', 'Pago actualizado: Casa 030 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:18'), +(485, 2, 'save_payment', 'Pago actualizado: Casa 042 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:18'), +(486, 2, 'save_payment', 'Pago actualizado: Casa 037 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:18'), +(487, 2, 'save_payment', 'Pago actualizado: Casa 038 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(488, 2, 'save_payment', 'Pago actualizado: Casa 046 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(489, 2, 'save_payment', 'Pago actualizado: Casa 050 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(490, 2, 'save_payment', 'Pago actualizado: Casa 055 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(491, 2, 'save_payment', 'Pago actualizado: Casa 056 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(492, 2, 'save_payment', 'Pago actualizado: Casa 063 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:19'), +(493, 2, 'save_payment', 'Pago actualizado: Casa 064 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:20'), +(494, 2, 'save_payment', 'Pago actualizado: Casa 072 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:20'), +(495, 2, 'save_payment', 'Pago actualizado: Casa 074 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:20'), +(496, 2, 'save_payment', 'Pago actualizado: Casa 087 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:20'), +(497, 2, 'save_payment', 'Pago actualizado: Casa 090 - Febrero 2026 - $460.00', '172.17.0.1', '2026-01-23 12:50:20'), +(498, 2, 'save_payment', 'Pago actualizado: Casa 017 - Febrero 2026 - $452.00', '172.17.0.1', '2026-01-23 12:50:47'), +(499, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-24 19:17:21'), +(500, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-01-24 19:18:43'), +(501, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-01-26 12:00:26'), +(502, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-01-26 12:21:04'), +(503, 2, 'save_payment', 'Pago actualizado: Casa 017 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:35'), +(504, 2, 'save_payment', 'Pago actualizado: Casa 017 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:35'), +(505, 2, 'save_payment', 'Pago actualizado: Casa 020 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:35'), +(506, 2, 'save_payment', 'Pago actualizado: Casa 020 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:35'), +(507, 2, 'save_payment', 'Pago actualizado: Casa 022 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:36'), +(508, 2, 'save_payment', 'Pago actualizado: Casa 022 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:36'), +(509, 2, 'save_payment', 'Pago actualizado: Casa 027 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:36'), +(510, 2, 'save_payment', 'Pago actualizado: Casa 027 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:36'), +(511, 2, 'save_payment', 'Pago actualizado: Casa 030 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:37'), +(512, 2, 'save_payment', 'Pago actualizado: Casa 030 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:37'), +(513, 2, 'save_payment', 'Pago actualizado: Casa 031 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:37'), +(514, 2, 'save_payment', 'Pago actualizado: Casa 031 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:37'), +(515, 2, 'save_payment', 'Pago actualizado: Casa 037 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:37'), +(516, 2, 'save_payment', 'Pago actualizado: Casa 037 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:37'), +(517, 2, 'save_payment', 'Pago actualizado: Casa 038 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:38'), +(518, 2, 'save_payment', 'Pago actualizado: Casa 038 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:38'), +(519, 2, 'save_payment', 'Pago actualizado: Casa 042 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:38'), +(520, 2, 'save_payment', 'Pago actualizado: Casa 042 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:38'), +(521, 2, 'save_payment', 'Pago actualizado: Casa 046 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:38'), +(522, 2, 'save_payment', 'Pago actualizado: Casa 046 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:38'), +(523, 2, 'save_payment', 'Pago actualizado: Casa 050 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:39'), +(524, 2, 'save_payment', 'Pago actualizado: Casa 050 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:39'), +(525, 2, 'save_payment', 'Pago actualizado: Casa 055 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:39'), +(526, 2, 'save_payment', 'Pago actualizado: Casa 055 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:39'), +(527, 2, 'save_payment', 'Pago actualizado: Casa 056 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:39'), +(528, 2, 'save_payment', 'Pago actualizado: Casa 056 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:40'), +(529, 2, 'save_payment', 'Pago actualizado: Casa 062 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:40'), +(530, 2, 'save_payment', 'Pago actualizado: Casa 062 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:40'), +(531, 2, 'save_payment', 'Pago actualizado: Casa 063 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:40'), +(532, 2, 'save_payment', 'Pago actualizado: Casa 063 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:40'), +(533, 2, 'save_payment', 'Pago actualizado: Casa 064 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:41'), +(534, 2, 'save_payment', 'Pago actualizado: Casa 064 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:41'), +(535, 2, 'save_payment', 'Pago actualizado: Casa 072 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:41'), +(536, 2, 'save_payment', 'Pago actualizado: Casa 072 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:41'), +(537, 2, 'save_payment', 'Pago actualizado: Casa 074 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:41'), +(538, 2, 'save_payment', 'Pago actualizado: Casa 074 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:41'), +(539, 2, 'save_payment', 'Pago actualizado: Casa 087 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:27:42'), +(540, 2, 'save_payment', 'Pago actualizado: Casa 087 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:42'), +(541, 2, 'save_payment', 'Pago actualizado: Casa 090 - Enero 2026 - $460.00', '172.17.0.1', '2026-01-26 12:27:42'), +(542, 2, 'save_payment', 'Pago actualizado: Casa 090 - Febrero 2026 - $0.00', '172.17.0.1', '2026-01-26 12:27:42'), +(543, 2, 'save_payment', 'Pago actualizado: Casa 004 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:28:50'), +(544, 2, 'save_payment', 'Pago actualizado: Casa 008 - Enero 2026 - $460.00', '172.17.0.1', '2026-01-26 12:28:50'), +(545, 2, 'save_payment', 'Pago actualizado: Casa 010 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:28:50'), +(546, 2, 'save_payment', 'Pago actualizado: Casa 089 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:28:50'), +(547, 2, 'save_payment', 'Pago actualizado: Casa 080 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:29:28'), +(548, 2, 'save_payment', 'Pago actualizado: Casa 077 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:29:29'), +(549, 2, 'save_payment', 'Pago actualizado: Casa 078 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:29:29'), +(550, 2, 'save_payment', 'Pago actualizado: Casa 058 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:29:29'), +(551, 2, 'save_payment', 'Pago actualizado: Casa 051 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:24'), +(552, 2, 'save_payment', 'Pago actualizado: Casa 047 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:24'), +(553, 2, 'save_payment', 'Pago actualizado: Casa 040 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:24'), +(554, 2, 'save_payment', 'Pago actualizado: Casa 036 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:25'), +(555, 2, 'save_payment', 'Pago actualizado: Casa 032 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:25'), +(556, 2, 'save_payment', 'Pago actualizado: Casa 025 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:30:25'), +(557, 2, 'save_payment', 'Pago actualizado: Casa 016 - Enero 2026 - $552.00', '172.17.0.1', '2026-01-26 12:31:29'), +(558, 2, 'save_payment', 'Pago actualizado: Casa 099 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:32:17'), +(559, 2, 'save_payment', 'Pago actualizado: Casa 071 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:32:53'), +(560, 2, 'save_payment', 'Pago actualizado: Casa 011 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-26 12:32:53'), +(561, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-01-30 21:05:08'), +(562, 2, 'save_payment', 'Pago actualizado: Casa 026 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-30 21:06:32'), +(563, 2, 'save_payment', 'Pago actualizado: Casa 079 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-30 21:06:32'), +(564, 2, 'save_payment', 'Pago actualizado: Casa 057 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-30 21:06:32'), +(565, 2, 'save_payment', 'Pago actualizado: Casa 003 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-30 21:06:32'), +(566, 2, 'save_payment', 'Pago actualizado: Casa 015 - Enero 2026 - $300.00', '172.17.0.1', '2026-01-30 21:06:32'), +(567, 2, 'save_payment', 'Pago actualizado: Casa 068 - Diciembre 2025 - $400.00', '172.17.0.1', '2026-01-30 21:08:03'), +(568, 2, 'save_payment', 'Pago actualizado: Casa 044 - Enero 2026 - $452.00', '172.17.0.1', '2026-01-30 21:11:08'), +(569, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-03 20:45:17'), +(570, 2, 'save_payment', 'Pago actualizado: Casa 086 - Noviembre 2025 - $252.00', '172.17.0.1', '2026-02-03 20:46:35'), +(571, 2, 'save_payment', 'Pago actualizado: Casa 086 - Diciembre 2025 - $248.00', '172.17.0.1', '2026-02-03 20:46:35'), +(572, 2, 'save_payment', 'Pago actualizado: Casa 091 - Enero 2026 - $450.00', '172.17.0.1', '2026-02-03 20:49:18'), +(573, 2, 'save_payment', 'Pago actualizado: Casa 073 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-03 20:49:18'), +(574, 2, 'save_payment', 'Pago actualizado: Casa 076 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-03 20:49:18'), +(575, 2, 'save_payment', 'Pago actualizado: Casa 084 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-03 20:49:18'), +(576, 2, 'save_payment', 'Pago actualizado: Casa 045 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-03 20:49:19'), +(577, 2, 'save_payment', 'Pago actualizado: Casa 014 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-03 20:49:19'), +(578, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-03 20:50:36'), +(579, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-04 13:23:00'), +(580, 2, 'save_payment', 'Pago actualizado: Casa 039 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 13:23:28'), +(581, 2, 'save_payment', 'Pago actualizado: Casa 081 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 13:24:09'), +(582, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-04 13:24:18'), +(583, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-04 20:33:38'), +(584, 2, 'save_payment', 'Pago actualizado: Casa 100 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 20:35:06'), +(585, 2, 'save_payment', 'Pago actualizado: Casa 093 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 20:35:07'), +(586, 2, 'save_payment', 'Pago actualizado: Casa 029 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 20:35:07'), +(587, 2, 'save_payment', 'Pago actualizado: Casa 043 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-04 20:35:07'), +(588, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-04 20:54:46'), +(589, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-08 21:51:45'), +(590, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-09 11:23:01'), +(591, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 26, Monto 6', '172.17.0.1', '2026-02-09 11:25:03'), +(592, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 28, Monto 8', '172.17.0.1', '2026-02-09 11:25:07'), +(593, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 30, Monto 6', '172.17.0.1', '2026-02-09 11:25:14'), +(594, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 31, Monto 6', '172.17.0.1', '2026-02-09 11:25:19'), +(595, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 32, Monto 6', '172.17.0.1', '2026-02-09 11:25:25'), +(596, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 36, Monto 8', '172.17.0.1', '2026-02-09 11:25:33'), +(597, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 38, Monto 6', '172.17.0.1', '2026-02-09 11:25:37'), +(598, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 39, Monto 6', '172.17.0.1', '2026-02-09 11:25:41'), +(599, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 40, Monto 6', '172.17.0.1', '2026-02-09 11:25:45'), +(600, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 42, Monto 7', '172.17.0.1', '2026-02-09 11:25:51'), +(601, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 43, Monto 6', '172.17.0.1', '2026-02-09 11:25:55'), +(602, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 45, Monto 6', '172.17.0.1', '2026-02-09 11:25:59'), +(603, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 46, Monto 6', '172.17.0.1', '2026-02-09 11:26:08'), +(604, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 48, Monto 6', '172.17.0.1', '2026-02-09 11:26:13'), +(605, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 50, Monto 6', '172.17.0.1', '2026-02-09 11:26:18'), +(606, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 51, Monto 6', '172.17.0.1', '2026-02-09 11:26:22'), +(607, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 53, Monto 6', '172.17.0.1', '2026-02-09 11:26:27'), +(608, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 54, Monto 6', '172.17.0.1', '2026-02-09 11:26:33'), +(609, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 56, Monto 6', '172.17.0.1', '2026-02-09 11:26:36'), +(610, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 57, Monto 16', '172.17.0.1', '2026-02-09 11:26:43'), +(611, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 58, Monto 6', '172.17.0.1', '2026-02-09 11:26:48'), +(612, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 59, Monto 20', '172.17.0.1', '2026-02-09 11:26:51'), +(613, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 62, Monto 6', '172.17.0.1', '2026-02-09 11:26:54'), +(614, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 63, Monto 6', '172.17.0.1', '2026-02-09 11:26:58'), +(615, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 64, Monto 16', '172.17.0.1', '2026-02-09 11:27:03'), +(616, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 69, Monto 16', '172.17.0.1', '2026-02-09 11:27:10'), +(617, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 70, Monto 6', '172.17.0.1', '2026-02-09 11:27:13'), +(618, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 72, Monto 6', '172.17.0.1', '2026-02-09 11:27:30'), +(619, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 73, Monto 6', '172.17.0.1', '2026-02-09 11:27:34'), +(620, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 74, Monto 16', '172.17.0.1', '2026-02-09 11:27:38'), +(621, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 75, Monto 6', '172.17.0.1', '2026-02-09 11:27:42'), +(622, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 77, Monto 6', '172.17.0.1', '2026-02-09 11:27:49'), +(623, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 78, Monto 6', '172.17.0.1', '2026-02-09 11:27:52'), +(624, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 79, Monto 6', '172.17.0.1', '2026-02-09 11:27:57'), +(625, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 80, Monto 6', '172.17.0.1', '2026-02-09 11:28:08'), +(626, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 81, Monto 0', '172.17.0.1', '2026-02-09 11:28:11'), +(627, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 83, Monto 6', '172.17.0.1', '2026-02-09 11:28:15'), +(628, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 84, Monto 6', '172.17.0.1', '2026-02-09 11:28:18'), +(629, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 85, Monto 6', '172.17.0.1', '2026-02-09 11:28:22'), +(630, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 86, Monto 6', '172.17.0.1', '2026-02-09 11:28:26'), +(631, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 87, Monto 6', '172.17.0.1', '2026-02-09 11:28:30'), +(632, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 88, Monto 6', '172.17.0.1', '2026-02-09 11:28:35'), +(633, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 90, Monto 10', '172.17.0.1', '2026-02-09 11:28:42'), +(634, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 91, Monto 6', '172.17.0.1', '2026-02-09 11:28:45'), +(635, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 92, Monto 6', '172.17.0.1', '2026-02-09 11:28:49'), +(636, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 93, Monto 6', '172.17.0.1', '2026-02-09 11:28:53'), +(637, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 96, Monto 6', '172.17.0.1', '2026-02-09 11:28:58'), +(638, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 98, Monto 16', '172.17.0.1', '2026-02-09 11:29:01'), +(639, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 99, Monto 6', '172.17.0.1', '2026-02-09 11:29:05'), +(640, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 3, Casa 100, Monto 6', '172.17.0.1', '2026-02-09 11:29:10'), +(641, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-09 20:37:34'), +(642, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-10 16:19:33'), +(643, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 5, Casa 70, Monto 0', '172.17.0.1', '2026-02-10 16:27:48'), +(644, 1, 'save_concept_payment', 'Pago de concepto guardado: Concepto 5, Casa 71, Monto 65', '172.17.0.1', '2026-02-10 16:28:11'), +(645, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-11 21:41:35'), +(646, 2, 'save_payment', 'Pago actualizado: Casa 001 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:01'), +(647, 2, 'save_payment', 'Pago actualizado: Casa 053 - Enero 2026 - $400.00', '172.17.0.1', '2026-02-11 21:44:01'), +(648, 2, 'save_payment', 'Pago actualizado: Casa 070 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:01'), +(649, 2, 'save_payment', 'Pago actualizado: Casa 048 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:01'), +(650, 2, 'save_payment', 'Pago actualizado: Casa 092 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:02'), +(651, 2, 'save_payment', 'Pago actualizado: Casa 018 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:02'), +(652, 2, 'save_payment', 'Pago actualizado: Casa 049 - Enero 2026 - $452.00', '172.17.0.1', '2026-02-11 21:44:02'), +(653, 2, 'save_payment', 'Pago actualizado: Casa 007 - Enero 2026 - $288.00', '172.17.0.1', '2026-02-11 21:44:02'), +(654, 2, 'save_payment', 'Pago actualizado: Casa 007 - Diciembre 2025 - $712.00', '172.17.0.1', '2026-02-11 21:45:00'), +(655, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-11 21:45:11'), +(656, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-11 21:47:11'), +(657, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-11 21:47:34'), +(658, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-12 03:25:15'), +(659, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-02-12 03:26:45'), +(660, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 21:34:10'), +(661, 2, 'save_concept', 'Concepto creado: Camara de vigilancia y memoria micro', '172.17.0.1', '2026-02-13 21:44:10'), +(662, 2, 'initialize_concept_payments', 'Pagos de concepto inicializados: ID 6', '172.17.0.1', '2026-02-13 21:44:48'), +(663, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-13 21:53:26'), +(664, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 1, Monto 17', '172.17.0.1', '2026-02-13 21:56:48'), +(665, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 3, Monto 17', '172.17.0.1', '2026-02-13 21:57:06'), +(666, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 4, Monto 17', '172.17.0.1', '2026-02-13 21:57:19'), +(667, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 6, Monto 17', '172.17.0.1', '2026-02-13 21:57:49'), +(668, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 7, Monto 17', '172.17.0.1', '2026-02-13 21:58:01'), +(669, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 8, Monto 17', '172.17.0.1', '2026-02-13 21:58:10'), +(670, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 9, Monto 17', '172.17.0.1', '2026-02-13 21:58:17'), +(671, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 10, Monto 17', '172.17.0.1', '2026-02-13 21:58:24'), +(672, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 11, Monto 17', '172.17.0.1', '2026-02-13 21:58:33'), +(673, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 13, Monto 17', '172.17.0.1', '2026-02-13 21:58:42'), +(674, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 14, Monto 20', '172.17.0.1', '2026-02-13 21:58:53'), +(675, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 15, Monto 17', '172.17.0.1', '2026-02-13 21:59:00'), +(676, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 16, Monto 17', '172.17.0.1', '2026-02-13 21:59:12'), +(677, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 17, Monto 17', '172.17.0.1', '2026-02-13 21:59:17'), +(678, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 18, Monto 17', '172.17.0.1', '2026-02-13 21:59:21'), +(679, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 19, Monto 17', '172.17.0.1', '2026-02-13 21:59:25'), +(680, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 20, Monto 17', '172.17.0.1', '2026-02-13 21:59:29'), +(681, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 22, Monto 17', '172.17.0.1', '2026-02-13 21:59:39'), +(682, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 25, Monto 17', '172.17.0.1', '2026-02-13 21:59:48'), +(683, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 26, Monto 17', '172.17.0.1', '2026-02-13 21:59:56'), +(684, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 27, Monto 17', '172.17.0.1', '2026-02-13 22:00:02'), +(685, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 29, Monto 17', '172.17.0.1', '2026-02-13 22:00:11'), +(686, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 30, Monto 17', '172.17.0.1', '2026-02-13 22:00:17'), +(687, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 31, Monto 17', '172.17.0.1', '2026-02-13 22:00:24'), +(688, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 32, Monto 17', '172.17.0.1', '2026-02-13 22:00:29'), +(689, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 38, Monto 17', '172.17.0.1', '2026-02-13 22:00:39'), +(690, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 39, Monto 17', '172.17.0.1', '2026-02-13 22:00:49'), +(691, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 44, Monto 17', '172.17.0.1', '2026-02-13 22:00:59'), +(692, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 45, Monto 17', '172.17.0.1', '2026-02-13 22:01:05'), +(693, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 46, Monto 17', '172.17.0.1', '2026-02-13 22:01:12'), +(694, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 47, Monto 17', '172.17.0.1', '2026-02-13 22:01:19'), +(695, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 48, Monto 17', '172.17.0.1', '2026-02-13 22:01:25'), +(696, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 49, Monto 17', '172.17.0.1', '2026-02-13 22:01:33'), +(697, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 50, Monto 50', '172.17.0.1', '2026-02-13 22:01:38'), +(698, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 51, Monto 17', '172.17.0.1', '2026-02-13 22:01:47'), +(699, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 53, Monto 17', '172.17.0.1', '2026-02-13 22:01:58'), +(700, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 54, Monto 17', '172.17.0.1', '2026-02-13 22:02:08'), +(701, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 55, Monto 17', '172.17.0.1', '2026-02-13 22:02:17'), +(702, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 56, Monto 17', '172.17.0.1', '2026-02-13 22:02:28'), +(703, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 57, Monto 17', '172.17.0.1', '2026-02-13 22:02:38'), +(704, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 58, Monto 17', '172.17.0.1', '2026-02-13 22:02:46'), +(705, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 62, Monto 17', '172.17.0.1', '2026-02-13 22:02:55'), +(706, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 63, Monto 17', '172.17.0.1', '2026-02-13 22:03:06'), +(707, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 64, Monto 17', '172.17.0.1', '2026-02-13 22:03:11'), +(708, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 67, Monto 17', '172.17.0.1', '2026-02-13 22:03:19'), +(709, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 70, Monto 17', '172.17.0.1', '2026-02-13 22:03:44'), +(710, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 71, Monto 17', '172.17.0.1', '2026-02-13 22:03:54'), +(711, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 72, Monto 17', '172.17.0.1', '2026-02-13 22:04:02'), +(712, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 74, Monto 17', '172.17.0.1', '2026-02-13 22:04:10'), +(713, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 75, Monto 17', '172.17.0.1', '2026-02-13 22:04:15'), +(714, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 76, Monto 17', '172.17.0.1', '2026-02-13 22:04:22'), +(715, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 77, Monto 17', '172.17.0.1', '2026-02-13 22:04:29'), +(716, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 79, Monto 17', '172.17.0.1', '2026-02-13 22:04:36'), +(717, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 80, Monto 17', '172.17.0.1', '2026-02-13 22:04:50'), +(718, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 81, Monto 17', '172.17.0.1', '2026-02-13 22:04:57'), +(719, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 83, Monto 17', '172.17.0.1', '2026-02-13 22:05:05'), +(720, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 86, Monto 17', '172.17.0.1', '2026-02-13 22:05:12'), +(721, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 87, Monto 20', '172.17.0.1', '2026-02-13 22:05:25'), +(722, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 88, Monto 17', '172.17.0.1', '2026-02-13 22:05:32'), +(723, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 91, Monto 17', '172.17.0.1', '2026-02-13 22:05:41'), +(724, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 92, Monto 17', '172.17.0.1', '2026-02-13 22:05:49'), +(725, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 94, Monto 17', '172.17.0.1', '2026-02-13 22:05:58'), +(726, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 95, Monto 17', '172.17.0.1', '2026-02-13 22:06:05'), +(727, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 96, Monto 17', '172.17.0.1', '2026-02-13 22:06:12'), +(728, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 99, Monto 17', '172.17.0.1', '2026-02-13 22:06:19'), +(729, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 6, Casa 100, Monto 17', '172.17.0.1', '2026-02-13 22:06:23'), +(730, 1, 'save_expense', 'Gasto creado: Camara de video vigilancia', '172.17.0.1', '2026-02-13 22:27:44'), +(731, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 22:29:26'), +(732, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-13 22:33:52'), +(733, 2, 'save_expense', 'Gasto creado: Memoria micro', '172.17.0.1', '2026-02-13 22:37:33'), +(734, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 22:38:35'), +(735, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 22:56:17'), +(736, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 22:56:17'), +(737, 2, 'save_concept', 'Concepto creado: Desmantelar caja protectora de herrería de macromedidor', '172.17.0.1', '2026-02-13 22:58:06'), +(738, 2, 'initialize_concept_payments', 'Pagos de concepto inicializados: ID 7', '172.17.0.1', '2026-02-13 22:58:25'), +(739, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 1, Monto 10', '172.17.0.1', '2026-02-13 22:58:46'), +(740, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 3, Monto 10', '172.17.0.1', '2026-02-13 22:59:00'), +(741, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 4, Monto 10', '172.17.0.1', '2026-02-13 22:59:05'), +(742, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 5, Monto 10', '172.17.0.1', '2026-02-13 22:59:18'), +(743, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 6, Monto 10', '172.17.0.1', '2026-02-13 22:59:34'), +(744, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 8, Monto 10', '172.17.0.1', '2026-02-13 22:59:42'), +(745, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 9, Monto 10', '172.17.0.1', '2026-02-13 23:00:09'), +(746, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 10, Monto 10', '172.17.0.1', '2026-02-13 23:00:14'), +(747, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 11, Monto 10', '172.17.0.1', '2026-02-13 23:00:17'), +(748, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 12, Monto 10', '172.17.0.1', '2026-02-13 23:00:21'), +(749, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 13, Monto 10', '172.17.0.1', '2026-02-13 23:00:26'), +(750, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 14, Monto 10', '172.17.0.1', '2026-02-13 23:00:29'), +(751, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 15, Monto 10', '172.17.0.1', '2026-02-13 23:00:35'), +(752, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 16, Monto 10', '172.17.0.1', '2026-02-13 23:00:39'), +(753, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 17, Monto 10', '172.17.0.1', '2026-02-13 23:00:44'), +(754, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 18, Monto 10', '172.17.0.1', '2026-02-13 23:00:48'), +(755, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 19, Monto 10', '172.17.0.1', '2026-02-13 23:00:54'), +(756, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 20, Monto 10', '172.17.0.1', '2026-02-13 23:00:59'), +(757, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 22, Monto 10', '172.17.0.1', '2026-02-13 23:01:07'), +(758, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 23, Monto 10', '172.17.0.1', '2026-02-13 23:01:11'), +(759, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 25, Monto 10', '172.17.0.1', '2026-02-13 23:01:24'), +(760, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 26, Monto 10', '172.17.0.1', '2026-02-13 23:01:28'), +(761, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 27, Monto 10', '172.17.0.1', '2026-02-13 23:01:35'), +(762, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 28, Monto 10', '172.17.0.1', '2026-02-13 23:01:38'), +(763, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 29, Monto 10', '172.17.0.1', '2026-02-13 23:01:42'), +(764, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 30, Monto 10', '172.17.0.1', '2026-02-13 23:01:46'), +(765, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 31, Monto 10', '172.17.0.1', '2026-02-13 23:01:55'), +(766, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 32, Monto 10', '172.17.0.1', '2026-02-13 23:01:59'), +(767, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 38, Monto 10', '172.17.0.1', '2026-02-13 23:02:07'), +(768, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 39, Monto 10', '172.17.0.1', '2026-02-13 23:02:13'), +(769, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 40, Monto 10', '172.17.0.1', '2026-02-13 23:02:18'), +(770, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 42, Monto 10', '172.17.0.1', '2026-02-13 23:02:32'), +(771, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 43, Monto 10', '172.17.0.1', '2026-02-13 23:02:35'), +(772, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 44, Monto 10', '172.17.0.1', '2026-02-13 23:02:39'), +(773, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 45, Monto 10', '172.17.0.1', '2026-02-13 23:02:42'), +(774, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 46, Monto 10', '172.17.0.1', '2026-02-13 23:02:47'), +(775, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 47, Monto 10', '172.17.0.1', '2026-02-13 23:02:50'), +(776, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 48, Monto 10', '172.17.0.1', '2026-02-13 23:02:53'), +(777, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 49, Monto 10', '172.17.0.1', '2026-02-13 23:02:56'), +(778, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 50, Monto 10', '172.17.0.1', '2026-02-13 23:03:01'), +(779, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 51, Monto 10', '172.17.0.1', '2026-02-13 23:03:08'), +(780, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 53, Monto 10', '172.17.0.1', '2026-02-13 23:03:18'), +(781, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 54, Monto 10', '172.17.0.1', '2026-02-13 23:03:21'), +(782, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 55, Monto 10', '172.17.0.1', '2026-02-13 23:03:26'), +(783, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 56, Monto 10', '172.17.0.1', '2026-02-13 23:03:31'), +(784, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 58, Monto 10', '172.17.0.1', '2026-02-13 23:03:42'), +(785, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 59, Monto 10', '172.17.0.1', '2026-02-13 23:03:47'), +(786, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 60, Monto 60', '172.17.0.1', '2026-02-13 23:03:54'), +(787, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 60, Monto 10', '172.17.0.1', '2026-02-13 23:04:04'), +(788, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 61, Monto 10', '172.17.0.1', '2026-02-13 23:04:08'), +(789, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 62, Monto 10', '172.17.0.1', '2026-02-13 23:04:13'), +(790, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 63, Monto 10', '172.17.0.1', '2026-02-13 23:04:18'), +(791, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 68, Monto 10', '172.17.0.1', '2026-02-13 23:04:26'), +(792, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 70, Monto 10', '172.17.0.1', '2026-02-13 23:04:34'), +(793, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 71, Monto 10', '172.17.0.1', '2026-02-13 23:04:41'), +(794, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 72, Monto 10', '172.17.0.1', '2026-02-13 23:04:44'), +(795, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 73, Monto 10', '172.17.0.1', '2026-02-13 23:04:50'), +(796, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 75, Monto 10', '172.17.0.1', '2026-02-13 23:05:05'), +(797, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 76, Monto 10', '172.17.0.1', '2026-02-13 23:05:09'), +(798, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 77, Monto 10', '172.17.0.1', '2026-02-13 23:05:13'), +(799, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 78, Monto 10', '172.17.0.1', '2026-02-13 23:05:20'), +(800, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 79, Monto 10', '172.17.0.1', '2026-02-13 23:05:25'), +(801, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 80, Monto 10', '172.17.0.1', '2026-02-13 23:05:30'), +(802, 2, 'save_concept_payment', 'Pago de concepto guardado: Concepto 7, Casa 81, Monto 10', '172.17.0.1', '2026-02-13 23:05:42'), +(803, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-13 23:06:07'), +(804, 1, 'save_expense', 'Gasto editado: Camara de video vigilancia', '172.17.0.1', '2026-02-13 23:06:20'), +(805, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 23:06:35'), +(806, 1, 'save_expense', 'Gasto editado: Memoria micro', '172.17.0.1', '2026-02-13 23:07:04'), +(807, 2, 'save_all_concept_payments', 'Múltiples pagos de concepto guardados: Concepto 7, 96 pagos guardados', '172.17.0.1', '2026-02-13 23:08:33'), +(808, 2, 'save_expense', 'Gasto creado: Mano de obra desmantelar y volver armas caja de herrería del macromedidor', '172.17.0.1', '2026-02-13 23:10:46'), +(809, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 23:12:26'), +(810, 2, 'save_expense', 'Gasto editado: Mano de obra desmantelar y volver armas caja de herrería del macromedidor', '172.17.0.1', '2026-02-13 23:13:08'), +(811, 2, 'login', 'Usuario ana inició sesión', '172.17.0.1', '2026-02-13 23:14:26'), +(812, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-13 23:17:47'), +(813, 2, 'logout', 'Usuario ana cerró sesión', '172.17.0.1', '2026-02-13 23:29:51'), +(814, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-14 00:02:14'), +(815, 1, 'logout', 'Usuario admin cerró sesión', '172.17.0.1', '2026-02-14 00:06:46'), +(816, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-14 13:48:07'), +(817, 1, 'login', 'Usuario admin inició sesión', '172.17.0.1', '2026-02-14 15:16:35'); -- -------------------------------------------------------- @@ -65,88 +491,41 @@ CREATE TABLE `api_logs` ( `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +-- -------------------------------------------------------- + -- --- Volcado de datos para la tabla `api_logs` +-- Estructura de tabla para la tabla `electricity_bills` -- -INSERT INTO `api_logs` (`id`, `level`, `message`, `context`, `type`, `ip_address`, `user_agent`, `request_uri`, `request_method`, `user_id`, `created_at`) VALUES -(1, 'ERROR', 'Warning: file_put_contents(/var/www/html/ibiza/core/../logs/error/application_2025-12-29.log): Failed to open stream: Permission denied', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:08:49'), -(2, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:08:49'), -(3, 'ERROR', 'Warning: file_put_contents(/var/www/html/ibiza/core/../logs/error/application_2025-12-29.log): Failed to open stream: Permission denied', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:09:00'), -(4, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:09:01'), -(5, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:09:27'), -(6, 'ERROR', 'Warning: file_put_contents(/var/www/html/ibiza/core/../logs/error/application_2025-12-29.log): Failed to open stream: Permission denied', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:09:45'), -(7, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:09:45'), -(8, 'ERROR', 'Warning: http_response_code(): Cannot set response code - headers already sent (output started at /var/www/html/ibiza/core/Logger.php:83)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:09:45'), -(9, 'ERROR', 'Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ibiza/core/Logger.php:83)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:09:45'), -(10, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:10:17'), -(11, 'ERROR', 'Warning: file_put_contents(/var/www/html/ibiza/core/../logs/error/application_2025-12-29.log): Failed to open stream: Permission denied', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:10:22'), -(12, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:10:22'), -(13, 'ERROR', 'Warning: http_response_code(): Cannot set response code - headers already sent (output started at /var/www/html/ibiza/core/Logger.php:83)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:10:22'), -(14, 'ERROR', 'Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ibiza/core/Logger.php:83)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:10:23'), -(15, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:11:40'), -(16, 'ERROR', 'Warning: file_put_contents(/var/www/html/ibiza/core/../logs/error/application_2025-12-29.log): Failed to open stream: Permission denied', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:11:44'), -(17, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:11:44'), -(18, 'ERROR', 'Warning: http_response_code(): Cannot set response code - headers already sent (output started at /var/www/html/ibiza/core/Logger.php:87)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:11:44'), -(19, 'ERROR', 'Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/ibiza/core/Logger.php:87)', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:11:44'), -(20, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:12:16'), -(21, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:12:47'), -(22, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/test.php', 'GET', NULL, '2025-12-29 20:13:13'), -(23, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:14:36'), -(24, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/index_v2.php', 'GET', NULL, '2025-12-29 20:15:12'), -(25, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/index_v2.php', 'GET', NULL, '2025-12-29 20:15:16'), -(26, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/health', 'GET', NULL, '2025-12-29 20:16:12'), -(27, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/index_v2.php', 'GET', NULL, '2025-12-29 20:16:29'), -(28, 'ERROR', 'Uncaught Exception: Class \"Database\" not found', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/index_v2.php', 'GET', NULL, '2025-12-29 20:16:40'), -(29, 'ERROR', 'Warning: require_once(/var/www/html/ibiza/api/v1/controllers/../../core/Database.php): Failed to open stream: No such file or directory', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:20:20'), -(30, 'ERROR', 'Uncaught Exception: Failed opening required \'/var/www/html/ibiza/api/v1/controllers/../../core/Database.php\' (include_path=\'.:/usr/share/php\')', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:20:20'), -(31, 'ERROR', 'Warning: require_once(/var/www/html/ibiza/api/v1/controllers/../../core/Database.php): Failed to open stream: No such file or directory', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:21:11'), -(32, 'ERROR', 'Uncaught Exception: Failed opening required \'/var/www/html/ibiza/api/v1/controllers/../../core/Database.php\' (include_path=\'.:/usr/share/php\')', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:21:11'), -(33, 'ERROR', 'Warning: require_once(/var/www/html/ibiza/api/v1/controllers/../../core/Database.php): Failed to open stream: No such file or directory', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:21:56'), -(34, 'ERROR', 'Uncaught Exception: Failed opening required \'/var/www/html/ibiza/api/v1/controllers/../../core/Database.php\' (include_path=\'.:/usr/share/php\')', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:21:57'), -(35, 'ERROR', 'Warning: require_once(/var/www/html/ibiza/api/v1/controllers/../../models/User.php): Failed to open stream: No such file or directory', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:22:23'), -(36, 'ERROR', 'Uncaught Exception: Failed opening required \'/var/www/html/ibiza/api/v1/controllers/../../models/User.php\' (include_path=\'.:/usr/share/php\')', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:22:23'), -(37, 'ERROR', 'Warning: Undefined array key \"username\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:12'), -(38, 'ERROR', 'Warning: Undefined array key \"email\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:12'), -(39, 'ERROR', 'Warning: Undefined array key \"first_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:12'), -(40, 'ERROR', 'Warning: Undefined array key \"last_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:12'), -(41, 'ERROR', 'Warning: Undefined array key \"role\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:12'), -(42, 'ERROR', 'Login error', '{\"error\": \"SQLSTATE[23000]: Integrity constraint violation: 1048 Column \'username\' cannot be null\", \"username\": \"admin\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:13'), -(43, 'ERROR', 'Test error log', '{\"test\": true}', 'application', 'unknown', 'Unknown', 'Unknown', 'Unknown', NULL, '2025-12-29 20:23:26'), -(44, 'ERROR', 'Warning: Undefined array key \"username\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(45, 'ERROR', 'Warning: Undefined array key \"email\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(46, 'ERROR', 'Warning: Undefined array key \"first_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(47, 'ERROR', 'Warning: Undefined array key \"last_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(48, 'ERROR', 'Warning: Undefined array key \"role\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(49, 'ERROR', 'Login error', '{\"error\": \"SQLSTATE[23000]: Integrity constraint violation: 1048 Column \'username\' cannot be null\", \"username\": \"admin\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:42'), -(50, 'ERROR', 'Warning: Undefined array key \"username\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:58'), -(51, 'ERROR', 'Warning: Undefined array key \"email\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:59'), -(52, 'ERROR', 'Warning: Undefined array key \"first_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:59'), -(53, 'ERROR', 'Warning: Undefined array key \"last_name\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:59'), -(54, 'ERROR', 'Warning: Undefined array key \"role\"', '{\"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"errno\": 2}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:59'), -(55, 'ERROR', 'Login error', '{\"error\": \"SQLSTATE[23000]: Integrity constraint violation: 1048 Column \'username\' cannot be null\", \"username\": \"admin\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/login', 'POST', NULL, '2025-12-29 20:23:59'), -(56, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/users', 'GET', NULL, '2025-12-29 20:24:57'), -(57, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:24:57'), -(58, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:24:57'), -(59, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/houses', 'GET', NULL, '2025-12-29 20:24:58'), -(60, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/users', 'GET', NULL, '2025-12-29 20:24:58'), -(61, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:25:03'), -(62, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:25:04'), -(63, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:25'), -(64, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:25'), -(65, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:53'), -(66, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:53'), -(67, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:58'), -(68, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:26:58'), -(69, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:27:07'), -(70, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:27:07'), -(71, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/users', 'GET', NULL, '2025-12-29 20:27:21'), -(72, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:27:43'), -(73, 'ERROR', 'Get user error', '{\"error\": \"No autenticado\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/auth/me', 'GET', NULL, '2025-12-29 20:27:43'), -(74, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/users', 'GET', NULL, '2025-12-29 20:27:52'), -(75, 'ERROR', 'Uncaught Exception: Call to undefined method AuthMiddleware::getRole()', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/payments?page=1&limit=3', 'GET', 1, '2025-12-29 20:29:38'), -(76, 'WARNING', 'Authentication failed', '{\"ip\": \"10.10.4.3\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/payments?page=1&limit=3', 'GET', NULL, '2025-12-29 20:29:43'), -(77, 'ERROR', 'Uncaught Exception: Call to undefined method AuthMiddleware::getRole()', '{\"code\": 0, \"file\": \"[REDACTED]\", \"line\": \"[REDACTED]\", \"trace\": \"[REDACTED]\"}', 'application', '10.10.4.3', 'curl/8.5.0', '/api/v1/payments?page=1&limit=3', 'GET', 1, '2025-12-29 20:29:50'); +CREATE TABLE `electricity_bills` ( + `id` int NOT NULL, + `year` int NOT NULL, + `period` varchar(20) NOT NULL COMMENT 'Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic', + `total_amount` decimal(10,2) DEFAULT '0.00' COMMENT 'Monto total del recibo CFE', + `amount_per_house` decimal(10,2) DEFAULT '0.00' COMMENT 'Monto sugerido por casa', + `notes` text, + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Configuración bimestral de pagos de luz'; + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `electricity_payments` +-- + +CREATE TABLE `electricity_payments` ( + `id` int NOT NULL, + `house_id` int NOT NULL, + `year` int NOT NULL, + `period` varchar(20) NOT NULL COMMENT 'Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic', + `amount` decimal(10,2) DEFAULT '0.00', + `payment_date` datetime DEFAULT NULL, + `notes` text, + `created_by` int DEFAULT NULL, + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Pagos de luz por casa'; -- -------------------------------------------------------- @@ -156,12 +535,12 @@ INSERT INTO `api_logs` (`id`, `level`, `message`, `context`, `type`, `ip_address CREATE TABLE `expenses` ( `id` int NOT NULL, - `description` varchar(300) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `description` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `amount` decimal(10,2) DEFAULT NULL, `expense_date` date DEFAULT NULL, - `category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `receipt_path` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `notes` text COLLATE utf8mb4_unicode_ci, + `category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `receipt_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `created_by` int DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -186,7 +565,10 @@ INSERT INTO `expenses` (`id`, `description`, `amount`, `expense_date`, `category (14, 'Acta Certificada', 814.00, '2024-07-10', 'Protocolización', NULL, NULL, 1, '2025-12-26 05:00:16'), (15, 'Herrero', 250.00, '2025-11-11', 'Porton', NULL, NULL, 1, '2025-12-26 05:00:16'), (16, 'Cambio de combinación candado', 150.00, '2025-11-11', 'Porton', NULL, NULL, 1, '2025-12-26 05:00:16'), -(17, 'Candado Phillips', 198.00, '2025-11-11', 'Porton', NULL, NULL, 1, '2025-12-26 05:00:16'); +(17, 'Candado Phillips', 198.00, '2025-11-11', 'Porton', NULL, NULL, 1, '2025-12-26 05:00:16'), +(18, 'Camara de video vigilancia', 663.00, '2025-04-24', 'MEJORA DE CONDOMINIO', '/uploads/expenses/receipt_699002cc5ae87_camara.jpg', NULL, 1, '2026-02-13 22:27:44'), +(19, 'Memoria micro', 700.00, '2025-04-26', 'MEJORA DE CONDOMINIO', '/uploads/expenses/receipt_699002f7cd165_memoria.jpg', NULL, 2, '2026-02-13 22:37:33'), +(20, 'Mano de obra desmantelar y volver armas caja de herrería del macromedidor', 600.00, '2025-11-10', 'Mantenimiento', '/uploads/expenses/receipt_699004644ef64_20260213_231138.jpg', NULL, 2, '2026-02-13 23:10:46'); -- -------------------------------------------------------- @@ -211,6 +593,7 @@ INSERT INTO `expense_concept_allocations` (`id`, `expense_id`, `concept_id`, `am (2, 14, 1, 814.00, '2025-12-26 05:03:23'), (3, 13, 1, 38.00, '2025-12-26 05:03:49'), (4, 12, 1, 300.00, '2025-12-26 05:05:59'), +(5, 15, 3, 250.00, '2025-12-26 05:06:21'), (6, 16, 3, 150.00, '2025-12-26 05:06:40'), (7, 17, 3, 198.00, '2025-12-26 05:06:56'), (8, 2, 2, 191.00, '2025-12-26 05:07:21'), @@ -222,7 +605,9 @@ INSERT INTO `expense_concept_allocations` (`id`, `expense_id`, `concept_id`, `am (14, 9, 1, 48.00, '2025-12-26 05:12:04'), (15, 10, 1, 200.00, '2025-12-26 05:12:21'), (16, 11, 1, 11.00, '2025-12-26 05:12:41'), -(17, 15, 3, 250.00, '2025-12-29 21:55:59'); +(19, 18, 6, 663.00, '2026-02-13 23:06:20'), +(20, 19, 6, 700.00, '2026-02-13 23:07:04'), +(22, 20, 7, 600.00, '2026-02-13 23:13:08'); -- -------------------------------------------------------- @@ -246,13 +631,13 @@ CREATE TABLE `expense_concept_collections` ( CREATE TABLE `finance_collection_concepts` ( `id` int NOT NULL, - `name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL, - `description` text COLLATE utf8mb4_unicode_ci, + `name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `total_amount` decimal(10,2) DEFAULT NULL, `amount_per_house` decimal(10,2) DEFAULT NULL, `concept_date` date DEFAULT NULL, `due_date` date DEFAULT NULL, - `category` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `is_active` tinyint(1) DEFAULT '1', `created_by` int DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP @@ -267,7 +652,9 @@ INSERT INTO `finance_collection_concepts` (`id`, `name`, `description`, `total_a (2, 'Poda de Arboles', 'Recolección para poder los arboles', 1660.00, 20.00, '2024-07-31', '2024-08-04', 'Poda', 1, 1, '2025-12-26 04:11:34'), (3, 'Reparación de Candado', 'Candado de Porton, instalación y cambio de convinación', 620.00, 6.00, '2025-11-11', '2025-11-15', 'Porton', 1, 1, '2025-12-26 04:12:43'), (4, 'Indirectos', 'Recaudación para Gastos indirectos', NULL, 15.00, '2024-09-02', '2024-12-31', 'Protocolización', 1, 1, '2025-12-26 05:30:29'), -(5, 'Impugnación', 'Impugnación del comite anterior', 18000.00, 65.00, '2025-12-01', '2025-12-31', 'Protocolización', 1, 1, '2025-12-26 05:34:33'); +(5, 'Impugnación', 'Impugnación del comite anterior', 18000.00, 65.00, '2025-12-01', '2025-12-31', 'Protocolización', 1, 1, '2025-12-26 05:34:33'), +(6, 'Camara de vigilancia y memoria micro', 'Compra de Camara de vídeo vigilancia y su memoria para control de acceso de condominio', 1363.00, 17.00, '2025-04-26', '2025-05-13', 'Mejora de condominio', 1, 2, '2026-02-13 21:44:10'), +(7, 'Desmantelar caja protectora de herrería de macromedidor', 'La CEA solicita retirar caja de herrería protectora del macromedidor para sus cambio', 600.00, 10.00, '2025-11-10', '2025-11-29', 'Mantenimiento', 1, 2, '2026-02-13 22:58:06'); -- -------------------------------------------------------- @@ -281,7 +668,7 @@ CREATE TABLE `finance_collection_payments` ( `house_id` int NOT NULL, `amount` decimal(10,2) DEFAULT NULL, `payment_date` datetime DEFAULT NULL, - `notes` text COLLATE utf8mb4_unicode_ci, + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `created_by` int DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -411,81 +798,81 @@ INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amou (124, 3, 23, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:41'), (125, 3, 24, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:41'), (126, 3, 25, 6.00, '2025-11-11 00:00:00', NULL, 1, '2025-12-26 04:15:41'), -(127, 3, 26, 6.00, '2025-12-26 12:10:20', NULL, 1, '2025-12-26 04:15:41'), +(127, 3, 26, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:41'), (128, 3, 27, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:41'), -(129, 3, 28, 8.00, '2025-12-26 12:10:30', NULL, 1, '2025-12-26 04:15:41'), +(129, 3, 28, 8.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:41'), (130, 3, 29, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:41'), -(131, 3, 30, 6.00, '2025-12-26 12:10:38', NULL, 1, '2025-12-26 04:15:42'), -(132, 3, 31, 6.00, '2025-12-26 12:10:43', NULL, 1, '2025-12-26 04:15:42'), -(133, 3, 32, 6.00, '2025-12-26 12:10:47', NULL, 1, '2025-12-26 04:15:42'), +(131, 3, 30, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), +(132, 3, 31, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), +(133, 3, 32, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), (134, 3, 33, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:42'), (135, 3, 34, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:42'), (136, 3, 35, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:42'), -(137, 3, 36, 8.00, '2025-12-26 12:10:57', NULL, 1, '2025-12-26 04:15:42'), +(137, 3, 36, 8.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), (138, 3, 37, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:42'), -(139, 3, 38, 6.00, '2025-12-26 12:11:09', NULL, 1, '2025-12-26 04:15:42'), -(140, 3, 39, 6.00, '2025-12-26 12:11:13', NULL, 1, '2025-12-26 04:15:42'), -(141, 3, 40, 6.00, '2025-12-26 12:11:22', NULL, 1, '2025-12-26 04:15:42'), +(139, 3, 38, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), +(140, 3, 39, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), +(141, 3, 40, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:42'), (142, 3, 41, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:43'), -(143, 3, 42, 7.00, '2025-12-26 12:11:31', NULL, 1, '2025-12-26 04:15:43'), -(144, 3, 43, 6.00, '2025-12-26 12:11:38', NULL, 1, '2025-12-26 04:15:43'), +(143, 3, 42, 7.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), +(144, 3, 43, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), (145, 3, 44, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:43'), -(146, 3, 45, 6.00, '2025-12-26 12:11:45', NULL, 1, '2025-12-26 04:15:43'), -(147, 3, 46, 6.00, '2025-12-26 12:11:52', NULL, 1, '2025-12-26 04:15:43'), +(146, 3, 45, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), +(147, 3, 46, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), (148, 3, 47, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:43'), -(149, 3, 48, 6.00, '2025-12-26 12:12:05', NULL, 1, '2025-12-26 04:15:43'), +(149, 3, 48, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), (150, 3, 49, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:43'), -(151, 3, 50, 6.00, '2025-12-26 12:12:14', NULL, 1, '2025-12-26 04:15:43'), -(152, 3, 51, 6.00, '2025-12-26 12:12:19', NULL, 1, '2025-12-26 04:15:44'), +(151, 3, 50, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:43'), +(152, 3, 51, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), (153, 3, 52, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:44'), -(154, 3, 53, 6.00, '2025-12-26 12:12:25', NULL, 1, '2025-12-26 04:15:44'), -(155, 3, 54, 6.00, '2025-12-26 12:12:28', NULL, 1, '2025-12-26 04:15:44'), +(154, 3, 53, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), +(155, 3, 54, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), (156, 3, 55, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:44'), -(157, 3, 56, 6.00, '2025-12-26 12:12:43', NULL, 1, '2025-12-26 04:15:44'), -(158, 3, 57, 16.00, '2025-12-26 12:12:48', NULL, 1, '2025-12-26 04:15:44'), -(159, 3, 58, 6.00, '2025-12-26 12:12:55', NULL, 1, '2025-12-26 04:15:44'), -(160, 3, 59, 20.00, '2025-12-26 12:13:02', NULL, 1, '2025-12-26 04:15:44'), +(157, 3, 56, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), +(158, 3, 57, 16.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), +(159, 3, 58, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), +(160, 3, 59, 20.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:44'), (161, 3, 60, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:44'), (162, 3, 61, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:44'), -(163, 3, 62, 6.00, '2025-12-26 12:13:10', NULL, 1, '2025-12-26 04:15:45'), -(164, 3, 63, 6.00, '2025-12-26 12:13:17', NULL, 1, '2025-12-26 04:15:45'), -(165, 3, 64, 16.00, '2025-12-26 12:13:24', NULL, 1, '2025-12-26 04:15:45'), +(163, 3, 62, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), +(164, 3, 63, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), +(165, 3, 64, 16.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), (166, 3, 65, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:45'), (167, 3, 66, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:45'), (168, 3, 67, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:45'), (169, 3, 68, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:45'), -(170, 3, 69, 16.00, '2025-12-26 12:13:47', NULL, 1, '2025-12-26 04:15:45'), -(171, 3, 70, 6.00, '2025-12-26 12:14:02', NULL, 1, '2025-12-26 04:15:45'), +(170, 3, 69, 16.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), +(171, 3, 70, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), (172, 3, 71, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:45'), -(173, 3, 72, 6.00, '2025-12-26 12:14:10', NULL, 1, '2025-12-26 04:15:45'), -(174, 3, 73, 6.00, '2025-12-26 12:14:15', NULL, 1, '2025-12-26 04:15:46'), -(175, 3, 74, 16.00, '2025-12-26 12:14:21', NULL, 1, '2025-12-26 04:15:46'), -(176, 3, 75, 6.00, '2025-12-26 12:14:27', NULL, 1, '2025-12-26 04:15:46'), +(173, 3, 72, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:45'), +(174, 3, 73, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(175, 3, 74, 16.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(176, 3, 75, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), (177, 3, 76, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:46'), -(178, 3, 77, 6.00, '2025-12-26 12:14:36', NULL, 1, '2025-12-26 04:15:46'), -(179, 3, 78, 6.00, '2025-12-26 12:14:42', NULL, 1, '2025-12-26 04:15:46'), -(180, 3, 79, 6.00, '2025-12-26 12:14:48', NULL, 1, '2025-12-26 04:15:46'), -(181, 3, 80, 6.00, '2025-12-26 12:14:55', NULL, 1, '2025-12-26 04:15:46'), -(182, 3, 81, 0.00, '2025-12-26 00:00:00', NULL, 1, '2025-12-26 04:15:46'), +(178, 3, 77, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(179, 3, 78, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(180, 3, 79, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(181, 3, 80, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(182, 3, 81, 0.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), (183, 3, 82, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:46'), -(184, 3, 83, 6.00, '2025-12-26 12:15:15', NULL, 1, '2025-12-26 04:15:46'), -(185, 3, 84, 6.00, '2025-12-26 12:15:19', NULL, 1, '2025-12-26 04:15:47'), -(186, 3, 85, 6.00, '2025-12-26 12:15:23', NULL, 1, '2025-12-26 04:15:47'), -(187, 3, 86, 6.00, '2025-12-26 12:15:38', NULL, 1, '2025-12-26 04:15:47'), -(188, 3, 87, 6.00, '2025-12-26 12:15:42', NULL, 1, '2025-12-26 04:15:47'), -(189, 3, 88, 6.00, '2025-12-26 12:15:46', NULL, 1, '2025-12-26 04:15:47'), +(184, 3, 83, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:46'), +(185, 3, 84, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(186, 3, 85, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(187, 3, 86, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(188, 3, 87, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(189, 3, 88, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), (190, 3, 89, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:47'), -(191, 3, 90, 10.00, '2025-12-26 12:15:57', NULL, 1, '2025-12-26 04:15:47'), -(192, 3, 91, 6.00, '2025-12-26 12:16:02', NULL, 1, '2025-12-26 04:15:47'), -(193, 3, 92, 6.00, '2025-12-26 12:16:08', NULL, 1, '2025-12-26 04:15:47'), -(194, 3, 93, 6.00, '2025-12-26 12:16:13', NULL, 1, '2025-12-26 04:15:47'), +(191, 3, 90, 10.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(192, 3, 91, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(193, 3, 92, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), +(194, 3, 93, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:47'), (195, 3, 94, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:47'), (196, 3, 95, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:47'), -(197, 3, 96, 6.00, '2025-12-26 12:16:19', NULL, 1, '2025-12-26 04:15:48'), +(197, 3, 96, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:48'), (198, 3, 97, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:48'), -(199, 3, 98, 16.00, '2025-12-26 12:16:27', NULL, 1, '2025-12-26 04:15:48'), -(200, 3, 99, 6.00, '2025-12-26 12:16:39', NULL, 1, '2025-12-26 04:15:48'), -(201, 3, 100, 6.00, '2025-12-26 12:16:46', NULL, 1, '2025-12-26 04:15:48'), +(199, 3, 98, 16.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:48'), +(200, 3, 99, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:48'), +(201, 3, 100, 6.00, '2025-11-11 00:00:00', 'Pago actualizado', 1, '2025-12-26 04:15:48'), (202, 3, 101, 0.00, NULL, 'Pago Impugnación', 1, '2025-12-26 04:15:48'), (203, 2, 1, 20.00, '2024-07-31 00:00:00', 'Pago Arboles', 1, '2025-12-26 04:15:56'), (204, 2, 2, 0.00, '2024-07-31 00:00:00', NULL, 1, '2025-12-26 04:15:56'), @@ -694,7 +1081,7 @@ INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amou (509, 3, 5, 6.00, '2025-11-11 00:00:00', NULL, 1, '2025-12-26 06:01:39'), (510, 3, 6, 0.00, NULL, NULL, 1, '2025-12-26 06:01:39'), (511, 3, 7, 16.00, '2025-11-11 00:00:00', NULL, 1, '2025-12-26 06:01:39'), -(512, 5, 1, 65.00, '2025-12-27 00:00:00', 'Pago actualizado', 2, '2025-12-26 06:18:09'), +(512, 5, 1, 65.00, '2025-12-26 00:00:00', 'Pago actualizado', 2, '2025-12-26 06:18:09'), (513, 5, 2, 0.00, NULL, NULL, 1, '2025-12-26 06:18:09'), (514, 5, 3, 65.00, '2025-12-26 12:19:10', NULL, 1, '2025-12-26 06:18:09'), (515, 5, 4, 65.00, '2025-12-26 12:19:19', NULL, 1, '2025-12-26 06:18:09'), @@ -762,8 +1149,8 @@ INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amou (577, 5, 67, 0.00, NULL, NULL, 1, '2025-12-26 06:18:16'), (578, 5, 68, 0.00, NULL, NULL, 1, '2025-12-26 06:18:16'), (579, 5, 69, 0.00, NULL, NULL, 1, '2025-12-26 06:18:16'), -(580, 5, 70, 65.00, '2025-12-26 12:26:23', NULL, 1, '2025-12-26 06:18:16'), -(581, 5, 71, 0.00, NULL, NULL, 1, '2025-12-26 06:18:16'), +(580, 5, 70, 0.00, '2025-12-26 00:00:00', 'Pago actualizado', 1, '2025-12-26 06:18:16'), +(581, 5, 71, 65.00, '2026-02-10 22:28:11', 'Pago actualizado', 1, '2025-12-26 06:18:16'), (582, 5, 72, 65.00, '2025-12-26 12:26:35', NULL, 1, '2025-12-26 06:18:16'), (583, 5, 73, 0.00, NULL, NULL, 1, '2025-12-26 06:18:16'), (584, 5, 74, 65.00, '2025-12-26 12:26:44', NULL, 1, '2025-12-26 06:18:16'), @@ -793,7 +1180,200 @@ INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amou (608, 5, 98, 0.00, NULL, NULL, 1, '2025-12-26 06:18:19'), (609, 5, 99, 0.00, NULL, NULL, 1, '2025-12-26 06:18:19'), (610, 5, 100, 0.00, NULL, NULL, 1, '2025-12-26 06:18:19'), -(611, 5, 101, 0.00, NULL, NULL, 1, '2025-12-26 06:18:19'); +(611, 5, 101, 0.00, NULL, NULL, 1, '2025-12-26 06:18:19'), +(612, 6, 1, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(613, 6, 3, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(614, 6, 4, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(615, 6, 5, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(616, 6, 6, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(617, 6, 7, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(618, 6, 8, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(619, 6, 9, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(620, 6, 10, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(621, 6, 11, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(622, 6, 12, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(623, 6, 13, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(624, 6, 14, 20.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(625, 6, 15, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(626, 6, 16, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(627, 6, 17, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(628, 6, 18, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(629, 6, 19, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(630, 6, 20, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(631, 6, 22, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(632, 6, 23, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(633, 6, 25, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(634, 6, 26, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(635, 6, 27, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(636, 6, 28, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(637, 6, 29, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(638, 6, 30, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(639, 6, 31, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(640, 6, 32, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(641, 6, 34, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(642, 6, 35, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(643, 6, 36, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(644, 6, 37, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(645, 6, 38, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(646, 6, 39, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(647, 6, 40, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(648, 6, 41, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(649, 6, 42, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(650, 6, 43, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(651, 6, 44, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(652, 6, 45, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(653, 6, 46, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(654, 6, 47, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(655, 6, 48, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(656, 6, 49, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(657, 6, 50, 50.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(658, 6, 51, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(659, 6, 52, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(660, 6, 53, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(661, 6, 54, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(662, 6, 55, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(663, 6, 56, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(664, 6, 57, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(665, 6, 58, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(666, 6, 59, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(667, 6, 60, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(668, 6, 61, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(669, 6, 62, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(670, 6, 63, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(671, 6, 64, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(672, 6, 65, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(673, 6, 66, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(674, 6, 67, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(675, 6, 68, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(676, 6, 69, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(677, 6, 70, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(678, 6, 71, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(679, 6, 72, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(680, 6, 73, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(681, 6, 74, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(682, 6, 75, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(683, 6, 76, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(684, 6, 77, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(685, 6, 78, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(686, 6, 79, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(687, 6, 80, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(688, 6, 81, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(689, 6, 82, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(690, 6, 83, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(691, 6, 84, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(692, 6, 85, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(693, 6, 86, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(694, 6, 87, 20.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(695, 6, 88, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(696, 6, 89, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(697, 6, 90, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(698, 6, 91, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(699, 6, 92, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(700, 6, 93, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(701, 6, 94, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(702, 6, 95, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(703, 6, 96, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(704, 6, 97, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(705, 6, 98, 0.00, '2026-02-14 03:44:48', 'Pago inicializado', 2, '2026-02-13 21:44:48'), +(706, 6, 99, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(707, 6, 100, 17.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 21:44:48'), +(708, 7, 1, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(709, 7, 3, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(710, 7, 4, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(711, 7, 5, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(712, 7, 6, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(713, 7, 7, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(714, 7, 8, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(715, 7, 9, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(716, 7, 10, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(717, 7, 11, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(718, 7, 12, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(719, 7, 13, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(720, 7, 14, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(721, 7, 15, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(722, 7, 16, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(723, 7, 17, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(724, 7, 18, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(725, 7, 19, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(726, 7, 20, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(727, 7, 22, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(728, 7, 23, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(729, 7, 25, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(730, 7, 26, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(731, 7, 27, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(732, 7, 28, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(733, 7, 29, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(734, 7, 30, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(735, 7, 31, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(736, 7, 32, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(737, 7, 34, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(738, 7, 35, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(739, 7, 36, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(740, 7, 37, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(741, 7, 38, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(742, 7, 39, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(743, 7, 40, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(744, 7, 41, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'); +INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amount`, `payment_date`, `notes`, `created_by`, `created_at`) VALUES +(745, 7, 42, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(746, 7, 43, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(747, 7, 44, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(748, 7, 45, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(749, 7, 46, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(750, 7, 47, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(751, 7, 48, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(752, 7, 49, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(753, 7, 50, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(754, 7, 51, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(755, 7, 52, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(756, 7, 53, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(757, 7, 54, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(758, 7, 55, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(759, 7, 56, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(760, 7, 57, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(761, 7, 58, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(762, 7, 59, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(763, 7, 60, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(764, 7, 61, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(765, 7, 62, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(766, 7, 63, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(767, 7, 64, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(768, 7, 65, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(769, 7, 66, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(770, 7, 67, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(771, 7, 68, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(772, 7, 69, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(773, 7, 70, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(774, 7, 71, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(775, 7, 72, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(776, 7, 73, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(777, 7, 74, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(778, 7, 75, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(779, 7, 76, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(780, 7, 77, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(781, 7, 78, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(782, 7, 79, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(783, 7, 80, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(784, 7, 81, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(785, 7, 82, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(786, 7, 83, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(787, 7, 84, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(788, 7, 85, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(789, 7, 86, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(790, 7, 87, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(791, 7, 88, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(792, 7, 89, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(793, 7, 90, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(794, 7, 91, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(795, 7, 92, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(796, 7, 93, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(797, 7, 94, 5.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(798, 7, 95, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(799, 7, 96, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(800, 7, 97, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(801, 7, 98, 0.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(802, 7, 99, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'), +(803, 7, 100, 10.00, '2026-02-14 00:00:00', 'Pago actualizado', 2, '2026-02-13 22:58:24'); -- -------------------------------------------------------- @@ -803,12 +1383,12 @@ INSERT INTO `finance_collection_payments` (`id`, `concept_id`, `house_id`, `amou CREATE TABLE `houses` ( `id` int NOT NULL, - `number` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` enum('activa','deshabitada') COLLATE utf8mb4_unicode_ci DEFAULT 'activa', + `number` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `status` enum('activa','deshabitada') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'activa', `consumption_only` tinyint(1) DEFAULT '0', - `owner_name` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `owner_email` varchar(180) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `owner_phone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL + `owner_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `owner_email` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `owner_phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- @@ -817,7 +1397,7 @@ CREATE TABLE `houses` ( INSERT INTO `houses` (`id`, `number`, `status`, `consumption_only`, `owner_name`, `owner_email`, `owner_phone`) VALUES (1, '001', 'activa', 0, 'Nicolas Vazquez Ramirez', '', ''), -(2, '002', 'activa', 0, 'Jose Juan Lira Mandujano', '', ''), +(2, '002', 'deshabitada', 0, 'Jose Juan Lira Mandujano', '', ''), (3, '003', 'activa', 0, 'Jose Cruz Enriquez Rodriguez', '', ''), (4, '004', 'activa', 0, 'Cristian Alejandro Rodriguez Hernandez', '', ''), (5, '005', 'activa', 0, 'Yocelin Damaris Estrada Mata', '', ''), @@ -826,7 +1406,7 @@ INSERT INTO `houses` (`id`, `number`, `status`, `consumption_only`, `owner_name` (8, '008', 'activa', 0, 'Maria Beatriz Garcia Galvan', '', ''), (9, '009', 'activa', 0, 'Beatriz Palacios Zarazua', '', ''), (10, '010', 'activa', 0, 'Jesus Cristian Ferrusca Hernandez', '', ''), -(11, '011', 'activa', 0, 'Miguel Angel Ramirez Pons', 'propietario44@email.com', '5542628575'), +(11, '011', 'activa', 0, 'Miguel Angel Ramirez Pons', 'miguel.a.pons@protonmail.com', '5542628575'), (12, '012', 'activa', 0, 'Natalia Rojas Cruz', '', ''), (13, '013', 'activa', 0, 'Jessicka Becerra Villanueva', '', ''), (14, '014', 'activa', 0, 'Ruth Rangel Corpus', '', ''), @@ -839,7 +1419,7 @@ INSERT INTO `houses` (`id`, `number`, `status`, `consumption_only`, `owner_name` (21, '021', 'deshabitada', 0, 'NULL', '', ''), (22, '022', 'activa', 0, 'Mariela Segovia Sandiego', '', ''), (23, '023', 'activa', 0, 'Irma Sosa Acosta', '', ''), -(24, '024', 'activa', 0, 'Lic Robles', '', ''), +(24, '024', 'deshabitada', 0, 'Lic Robles', '', ''), (25, '025', 'activa', 0, 'Jonathan Israel Suñiga Guerrero', '', ''), (26, '026', 'activa', 0, 'Donaciano Garcia Vizueth', '', ''), (27, '027', 'activa', 0, 'hector Cervantes Martinez', '', ''), @@ -848,7 +1428,7 @@ INSERT INTO `houses` (`id`, `number`, `status`, `consumption_only`, `owner_name` (30, '030', 'activa', 0, 'Francisco Alejandro', '', ''), (31, '031', 'activa', 0, 'Guadalupe Gonzalez', '', ''), (32, '032', 'activa', 0, 'Norma Georgina de Santiago Hernandez', '', ''), -(33, '033', 'activa', 0, 'NULL', '', ''), +(33, '033', 'deshabitada', 0, 'NULL', '', ''), (34, '034', 'activa', 0, 'Santiago David Godinez Leon', '', ''), (35, '035', 'activa', 0, 'Carlos Morales Moya', '', ''), (36, '036', 'activa', 0, 'Benita Mancel Leonides', '', ''), @@ -927,9 +1507,10 @@ INSERT INTO `houses` (`id`, `number`, `status`, `consumption_only`, `owner_name` CREATE TABLE `monthly_bills` ( `id` int NOT NULL, `year` int NOT NULL, - `month` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, + `month` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `total_amount` decimal(10,2) NOT NULL, `amount_per_house` decimal(10,2) NOT NULL, + `real_amount` decimal(10,2) DEFAULT NULL, `due_date` date DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; @@ -938,26 +1519,27 @@ CREATE TABLE `monthly_bills` ( -- Volcado de datos para la tabla `monthly_bills` -- -INSERT INTO `monthly_bills` (`id`, `year`, `month`, `total_amount`, `amount_per_house`, `due_date`, `created_at`) VALUES -(1, 2025, 'Diciembre', 42700.00, 712.00, '2026-01-01', '2025-12-26 02:54:28'), -(2, 2024, 'Junio', 17582.26, 307.00, '2024-06-11', '2025-12-26 05:16:10'), -(3, 2024, 'Julio', 17582.26, 307.00, '2024-07-11', '2025-12-26 05:16:28'), -(4, 2024, 'Agosto', 17582.26, 307.00, '2024-08-11', '2025-12-26 05:16:48'), -(5, 2024, 'Septiembre', 15450.56, 286.00, '2024-09-11', '2025-12-26 05:17:05'), -(6, 2024, 'Octubre', 15450.56, 288.00, '2024-10-11', '2025-12-26 05:17:20'), -(7, 2024, 'Noviembre', 13572.69, 263.00, '2024-11-11', '2025-12-26 05:18:18'), -(8, 2024, 'Diciembre', 13572.69, 290.00, '2024-12-11', '2025-12-26 05:21:40'), -(9, 2025, 'Enero', 15489.00, 290.00, '2025-01-11', '2025-12-26 05:22:07'), -(10, 2025, 'Febrero', 13752.58, 265.00, '2025-02-11', '2025-12-26 05:22:19'), -(11, 2025, 'Marzo', 13752.58, 266.00, '2025-03-11', '2025-12-26 05:22:34'), -(12, 2025, 'Abril', 13752.58, 270.00, '2025-04-11', '2025-12-26 05:22:46'), -(13, 2025, 'Mayo', 16043.10, 293.00, '2025-05-11', '2025-12-26 05:23:02'), -(14, 2025, 'Junio', 13912.77, 270.00, '2025-06-11', '2025-12-26 05:23:16'), -(15, 2025, 'Julio', 13912.77, 268.00, NULL, '2025-12-26 05:23:40'), -(16, 2025, 'Agosto', 12000.00, 250.00, NULL, '2025-12-26 05:23:51'), -(17, 2025, 'Septiembre', 14097.60, 276.00, NULL, '2025-12-26 05:24:06'), -(18, 2025, 'Octubre', 12000.40, 251.00, NULL, '2025-12-26 05:24:27'), -(19, 2025, 'Noviembre', 12163.50, 252.00, NULL, '2025-12-26 05:24:43'); +INSERT INTO `monthly_bills` (`id`, `year`, `month`, `total_amount`, `amount_per_house`, `real_amount`, `due_date`, `created_at`) VALUES +(1, 2025, 'Diciembre', 42700.00, 712.00, 97021.00, '2025-12-11', '2025-12-26 02:54:28'), +(2, 2024, 'Junio', 17582.26, 307.00, 61281.00, '2024-06-11', '2025-12-26 05:16:10'), +(3, 2024, 'Julio', 17582.26, 307.00, 61262.00, '2024-07-11', '2025-12-26 05:16:28'), +(4, 2024, 'Agosto', 17582.26, 307.00, 61253.00, '2024-08-11', '2025-12-26 05:16:48'), +(5, 2024, 'Septiembre', 15450.56, 286.00, 59122.00, '2024-09-11', '2025-12-26 05:17:05'), +(6, 2024, 'Octubre', 15450.56, 288.00, NULL, '2024-10-11', '2025-12-26 05:17:20'), +(7, 2024, 'Noviembre', 13572.69, 263.00, 56581.00, '2024-11-11', '2025-12-26 05:18:18'), +(8, 2024, 'Diciembre', 13572.69, 290.00, 58644.00, '2024-12-11', '2025-12-26 05:21:40'), +(9, 2025, 'Enero', 15489.00, 290.00, 58629.00, '2025-01-11', '2025-12-26 05:22:07'), +(10, 2025, 'Febrero', 13752.58, 265.00, 56688.00, '2025-02-11', '2025-12-26 05:22:19'), +(11, 2025, 'Marzo', 13752.58, 266.00, 56660.00, '2025-03-11', '2025-12-26 05:22:34'), +(12, 2025, 'Abril', 13752.58, 270.00, 56646.00, '2025-04-11', '2025-12-26 05:22:46'), +(13, 2025, 'Mayo', 16043.10, 293.00, 58910.00, '2025-05-11', '2025-12-26 05:23:02'), +(14, 2025, 'Junio', 13912.77, 270.00, 56736.00, '2025-06-11', '2025-12-26 05:23:16'), +(15, 2025, 'Julio', 13912.77, 268.00, NULL, '2025-07-11', '2025-12-26 05:23:40'), +(16, 2025, 'Agosto', 12000.00, 250.00, 54810.00, '2025-08-11', '2025-12-26 05:23:51'), +(17, 2025, 'Septiembre', 14097.60, 276.00, 56879.00, '2025-09-11', '2025-12-26 05:24:06'), +(18, 2025, 'Octubre', 12000.40, 251.00, 54759.00, '2025-10-11', '2025-12-26 05:24:27'), +(19, 2025, 'Noviembre', 12163.50, 252.00, 56737.00, '2025-11-11', '2025-12-26 05:24:43'), +(20, 2026, 'Enero', 36109.63, 452.00, 84308.00, '2026-01-31', '2026-01-14 17:19:30'); -- -------------------------------------------------------- @@ -969,11 +1551,11 @@ CREATE TABLE `payments` ( `id` int NOT NULL, `house_id` int NOT NULL, `year` int NOT NULL, - `month` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, + `month` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, `amount` decimal(10,2) DEFAULT '0.00', `payment_date` datetime DEFAULT NULL, - `payment_method` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `notes` text COLLATE utf8mb4_unicode_ci, + `payment_method` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `notes` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci, `created_by` int DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP @@ -984,10 +1566,12 @@ CREATE TABLE `payments` ( -- INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_date`, `payment_method`, `notes`, `created_by`, `created_at`, `updated_at`) VALUES +(1, 11, 2025, 'Diciembre', 712.00, '2025-12-26 04:59:03', '', '', 1, '2025-12-25 02:54:17', '2025-12-26 04:59:03'), (2, 20, 2025, 'Diciembre', 712.00, '2025-12-26 04:59:02', '', '', 1, '2025-12-25 02:58:13', '2025-12-26 04:59:02'), (3, 22, 2025, 'Diciembre', 712.00, '2025-12-26 04:59:02', '', '', 1, '2025-12-25 03:00:10', '2025-12-26 04:59:02'), +(4, 2, 2025, 'Diciembre', 0.00, '2025-12-26 02:15:48', NULL, NULL, 1, '2025-12-26 02:15:48', NULL), (7, 44, 2025, 'Diciembre', 712.00, '2025-12-26 04:59:03', '', '', 1, '2025-12-26 03:04:02', '2025-12-26 04:59:03'), -(8, 1, 2025, 'Enero', 712.00, '2025-12-27 20:01:56', 'Efectivo', 'Prueba API', 1, '2025-12-26 04:56:38', '2025-12-27 20:01:56'), +(8, 1, 2025, 'Enero', 290.00, '2025-12-26 04:56:38', '', '', 1, '2025-12-26 04:56:38', NULL), (9, 2, 2025, 'Enero', 290.00, '2025-12-26 04:56:38', '', '', 1, '2025-12-26 04:56:38', NULL), (10, 3, 2025, 'Enero', 290.00, '2025-12-26 04:56:38', '', '', 1, '2025-12-26 04:56:38', NULL), (11, 4, 2025, 'Enero', 290.00, '2025-12-26 04:56:38', '', '', 1, '2025-12-26 04:56:38', NULL), @@ -1085,7 +1669,6 @@ INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_da (103, 14, 2025, 'Febrero', 265.00, '2025-12-26 04:56:45', '', '', 1, '2025-12-26 04:56:45', NULL), (104, 15, 2025, 'Febrero', 265.00, '2025-12-26 04:56:45', '', '', 1, '2025-12-26 04:56:45', NULL), (105, 16, 2025, 'Febrero', 265.00, '2025-12-26 04:56:46', '', '', 1, '2025-12-26 04:56:46', NULL), -(106, 17, 2025, 'Febrero', 200.00, '2025-12-26 04:56:46', '', '', 1, '2025-12-26 04:56:46', NULL), (107, 18, 2025, 'Febrero', 265.00, '2025-12-26 04:56:46', '', '', 1, '2025-12-26 04:56:46', NULL), (108, 20, 2025, 'Febrero', 265.00, '2025-12-26 04:56:46', '', '', 1, '2025-12-26 04:56:46', NULL), (109, 22, 2025, 'Febrero', 265.00, '2025-12-26 04:56:46', '', '', 1, '2025-12-26 04:56:46', NULL), @@ -1505,9 +2088,9 @@ INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_da (523, 39, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), (524, 40, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), (525, 42, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), -(526, 43, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), -(527, 44, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL); +(526, 43, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL); INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_date`, `payment_method`, `notes`, `created_by`, `created_at`, `updated_at`) VALUES +(527, 44, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), (528, 45, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), (529, 46, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), (530, 47, 2024, 'Agosto', 307.00, '2025-12-26 04:57:26', '', '', 1, '2025-12-26 04:57:26', NULL), @@ -1956,7 +2539,6 @@ INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_da (973, 99, 2025, 'Mayo', 293.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), (974, 44, 2025, 'Enero', 190.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), (975, 44, 2025, 'Febrero', 165.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), -(976, 44, 2025, 'Marzo', 166.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), (977, 44, 2025, 'Abril', 170.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), (978, 44, 2025, 'Mayo', 193.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), (979, 78, 2025, 'Abril', 270.00, '2025-12-26 04:58:12', '', '', 1, '2025-12-26 04:58:12', NULL), @@ -2344,6 +2926,7 @@ INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_da (1360, 89, 2025, 'Octubre', 251.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), (1361, 96, 2025, 'Octubre', 251.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), (1362, 99, 2025, 'Octubre', 251.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), +(1363, 11, 2025, 'Noviembre', 252.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), (1364, 4, 2025, 'Noviembre', 252.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), (1365, 13, 2025, 'Noviembre', 252.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), (1366, 14, 2025, 'Noviembre', 252.00, '2025-12-26 04:58:52', '', '', 1, '2025-12-26 04:58:52', NULL), @@ -2497,8 +3080,100 @@ INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_da (1514, 71, 2025, 'Diciembre', 712.00, '2025-12-26 04:59:07', '', '', 1, '2025-12-26 04:59:07', NULL), (1515, 77, 2025, 'Diciembre', 712.00, '2025-12-26 15:07:24', NULL, NULL, 1, '2025-12-26 15:07:24', NULL), (1516, 78, 2025, 'Diciembre', 712.00, '2025-12-26 15:07:41', NULL, NULL, 1, '2025-12-26 15:07:41', NULL), -(1522, 11, 2025, 'Noviembre', 252.00, '2025-12-29 23:00:38', NULL, NULL, 2, '2025-12-29 23:00:38', NULL), -(1523, 11, 2025, 'Diciembre', 712.00, '2025-12-29 23:02:22', NULL, NULL, 2, '2025-12-29 23:02:22', NULL); +(1517, 4, 2025, 'Diciembre', 712.00, '2025-12-29 18:40:01', NULL, NULL, 2, '2025-12-29 18:40:01', NULL), +(1518, 9, 2025, 'Diciembre', 712.00, '2025-12-29 18:40:38', NULL, NULL, 2, '2025-12-29 18:40:38', NULL), +(1519, 90, 2025, 'Diciembre', 720.00, '2025-12-29 18:41:02', NULL, NULL, 2, '2025-12-29 18:41:02', NULL), +(1520, 29, 2025, 'Diciembre', 712.00, '2025-12-29 18:41:23', NULL, NULL, 2, '2025-12-29 18:41:23', NULL), +(1521, 17, 2025, 'Febrero', 265.00, '2025-12-29 18:45:12', NULL, NULL, 2, '2025-12-29 18:45:12', NULL), +(1522, 44, 2025, 'Marzo', 166.00, '2025-12-29 18:45:32', NULL, NULL, 2, '2025-12-29 18:45:32', NULL), +(1523, 1, 2025, 'Diciembre', 612.00, '2026-01-05 13:42:45', NULL, NULL, 2, '2026-01-05 13:42:45', NULL), +(1524, 6, 2025, 'Diciembre', 712.00, '2026-01-05 13:42:45', NULL, NULL, 2, '2026-01-05 13:42:45', NULL), +(1525, 39, 2025, 'Diciembre', 612.00, '2026-01-05 13:43:56', NULL, NULL, 2, '2026-01-05 13:43:56', NULL), +(1526, 81, 2025, 'Diciembre', 712.00, '2026-01-05 13:44:36', NULL, NULL, 2, '2026-01-05 13:44:36', NULL), +(1527, 92, 2025, 'Diciembre', 712.00, '2026-01-05 13:45:01', NULL, NULL, 2, '2026-01-05 13:45:01', NULL), +(1528, 100, 2025, 'Diciembre', 712.00, '2026-01-05 13:45:37', NULL, NULL, 2, '2026-01-05 13:45:37', NULL), +(1529, 83, 2025, 'Diciembre', 612.00, '2026-01-05 13:45:37', NULL, NULL, 2, '2026-01-05 13:45:37', NULL), +(1530, 43, 2025, 'Diciembre', 712.00, '2026-01-05 13:49:12', NULL, NULL, 2, '2026-01-05 13:49:12', NULL), +(1531, 43, 2025, 'Noviembre', 252.00, '2026-01-05 13:49:13', NULL, NULL, 2, '2026-01-05 13:49:13', NULL), +(1532, 43, 2025, 'Octubre', 251.00, '2026-01-05 13:49:13', NULL, NULL, 2, '2026-01-05 13:49:13', NULL), +(1533, 43, 2025, 'Septiembre', 276.00, '2026-01-05 13:49:13', NULL, NULL, 2, '2026-01-05 13:49:13', NULL), +(1534, 43, 2025, 'Agosto', 250.00, '2026-01-05 13:49:13', NULL, NULL, 2, '2026-01-05 13:49:13', NULL), +(1535, 43, 2025, 'Julio', 268.00, '2026-01-05 13:49:14', NULL, NULL, 2, '2026-01-05 13:49:14', NULL), +(1536, 15, 2025, 'Diciembre', 300.00, '2026-01-14 12:34:53', NULL, NULL, 2, '2026-01-14 12:34:53', NULL), +(1538, 53, 2025, 'Diciembre', 700.00, '2026-01-23 12:39:01', NULL, NULL, 2, '2026-01-23 12:39:01', NULL), +(1539, 42, 2025, 'Diciembre', 712.00, '2026-01-23 12:39:01', NULL, NULL, 2, '2026-01-23 12:39:01', NULL), +(1540, 55, 2025, 'Diciembre', 712.00, '2026-01-23 12:39:02', NULL, NULL, 2, '2026-01-23 12:39:02', NULL), +(1541, 91, 2025, 'Diciembre', 712.00, '2026-01-23 12:40:55', NULL, NULL, 2, '2026-01-23 12:40:55', NULL), +(1542, 28, 2025, 'Diciembre', 712.00, '2026-01-23 12:40:56', NULL, NULL, 2, '2026-01-23 12:40:56', NULL), +(1563, 17, 2026, 'Enero', 452.00, '2026-01-26 12:27:35', NULL, NULL, 2, '2026-01-26 12:27:35', NULL), +(1564, 20, 2026, 'Enero', 452.00, '2026-01-26 12:27:35', NULL, NULL, 2, '2026-01-26 12:27:35', NULL); +INSERT INTO `payments` (`id`, `house_id`, `year`, `month`, `amount`, `payment_date`, `payment_method`, `notes`, `created_by`, `created_at`, `updated_at`) VALUES +(1565, 22, 2026, 'Enero', 452.00, '2026-01-26 12:27:36', NULL, NULL, 2, '2026-01-26 12:27:36', NULL), +(1566, 27, 2026, 'Enero', 452.00, '2026-01-26 12:27:36', NULL, NULL, 2, '2026-01-26 12:27:36', NULL), +(1567, 30, 2026, 'Enero', 452.00, '2026-01-26 12:27:37', NULL, NULL, 2, '2026-01-26 12:27:37', NULL), +(1568, 31, 2026, 'Enero', 452.00, '2026-01-26 12:27:37', NULL, NULL, 2, '2026-01-26 12:27:37', NULL), +(1569, 37, 2026, 'Enero', 452.00, '2026-01-26 12:27:37', NULL, NULL, 2, '2026-01-26 12:27:37', NULL), +(1570, 38, 2026, 'Enero', 452.00, '2026-01-26 12:27:38', NULL, NULL, 2, '2026-01-26 12:27:38', NULL), +(1571, 42, 2026, 'Enero', 452.00, '2026-01-26 12:27:38', NULL, NULL, 2, '2026-01-26 12:27:38', NULL), +(1572, 46, 2026, 'Enero', 452.00, '2026-01-26 12:27:38', NULL, NULL, 2, '2026-01-26 12:27:38', NULL), +(1573, 50, 2026, 'Enero', 452.00, '2026-01-26 12:27:39', NULL, NULL, 2, '2026-01-26 12:27:39', NULL), +(1574, 55, 2026, 'Enero', 452.00, '2026-01-26 12:27:39', NULL, NULL, 2, '2026-01-26 12:27:39', NULL), +(1575, 56, 2026, 'Enero', 452.00, '2026-01-26 12:27:39', NULL, NULL, 2, '2026-01-26 12:27:39', NULL), +(1576, 62, 2026, 'Enero', 452.00, '2026-01-26 12:27:40', NULL, NULL, 2, '2026-01-26 12:27:40', NULL), +(1577, 63, 2026, 'Enero', 452.00, '2026-01-26 12:27:40', NULL, NULL, 2, '2026-01-26 12:27:40', NULL), +(1578, 64, 2026, 'Enero', 452.00, '2026-01-26 12:27:40', NULL, NULL, 2, '2026-01-26 12:27:40', NULL), +(1579, 72, 2026, 'Enero', 452.00, '2026-01-26 12:27:41', NULL, NULL, 2, '2026-01-26 12:27:41', NULL), +(1580, 74, 2026, 'Enero', 452.00, '2026-01-26 12:27:41', NULL, NULL, 2, '2026-01-26 12:27:41', NULL), +(1581, 87, 2026, 'Enero', 452.00, '2026-01-26 12:27:42', NULL, NULL, 2, '2026-01-26 12:27:42', NULL), +(1582, 90, 2026, 'Enero', 460.00, '2026-01-26 12:27:42', NULL, NULL, 2, '2026-01-26 12:27:42', NULL), +(1583, 4, 2026, 'Enero', 452.00, '2026-01-26 12:28:50', NULL, NULL, 2, '2026-01-26 12:28:50', NULL), +(1584, 8, 2026, 'Enero', 460.00, '2026-01-26 12:28:50', NULL, NULL, 2, '2026-01-26 12:28:50', NULL), +(1585, 10, 2026, 'Enero', 452.00, '2026-01-26 12:28:50', NULL, NULL, 2, '2026-01-26 12:28:50', NULL), +(1586, 89, 2026, 'Enero', 452.00, '2026-01-26 12:28:50', NULL, NULL, 2, '2026-01-26 12:28:50', NULL), +(1587, 80, 2026, 'Enero', 452.00, '2026-01-26 12:29:28', NULL, NULL, 2, '2026-01-26 12:29:28', NULL), +(1588, 77, 2026, 'Enero', 452.00, '2026-01-26 12:29:28', NULL, NULL, 2, '2026-01-26 12:29:28', NULL), +(1589, 78, 2026, 'Enero', 452.00, '2026-01-26 12:29:29', NULL, NULL, 2, '2026-01-26 12:29:29', NULL), +(1590, 58, 2026, 'Enero', 452.00, '2026-01-26 12:29:29', NULL, NULL, 2, '2026-01-26 12:29:29', NULL), +(1591, 51, 2026, 'Enero', 452.00, '2026-01-26 12:30:24', NULL, NULL, 2, '2026-01-26 12:30:24', NULL), +(1592, 47, 2026, 'Enero', 452.00, '2026-01-26 12:30:24', NULL, NULL, 2, '2026-01-26 12:30:24', NULL), +(1593, 40, 2026, 'Enero', 452.00, '2026-01-26 12:30:24', NULL, NULL, 2, '2026-01-26 12:30:24', NULL), +(1594, 36, 2026, 'Enero', 452.00, '2026-01-26 12:30:24', NULL, NULL, 2, '2026-01-26 12:30:24', NULL), +(1595, 32, 2026, 'Enero', 452.00, '2026-01-26 12:30:25', NULL, NULL, 2, '2026-01-26 12:30:25', NULL), +(1596, 25, 2026, 'Enero', 452.00, '2026-01-26 12:30:25', NULL, NULL, 2, '2026-01-26 12:30:25', NULL), +(1597, 16, 2026, 'Enero', 552.00, '2026-01-26 12:31:28', NULL, NULL, 2, '2026-01-26 12:31:28', NULL), +(1598, 99, 2026, 'Enero', 452.00, '2026-01-26 12:32:17', NULL, NULL, 2, '2026-01-26 12:32:17', NULL), +(1599, 71, 2026, 'Enero', 452.00, '2026-01-26 12:32:52', NULL, NULL, 2, '2026-01-26 12:32:52', NULL), +(1600, 11, 2026, 'Enero', 452.00, '2026-01-26 12:32:53', NULL, NULL, 2, '2026-01-26 12:32:53', NULL), +(1601, 26, 2026, 'Enero', 452.00, '2026-01-30 21:06:31', NULL, NULL, 2, '2026-01-30 21:06:31', NULL), +(1602, 79, 2026, 'Enero', 452.00, '2026-01-30 21:06:32', NULL, NULL, 2, '2026-01-30 21:06:32', NULL), +(1603, 57, 2026, 'Enero', 452.00, '2026-01-30 21:06:32', NULL, NULL, 2, '2026-01-30 21:06:32', NULL), +(1604, 3, 2026, 'Enero', 452.00, '2026-01-30 21:06:32', NULL, NULL, 2, '2026-01-30 21:06:32', NULL), +(1605, 15, 2026, 'Enero', 300.00, '2026-01-30 21:06:32', NULL, NULL, 2, '2026-01-30 21:06:32', NULL), +(1606, 68, 2025, 'Diciembre', 400.00, '2026-01-30 21:08:03', NULL, NULL, 2, '2026-01-30 21:08:03', NULL), +(1607, 44, 2026, 'Enero', 452.00, '2026-01-30 21:11:08', NULL, NULL, 2, '2026-01-30 21:11:08', NULL), +(1608, 86, 2025, 'Noviembre', 252.00, '2026-02-03 20:46:35', NULL, NULL, 2, '2026-02-03 20:46:35', NULL), +(1609, 86, 2025, 'Diciembre', 248.00, '2026-02-03 20:46:35', NULL, NULL, 2, '2026-02-03 20:46:35', NULL), +(1610, 91, 2026, 'Enero', 450.00, '2026-02-03 20:49:18', NULL, NULL, 2, '2026-02-03 20:49:18', NULL), +(1611, 73, 2026, 'Enero', 452.00, '2026-02-03 20:49:18', NULL, NULL, 2, '2026-02-03 20:49:18', NULL), +(1612, 76, 2026, 'Enero', 452.00, '2026-02-03 20:49:18', NULL, NULL, 2, '2026-02-03 20:49:18', NULL), +(1613, 84, 2026, 'Enero', 452.00, '2026-02-03 20:49:18', NULL, NULL, 2, '2026-02-03 20:49:18', NULL), +(1614, 45, 2026, 'Enero', 452.00, '2026-02-03 20:49:19', NULL, NULL, 2, '2026-02-03 20:49:19', NULL), +(1615, 14, 2026, 'Enero', 452.00, '2026-02-03 20:49:19', NULL, NULL, 2, '2026-02-03 20:49:19', NULL), +(1616, 39, 2026, 'Enero', 452.00, '2026-02-04 13:23:28', NULL, NULL, 2, '2026-02-04 13:23:28', NULL), +(1617, 81, 2026, 'Enero', 452.00, '2026-02-04 13:24:09', NULL, NULL, 2, '2026-02-04 13:24:09', NULL), +(1618, 100, 2026, 'Enero', 452.00, '2026-02-04 20:35:06', NULL, NULL, 2, '2026-02-04 20:35:06', NULL), +(1619, 93, 2026, 'Enero', 452.00, '2026-02-04 20:35:06', NULL, NULL, 2, '2026-02-04 20:35:06', NULL), +(1620, 29, 2026, 'Enero', 452.00, '2026-02-04 20:35:07', NULL, NULL, 2, '2026-02-04 20:35:07', NULL), +(1621, 43, 2026, 'Enero', 452.00, '2026-02-04 20:35:07', NULL, NULL, 2, '2026-02-04 20:35:07', NULL), +(1622, 1, 2026, 'Enero', 452.00, '2026-02-11 21:44:01', NULL, NULL, 2, '2026-02-11 21:44:01', NULL), +(1623, 53, 2026, 'Enero', 400.00, '2026-02-11 21:44:01', NULL, NULL, 2, '2026-02-11 21:44:01', NULL), +(1624, 70, 2026, 'Enero', 452.00, '2026-02-11 21:44:01', NULL, NULL, 2, '2026-02-11 21:44:01', NULL), +(1625, 48, 2026, 'Enero', 452.00, '2026-02-11 21:44:01', NULL, NULL, 2, '2026-02-11 21:44:01', NULL), +(1626, 92, 2026, 'Enero', 452.00, '2026-02-11 21:44:01', NULL, NULL, 2, '2026-02-11 21:44:01', NULL), +(1627, 18, 2026, 'Enero', 452.00, '2026-02-11 21:44:02', NULL, NULL, 2, '2026-02-11 21:44:02', NULL), +(1628, 49, 2026, 'Enero', 452.00, '2026-02-11 21:44:02', NULL, NULL, 2, '2026-02-11 21:44:02', NULL), +(1629, 7, 2026, 'Enero', 288.00, '2026-02-11 21:44:02', NULL, NULL, 2, '2026-02-11 21:44:02', NULL), +(1630, 7, 2025, 'Diciembre', 712.00, '2026-02-11 21:45:00', NULL, NULL, 2, '2026-02-11 21:45:00', NULL); -- -------------------------------------------------------- @@ -2532,51 +3207,6 @@ CREATE TABLE `rate_limit_logs` ( `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --- --- Volcado de datos para la tabla `rate_limit_logs` --- - -INSERT INTO `rate_limit_logs` (`id`, `identifier`, `request_time`, `request_uri`, `request_method`, `created_at`) VALUES -(1, 'ip_10.10.4.3', '2025-12-29 20:20:15', '/api/v1/health', 'GET', '2025-12-29 20:20:15'), -(2, 'ip_10.10.4.3', '2025-12-29 20:20:20', '/api/v1/auth/login', 'POST', '2025-12-29 20:20:20'), -(3, 'ip_10.10.4.3', '2025-12-29 20:21:11', '/api/v1/auth/login', 'POST', '2025-12-29 20:21:11'), -(4, 'ip_10.10.4.3', '2025-12-29 20:21:56', '/api/v1/auth/login', 'POST', '2025-12-29 20:21:56'), -(5, 'ip_10.10.4.3', '2025-12-29 20:22:23', '/api/v1/auth/login', 'POST', '2025-12-29 20:22:23'), -(6, 'ip_10.10.4.3', '2025-12-29 20:22:35', '/api/v1/auth/login', 'POST', '2025-12-29 20:22:35'), -(7, 'ip_10.10.4.3', '2025-12-29 20:23:12', '/api/v1/auth/login', 'POST', '2025-12-29 20:23:12'), -(8, 'ip_10.10.4.3', '2025-12-29 20:23:41', '/api/v1/auth/login', 'POST', '2025-12-29 20:23:41'), -(9, 'ip_10.10.4.3', '2025-12-29 20:23:58', '/api/v1/auth/login', 'POST', '2025-12-29 20:23:58'), -(10, 'ip_10.10.4.3', '2025-12-29 20:24:38', '/api/v1/auth/login', 'POST', '2025-12-29 20:24:38'), -(11, 'ip_10.10.4.3', '2025-12-29 20:24:57', '/api/v1/users', 'GET', '2025-12-29 20:24:57'), -(12, 'ip_10.10.4.3', '2025-12-29 20:24:57', '/api/v1/auth/me', 'GET', '2025-12-29 20:24:57'), -(13, 'ip_10.10.4.3', '2025-12-29 20:24:57', '/api/v1/houses', 'GET', '2025-12-29 20:24:57'), -(14, 'ip_10.10.4.3', '2025-12-29 20:24:58', '/api/v1/health', 'GET', '2025-12-29 20:24:58'), -(15, 'ip_10.10.4.3', '2025-12-29 20:24:58', '/api/v1/users', 'GET', '2025-12-29 20:24:58'), -(16, 'ip_10.10.4.3', '2025-12-29 20:25:03', '/api/v1/auth/me', 'GET', '2025-12-29 20:25:03'), -(17, 'ip_10.10.4.3', '2025-12-29 20:26:25', '/api/v1/auth/me', 'GET', '2025-12-29 20:26:25'), -(18, 'ip_10.10.4.3', '2025-12-29 20:26:53', '/api/v1/auth/me', 'GET', '2025-12-29 20:26:53'), -(19, 'ip_10.10.4.3', '2025-12-29 20:26:57', '/api/v1/auth/me', 'GET', '2025-12-29 20:26:57'), -(20, 'ip_10.10.4.3', '2025-12-29 20:27:07', '/api/v1/health', 'GET', '2025-12-29 20:27:07'), -(21, 'ip_10.10.4.3', '2025-12-29 20:27:07', '/api/v1/rate-limit', 'GET', '2025-12-29 20:27:07'), -(22, 'ip_10.10.4.3', '2025-12-29 20:27:07', '/api/v1/auth/me', 'GET', '2025-12-29 20:27:07'), -(23, 'ip_10.10.4.3', '2025-12-29 20:27:21', '/api/v1/users', 'GET', '2025-12-29 20:27:21'), -(24, 'ip_10.10.4.3', '2025-12-29 20:27:43', '/api/v1/auth/login', 'POST', '2025-12-29 20:27:43'), -(25, 'ip_10.10.4.3', '2025-12-29 20:27:43', '/api/v1/auth/me', 'GET', '2025-12-29 20:27:43'), -(26, 'ip_10.10.4.3', '2025-12-29 20:27:52', '/api/v1/users', 'GET', '2025-12-29 20:27:52'), -(27, 'ip_10.10.4.3', '2025-12-29 20:29:06', '/api/v1/auth/login', 'POST', '2025-12-29 20:29:06'), -(28, 'user_1', '2025-12-29 20:29:06', '/api/v1/auth/me', 'GET', '2025-12-29 20:29:06'), -(29, 'ip_10.10.4.3', '2025-12-29 20:29:37', '/api/v1/auth/login', 'POST', '2025-12-29 20:29:37'), -(30, 'ip_10.10.4.3', '2025-12-29 20:29:37', '/api/v1/health', 'GET', '2025-12-29 20:29:37'), -(31, 'user_1', '2025-12-29 20:29:38', '/api/v1/users?page=1&limit=5', 'GET', '2025-12-29 20:29:38'), -(32, 'user_1', '2025-12-29 20:29:38', '/api/v1/auth/me', 'GET', '2025-12-29 20:29:38'), -(33, 'user_1', '2025-12-29 20:29:38', '/api/v1/houses?page=1&limit=3', 'GET', '2025-12-29 20:29:38'), -(34, 'user_1', '2025-12-29 20:29:38', '/api/v1/payments?page=1&limit=3', 'GET', '2025-12-29 20:29:38'), -(35, 'user_1', '2025-12-29 20:29:38', '/api/v1/expenses?page=1&limit=3', 'GET', '2025-12-29 20:29:38'), -(36, 'user_1', '2025-12-29 20:29:38', '/api/v1/rate-limit', 'GET', '2025-12-29 20:29:38'), -(37, 'ip_10.10.4.3', '2025-12-29 20:29:43', '/api/v1/payments?page=1&limit=3', 'GET', '2025-12-29 20:29:43'), -(38, 'ip_10.10.4.3', '2025-12-29 20:29:49', '/api/v1/auth/login', 'POST', '2025-12-29 20:29:49'), -(39, 'user_1', '2025-12-29 20:29:50', '/api/v1/payments?page=1&limit=3', 'GET', '2025-12-29 20:29:50'); - -- -------------------------------------------------------- -- @@ -2592,20 +3222,6 @@ CREATE TABLE `refresh_tokens` ( `created_at` datetime DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --- --- Volcado de datos para la tabla `refresh_tokens` --- - -INSERT INTO `refresh_tokens` (`id`, `user_id`, `token`, `expires_at`, `is_revoked`, `created_at`) VALUES -(1, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjFiYTdmM2Y1ZDFhZDc4ZDBhMmYyZWU4MmIyNzllMDBjIiwiaWF0IjoxNzY3MDYxMzkyLCJleHAiOjE3NjcxNDc3OTJ9.XTrMEzkro107bvBWGKG-S11oxjvyziUpYq5Q7_ZJlSI', '2026-01-05 20:23:12', 0, '2025-12-29 20:23:12'), -(2, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6ImU4MWNjM2E0NWE3ZjFmOGMyMWQ1MDMzNDQ2YWYwNDY5IiwiaWF0IjoxNzY3MDYxNDIxLCJleHAiOjE3NjcxNDc4MjF9.K78Ldh971gvhsblED8OevMrAFrbDBhL-b3au0RQ3t9w', '2026-01-05 20:23:41', 0, '2025-12-29 20:23:41'), -(3, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjRkZjlmZmQ4ZmZhY2MwNTRmYmEwYmU4MDJiYzI3NWYxIiwiaWF0IjoxNzY3MDYxNDM4LCJleHAiOjE3NjcxNDc4Mzh9.l7Vk1kXUOAE310MzniTiwaYQaCSJ_zAwQEnzxoYYxDg', '2026-01-05 20:23:58', 0, '2025-12-29 20:23:58'), -(4, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6ImFlN2QzMTNhNmQyNjI5NjJjODc5OGEwYjQ1YTdmMWE5IiwiaWF0IjoxNzY3MDYxNDc5LCJleHAiOjE3NjcxNDc4Nzl9.uPZafwvnpBYIjkobTV6leEwcJ8Oz2r6AGPsHLSHEE4I', '2026-01-05 20:24:39', 0, '2025-12-29 20:24:39'), -(5, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjI3MzBiMGI4OWQyNTliZjczY2ZiNWQyNjI2ZDZhOWMzIiwiaWF0IjoxNzY3MDYxNjYzLCJleHAiOjE3NjcxNDgwNjN9.ejy7bv17a2N90lCpIeU5BwkbyaeVSppiLTI_aV4r_4I', '2026-01-05 20:27:43', 0, '2025-12-29 20:27:43'), -(6, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjNmODMzMjI4NjJjY2RlYzYzNDcyYTcxZjQ3ZTk4MjY1IiwiaWF0IjoxNzY3MDYxNzQ2LCJleHAiOjE3NjcxNDgxNDZ9.4tyAHfOBPMotaZkgO-58FKWivsVSlLm0JO1sd3EwxvE', '2026-01-05 20:29:06', 0, '2025-12-29 20:29:06'), -(7, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjZkZmFkNjY5MjM0M2ZhNjZmMjdmODg2NjBjODkwNGM4IiwiaWF0IjoxNzY3MDYxNzc3LCJleHAiOjE3NjcxNDgxNzd9.K-RqPfPkhYjnbx_0KrR1mByOaHTPGWKQY1jOAourcIo', '2026-01-05 20:29:37', 0, '2025-12-29 20:29:37'), -(8, 1, 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ0eXBlIjoicmVmcmVzaCIsInJhbmRvbSI6IjEzZjI5OTFlMGRkMzg1M2U5YjdlZWFlNDdlZGY3YWRkIiwiaWF0IjoxNzY3MDYxNzg5LCJleHAiOjE3NjcxNDgxODl9.Np7PYO-qsDI9w0M6mdiJhmnANPkzRtJpga6pSktvZos', '2026-01-05 20:29:49', 0, '2025-12-29 20:29:49'); - -- -------------------------------------------------------- -- @@ -2614,11 +3230,11 @@ INSERT INTO `refresh_tokens` (`id`, `user_id`, `token`, `expires_at`, `is_revoke CREATE TABLE `users` ( `id` int NOT NULL, - `username` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL, - `email` varchar(180) COLLATE utf8mb4_unicode_ci NOT NULL, - `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `first_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `last_name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `username` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `email` varchar(180) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL, + `first_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `last_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, `role` enum('ADMIN','CAPTURIST','VIEWER','LECTOR') COLLATE utf8mb4_unicode_ci DEFAULT 'VIEWER', `is_active` tinyint(1) DEFAULT '1', `last_login` datetime DEFAULT NULL, @@ -2630,10 +3246,10 @@ CREATE TABLE `users` ( -- INSERT INTO `users` (`id`, `username`, `email`, `password`, `first_name`, `last_name`, `role`, `is_active`, `last_login`, `created_at`) VALUES -(1, 'admin', 'admin@ibiza.local', '$2y$10$pdLpd48M9tMQa/7UGewjY.VuITtxd0QkW2vooys6lX74TmaUM85KG', 'Admin', 'Usuario', 'ADMIN', 1, '2025-12-29 23:20:54', '2025-12-24 22:53:38'), -(2, 'ana', 'ana@ibiza.local', '$2y$10$CKs3WSp/nzfYDwTYvF3yh.DUf.1Mbn4pg6qxVu9h9wiUwIlI/dY6W', 'Ana', 'Morales', 'CAPTURIST', 1, '2025-12-29 22:54:24', '2025-12-26 20:46:24'), -(3, 'Mariela', 'mariela@ibiza.local', '$2y$10$jn33yrAbF7D7PR.26JJFFuyrXolhvQCkX0A1tqroB1aGCASFrnIUK', 'Mariela', 'Mari', 'CAPTURIST', 1, NULL, '2025-12-26 20:47:15'), -(4, 'casa11', 'miguel.a.pons@protonmail.com', '$2y$10$ijURtgxoynvnVNNwBopzROYbYeO.0D8G6U59U.JZRzbMoqDGDuY1O', 'Miguel', 'Pons', 'LECTOR', 1, '2025-12-29 22:46:35', '2025-12-27 16:31:46'); +(1, 'admin', 'admin@ibiza.com', '$2y$10$pdLpd48M9tMQa/7UGewjY.VuITtxd0QkW2vooys6lX74TmaUM85KG', 'Admin', 'Usuario', 'ADMIN', 1, '2026-02-14 15:16:34', '2025-12-24 22:53:38'), +(2, 'ana', 'ana@ibiza.local', '$2y$10$iup30fHr9n1iwzQiCDrMFeWiLKn9Kc9v9VRWBklmwAJ6fd0IuSfg2', 'Ana', 'Morales', 'CAPTURIST', 1, '2026-02-13 23:14:26', '2025-12-26 21:14:16'), +(3, 'mariela', 'mariela22@ibiza.local', '$2y$10$JNJhnS.saIESqse6LF/iNO7aBfEjg3hjbi8djgWaAj6tCH4qot/k.', 'Mariela', 'Mariela ', 'CAPTURIST', 1, NULL, '2025-12-27 15:51:11'), +(4, 'casa11', 'miguel.a.pons@protonmail.com', '$2y$10$BnIc6rY/A.pVYUxKRkWiNewQESj3xg62dp.eDMuwEEzMin2miRqe.', 'Miguel', 'Pons', 'LECTOR', 1, '2026-01-05 14:32:42', '2025-12-27 16:52:24'); -- -------------------------------------------------------- @@ -2652,12 +3268,7 @@ CREATE TABLE `user_house_permissions` ( -- INSERT INTO `user_house_permissions` (`id`, `user_id`, `house_id`) VALUES -(19, 1, 1), -(20, 1, 2), -(21, 1, 3), -(22, 1, 4), -(23, 1, 5), -(24, 4, 11); +(2, 4, 11); -- -- Índices para tablas volcadas @@ -2680,13 +3291,30 @@ ALTER TABLE `api_logs` ADD KEY `idx_user_id` (`user_id`), ADD KEY `idx_created_at` (`created_at`); +-- +-- Indices de la tabla `electricity_bills` +-- +ALTER TABLE `electricity_bills` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `unique_period` (`year`,`period`), + ADD KEY `idx_year` (`year`); + +-- +-- Indices de la tabla `electricity_payments` +-- +ALTER TABLE `electricity_payments` + ADD PRIMARY KEY (`id`), + ADD UNIQUE KEY `unique_payment` (`house_id`,`year`,`period`), + ADD KEY `created_by` (`created_by`), + ADD KEY `idx_electricity_payments_year_period` (`year`,`period`), + ADD KEY `idx_electricity_payments_house_year` (`house_id`,`year`); + -- -- Indices de la tabla `expenses` -- ALTER TABLE `expenses` ADD PRIMARY KEY (`id`), - ADD KEY `idx_expenses_date_category` (`expense_date`,`category`), - ADD KEY `idx_expenses_created_by` (`created_by`); + ADD KEY `created_by` (`created_by`); -- -- Indices de la tabla `expense_concept_allocations` @@ -2727,8 +3355,7 @@ ALTER TABLE `finance_collection_payments` ALTER TABLE `houses` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `number` (`number`), - ADD KEY `idx_houses_status` (`status`), - ADD KEY `idx_house_number` (`number`); + ADD KEY `idx_houses_number` (`number`); -- -- Indices de la tabla `monthly_bills` @@ -2744,7 +3371,8 @@ ALTER TABLE `payments` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `unique_payment` (`house_id`,`year`,`month`), ADD KEY `created_by` (`created_by`), - ADD KEY `idx_payments_house_year_month` (`house_id`,`year`,`month`); + ADD KEY `idx_payments_year_month` (`year`,`month`), + ADD KEY `idx_payments_house_year` (`house_id`,`year`); -- -- Indices de la tabla `rate_limit_blocks` @@ -2777,9 +3405,7 @@ ALTER TABLE `refresh_tokens` ALTER TABLE `users` ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `username` (`username`), - ADD UNIQUE KEY `email` (`email`), - ADD KEY `idx_users_username_email` (`username`,`email`), - ADD KEY `idx_users_role_active` (`role`,`is_active`); + ADD UNIQUE KEY `email` (`email`); -- -- Indices de la tabla `user_house_permissions` @@ -2797,25 +3423,37 @@ ALTER TABLE `user_house_permissions` -- AUTO_INCREMENT de la tabla `activity_logs` -- ALTER TABLE `activity_logs` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=407; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=818; -- -- AUTO_INCREMENT de la tabla `api_logs` -- ALTER TABLE `api_logs` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=78; + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT de la tabla `electricity_bills` +-- +ALTER TABLE `electricity_bills` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +-- +-- AUTO_INCREMENT de la tabla `electricity_payments` +-- +ALTER TABLE `electricity_payments` + MODIFY `id` int NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT de la tabla `expenses` -- ALTER TABLE `expenses` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21; -- -- AUTO_INCREMENT de la tabla `expense_concept_allocations` -- ALTER TABLE `expense_concept_allocations` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=18; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23; -- -- AUTO_INCREMENT de la tabla `expense_concept_collections` @@ -2827,13 +3465,13 @@ ALTER TABLE `expense_concept_collections` -- AUTO_INCREMENT de la tabla `finance_collection_concepts` -- ALTER TABLE `finance_collection_concepts` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8; -- -- AUTO_INCREMENT de la tabla `finance_collection_payments` -- ALTER TABLE `finance_collection_payments` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=612; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=804; -- -- AUTO_INCREMENT de la tabla `houses` @@ -2845,13 +3483,13 @@ ALTER TABLE `houses` -- AUTO_INCREMENT de la tabla `monthly_bills` -- ALTER TABLE `monthly_bills` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=20; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21; -- -- AUTO_INCREMENT de la tabla `payments` -- ALTER TABLE `payments` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1525; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1631; -- -- AUTO_INCREMENT de la tabla `rate_limit_blocks` @@ -2863,13 +3501,13 @@ ALTER TABLE `rate_limit_blocks` -- AUTO_INCREMENT de la tabla `rate_limit_logs` -- ALTER TABLE `rate_limit_logs` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=40; + MODIFY `id` int NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT de la tabla `refresh_tokens` -- ALTER TABLE `refresh_tokens` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9; + MODIFY `id` int NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT de la tabla `users` @@ -2881,7 +3519,7 @@ ALTER TABLE `users` -- AUTO_INCREMENT de la tabla `user_house_permissions` -- ALTER TABLE `user_house_permissions` - MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=25; + MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; -- -- Restricciones para tablas volcadas @@ -2893,6 +3531,13 @@ ALTER TABLE `user_house_permissions` ALTER TABLE `activity_logs` ADD CONSTRAINT `activity_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE SET NULL; +-- +-- Filtros para la tabla `electricity_payments` +-- +ALTER TABLE `electricity_payments` + ADD CONSTRAINT `electricity_payments_ibfk_1` FOREIGN KEY (`house_id`) REFERENCES `houses` (`id`) ON DELETE CASCADE, + ADD CONSTRAINT `electricity_payments_ibfk_2` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE SET NULL; + -- -- Filtros para la tabla `expenses` -- diff --git a/migrations/add_payment_indexes.sql b/migrations/add_payment_indexes.sql old mode 100644 new mode 100755 diff --git a/migrations/create_electricity_tables.sql b/migrations/create_electricity_tables.sql new file mode 100755 index 0000000..b52aa61 --- /dev/null +++ b/migrations/create_electricity_tables.sql @@ -0,0 +1,48 @@ +-- ===================================================== +-- Módulo de Pagos de Luz - Cámara +-- Fecha: 2026-02-14 +-- Propósito: Crear tablas para gestión de pagos bimestrales de luz +-- ===================================================== + +-- Tabla de configuración bimestral de luz +CREATE TABLE IF NOT EXISTS electricity_bills ( + id INT AUTO_INCREMENT PRIMARY KEY, + year INT NOT NULL, + period VARCHAR(20) NOT NULL COMMENT 'Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic', + total_amount DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Monto total del recibo CFE', + amount_per_house DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Monto sugerido por casa', + notes TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + UNIQUE KEY unique_period (year, period), + INDEX idx_year (year) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Configuración bimestral de pagos de luz'; + +-- Tabla de pagos de luz por casa +CREATE TABLE IF NOT EXISTS electricity_payments ( + id INT AUTO_INCREMENT PRIMARY KEY, + house_id INT NOT NULL, + year INT NOT NULL, + period VARCHAR(20) NOT NULL COMMENT 'Ene-Feb, Mar-Abr, May-Jun, Jul-Ago, Sep-Oct, Nov-Dic', + amount DECIMAL(10,2) DEFAULT 0.00, + payment_date DATETIME, + notes TEXT, + created_by INT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + FOREIGN KEY (house_id) REFERENCES houses(id) ON DELETE CASCADE, + FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL, + UNIQUE KEY unique_payment (house_id, year, period) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Pagos de luz por casa'; + +-- Índices para optimización de queries +CREATE INDEX idx_electricity_payments_year_period ON electricity_payments(year, period); +CREATE INDEX idx_electricity_payments_house_year ON electricity_payments(house_id, year); + +-- Verificar tablas creadas +SELECT 'Tablas creadas exitosamente:' as 'Status'; +SHOW TABLES LIKE 'electricity%'; + +-- Verificar índices +SELECT 'Índices de electricity_payments:' as 'Verificación'; +SHOW INDEX FROM electricity_payments WHERE Key_name LIKE 'idx_%'; diff --git a/models/ElectricityBill.php b/models/ElectricityBill.php new file mode 100755 index 0000000..f6822ce --- /dev/null +++ b/models/ElectricityBill.php @@ -0,0 +1,93 @@ +fetchAll( + "SELECT * FROM electricity_bills WHERE year = ? ORDER BY FIELD(period, 'Ene-Feb', 'Mar-Abr', 'May-Jun', 'Jul-Ago', 'Sep-Oct', 'Nov-Dic')", + [$year] + ); + + // Organizar por periodo + $result = []; + foreach ($bills as $bill) { + $result[$bill['period']] = $bill; + } + + return $result; + } + + /** + * Guardar o actualizar configuración de un periodo + */ + public static function save($data, $userId) + { + $db = Database::getInstance(); + + $id = $data['id'] ?? null; + $year = $data['year']; + $period = $data['period']; + $totalAmount = $data['total_amount'] ?? 0; + $amountPerHouse = $data['amount_per_house'] ?? 0; + $notes = $data['notes'] ?? ''; + + if ($id) { + // Actualizar existente + $db->execute( + "UPDATE electricity_bills + SET total_amount = ?, amount_per_house = ?, notes = ?, updated_at = NOW() + WHERE id = ?", + [$totalAmount, $amountPerHouse, $notes, $id] + ); + return $id; + } + else { + // Insertar nuevo o actualizar si existe + $db->execute( + "INSERT INTO electricity_bills (year, period, total_amount, amount_per_house, notes) + VALUES (?, ?, ?, ?, ?) + ON DUPLICATE KEY UPDATE + total_amount = VALUES(total_amount), + amount_per_house = VALUES(amount_per_house), + notes = VALUES(notes), + updated_at = NOW()", + [$year, $period, $totalAmount, $amountPerHouse, $notes] + ); + return $db->lastInsertId(); + } + } + + /** + * Obtener periodos bimestrales + */ + public static function getPeriods() + { + return [ + 'Ene-Feb', + 'Mar-Abr', + 'May-Jun', + 'Jul-Ago', + 'Sep-Oct', + 'Nov-Dic' + ]; + } + + /** + * Obtener configuración de un periodo específico + */ + public static function getByYearPeriod($year, $period) + { + $db = Database::getInstance(); + + return $db->fetchOne( + "SELECT * FROM electricity_bills WHERE year = ? AND period = ?", + [$year, $period] + ); + } +} \ No newline at end of file diff --git a/models/ElectricityPayment.php b/models/ElectricityPayment.php new file mode 100755 index 0000000..bc4e47c --- /dev/null +++ b/models/ElectricityPayment.php @@ -0,0 +1,191 @@ +fetchAll( + "SELECT h.id, h.number, h.status, h.consumption_only, h.owner_name + FROM houses h + ORDER BY CAST(h.number AS UNSIGNED)" + ); + + $periods = ElectricityBill::getPeriods(); + + // OPTIMIZADO: Una sola query en lugar de 6 queries separadas + $allPayments = $db->fetchAll( + "SELECT house_id, period, amount, payment_date + FROM electricity_payments + WHERE year = ? + ORDER BY FIELD(period, 'Ene-Feb', 'Mar-Abr', 'May-Jun', 'Jul-Ago', 'Sep-Oct', 'Nov-Dic')", + [$year] + ); + + // Organizar pagos por periodo + $payments = []; + foreach ($periods as $period) { + $payments[$period] = []; + } + + foreach ($allPayments as $p) { + $payments[$p['period']][$p['house_id']] = $p; + } + + return ['houses' => $houses, 'payments' => $payments, 'periods' => $periods]; + } + + /** + * Actualizar un solo pago + */ + public static function update($houseId, $year, $period, $amount, $userId, $notes = null) + { + $db = Database::getInstance(); + + $existing = $db->fetchOne( + "SELECT id FROM electricity_payments WHERE house_id = ? AND year = ? AND period = ?", + [$houseId, $year, $period] + ); + + if ($amount == 0 && $existing) { + $db->execute( + "DELETE FROM electricity_payments WHERE id = ?", + [$existing['id']] + ); + return ['success' => true, 'deleted' => true]; + } + + if ($existing) { + $db->execute( + "UPDATE electricity_payments SET amount = ?, payment_date = NOW(), notes = ?, created_by = ? WHERE id = ?", + [$amount, $notes, $userId, $existing['id']] + ); + } + else { + $db->execute( + "INSERT INTO electricity_payments (house_id, year, period, amount, payment_date, notes, created_by) + VALUES (?, ?, ?, ?, NOW(), ?, ?)", + [$houseId, $year, $period, $amount, $notes, $userId] + ); + } + + return ['success' => true, 'deleted' => false]; + } + + /** + * Actualizar múltiples pagos en batch con transacción + * OPTIMIZADO: Similar a Payment::updateBatch() + */ + public static function updateBatch($changes, $userId) + { + $db = Database::getInstance(); + $pdo = $db->getPDO(); + + try { + $pdo->beginTransaction(); + + $updateCount = 0; + $deleteCount = 0; + + // Preparar statements una sola vez (reutilización) + $insertStmt = $pdo->prepare( + "INSERT INTO electricity_payments (house_id, year, period, amount, payment_date, created_by) + VALUES (?, ?, ?, ?, NOW(), ?) + ON DUPLICATE KEY UPDATE + amount = VALUES(amount), + payment_date = VALUES(payment_date), + created_by = VALUES(created_by)" + ); + + $deleteStmt = $pdo->prepare( + "DELETE FROM electricity_payments WHERE house_id = ? AND year = ? AND period = ?" + ); + + foreach ($changes as $change) { + // Validar que tenemos los datos mínimos + if (!isset($change['house_id'], $change['year'], $change['period'])) { + continue; + } + + $amount = isset($change['amount']) ? (float)$change['amount'] : 0; + + if ($amount == 0) { + // Eliminar si el monto es 0 + $deleteStmt->execute([ + $change['house_id'], + $change['year'], + $change['period'] + ]); + $deleteCount++; + } + else { + // Insertar o actualizar + $insertStmt->execute([ + $change['house_id'], + $change['year'], + $change['period'], + $amount, + $userId + ]); + $updateCount++; + } + } + + $pdo->commit(); + + return [ + 'success' => true, + 'count' => $updateCount + $deleteCount, + 'updated' => $updateCount, + 'deleted' => $deleteCount + ]; + + } + catch (Exception $e) { + $pdo->rollback(); + error_log("Error en ElectricityPayment::updateBatch: " . $e->getMessage()); + return [ + 'success' => false, + 'error' => $e->getMessage() + ]; + } + } + + /** + * Obtener pagos de una casa específica + */ + public static function getByHouse($houseId, $year = null) + { + $db = Database::getInstance(); + + if ($year) { + return $db->fetchAll( + "SELECT * FROM electricity_payments WHERE house_id = ? AND year = ? ORDER BY FIELD(period, 'Ene-Feb', 'Mar-Abr', 'May-Jun', 'Jul-Ago', 'Sep-Oct', 'Nov-Dic')", + [$houseId, $year] + ); + } + + return $db->fetchAll( + "SELECT * FROM electricity_payments WHERE house_id = ? ORDER BY year DESC, FIELD(period, 'Ene-Feb', 'Mar-Abr', 'May-Jun', 'Jul-Ago', 'Sep-Oct', 'Nov-Dic') DESC", + [$houseId] + ); + } + + /** + * Obtener total de pagos de un año + */ + public static function getTotalByYear($year) + { + $db = Database::getInstance(); + $result = $db->fetchOne( + "SELECT COALESCE(SUM(amount), 0) as total FROM electricity_payments WHERE year = ?", + [$year] + ); + return $result['total'] ?? 0; + } +} \ No newline at end of file diff --git a/models/Report.php b/models/Report.php index 5a6657e..a8d8ab3 100755 --- a/models/Report.php +++ b/models/Report.php @@ -1,7 +1,9 @@ fetchAll( "SELECT c.id, c.name, c.amount_per_house, c.concept_date, c.description @@ -152,7 +156,8 @@ class Report { ]; } - public static function getHouseStatement($houseId, $year = null) { + public static function getHouseStatement($houseId, $year = null) + { $db = Database::getInstance(); $house = House::findById($houseId); @@ -171,7 +176,7 @@ class Report { "SELECT 'Concepto' as type, c.name as description, cp.amount, cp.payment_date, cp.notes FROM finance_collection_payments cp JOIN finance_collection_concepts c ON cp.concept_id = c.id - WHERE cp.house_id = ?" . + WHERE cp.house_id = ?" . ($year ? " AND YEAR(cp.payment_date) = ?" : "") . " ORDER BY cp.payment_date DESC", $year ? [$houseId, $year] : [$houseId] @@ -184,10 +189,11 @@ class Report { ]; } - public static function getPaymentsByYear($year) { + public static function getPaymentsByYear($year) + { $db = Database::getInstance(); - $months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', - 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']; + $months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', + 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']; $data = []; foreach ($months as $month) { @@ -195,7 +201,7 @@ class Report { "SELECT COALESCE(SUM(amount), 0) as total, COUNT(*) as count FROM payments WHERE year = ? AND month = ?", - [$year, $month] + [$year, $month] ); $data[$month] = [ 'total' => $result['total'] ?? 0, @@ -206,7 +212,8 @@ class Report { return $data; } - public static function getExpensesByCategory($startDate = null, $endDate = null) { + public static function getExpensesByCategory($startDate = null, $endDate = null) + { $db = Database::getInstance(); $sql = "SELECT category, COALESCE(SUM(amount), 0) as total @@ -224,7 +231,8 @@ class Report { return $db->fetchAll($sql, $params); } - public static function getCollectionReport($conceptId) { + public static function getCollectionReport($conceptId) + { $concept = CollectionConcept::findById($conceptId); $status = CollectionConcept::getCollectionStatus($conceptId); $payments = CollectionConcept::getPaymentsByConcept($conceptId); @@ -236,7 +244,8 @@ class Report { ]; } - public static function getDashboardStats($year = null, $accessibleHouseIds = []) { + public static function getDashboardStats($year = null, $accessibleHouseIds = []) + { $year = $year ?? date('Y'); $db = Database::getInstance(); @@ -263,7 +272,8 @@ class Report { $totalExpenses = 0; $balance = $conceptPayments; - } else { + } + else { $totalHouses = House::countAll(); $activeHouses = House::countActive(); @@ -271,7 +281,7 @@ class Report { "SELECT COALESCE(SUM(cp.amount), 0) as total FROM finance_collection_payments cp WHERE YEAR(cp.payment_date) = ?", - [$year] + [$year] ); $conceptPayments = $conceptPayments['total'] ?? 0; @@ -279,7 +289,7 @@ class Report { "SELECT COALESCE(SUM(amount), 0) as total FROM expenses WHERE YEAR(expense_date) = ?", - [$year] + [$year] ); $totalExpenses = $totalExpenses['total'] ?? 0; @@ -304,10 +314,11 @@ class Report { ]; } - public static function getWaterDebtors($filters = []) { + public static function getWaterDebtors($filters = []) + { $db = Database::getInstance(); $allMonths = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', - 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']; + 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']; $year = $filters['year'] ?? null; $months = $filters['months'] ?? $allMonths; @@ -338,7 +349,8 @@ class Report { if ($year) { $yearsToCheck = [$year]; - } else { + } + else { $years = $db->fetchAll("SELECT DISTINCT year FROM payments ORDER BY year"); $yearsToCheck = array_column($years, 'year'); } @@ -357,7 +369,7 @@ class Report { $expected = Payment::getExpectedAmount($house, $yr, $month); $payment = $db->fetchOne( "SELECT amount FROM payments WHERE house_id = ? AND year = ? AND month = ?", - [$house['id'], $yr, $month] + [$house['id'], $yr, $month] ); $paid = $payment['amount'] ?? 0; $due = $expected - $paid; @@ -404,7 +416,8 @@ class Report { ]; } - public static function getConceptDebtors($accessibleHouseIds = []) { + public static function getConceptDebtors($accessibleHouseIds = []) + { $db = Database::getInstance(); $concepts = $db->fetchAll( "SELECT c.id, c.name, c.amount_per_house @@ -441,7 +454,7 @@ class Report { $payment = $db->fetchOne( "SELECT amount FROM finance_collection_payments WHERE concept_id = ? AND house_id = ?", - [$concept['id'], $house['id']] + [$concept['id'], $house['id']] ); $paid = $payment['amount'] ?? 0; @@ -483,7 +496,8 @@ class Report { ]; } - public static function getConceptDebtorsFiltered($houseIds, $conceptIds = null) { + public static function getConceptDebtorsFiltered($houseIds, $conceptIds = null) + { $db = Database::getInstance(); $whereConditions = []; @@ -578,4 +592,123 @@ class Report { 'total_due' => $grandTotal ]; } -} + + public static function getElectricityDebtors($filters = []) + { + $db = Database::getInstance(); + require_once __DIR__ . '/ElectricityBill.php'; + require_once __DIR__ . '/ElectricityPayment.php'; + + $year = $filters['year'] ?? null; + $periods = $filters['periods'] ?? ElectricityBill::getPeriods(); + $houseId = $filters['house_id'] ?? null; + $accessibleHouseIds = $filters['accessible_house_ids'] ?? []; + + // 1. Obtener Casas Activas + $whereHouse = ''; + $houseParams = []; + + if ($houseId) { + $whereHouse = "AND h.id = ?"; + $houseParams = [$houseId]; + } + + $sql = "SELECT h.id, h.number, h.owner_name, h.status + FROM houses h + WHERE h.status = 'activa' $whereHouse"; + + if (!empty($accessibleHouseIds) && !Auth::isAdmin()) { + $placeholders = str_repeat('?,', count($accessibleHouseIds) - 1) . '?'; + $sql .= " AND h.id IN ($placeholders)"; + $houseParams = array_merge($houseParams, $accessibleHouseIds); + } + + $sql .= " ORDER BY CAST(h.number AS UNSIGNED)"; + $houses = $db->fetchAll($sql, $houseParams); + + // 2. Determinar Años a revisar + if ($year) { + $yearsToCheck = [$year]; + } + else { + // Revisar años donde hay configuración de recibos + $years = $db->fetchAll("SELECT DISTINCT year FROM electricity_bills ORDER BY year DESC"); + $yearsToCheck = array_column($years, 'year'); + if (empty($yearsToCheck)) + $yearsToCheck = [date('Y')]; + } + + // 3. Calcular Deudas + $debtors = []; + $grandTotalExpected = 0; + $grandTotalPaid = 0; + + foreach ($houses as $house) { + $totalExpected = 0; + $totalPaid = 0; + $periodDetails = []; + + foreach ($yearsToCheck as $yr) { + // Obtener configuración del año para optimizar (evitar queries por periodo) + $billsConfig = ElectricityBill::getYear($yr); + + foreach ($periods as $period) { + $config = $billsConfig[$period] ?? null; + + // Solo cobrar si hay configuración y monto > 0 + if (!$config || $config['amount_per_house'] <= 0) { + continue; + } + + $expected = $config['amount_per_house']; + + // Obtener pago + $payment = $db->fetchOne( + "SELECT amount FROM electricity_payments WHERE house_id = ? AND year = ? AND period = ?", + [$house['id'], $yr, $period] + ); + $paid = $payment['amount'] ?? 0; + $due = $expected - $paid; + + $totalExpected += $expected; + $totalPaid += $paid; + + if ($due > 0.01) { // Tolerancia pequeña a flotantes + $periodDetails[] = [ + 'year' => $yr, + 'period' => $period, + 'expected' => $expected, + 'paid' => $paid, + 'due' => $due + ]; + } + } + } + + $houseTotalDue = $totalExpected - $totalPaid; + + if ($houseTotalDue > 0.01) { + $debtors[] = [ + 'house_id' => $house['id'], + 'house_number' => $house['number'], + 'owner_name' => $house['owner_name'], + 'periods_due' => $periodDetails, + 'total_due' => $houseTotalDue + ]; + } + + $grandTotalExpected += $totalExpected; + $grandTotalPaid += $totalPaid; + } + + $grandTotalDue = $grandTotalExpected - $grandTotalPaid; + + return [ + 'debtors' => $debtors, + 'total_due' => $grandTotalDue, + 'total_expected' => $grandTotalExpected, + 'total_paid' => $grandTotalPaid, + 'filters' => $filters + ]; + } +} \ No newline at end of file diff --git a/views/electricity/index.php b/views/electricity/index.php new file mode 100755 index 0000000..9a452b5 --- /dev/null +++ b/views/electricity/index.php @@ -0,0 +1,600 @@ + + +
+
+

Pagos de Luz - Cámara

+

Concentrado de pagos bimestrales por casa

+
+
+ +
+
+
+ + +
+ +
+ + +
+
+ +
+ + + +
+
+ + +
+
+
Configuración de Recibos (CFE)
+
+
+ + +
+
+ +
+ $ + > +
+
+
+ +
+ $ + > +
+
+
+ + > +
+ +
+ +
+ +
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + 0) { + if ($expected > 0 && $amount >= $expected) { + $cellClass = 'paid'; // Paid + } + else { + $cellClass = 'partial'; // Partial + } + $cellText = '$' . number_format($amount, 2); + } + else { + if ($expected > 0) { + $cellClass = 'pending'; // Unpaid + $cellText = '-'; + } + else { + $cellClass = ''; // No config + $cellText = '-'; + } + + // Si está deshabitada y no hay pago, gris + if ($house['status'] == 'deshabitada' && $amount == 0) { + $cellClass = 'inactive'; + } + } + + $isEditable = Auth::isCapturist() && $house['status'] == 'activa'; +?> + + + + + + + + + + + + + + + + +
CasaEstado +
+ $ + + +
Total
+ + + + + + > + + + $ + +
Totales:$ + + $ + +
+
+
+
+ + +
+ +
+ + +
+
+
+ Instrucciones: +
    +
  • = Pagado
  • +
  • Amarillo = Parcial
  • +
  • Rojo = Pendiente
  • +
  • Gris = Inactivo/N.A.
  • +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/views/electricity/pdf_template.php b/views/electricity/pdf_template.php new file mode 100644 index 0000000..5b737de --- /dev/null +++ b/views/electricity/pdf_template.php @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + 0) { + if ($expected > 0 && $amount >= $expected) { + $bg_color = '#d4edda'; // Verde (paid) + } + else { + $bg_color = '#fff3cd'; // Amarillo (partial) + } + } + else { + if ($expected > 0) { + $bg_color = '#f8d7da'; // Rojo (pending) + } + elseif ($house['status'] == 'deshabitada') { + $bg_color = '#e2e3e5'; // Gris (inactive) + } + } +?> + + + + + + + + + + + + + + +
CasaEstado +
$ + + +
Total
+ + + + + 0 ? '$' . number_format($amount, 2) : '-'?> + $ + +
TOTALES: + $ + + $ + +
+ +
+ Leyenda: + Verde = + Pagado + Amarillo = + Parcial + Rojo = + Pendiente + Gris = + Inactivo +
\ No newline at end of file diff --git a/views/layout/base.php b/views/layout/base.php index a9fa4be..2129aff 100755 --- a/views/layout/base.php +++ b/views/layout/base.php @@ -1,17 +1,19 @@ + IBIZA CEA - Sistema de Gestión - - + + - + + - +
- - - -
- Vista no encontrada:
- Ruta:
- Existe: -
- + + + +
+ Vista no encontrada: +
+ Ruta: +
+ Existe: + +
+
- + - + + \ No newline at end of file diff --git a/views/reports/index.php b/views/reports/index.php index 9d52722..933ca9c 100755 --- a/views/reports/index.php +++ b/views/reports/index.php @@ -19,6 +19,9 @@ Conceptos Especiales + + Deudores Luz + @@ -745,6 +748,233 @@ function exportConceptsCSV() { } + + + + +
+
+
+ Filtros de Deudores de Luz + + + +
+ +
+
+
+
+
+
+ + +
+
+ + +
+
+ +
+ +
+ > + +
+ +
+
+
+
+
+ + + Limpiar Filtros + +
+
+
+
+
+
+ + + +
+
+
+
+
Total Adeudado (Luz)
+

$

+ Total general de deudas +
+
+
+
+
+
+
Total Esperado
+

$

+ Total configurado +
+
+
+
+
+
+
Total Pagado
+

$

+ Total recaudado +
+
+
+
+ +
+
+
Deudores de Luz - Cámara
+ +
+
+ +

No hay deudores registrados

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
CasaPropietarioPeriodos AdeudadosTotal Debe
+ + + + + + + +
- $
+
$
TOTAL GENERAL:$
+
+ +
+
+ + +
diff --git a/views/reports/pdf_electricity_debtors.php b/views/reports/pdf_electricity_debtors.php new file mode 100755 index 0000000..538adcc --- /dev/null +++ b/views/reports/pdf_electricity_debtors.php @@ -0,0 +1,123 @@ + + + + + + +
+ Filtros aplicados: + +
+ + + +

No hay deudores de luz registrados con los filtros actuales.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
CasaPropietarioPeriodos AdeudadosTotal Debe
+ + + + + + + + + + + +
+ - + + $ + +
+
$ + +
TOTAL GENERAL:$ + +
+ \ No newline at end of file