/** * A simple set of functions to check our version 1.0 update service. * * @package WordPress * @since 2.3.0 */ /** * Check WordPress version against the newest version. * * The WordPress version, PHP version, and Locale is sent. Checks against the * WordPress server at api.wordpress.org server. Will only check if WordPress * isn't installing. * * @since 2.3.0 * @uses $wp_version Used to check against the newest WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_version_check( $extra_stats = array(), $force_check = false ) { if ( defined('WP_INSTALLING') ) return; global $wpdb, $wp_local_package; include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $php_version = phpversion(); $current = get_site_transient( 'update_core' ); $translations = wp_get_installed_translations( 'core' ); // Invalidate the transient when $wp_version changes if ( is_object( $current ) && $wp_version != $current->version_checked ) $current = false; if ( ! is_object($current) ) { $current = new stdClass; $current->updates = array(); $current->version_checked = $wp_version; } if ( ! empty( $extra_stats ) ) $force_check = true; // Wait 60 seconds between multiple version check requests $timeout = 60; $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( ! $force_check && $time_not_changed ) return false; $locale = get_locale(); /** * Filter the locale requested for WordPress core translations. * * @since 2.8.0 * * @param string $locale Current locale. */ $locale = apply_filters( 'core_version_check_locale', $locale ); // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_core', $current ); if ( method_exists( $wpdb, 'db_version' ) ) $mysql_version = preg_replace('/[^0-9.].*/', '', $wpdb->db_version()); else $mysql_version = 'N/A'; if ( is_multisite() ) { $user_count = get_user_count(); $num_blogs = get_blog_count(); $wp_install = network_site_url(); $multisite_enabled = 1; } else { $user_count = count_users(); $user_count = $user_count['total_users']; $multisite_enabled = 0; $num_blogs = 1; $wp_install = home_url( '/' ); } $query = array( 'version' => $wp_version, 'php' => $php_version, 'locale' => $locale, 'mysql' => $mysql_version, 'local_package' => isset( $wp_local_package ) ? $wp_local_package : '', 'blogs' => $num_blogs, 'users' => $user_count, 'multisite_enabled' => $multisite_enabled, ); $post_body = array( 'translations' => json_encode( $translations ), ); if ( is_array( $extra_stats ) ) $post_body = array_merge( $post_body, $extra_stats ); $url = $http_url = 'http://api.wordpress.org/core/version-check/1.7/?' . http_build_query( $query, null, '&' ); if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $options = array( 'timeout' => ( ( defined('DOING_CRON') && DOING_CRON ) ? 30 : 3 ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'headers' => array( 'wp_install' => $wp_install, 'wp_blog' => home_url( '/' ) ), 'body' => $post_body, ); $response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) return false; $body = trim( wp_remote_retrieve_body( $response ) ); $body = json_decode( $body, true ); if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) return false; $offers = $body['offers']; foreach ( $offers as &$offer ) { foreach ( $offer as $offer_key => $value ) { if ( 'packages' == $offer_key ) $offer['packages'] = (object) array_intersect_key( array_map( 'esc_url', $offer['packages'] ), array_fill_keys( array( 'full', 'no_content', 'new_bundled', 'partial', 'rollback' ), '' ) ); elseif ( 'download' == $offer_key ) $offer['download'] = esc_url( $value ); else $offer[ $offer_key ] = esc_html( $value ); } $offer = (object) array_intersect_key( $offer, array_fill_keys( array( 'response', 'download', 'locale', 'packages', 'current', 'version', 'php_version', 'mysql_version', 'new_bundled', 'partial_version', 'notify_email', 'support_email' ), '' ) ); } $updates = new stdClass(); $updates->updates = $offers; $updates->last_checked = time(); $updates->version_checked = $wp_version; if ( isset( $body['translations'] ) ) $updates->translations = $body['translations']; set_site_transient( 'update_core', $updates ); if ( ! empty( $body['ttl'] ) ) { $ttl = (int) $body['ttl']; if ( $ttl && ( time() + $ttl < wp_next_scheduled( 'wp_version_check' ) ) ) { // Queue an event to re-run the update check in $ttl seconds. wp_schedule_single_event( time() + $ttl, 'wp_version_check' ); } } // Trigger a background updates check if running non-interactively, and we weren't called from the update handler. if ( defined( 'DOING_CRON' ) && DOING_CRON && ! doing_action( 'wp_maybe_auto_update' ) ) { do_action( 'wp_maybe_auto_update' ); } } /** * Check plugin versions against the latest versions hosted on WordPress.org. * * The WordPress version, PHP version, and Locale is sent along with a list of * all plugins installed. Checks against the WordPress server at * api.wordpress.org. Will only check if WordPress isn't installing. * * @since 2.3.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_plugins( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined('WP_INSTALLING') ) return false; // If running blog-side, bail unless we've not checked in the last 12 hours if ( !function_exists( 'get_plugins' ) ) require_once( ABSPATH . 'wp-admin/includes/plugin.php' ); $plugins = get_plugins(); $translations = wp_get_installed_translations( 'plugins' ); $active = get_option( 'active_plugins', array() ); $current = get_site_transient( 'update_plugins' ); if ( ! is_object($current) ) $current = new stdClass; $new_option = new stdClass; $new_option->last_checked = time(); // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-plugins.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $plugin_changed = false; foreach ( $plugins as $file => $p ) { $new_option->checked[ $file ] = $p['Version']; if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) ) $plugin_changed = true; } if ( isset ( $current->response ) && is_array( $current->response ) ) { foreach ( $current->response as $plugin_file => $update_details ) { if ( ! isset($plugins[ $plugin_file ]) ) { $plugin_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $plugin_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $current->last_checked = time(); set_site_transient( 'update_plugins', $current ); $to_send = compact( 'plugins', 'active' ); $locales = array( get_locale() ); /** * Filter the locales requested for plugin translations. * * @since 3.7.0 * * @param array $locales Plugin locale. Default is current locale of the site. */ $locales = apply_filters( 'plugins_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 plugins $timeout = 3 + (int) ( count( $plugins ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'plugins' => json_encode( $to_send ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), 'all' => json_encode( true ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/plugins/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); foreach ( $response['plugins'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); foreach ( $response['no_update'] as &$plugin ) { $plugin = (object) $plugin; } unset( $plugin ); if ( is_array( $response ) ) { $new_option->response = $response['plugins']; $new_option->translations = $response['translations']; // TODO: Perhaps better to store no_update in a separate transient with an expiry? $new_option->no_update = $response['no_update']; } else { $new_option->response = array(); $new_option->translations = array(); $new_option->no_update = array(); } set_site_transient( 'update_plugins', $new_option ); } /** * Check theme versions against the latest versions hosted on WordPress.org. * * A list of all themes installed in sent to WP. Checks against the * WordPress server at api.wordpress.org. Will only check if WordPress isn't * installing. * * @since 2.7.0 * @uses $wp_version Used to notify the WordPress version. * * @param array $extra_stats Extra statistics to report to the WordPress.org API. * @return mixed Returns null if update is unsupported. Returns false if check is too soon. */ function wp_update_themes( $extra_stats = array() ) { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) return false; $installed_themes = wp_get_themes(); $translations = wp_get_installed_translations( 'themes' ); $last_update = get_site_transient( 'update_themes' ); if ( ! is_object($last_update) ) $last_update = new stdClass; $themes = $checked = $request = array(); // Put slug of current theme into request. $request['active'] = get_option( 'stylesheet' ); foreach ( $installed_themes as $theme ) { $checked[ $theme->get_stylesheet() ] = $theme->get('Version'); $themes[ $theme->get_stylesheet() ] = array( 'Name' => $theme->get('Name'), 'Title' => $theme->get('Name'), 'Version' => $theme->get('Version'), 'Author' => $theme->get('Author'), 'Author URI' => $theme->get('AuthorURI'), 'Template' => $theme->get_template(), 'Stylesheet' => $theme->get_stylesheet(), ); } // Check for update on a different schedule, depending on the page. switch ( current_filter() ) { case 'upgrader_process_complete' : $timeout = 0; break; case 'load-update-core.php' : $timeout = MINUTE_IN_SECONDS; break; case 'load-themes.php' : case 'load-update.php' : $timeout = HOUR_IN_SECONDS; break; default : if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 0; } else { $timeout = 12 * HOUR_IN_SECONDS; } } $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time() - $last_update->last_checked ); if ( $time_not_changed && ! $extra_stats ) { $theme_changed = false; foreach ( $checked as $slug => $v ) { if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) ) $theme_changed = true; } if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { foreach ( $last_update->response as $slug => $update_details ) { if ( ! isset($checked[ $slug ]) ) { $theme_changed = true; break; } } } // Bail if we've checked recently and if nothing has changed if ( ! $theme_changed ) return false; } // Update last_checked for current to prevent multiple blocking requests if request hangs $last_update->last_checked = time(); set_site_transient( 'update_themes', $last_update ); $request['themes'] = $themes; $locales = array( get_locale() ); /** * Filter the locales requested for theme translations. * * @since 3.7.0 * * @param array $locales Theme locale. Default is current locale of the site. */ $locales = apply_filters( 'themes_update_check_locales', $locales ); if ( defined( 'DOING_CRON' ) && DOING_CRON ) { $timeout = 30; } else { // Three seconds, plus one extra second for every 10 themes $timeout = 3 + (int) ( count( $themes ) / 10 ); } $options = array( 'timeout' => $timeout, 'body' => array( 'themes' => json_encode( $request ), 'translations' => json_encode( $translations ), 'locale' => json_encode( $locales ), ), 'user-agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo( 'url' ) ); if ( $extra_stats ) { $options['body']['update_stats'] = json_encode( $extra_stats ); } $url = $http_url = 'http://api.wordpress.org/themes/update-check/1.1/'; if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) $url = set_url_scheme( $url, 'https' ); $raw_response = wp_remote_post( $url, $options ); if ( $ssl && is_wp_error( $raw_response ) ) { trigger_error( __( 'An unexpected error occurred. Something may be wrong with WordPress.org or this server’s configuration. If you continue to have problems, please try the support forums.' ) . ' ' . __( '(WordPress could not establish a secure connection to WordPress.org. Please contact your server administrator.)' ), headers_sent() || WP_DEBUG ? E_USER_WARNING : E_USER_NOTICE ); $raw_response = wp_remote_post( $http_url, $options ); } if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) return false; $new_update = new stdClass; $new_update->last_checked = time(); $new_update->checked = $checked; $response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); if ( is_array( $response ) ) { $new_update->response = $response['themes']; $new_update->translations = $response['translations']; } set_site_transient( 'update_themes', $new_update ); } /** * Performs WordPress automatic background updates. * * @since 3.7.0 */ function wp_maybe_auto_update() { include_once( ABSPATH . '/wp-admin/includes/admin.php' ); include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); $upgrader = new WP_Automatic_Updater; $upgrader->run(); } /** * Retrieves a list of all language updates available. * * @since 3.7.0 */ function wp_get_translation_updates() { $updates = array(); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); foreach ( $transients as $transient => $type ) { $transient = get_site_transient( $transient ); if ( empty( $transient->translations ) ) continue; foreach ( $transient->translations as $translation ) { $updates[] = (object) $translation; } } return $updates; } /** * Collect counts and UI strings for available updates * * @since 3.3.0 * * @return array */ function wp_get_update_data() { $counts = array( 'plugins' => 0, 'themes' => 0, 'wordpress' => 0, 'translations' => 0 ); if ( $plugins = current_user_can( 'update_plugins' ) ) { $update_plugins = get_site_transient( 'update_plugins' ); if ( ! empty( $update_plugins->response ) ) $counts['plugins'] = count( $update_plugins->response ); } if ( $themes = current_user_can( 'update_themes' ) ) { $update_themes = get_site_transient( 'update_themes' ); if ( ! empty( $update_themes->response ) ) $counts['themes'] = count( $update_themes->response ); } if ( ( $core = current_user_can( 'update_core' ) ) && function_exists( 'get_core_updates' ) ) { $update_wordpress = get_core_updates( array('dismissed' => false) ); if ( ! empty( $update_wordpress ) && ! in_array( $update_wordpress[0]->response, array('development', 'latest') ) && current_user_can('update_core') ) $counts['wordpress'] = 1; } if ( ( $core || $plugins || $themes ) && wp_get_translation_updates() ) $counts['translations'] = 1; $counts['total'] = $counts['plugins'] + $counts['themes'] + $counts['wordpress'] + $counts['translations']; $titles = array(); if ( $counts['wordpress'] ) $titles['wordpress'] = sprintf( __( '%d WordPress Update'), $counts['wordpress'] ); if ( $counts['plugins'] ) $titles['plugins'] = sprintf( _n( '%d Plugin Update', '%d Plugin Updates', $counts['plugins'] ), $counts['plugins'] ); if ( $counts['themes'] ) $titles['themes'] = sprintf( _n( '%d Theme Update', '%d Theme Updates', $counts['themes'] ), $counts['themes'] ); if ( $counts['translations'] ) $titles['translations'] = __( 'Translation Updates' ); $update_title = $titles ? esc_attr( implode( ', ', $titles ) ) : ''; $update_data = array( 'counts' => $counts, 'title' => $update_title ); /** * Filter the returned array of update data for plugins, themes, and WordPress core. * * @since 3.5.0 * * @param array $update_data { * Fetched update data. * * @type array $counts An array of counts for available plugin, theme, and WordPress updates. * @type string $update_title Titles of available updates. * } * @param array $titles An array of update counts and UI strings for available updates. */ return apply_filters( 'wp_get_update_data', $update_data, $titles ); } function _maybe_update_core() { include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version $current = get_site_transient( 'update_core' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && isset( $current->version_checked ) && $current->version_checked == $wp_version ) return; wp_version_check(); } /** * Check the last time plugins were run before checking plugin versions. * * This might have been backported to WordPress 2.6.1 for performance reasons. * This is used for the wp-admin to check only so often instead of every page * load. * * @since 2.7.0 * @access private */ function _maybe_update_plugins() { $current = get_site_transient( 'update_plugins' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_plugins(); } /** * Check themes versions only after a duration of time. * * This is for performance reasons to make sure that on the theme version * checker is not run on every page load. * * @since 2.7.0 * @access private */ function _maybe_update_themes() { $current = get_site_transient( 'update_themes' ); if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) return; wp_update_themes(); } /** * Schedule core, theme, and plugin update checks. * * @since 3.1.0 */ function wp_schedule_update_checks() { if ( !wp_next_scheduled('wp_version_check') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_version_check'); if ( !wp_next_scheduled('wp_update_plugins') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_plugins'); if ( !wp_next_scheduled('wp_update_themes') && !defined('WP_INSTALLING') ) wp_schedule_event(time(), 'twicedaily', 'wp_update_themes'); if ( ( wp_next_scheduled( 'wp_maybe_auto_update' ) > ( time() + HOUR_IN_SECONDS ) ) && ! defined('WP_INSTALLING') ) wp_clear_scheduled_hook( 'wp_maybe_auto_update' ); } if ( ( ! is_main_site() && ! is_network_admin() ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) return; add_action( 'admin_init', '_maybe_update_core' ); add_action( 'wp_version_check', 'wp_version_check' ); add_action( 'upgrader_process_complete', 'wp_version_check', 10, 0 ); add_action( 'load-plugins.php', 'wp_update_plugins' ); add_action( 'load-update.php', 'wp_update_plugins' ); add_action( 'load-update-core.php', 'wp_update_plugins' ); add_action( 'admin_init', '_maybe_update_plugins' ); add_action( 'wp_update_plugins', 'wp_update_plugins' ); add_action( 'upgrader_process_complete', 'wp_update_plugins', 10, 0 ); add_action( 'load-themes.php', 'wp_update_themes' ); add_action( 'load-update.php', 'wp_update_themes' ); add_action( 'load-update-core.php', 'wp_update_themes' ); add_action( 'admin_init', '_maybe_update_themes' ); add_action( 'wp_update_themes', 'wp_update_themes' ); add_action( 'upgrader_process_complete', 'wp_update_themes', 10, 0 ); add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' ); add_action('init', 'wp_schedule_update_checks'); Transparencia en las votaciones del Senado - SesiónDeControl.comSesiónDeControl.com
Arrow

