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.']);