fix: allow explicit es_toma_progresiva override per form; F-LAB-28 forced off
This commit is contained in:
@@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once __DIR__ . '/config/config.php';
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
$pdo = Database::getInstance()->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);
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once __DIR__ . '/config/config.php';
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
$pdo = Database::getInstance()->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);
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* DEBUG TEMPORAL: Inspeccionar esquema de formulario por nombre/codigo.
|
|
||||||
* Eliminar tras uso.
|
|
||||||
*/
|
|
||||||
require_once __DIR__ . '/../../../config/config.php';
|
|
||||||
|
|
||||||
header('Content-Type: application/json; charset=utf-8');
|
|
||||||
|
|
||||||
$pdo = Database::getInstance()->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);
|
|
||||||
@@ -61,8 +61,9 @@ $stmt = $pdo->prepare(
|
|||||||
tc.siguiente_toma_at,
|
tc.siguiente_toma_at,
|
||||||
tc.toma_inicio_at,
|
tc.toma_inicio_at,
|
||||||
tc.datos_respuestas,
|
tc.datos_respuestas,
|
||||||
f.nombre AS formulario_nombre,
|
f.nombre AS formulario_nombre,
|
||||||
f.esquema AS formulario_esquema
|
f.esquema AS formulario_esquema,
|
||||||
|
f.es_toma_progresiva AS formulario_es_toma_prog
|
||||||
FROM turnero_consentimientos tc
|
FROM turnero_consentimientos tc
|
||||||
LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
|
LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
|
||||||
WHERE tc.turno_id = ?
|
WHERE tc.turno_id = ?
|
||||||
@@ -83,9 +84,10 @@ foreach ($consentimientos as &$c) {
|
|||||||
$tieneFirmaPro = !empty($camposFirmaPro);
|
$tieneFirmaPro = !empty($camposFirmaPro);
|
||||||
$tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma'));
|
$tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma'));
|
||||||
|
|
||||||
// Toma progresiva: más de 1 campo firma_profesional
|
// Toma progresiva: override explícito en DB gana; si es NULL, usar heurística (>1 campo firma_profesional)
|
||||||
$esTomaProg = count($camposFirmaPro) > 1;
|
$overrideProg = $c['formulario_es_toma_prog'] ?? null;
|
||||||
$tomasTotal = count($camposFirmaPro);
|
$esTomaProg = $overrideProg !== null ? (bool)(int)$overrideProg : count($camposFirmaPro) > 1;
|
||||||
|
$tomasTotal = count($camposFirmaPro);
|
||||||
$tomasFirm = 0;
|
$tomasFirm = 0;
|
||||||
if ($esTomaProg && $c['datos_respuestas']) {
|
if ($esTomaProg && $c['datos_respuestas']) {
|
||||||
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
||||||
@@ -103,7 +105,7 @@ foreach ($consentimientos as &$c) {
|
|||||||
$c['tomas_firmadas'] = $tomasFirm;
|
$c['tomas_firmadas'] = $tomasFirm;
|
||||||
// Exponer campos firma_profesional (ids) para el frontend
|
// Exponer campos firma_profesional (ids) para el frontend
|
||||||
$c['campos_firma_pro'] = array_column($camposFirmaPro, 'id');
|
$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);
|
unset($c);
|
||||||
|
|
||||||
@@ -235,8 +237,9 @@ if ($incluirSolicitud) {
|
|||||||
tc.siguiente_toma_at,
|
tc.siguiente_toma_at,
|
||||||
tc.toma_inicio_at,
|
tc.toma_inicio_at,
|
||||||
tc.datos_respuestas,
|
tc.datos_respuestas,
|
||||||
f.nombre AS formulario_nombre,
|
f.nombre AS formulario_nombre,
|
||||||
f.esquema AS formulario_esquema
|
f.esquema AS formulario_esquema,
|
||||||
|
f.es_toma_progresiva AS formulario_es_toma_prog
|
||||||
FROM turnero_consentimientos tc
|
FROM turnero_consentimientos tc
|
||||||
LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
|
LEFT JOIN lab_formularios f ON f.id = tc.formulario_id
|
||||||
WHERE tc.turno_id = ?
|
WHERE tc.turno_id = ?
|
||||||
@@ -254,7 +257,8 @@ if ($incluirSolicitud) {
|
|||||||
$camposFirmaPro = array_values(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma_profesional'));
|
$camposFirmaPro = array_values(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma_profesional'));
|
||||||
$tieneFirmaPro = !empty($camposFirmaPro);
|
$tieneFirmaPro = !empty($camposFirmaPro);
|
||||||
$tieneFirmaPac = !empty(array_filter($campos, fn($f) => ($f['tipo'] ?? '') === 'firma'));
|
$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;
|
$tomasFirm = 0;
|
||||||
if ($esTomaProg && $c['datos_respuestas']) {
|
if ($esTomaProg && $c['datos_respuestas']) {
|
||||||
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
$dr = json_decode($c['datos_respuestas'], true) ?? [];
|
||||||
@@ -270,7 +274,7 @@ if ($incluirSolicitud) {
|
|||||||
$c['tomas_total'] = count($camposFirmaPro);
|
$c['tomas_total'] = count($camposFirmaPro);
|
||||||
$c['tomas_firmadas'] = $tomasFirm;
|
$c['tomas_firmadas'] = $tomasFirm;
|
||||||
$c['campos_firma_pro'] = array_column($camposFirmaPro, 'id');
|
$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);
|
unset($c);
|
||||||
$respuesta['consentimientos'] = $consentimientos;
|
$respuesta['consentimientos'] = $consentimientos;
|
||||||
|
|||||||
@@ -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';
|
||||||
Reference in New Issue
Block a user