Transparencia en las votaciones del Senado


1
Firma invitada

En esta sección podrás leer a firmas que no colaboran habitualmente con la revista, pero que comparten sus reflexiones con nosotros. Investigadores, periodistas, analistas, ésta es su ventana.


Escrito el 26 de enero de 2015 a las 13:00 | Clasificado en Nacional

La presentación de las votaciones en el Pleno en un formato más completo y entendible supone un paso adelante y una clara apuesta por la transparencia de la información incorporada a la web del Senado.

El Senado, durante una votación (senado.es)
El Senado, durante una votación (senado.es)

Marina Cueto es Archivera-Bibliotecaria de las Cortes Generales con formación de politóloga. Gestiona la documentación parlamentaria en el Senado.

Ana Maria González es Técnico- Administrativo con formación en comunicación y marketing. Gestiona los contenidos de la página web del Senado. En Twitter @Anigonzalez9

En los últimos tiempos, las instituciones públicas han tenido que responder a la demanda social y la obligación legal de mayor transparencia que se ha concretado en exigir más información, además de reclamar una mayor participación en los procesos legislativos y exigir mejores explicaciones sobre el destino de los presupuestos.

Este objetivo ha estado presente en la agenda de los Parlamentos, a partir de iniciativas como la Declaración sobre Transparencia parlamentaria, apoyada por 76 organizaciones procedentes de 56 países. De forma resumida, establece un compromiso por la promoción de una cultura de transparencia, partiendo del postulado básico de que la información parlamentaria es de pública. Se trata de un punto clave de la Declaración, que considera que dicha información no pertenece a las instituciones sino a los ciudadanos y por este motivo se debe poner a su disposición, para que éstos la reutilicen y la vuelvan a publicar. Igualmente, supone que las posibles excepciones a este principio genérico de publicidad deberán estar establecidas expresamente por ley.

