Files
whatsapp/api/lab/eps.php
Lizandro GuarnizoandClaude Sonnet 4.6 da2bfde38f feat: CRUD de EPS + select en modal de paciente
- Tabla lab_eps creada y poblada con valores existentes de lab_pacientes
- Módulo lab_eps: listado, crear, editar, activar/desactivar, eliminar
- API /api/lab/eps.php: GET list, POST save/toggle/delete
- Modal paciente en recepción: campo EPS cambiado de texto libre a select
  cargado desde lab_eps al iniciar la página

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-16 20:33:57 -05:00

65 lines
2.3 KiB
PHP

<?php
/**
* /api/lab/eps.php
* GET ?action=list [solo_activas=1] → lista EPS
* POST {action:save, id?, nombre} → crear / renombrar
* POST {action:toggle, id} → activar / desactivar
* POST {action:delete, id} → eliminar (solo si no hay pacientes)
*/
require_once __DIR__ . '/_helpers.php';
$pdo = db();
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$soloActivas = isset($_GET['solo_activas']) && $_GET['solo_activas'] == '1';
$sql = 'SELECT id, nombre, activa, orden FROM lab_eps' . ($soloActivas ? ' WHERE activa = 1' : '') . ' ORDER BY nombre';
$rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
jsonOk(['eps' => $rows]);
}
requireMethod('POST');
requireAdmin();
$body = inputJson();
$action = trim($body['action'] ?? '');
if ($action === 'save') {
$nombre = trim($body['nombre'] ?? '');
$id = (int)($body['id'] ?? 0);
if (!$nombre) jsonError('nombre requerido.');
if (strlen($nombre) > 120) jsonError('nombre demasiado largo (máx 120).');
if ($id) {
$pdo->prepare('UPDATE lab_eps SET nombre = ? WHERE id = ?')->execute([$nombre, $id]);
jsonOk(['id' => $id], 'EPS actualizada.');
} else {
$st = $pdo->prepare('INSERT INTO lab_eps (nombre) VALUES (?)');
try {
$st->execute([$nombre]);
} catch (\PDOException $e) {
if ($e->getCode() == 23000) jsonError('Ya existe una EPS con ese nombre.');
throw $e;
}
jsonOk(['id' => (int)$pdo->lastInsertId()], 'EPS creada.');
}
}
if ($action === 'toggle') {
$id = (int)($body['id'] ?? 0);
if (!$id) jsonError('id requerido.');
$pdo->prepare('UPDATE lab_eps SET activa = NOT activa WHERE id = ?')->execute([$id]);
jsonOk([], 'Estado actualizado.');
}
if ($action === 'delete') {
$id = (int)($body['id'] ?? 0);
if (!$id) jsonError('id requerido.');
$uso = $pdo->prepare('SELECT COUNT(*) FROM lab_pacientes WHERE eps = (SELECT nombre FROM lab_eps WHERE id = ?)');
$uso->execute([$id]);
if ((int)$uso->fetchColumn() > 0) jsonError('No se puede eliminar: hay pacientes con esta EPS. Desactívela en su lugar.');
$pdo->prepare('DELETE FROM lab_eps WHERE id = ?')->execute([$id]);
jsonOk([], 'EPS eliminada.');
}
jsonError('action inválida.');