diff --git a/api/lab/firmar_profesional.php b/api/lab/firmar_profesional.php index 2d74662..5b01b15 100644 --- a/api/lab/firmar_profesional.php +++ b/api/lab/firmar_profesional.php @@ -29,9 +29,11 @@ if (!isUserLoggedIn()) { $body = json_decode(file_get_contents('php://input'), true); if (!$body) $body = $_POST; -$envioId = (int)($body['envio_id'] ?? 0); -$campoId = trim($body['campo_id'] ?? ''); -$svg = $body['svg'] ?? ''; +$envioId = (int)($body['envio_id'] ?? 0); +$campoId = trim($body['campo_id'] ?? ''); +$svg = $body['svg'] ?? ''; +$proNombre = trim($body['pro_nombre'] ?? ''); +$proCedula = trim($body['pro_cedula'] ?? ''); if (!$envioId) err('envio_id requerido'); if ($campoId === '') err('campo_id requerido'); @@ -72,6 +74,8 @@ if (!$campoDef || ($campoDef['tipo'] ?? '') !== 'firma_profesional') { // ── Actualizar datos_cliente: guardar solo en el campo firmado ── $datos = json_decode($envio['datos_cliente'] ?? '{}', true) ?? []; $datos[$campoId . '_svg'] = $svg; +if ($proNombre !== '') $datos['_pro_nombre'] = $proNombre; +if ($proCedula !== '') $datos['_pro_cedula'] = $proCedula; $nuevosDatos = json_encode($datos, JSON_UNESCAPED_UNICODE); $nuevoEstado = $envio['estado'] === 'firmado' ? 'firmado' : 'firmado'; diff --git a/modules/turnero/api/get_consentimientos.php b/modules/turnero/api/get_consentimientos.php index 74befbb..375b454 100644 --- a/modules/turnero/api/get_consentimientos.php +++ b/modules/turnero/api/get_consentimientos.php @@ -204,34 +204,9 @@ if ($incluirSolicitud) { $stmt->execute([$solicitud['id']]); $examenes = $stmt->fetchAll(PDO::FETCH_ASSOC); - // Visita de solo entrega de muestras: no requiere consentimientos ni formularios - if (!empty($solicitud['solo_muestras'])) { - $respuesta['consentimientos'] = []; - $respuesta['solicitud'] = $solicitud; - $respuesta['paciente'] = $paciente; - $respuesta['examenes'] = $examenes; - // Muestras pendientes de visitas anteriores - $muestras = []; - try { - $stmtPrev = $pdo->prepare( - "SELECT tm.id, tm.tipo_muestra, tm.estado, tm.motivo_rechazo, tm.recibida_at, - COALESCE(lt.nombre, tm.tipo_muestra) AS label, - 1 AS es_pendiente_anterior, - ts.numero_orden AS solicitud_orden_anterior - FROM turnero_muestras tm - JOIN turnero_solicitudes ts ON ts.id = tm.solicitud_id - LEFT JOIN lab_tipos_muestra lt ON lt.codigo = tm.tipo_muestra - WHERE ts.paciente_id = ? - AND tm.solicitud_id != ? - AND tm.estado = 'pendiente' - ORDER BY tm.id ASC" - ); - $stmtPrev->execute([$solicitud['paciente_id'], $solicitud['id']]); - $muestras = $stmtPrev->fetchAll(PDO::FETCH_ASSOC); - } catch (\Throwable $_) {} - $respuesta['muestras'] = $muestras; - jsonOk($respuesta); - } + // Nota: en visitas de "solo entrega de muestras" no hay exámenes, así que la + // Fuente 1 (por examen) no aplica, pero la Fuente 2 (por lugar, ej. F-LAB-08 + // Datos Toma de Muestras) sigue siendo obligatoria — se procesa más abajo igual. // Auto-crear consentimientos requeridos desde DOS fuentes: // 1. Por examen → exam_tipo_consentimientos diff --git a/ver_formulario_enviado.php b/ver_formulario_enviado.php index 6fe1e2c..6d9c5e1 100644 --- a/ver_formulario_enviado.php +++ b/ver_formulario_enviado.php @@ -249,15 +249,18 @@ $compact = $embebido && isset($_GET['compact']); $autoprint = isset($_GET['autoprint']) && $_GET['autoprint'] === '1'; // Firma pre-guardada del profesional logueado (para botón de 1 clic) +// Aplica tanto al turnero embebido como a la firma directa fuera del turnero +// (staff logueado viendo/firmando un formulario por ?id=), para que el +// nombre y cédula del firmante salgan en cualquier formato. $firmaProfPreguardada = null; $profNombre = null; $profDocumento = null; -if ($modoTurnero && $embebido && isUserLoggedIn()) { +if ((($modoTurnero && $embebido) || (!$modoTurnero && !$modoPublico)) && isUserLoggedIn()) { $uid = (int)($_SESSION['admin_user']['id'] ?? 0); if ($uid) { try { $stmt = $db->getConnection()->prepare( - "SELECT au.firma_svg, au.full_name, + "SELECT au.firma_svg, 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 @@ -267,7 +270,7 @@ if ($modoTurnero && $embebido && isUserLoggedIn()) { $pRow = $stmt->fetch(PDO::FETCH_ASSOC) ?: []; $firmaProfPreguardada = $pRow['firma_svg'] ?: null; $profNombre = $pRow['pro_nombre'] ?: ($pRow['full_name'] ?: null); - $profDocumento = $pRow['pro_documento'] ?: null; + $profDocumento = $pRow['au_cedula'] ?: ($pRow['pro_documento'] ?: null); } catch (\Throwable $_) {} } } @@ -2230,7 +2233,8 @@ function _guardarFirmaPro(widget, svg, msgEl) { ? { turno_id: parseInt(turnoId), formulario_id: parseInt(formularioId), svg, datos_respuestas: datosRespuestas, ...(soloPro ? { solo_profesional: true } : {}) } - : { envio_id: envioId, campo_id: campoId, svg }; + : { envio_id: envioId, campo_id: campoId, svg, + pro_nombre: window._profNombre || null, pro_cedula: window._profDocumento || null }; fetch(saveUrl, { method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify(payload) }) .then(r => r.json())