El 12 de noviembre de 2012, el Senado de España lanzó una nueva página web institucional como resultado de un estudio realizado por un grupo de trabajo constituido en enero de 2010 en el seno de la Secretaría General, integrado por personal de las diferentes Direcciones y  bajo la coordinación de la Secretaría General Adjunta para Asuntos Administrativos.

A partir de ese momento, la web se ha convertido en el “escaparate” de la actividad que se produce en la Cámara Alta, principalmente de carácter parlamentario pero cada vez más de tipo administrativo. Dentro de la evolución de la página y en el camino hacia la transparencia, la primera gran apuesta en esta materia fue la puesta en marcha del  portal de transparencia en febrero de 2014 . Algo que hizo que el Senado se situara en tercera posición en el primer ranking  de transparencia de las instituciones parlamentarias elaborado por Transparencia Internacional.

La presentación de las votaciones en el Pleno en un formato más completo y entendible supone un paso adelante y una clara apuesta por la transparencia de la información incorporada a la web del Senado.

¿Por qué las votaciones en sesión plenaria?

Para establecer la razón por la que el objeto de este proyecto se circunscribe a las votaciones en las sesiones plenarias, es necesario precisar que la incorporación de la tecnología a través de un sistema electrónico de votaciones en el Senado se estableció en la II Legislatura, en concreto, en la sesión del día 13 de septiembre de 1984. Desde entonces, se diferencian las votaciones en las sesiones plenarias y en las sesiones en Comisión, donde se sigue votando a mano alzada la mayoría de los asuntos. En las sesiones plenarias, en cambio, el sistema electrónico  de votación permitía identificar inmediatamente el resultado de la votación en el interior del Hemiciclo a través de los paneles de votación instalados en su interior y consultar, en un momento posterior, el sentido del voto emitido desde cada escaño.

