From f6d4ee9bdde463149c48659cc17cbb1e888e0131 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:55:37 -0500 Subject: [PATCH] Capturar firmante de cada toma en el servidor; igualar render del modal en historial MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit guardar_toma.php (única ruta de firma de F-LAB-28 Tomas Prolongadas) nunca registró quién firmaba: solo guardaba el SVG por campo. De los 111 registros del formulario, 0 tienen identidad del firmante y no hay traza en ninguna tabla de auditoría, así que no es recuperable retroactivamente. Ahora el nombre/cédula se resuelven desde la sesión en el servidor (adminId()) y se guardan por toma — cada toma puede firmarla un profesional distinto, y esta es la única fuente confiable. El intento anterior dependía de que el navegador enviara window._profNombre. historial.php abría el modal sin compact=1&zoom=1.1, que sí usa bandeja; por eso el mismo documento se veía en lista larga en vez de la grilla con tarjetas de toma. Co-Authored-By: Claude Opus 5 --- modules/turnero/api/guardar_toma.php | 28 ++++++++++++++++++++++++++++ modules/turnero/views/historial.php | 4 +++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/modules/turnero/api/guardar_toma.php b/modules/turnero/api/guardar_toma.php index e009bf0..a4b1077 100644 --- a/modules/turnero/api/guardar_toma.php +++ b/modules/turnero/api/guardar_toma.php @@ -56,6 +56,34 @@ if ($tc['datos_respuestas']) { } // Guardar svg en el campo firmado $datosInput[$campoId] = $svg; + +// Identidad del firmante — resuelta en el servidor desde la sesión, no desde el +// cliente: cada toma puede firmarla un profesional distinto y esta es la única +// fuente confiable de quién la hizo. +$__uid = adminId(); +if ($__uid) { + $stmtPro = $pdo->prepare( + "SELECT au.full_name, au.cedula AS au_cedula, + le.nombre_completo AS pro_nombre, le.numero_documento AS pro_documento + FROM admin_users au + LEFT JOIN lab_enfermeras le ON le.id = au.enfermera_id + WHERE au.id = ? LIMIT 1" + ); + $stmtPro->execute([$__uid]); + $pro = $stmtPro->fetch(PDO::FETCH_ASSOC) ?: []; + $proNombre = ($pro['pro_nombre'] ?? null) ?: ($pro['full_name'] ?? null); + $proCedula = ($pro['au_cedula'] ?? null) ?: ($pro['pro_documento'] ?? null); + if ($proNombre) { + $datosInput[$campoId . '_pro_nombre'] = $proNombre; + $datosInput['_pro_nombre'] = $proNombre; // respaldo global + } + if ($proCedula) { + $datosInput[$campoId . '_pro_cedula'] = $proCedula; + $datosInput['_pro_cedula'] = $proCedula; + } + $datosInput[$campoId . '_pro_id'] = $__uid; +} + $datosMerge = array_merge($datosActuales, $datosInput); // ── Analizar esquema: campos firma_profesional en orden ────── diff --git a/modules/turnero/views/historial.php b/modules/turnero/views/historial.php index eb47695..9fc0084 100644 --- a/modules/turnero/views/historial.php +++ b/modules/turnero/views/historial.php @@ -631,7 +631,9 @@ async function cargarDocumentosTurno(turnoId, container) { ? ` ${c.tomas_firmadas||0}/${c.tomas_total||0} tomas` : ''; if (est === 'firmado' && c.token) { - const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token) + '&embed=1'; + // Mismos parámetros que bandeja: compact activa la grilla de campos + // y las tarjetas de toma; sin ellos el documento se ve en lista larga. + const url = BASE_URL_ROOT + 'ver_formulario_enviado.php?token=' + encodeURIComponent(c.token) + '&embed=1&compact=1&zoom=1.1'; return ` ${nombre}${tomas} `;