From 08ec1eda147e737ca95de28030816ed1039422ca Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 8 Jul 2026 10:23:19 -0500 Subject: [PATCH] fix: allow explicit es_toma_progresiva override per form; F-LAB-28 forced off --- _dbg.php | 25 ----------- dbg_form.php | 26 ------------ modules/turnero/api/_debug_form.php | 41 ------------------- modules/turnero/api/get_consentimientos.php | 24 ++++++----- .../migrations/add_es_toma_progresiva.sql | 13 ++++++ 5 files changed, 27 insertions(+), 102 deletions(-) delete mode 100644 _dbg.php delete mode 100644 dbg_form.php delete mode 100644 modules/turnero/api/_debug_form.php create mode 100644 modules/turnero/migrations/add_es_toma_progresiva.sql diff --git a/_dbg.php b/_dbg.php deleted file mode 100644 index a57cb1f..0000000 --- a/_dbg.php +++ /dev/null @@ -1,25 +0,0 @@ -getConnection(); -$stmt = $pdo->prepare( - "SELECT id, nombre, codigo, esquema FROM lab_formularios - WHERE nombre LIKE ? OR codigo LIKE ? OR codigo = 'F-LAB-28' - LIMIT 5" -); -$stmt->execute(['%helicobacter%', '%LAB-28%']); -$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); -if (!$rows) { - $rows = $pdo->query("SELECT id, nombre, codigo FROM lab_formularios ORDER BY id LIMIT 30")->fetchAll(PDO::FETCH_ASSOC); - echo json_encode(['not_found'=>true,'forms'=>$rows], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); - exit; -} -foreach ($rows as &$r) { - $dec = json_decode($r['esquema'], true); - $campos = is_array($dec) ? $dec : ($dec['campos'] ?? []); - $fp = array_values(array_filter($campos, fn($f)=>($f['tipo']??'')==='firma_profesional')); - $r['count_fp'] = count($fp); - $r['firma_pro_fields'] = $fp; - unset($r['esquema']); -} -echo json_encode($rows, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); diff --git a/dbg_form.php b/dbg_form.php deleted file mode 100644 index 27fa3fc..0000000 --- a/dbg_form.php +++ /dev/null @@ -1,26 +0,0 @@ -getConnection(); -$stmt = $pdo->prepare( - "SELECT id, nombre, codigo, esquema FROM lab_formularios - WHERE LOWER(nombre) LIKE '%helicobacter%' OR codigo = 'F-LAB-28' - LIMIT 5" -); -$stmt->execute(); -$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); -if (!$rows) { - $all = $pdo->query("SELECT id, nombre, codigo FROM lab_formularios ORDER BY id LIMIT 50")->fetchAll(PDO::FETCH_ASSOC); - echo json_encode(['not_found'=>true,'forms'=>$all], JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); - exit; -} -foreach ($rows as &$r) { - $dec = json_decode($r['esquema'], true); - $campos = is_array($dec) ? $dec : ($dec['campos'] ?? []); - $fp = array_values(array_filter($campos, fn($f)=>($f['tipo']??'')==='firma_profesional')); - $r['count_fp'] = count($fp); - $r['firma_pro_ids'] = array_column($fp, 'id'); - $r['all_tipos'] = array_count_values(array_column($campos, 'tipo')); - unset($r['esquema']); -} -echo json_encode($rows, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); diff --git a/modules/turnero/api/_debug_form.php b/modules/turnero/api/_debug_form.php deleted file mode 100644 index 9e608b2..0000000 --- a/modules/turnero/api/_debug_form.php +++ /dev/null @@ -1,41 +0,0 @@ -getConnection(); - -// Buscar por nombre o código F-LAB-28 -$stmt = $pdo->prepare( - "SELECT id, nombre, codigo, is_active, - JSON_LENGTH(esquema) AS esquema_longitud, - esquema - FROM lab_formularios - WHERE nombre LIKE ? OR codigo LIKE ? - LIMIT 5" -); -$stmt->execute(['%helicobacter%', '%F-LAB-28%']); -$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - -if (!$rows) { - // Buscar todos los formularios para ver cuáles hay - $stmt2 = $pdo->query("SELECT id, nombre, codigo FROM lab_formularios ORDER BY id LIMIT 50"); - echo json_encode(['not_found' => true, 'all_forms' => $stmt2->fetchAll(PDO::FETCH_ASSOC)], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); - exit; -} - -foreach ($rows as &$r) { - $decoded = json_decode($r['esquema'], true); - $campos = is_array($decoded) ? $decoded : ($decoded['campos'] ?? []); - $firmaPro = array_values(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma_profesional')); - $r['campos_total'] = count($campos); - $r['campos_firma_profesional'] = $firmaPro; - $r['count_firma_profesional'] = count($firmaPro); - unset($r['esquema']); -} - -echo json_encode($rows, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 16d3ed2..c4d14ec 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -61,8 +61,9 @@ $stmt = $pdo->prepare( tc.siguiente_toma_at, tc.toma_inicio_at, tc.datos_respuestas, - f.nombre AS formulario_nombre, - f.esquema AS formulario_esquema + f.nombre AS formulario_nombre, + f.esquema AS formulario_esquema, + f.es_toma_progresiva AS formulario_es_toma_prog FROM turnero_consentimientos tc LEFT JOIN lab_formularios f ON f.id = tc.formulario_id WHERE tc.turno_id = ? @@ -83,9 +84,10 @@ foreach ($consentimientos as &$c) { $tieneFirmaPro = !empty($camposFirmaPro); $tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma')); - // Toma progresiva: más de 1 campo firma_profesional - $esTomaProg = count($camposFirmaPro) > 1; - $tomasTotal = count($camposFirmaPro); + // Toma progresiva: override explícito en DB gana; si es NULL, usar heurística (>1 campo firma_profesional) + $overrideProg = $c['formulario_es_toma_prog'] ?? null; + $esTomaProg = $overrideProg !== null ? (bool)(int)$overrideProg : count($camposFirmaPro) > 1; + $tomasTotal = count($camposFirmaPro); $tomasFirm = 0; if ($esTomaProg && $c['datos_respuestas']) { $dr = json_decode($c['datos_respuestas'], true) ?? []; @@ -103,7 +105,7 @@ foreach ($consentimientos as &$c) { $c['tomas_firmadas'] = $tomasFirm; // Exponer campos firma_profesional (ids) para el frontend $c['campos_firma_pro'] = array_column($camposFirmaPro, 'id'); - unset($c['formulario_esquema'], $c['datos_respuestas']); + unset($c['formulario_esquema'], $c['formulario_es_toma_prog'], $c['datos_respuestas']); } unset($c); @@ -235,8 +237,9 @@ if ($incluirSolicitud) { tc.siguiente_toma_at, tc.toma_inicio_at, tc.datos_respuestas, - f.nombre AS formulario_nombre, - f.esquema AS formulario_esquema + f.nombre AS formulario_nombre, + f.esquema AS formulario_esquema, + f.es_toma_progresiva AS formulario_es_toma_prog FROM turnero_consentimientos tc LEFT JOIN lab_formularios f ON f.id = tc.formulario_id WHERE tc.turno_id = ? @@ -254,7 +257,8 @@ if ($incluirSolicitud) { $camposFirmaPro = array_values(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma_profesional')); $tieneFirmaPro = !empty($camposFirmaPro); $tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma')); - $esTomaProg = count($camposFirmaPro) > 1; + $overrideProg = $c['formulario_es_toma_prog'] ?? null; + $esTomaProg = $overrideProg !== null ? (bool)(int)$overrideProg : count($camposFirmaPro) > 1; $tomasFirm = 0; if ($esTomaProg && $c['datos_respuestas']) { $dr = json_decode($c['datos_respuestas'], true) ?? []; @@ -270,7 +274,7 @@ if ($incluirSolicitud) { $c['tomas_total'] = count($camposFirmaPro); $c['tomas_firmadas'] = $tomasFirm; $c['campos_firma_pro'] = array_column($camposFirmaPro, 'id'); - unset($c['formulario_esquema'], $c['datos_respuestas']); + unset($c['formulario_esquema'], $c['formulario_es_toma_prog'], $c['datos_respuestas']); } unset($c); $respuesta['consentimientos'] = $consentimientos; diff --git a/modules/turnero/migrations/add_es_toma_progresiva.sql b/modules/turnero/migrations/add_es_toma_progresiva.sql new file mode 100644 index 0000000..df3c9ee --- /dev/null +++ b/modules/turnero/migrations/add_es_toma_progresiva.sql @@ -0,0 +1,13 @@ +-- Migración: control explícito de toma progresiva por formulario +-- NULL = usar heurística automática (count(firma_profesional) > 1) +-- 0 = forzar NO toma progresiva +-- 1 = forzar SÍ toma progresiva + +ALTER TABLE lab_formularios + ADD COLUMN IF NOT EXISTS es_toma_progresiva TINYINT(1) DEFAULT NULL + COMMENT '0=nunca prog, 1=siempre prog, NULL=detectar automáticamente'; + +-- F-LAB-28 (Consentimiento Helicobacter Pylori) no es toma progresiva +UPDATE lab_formularios + SET es_toma_progresiva = 0 + WHERE codigo = 'F-LAB-28';