Esto es especialmente relevante en el Senado, donde prácticamente todas las iniciativas legislativas con sus enmiendas se votan en el Pleno (a diferencia del Congreso de los Diputados donde hay un gran número de las iniciativas legislativas que se aprueban en votación final en la comisión correspondiente, por competencia legislativa plena de dicho órgano). De este modo, el tratamiento de los datos de las votaciones puede ser un punto de partida para el estudio de la posición política de cada grupo parlamentario sobre los asuntos que se someten a votación.

Esta es la primera fase de un proyecto que supone además una presentación de las votaciones en la web, relacionando la información con otros contenidos de la página, como los archivos de video y la tramitación de las iniciativas de la actual Legislatura con todas sus sesiones plenarias, aunque está previsto ir añadiendo datos hasta la II Legislatura en un proyecto de digitalización de la información similar al del Congreso de los Diputados, con un volcado de datos desde diferentes soportes a un formato común y tratable para su publicación en html.

Presentación de los datos

La presentación de los resultados de las votaciones se realiza, dentro del Hemiciclo a través del panel de votaciones, en el que se refleja el cómputo global y sin que se computen en el propio panel los datos emitidos desde fuera de la sede a través del sistema telemático.

Hasta ahora, esta información se trasladaba a la web en una tabla que presentaba un resumen de lo acontecido en el Pleno.

