Files
whatsapp/lab_status.php
2026-04-16 23:45:58 -05:00

153 lines
7.0 KiB
PHP

<?php
/**
* Verificador de estado del Módulo Laboratorio
* Acceso: php lab_status.php (CLI) o browser con sesión admin
*/
$isCli = php_sapi_name() === 'cli';
if (!$isCli) {
require_once 'config/config.php';
if (!defined('APP_ROOT')) { define('APP_ROOT', __DIR__); }
if (!isUserLoggedIn()) {
header('Location: login.php'); exit;
}
}
require_once 'classes/Database.php';
$checks = [];
$allOk = true;
// ── 1. Tablas de base de datos ─────────────────────────────────────────────
$tables = [
'lab_pacientes', 'lab_enfermeras', 'lab_ordenes_medicas',
'lab_domicilios', 'lab_asignaciones', 'lab_autorizaciones', 'lab_actividad_admin',
];
$db = Database::getInstance();
foreach ($tables as $t) {
try {
$db->query("SELECT 1 FROM `{$t}` LIMIT 1", []);
$checks[] = ['ok' => true, 'msg' => "Tabla `$t` ✔"];
} catch (Exception $e) {
$checks[] = ['ok' => false, 'msg' => "Tabla `$t` ✘ — NO EXISTE (ejecuta migrations/20260302_lab_run_migrations.php)"];
$allOk = false;
}
}
// ── 2. Archivos de clases ──────────────────────────────────────────────────
$classFiles = [
'classes/lab/ActividadAdmin.php',
'classes/lab/Paciente.php',
'classes/lab/Enfermera.php',
'classes/lab/OrdenMedica.php',
'classes/lab/Domicilio.php',
'classes/lab/Asignacion.php',
];
foreach ($classFiles as $f) {
$ok = file_exists(__DIR__ . '/' . $f);
if (!$ok) $allOk = false;
$checks[] = ['ok' => $ok, 'msg' => "Clase $f " . ($ok ? '✔' : '✘ — FALTA')];
}
// ── 3. Endpoints API ──────────────────────────────────────────────────────
$apiFiles = [
'api/lab/_helpers.php', 'api/lab/get_pacientes.php', 'api/lab/save_paciente.php',
'api/lab/get_ordenes.php', 'api/lab/save_orden.php', 'api/lab/autorizar_orden.php',
'api/lab/get_domicilios.php', 'api/lab/save_domicilio.php', 'api/lab/get_enfermeras.php',
'api/lab/save_enfermera.php', 'api/lab/get_asignaciones.php', 'api/lab/save_asignacion.php',
'api/lab/get_actividad.php', 'api/lab/get_stats.php', 'api/lab/crear_desde_whatsapp.php',
];
foreach ($apiFiles as $f) {
$ok = file_exists(__DIR__ . '/' . $f);
if (!$ok) $allOk = false;
$checks[] = ['ok' => $ok, 'msg' => "API $f " . ($ok ? '✔' : '✘ — FALTA')];
}
// ── 4. Vistas (páginas PHP) ───────────────────────────────────────────────
$views = ['lab_dashboard.php','lab_ordenes.php','lab_pacientes.php','lab_domicilios.php','lab_enfermeras.php','lab_reportes.php'];
foreach ($views as $v) {
$ok = file_exists(__DIR__ . '/' . $v);
if (!$ok) $allOk = false;
$checks[] = ['ok' => $ok, 'msg' => "Vista $v " . ($ok ? '✔' : '✘ — FALTA')];
}
// ── 5. Directorio uploads ─────────────────────────────────────────────────
$uploadsOk = is_dir(__DIR__ . '/uploads/media') && is_writable(__DIR__ . '/uploads/media');
if (!$uploadsOk) $allOk = false;
$checks[] = ['ok' => $uploadsOk, 'msg' => 'Directorio uploads/media ' . ($uploadsOk ? '✔ (writable)' : '✘ — no existe o sin permisos de escritura')];
// ── Salida ─────────────────────────────────────────────────────────────────
if ($isCli) {
echo "\n=== Módulo Laboratorio — Estado del sistema ===\n\n";
foreach ($checks as $c) {
echo ($c['ok'] ? ' [OK] ' : ' [!!] ') . $c['msg'] . "\n";
}
echo "\n" . ($allOk ? "✔ Todo correcto." : "✘ Hay problemas — revisa los puntos marcados con [!!]") . "\n\n";
exit($allOk ? 0 : 1);
}
$adminNombre = $_SESSION['admin_user']['full_name'] ?? $_SESSION['admin_user']['username'] ?? 'Admin';
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Estado Módulo Lab</title>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="./assets/css/styles.css?v=12" rel="stylesheet">
</head>
<body>
<?php
$SIDEBAR_TITLE = 'Panel Lab';
$SIDEBAR_ICON = 'fas fa-flask';
require_once __DIR__ . '/shared/components/sidebar.php';
?>
<main class="main-content">
<header class="content-header">
<h1><i class="fas fa-stethoscope text-primary"></i> Estado del Módulo Laboratorio</h1>
<small class="text-muted"><?= htmlspecialchars($adminNombre) ?></small>
</header>
<div class="container-fluid py-3">
<div class="alert alert-<?= $allOk ? 'success' : 'danger' ?> d-flex align-items-center gap-2 mb-3">
<i class="fas fa-<?= $allOk ? 'check-circle' : 'exclamation-triangle' ?> fs-4"></i>
<span class="fw-semibold"><?= $allOk ? 'Módulo instalado correctamente' : 'Se encontraron problemas — revisa los elementos marcados en rojo' ?></span>
</div>
<div class="card border-0 shadow-sm">
<div class="card-body p-0">
<table class="table table-hover mb-0">
<thead class="table-light"><tr><th>Verificación</th><th>Estado</th></tr></thead>
<tbody>
<?php foreach ($checks as $c): ?>
<tr>
<td><?= htmlspecialchars($c['msg']) ?></td>
<td><span class="badge bg-<?= $c['ok'] ? 'success' : 'danger' ?>"><?= $c['ok'] ? 'OK' : 'ERROR' ?></span></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<?php if (!$allOk): ?>
<div class="alert alert-warning mt-3">
<h6 class="fw-semibold"><i class="fas fa-wrench me-2"></i>Pasos para solucionar:</h6>
<ol class="mb-0">
<li>Ejecuta las migraciones: <code>php migrations/20260302_lab_run_migrations.php</code></li>
<li>Verifica que todos los archivos de <code>classes/lab/</code> y <code>api/lab/</code> existen</li>
<li>Asegúrate de que <code>uploads/media/</code> tiene permisos 755 o 775</li>
</ol>
</div>
<?php endif; ?>
<?php if ($allOk): ?>
<div class="mt-3">
<a href="lab_dashboard.php" class="btn btn-success"><i class="fas fa-flask me-2"></i>Ir al Módulo Laboratorio</a>
</div>
<?php endif; ?>
</div>
</main>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>