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) $datosArr['_pro_nombre'] = $proNombre; if ($proCedula) $datosArr['_pro_cedula'] = $proCedula; $datosArr['_pro_id'] = $__uid; } if (!empty($datosArr)) { $datosResp = json_encode($datosArr, JSON_UNESCAPED_UNICODE); } $stmt = $pdo->prepare( "SELECT tc.id, tc.estado, t.sesion_id FROM turnero_consentimientos tc JOIN turnero_turnos t ON t.id = tc.turno_id WHERE tc.turno_id = ? AND tc.formulario_id = ?" ); $stmt->execute([$turnoId, $formularioId]); $tc = $stmt->fetch(PDO::FETCH_ASSOC); if (!$tc) jsonError('Consentimiento no encontrado.', 404); if ($soloPro) { // El profesional es el firmante final: guardar datos + marcar como firmado $pdo->prepare( "UPDATE turnero_consentimientos SET firma_profesional_svg = ?, firmado_profesional_at = NOW(), estado = 'firmado', firmado_at = NOW(), datos_respuestas = COALESCE(?, datos_respuestas) WHERE turno_id = ? AND formulario_id = ?" )->execute([$svg, $datosResp, $turnoId, $formularioId]); } else { $pdo->prepare( "UPDATE turnero_consentimientos SET firma_profesional_svg = ?, firmado_profesional_at = NOW(), datos_respuestas = CASE WHEN ? IS NOT NULL THEN JSON_MERGE_PATCH(COALESCE(datos_respuestas,'{}'), ?) ELSE datos_respuestas END WHERE turno_id = ? AND formulario_id = ?" )->execute([$svg, $datosResp, $datosResp, $turnoId, $formularioId]); } notificarSSE((int)$tc['sesion_id']); jsonOk(['mensaje' => 'Firma del profesional guardada correctamente.']);