A partir de ahora, para visualizar la información será posible consultar las votaciones a través del calendario de las sesiones plenarias con la relación de sesiones y un acceso directo a  los asuntos votados obviando, si lo desea el resto de asuntos debatidos en el Pleno que no son objeto de votación, a través de un icono de votaciones, permitiéndole llegar al detalle de cada iniciativa con mayor rapidez. Igualmente se incorpora un acceso directo al video de la sesión completa o a la descarga del fichero en XML sin necesidad de consultar la ficha completa de la sesión:

Una vez se accede a la relación de asuntos votados, el detalle de una votación se produce según queda transcrito en el Diario de Sesiones, como se muestra en este ejemplo que corresponde a la votación de la propuesta de veto número 1 presentada por la Senadora Ester Capella I Farré, del Grupo parlamentario Mixto al Proyecto de Ley Orgánica complementaria de la Ley de racionalización del sector público y otras medidas de reforma administrativa por la que se modifica la Ley Orgánica 6/1985, de 1 de julio, del Poder Judicial:

Y esta es la nueva visualización de la información relativa a la votación de una propuesta de veto a un Proyecto de Ley :

Además de la renovación visual, la arquitectura de la información se presenta organizando los datos en diferentes categorías:

  • datos propios de la iniciativa y del asunto que se vota: título, número de expediente, comisión competente, asunto de la votación, autores.
  • datos de la sesión: fecha, hora, Presidente y tipo de votación.
  • resultado general: número de síes, noes, abstenciones y no votan.

