From 912798fbcc31649af5b03ed93c18883d7df3889b Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 9 Jul 2026 11:34:03 -0500 Subject: [PATCH] feat(pacientes): origen 'lab' en vez de 'rips' + tabla ampliada + proteger origen en update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Valor de BD cambia de 'rips' a 'lab' (más genérico) - ingest_paciente: en UPDATE nunca pisa origen (conserva manual/whatsapp/lab) - Badge muestra 'Resultados Lab' con ícono matraz; retrocompat con valor 'rips' - Tabla agrega: teléfono+WA, email, EPS, género en nombre - filtro dropdown usa 'lab' en lugar de 'rips' Co-Authored-By: Claude Sonnet 4.6 --- api/lab/get_pacientes.php | 2 +- api/lab/ingest_paciente.php | 7 +++++-- classes/lab/Paciente.php | 2 +- lab_pacientes.php | 21 +++++++++++++------- migrar_origen.php | 2 +- migrations/20260709_lab_pacientes_origen.sql | 2 +- run_20260709_origen.php | 2 +- 7 files changed, 24 insertions(+), 14 deletions(-) diff --git a/api/lab/get_pacientes.php b/api/lab/get_pacientes.php index 6e6c8dd..32dcefe 100644 --- a/api/lab/get_pacientes.php +++ b/api/lab/get_pacientes.php @@ -20,7 +20,7 @@ try { $busqueda = trim($_GET['busqueda'] ?? $_GET['search'] ?? ''); $pagina = max(1, (int)($_GET['page'] ?? $_GET['pagina'] ?? 1)); $por = max(1, min(100, (int)($_GET['limit'] ?? $_GET['por_pagina'] ?? 30))); - $origen = in_array($_GET['origen'] ?? '', ['manual', 'rips', 'whatsapp'], true) + $origen = in_array($_GET['origen'] ?? '', ['manual', 'lab', 'whatsapp'], true) ? $_GET['origen'] : ''; jsonOk($pac->listar($busqueda, $pagina, $por, $origen)); diff --git a/api/lab/ingest_paciente.php b/api/lab/ingest_paciente.php index bdd16c3..8daa3f1 100644 --- a/api/lab/ingest_paciente.php +++ b/api/lab/ingest_paciente.php @@ -121,9 +121,10 @@ if (!empty($data['ciudad'])) { if (!empty($data['eps'])) { $campos['eps'] = trim($data['eps']); } -$origenValidos = ['manual', 'rips', 'whatsapp']; +// origen solo se aplica en creación, nunca en update +$origenValidos = ['manual', 'lab', 'whatsapp']; $campos['origen'] = in_array($data['origen'] ?? '', $origenValidos, true) - ? $data['origen'] : 'rips'; + ? $data['origen'] : 'lab'; // ── Modo: "insertar" (solo nuevos) | "upsert" (crea o actualiza) ───────────── $modo = trim($data['modo'] ?? 'upsert'); @@ -151,6 +152,8 @@ try { 'message' => 'Paciente ya existe', ]); } else { + // Nunca pisar origen en update — conservar el que ya tiene en BD + unset($campos['origen']); $pac->actualizar($existente['id'], $campos, null); echo json_encode([ 'ok' => true, diff --git a/classes/lab/Paciente.php b/classes/lab/Paciente.php index 52ac9f4..a30beef 100644 --- a/classes/lab/Paciente.php +++ b/classes/lab/Paciente.php @@ -78,7 +78,7 @@ class Paciente { return $this->db->fetch(" SELECT COUNT(*) AS total, - SUM(origen = 'rips') AS importados, + SUM(origen = 'lab') AS importados, SUM(origen = 'manual') AS manuales, SUM(origen = 'whatsapp') AS whatsapp, SUM(user_id IS NOT NULL) AS con_wa diff --git a/lab_pacientes.php b/lab_pacientes.php index db0083c..927b321 100644 --- a/lab_pacientes.php +++ b/lab_pacientes.php @@ -197,7 +197,7 @@ require_once __DIR__ . '/shared/components/sidebar.php';
@@ -220,7 +220,10 @@ require_once __DIR__ . '/shared/components/sidebar.php'; Paciente Documento + Teléfono + Email Ciudad + EPS Origen Registro Órd. @@ -228,7 +231,7 @@ require_once __DIR__ . '/shared/components/sidebar.php'; - + Cargando... @@ -431,9 +434,10 @@ function filtrarOrigen(origen) { // ── Lista ────────────────────────────────────────────────────────────────── const _origenBadge = { - rips: 'RIPS', - whatsapp: 'WA', + lab: 'Resultados Lab', + whatsapp: 'WhatsApp', manual: 'Manual', + rips: 'Resultados Lab', }; function origenBadge(origen) { @@ -456,7 +460,7 @@ async function cargarLista(pag = 1) { const tbody = document.getElementById('tabla-body'); if (!d.data?.length) { - tbody.innerHTML = 'Sin resultados'; + tbody.innerHTML = 'Sin resultados'; document.getElementById('paginacion').innerHTML = ''; return; } @@ -465,10 +469,13 @@ async function cargarLista(pag = 1) {
${esc(p.nombre_completo)}
- ${p.telefono ? `${esc(p.telefono)}` : ''} + ${p.genero ? `${p.genero==='M'?'Masculino':p.genero==='F'?'Femenino':'Otro'}` : ''} - ${tipoDocLabel(p.tipo_documento)} ${esc(p.numero_documento||'—')} + ${tipoDocLabel(p.tipo_documento)}
${esc(p.numero_documento||'—')} + ${esc(p.telefono||'—')}${p.phone_number ? `
${esc(p.phone_number)}` : ''} + ${esc(p.email||'—')} ${esc(p.ciudad||'—')} + ${esc(p.eps||'—')} ${origenBadge(p.origen)} ${fmtFecha(p.created_at)} ${p.total_ordenes||0} diff --git a/migrar_origen.php b/migrar_origen.php index d3f6d57..0847485 100644 --- a/migrar_origen.php +++ b/migrar_origen.php @@ -7,7 +7,7 @@ if (!defined('MIGRATION_TOKEN') || ($_GET['token'] ?? '') !== MIGRATION_TOKEN) { $pdo = Database::getInstance()->getConnection(); $steps = [ - "ALTER TABLE lab_pacientes ADD COLUMN IF NOT EXISTS origen VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'Origen: manual | rips | whatsapp' AFTER notas_admin", + "ALTER TABLE lab_pacientes ADD COLUMN IF NOT EXISTS origen VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'Origen: manual | lab | whatsapp' AFTER notas_admin", "UPDATE lab_pacientes SET origen = 'whatsapp' WHERE user_id IS NOT NULL AND origen = 'manual'", "CREATE INDEX IF NOT EXISTS idx_pac_origen ON lab_pacientes (origen)", ]; diff --git a/migrations/20260709_lab_pacientes_origen.sql b/migrations/20260709_lab_pacientes_origen.sql index 619c956..45f91c4 100644 --- a/migrations/20260709_lab_pacientes_origen.sql +++ b/migrations/20260709_lab_pacientes_origen.sql @@ -4,7 +4,7 @@ ALTER TABLE `lab_pacientes` ADD COLUMN `origen` VARCHAR(20) NOT NULL DEFAULT 'manual' - COMMENT 'Origen del registro: manual | rips | whatsapp' + COMMENT 'Origen del registro: manual | lab | whatsapp' AFTER `notas_admin`; -- Los pacientes con user_id ya vinculado se marcan como whatsapp diff --git a/run_20260709_origen.php b/run_20260709_origen.php index 9a62e17..e5cbb8c 100644 --- a/run_20260709_origen.php +++ b/run_20260709_origen.php @@ -11,7 +11,7 @@ require_once __DIR__ . '/classes/Database.php'; $pdo = Database::getInstance()->getConnection(); $steps = [ - "ALTER TABLE lab_pacientes ADD COLUMN IF NOT EXISTS origen VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'Origen: manual | rips | whatsapp' AFTER notas_admin", + "ALTER TABLE lab_pacientes ADD COLUMN IF NOT EXISTS origen VARCHAR(20) NOT NULL DEFAULT 'manual' COMMENT 'Origen: manual | lab | whatsapp' AFTER notas_admin", "UPDATE lab_pacientes SET origen = 'whatsapp' WHERE user_id IS NOT NULL AND origen = 'manual'", "CREATE INDEX IF NOT EXISTS idx_pac_origen ON lab_pacientes (origen)", ];