Se puede consultar la relación de los Senadores presentes y ausentes en el momento de la votación así como los votos emitidos desde el Hemiciclo (aquellos que recoge el panel de votaciones) y los  que se han emitido a través del sistema telemático, modalidad de procedimiento de votación que se incorporó en 2013 por aprobación de la Mesa de la Cámara mediante la Resolución de 21 de noviembre de 2013.

Asimismo los datos individualizados por Senadores, ordenados alfabéticamente, según el sentido del voto (si, no, abstención, no votan) o también  agrupados por Grupo parlamentario, procedencia geográfica y por partido político.

La visualización se produce en diferentes páginas acompañada de gráficos dinámicos, uno general que representa el resultado global de la votación, y otros relativos a grupos parlamentarios o por procedencia geográfica, descendiendo al nivel de provincia.

El usuario, además, puede visualizar el resultado accediendo a los distintos soportes: el vídeo de la votación con posibilidad de descargarlo, el Diario de Sesiones, así como compartir todo el contenido de la página en la red social Twitter.

Desde los listados generales y de detalle, se desciende hasta el voto emitido por cada Senador y la forma en que éste lo ha realizado (en Hemiciclo o telemático) y de ahí puede llegar hasta su ficha con un simple click. También está recogido el dato de los Senadores que no han votado.

Las razones por las que un Senador puede no votar, pueden ser variadas: no solamente  sucede porque que no haya asistido a la sesión plenaria, también puede ocurrir que se encuentre en el Senado y no participe en alguna de las votaciones (Senadores del Grupo Mixto, por ejemplo), a pesar de que este aspecto está sujeto a un férreo control por parte de los grupos parlamentarios, y puede dar lugar a sanciones.

Se muestra a continuación la  relación alfabética de Senadores con el sentido del voto:

Formato reutilizable, UX y ‘responsive design’

El cambio de perspectiva en el abordaje de este proyecto, hizo que se plantease de forma global y no sólo para dar un reporte  rígido  facilitando datos y más datos, sino que el esfuerzo se centró en que la información fuera sencilla y  contextualizada, además de mostrarse en cualquier dispositivo, de forma accesible, con flexibilidad para que el usuario pudiera decidir, libremente, de qué manera quiere ver los datos.

Por ello, el trabajo en las sesiones plenarias ha supuesto un esfuerzo en tecnología  a la vez que ha sido un proyecto realizado íntegramente en el Senado. Su diseño y ejecución se han realizado por el personal de las Direcciones de Asistencia Técnico-Parlamentaria, Relaciones Institucionales y Tecnologías de la Información y de la Comunicación, contando también con  la colaboración del Archivo del Senado.

La incorporación del formato reutilizable (en este caso en ficheros xml) en el marco  la Ley 37/2007, de 16 de noviembre, sobre reutilización de la información del sector público,  responde también a una demanda social. El ciudadano necesita ser capaz de “tocar” la información, pero además que se le permita reutilizarla para convertirla en otros proyectos, como motor económico de nuevos negocios. El formato abierto es el “alimento” del sector infomediario, un sector empresarial en crecimiento gracias a las grandes opciones de explotación que tiene la información pública, con el desarrollo de aplicaciones y servicios web de gran utilidad para personas y países con un potencial económico muy relevante dentro de la Unión Europea (véase la Comunicación de la Comisión Europea en materia de ‘open data’ de 2011)

Ejemplo de fichero xml; detalle de los datos de la Senadora Nevado del Campo (voto telemático)

Es un  proyecto  centrado en el ciudadano y en la experiencia que éste tendrá  en su navegación por la información, abordado desde un contexto tecnológico cada vez más innovador. Es decir, sin perder velocidad tecnológica, intentando que la experiencia del usuario con lo que encuentra en la web responda a sus expectativas (lo que se conoce como  user experience o experiencia de usuario).

En lo que respecta al aspecto gráfico y al desarrollo de las páginas, se ha aplicado la técnica  más reciente en diseño web, Responsive Web Design o diseño adaptable que permite presentar las páginas adaptadas a diferentes dispositivos, desde el ordenador de escritorio, a las tablet o teléfonos móviles, logrando una navegación más cómoda y el objetivo de una experiencia de interacción con el dispositivo mucho más satisfactoria.  Esto, además, supone un mantenimiento más sencillo, lo que revierte en una gestión más eficiente de los recursos informáticos de la Cámara.

Por último trata de cumplir y responder a las necesidades en materia de accesibilidad, otra de las piezas claves de la transparencia, llegar a todos los ciudadanos con independencia de sus discapacidades.

Las posibilidades que Internet está ofreciendo a los Parlamentos para mostrar de manera transparente su actividad son infinitas y en esta línea es preciso seguir avanzando.

Los votantes dicen...
  1. […] La presentación de las votaciones en el Pleno en un formato más completo y entendible supone un paso adelante y una clara apuesta por la transparencia de la información incorporada a la web del Senado.  […]

Comparte tu punto de vista

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>