/** * 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'); ¿Realmente es necesario publicar las nóminas de los diputados?SesiónDeControl.com
Arrow

¿Publicamos sus nóminas?


4
Miguel Ángel Gonzalo

Archivero-Bibliotecario de las Cortes Generales de España. Webmaster de www.congreso.es


Escrito el 15 de enero de 2013 a las 10:07 | Clasificado en Nacional

La petición de publicación de las nóminas de los diputados en la web del Congreso ha abierto de nuevo un debate sobre la transparencia de los sueldos parlamentarios. Sin embargo, la gran mayoría de las retribuciones son deducibles de la información ya existente en la web.

Visión del Congreso durante un pleno
Visión del Congreso durante un pleno

Las retribuciones de los parlamentarios tienen su fundamento jurídico en el artículo 71.4 de la Constitución Española que dice que los diputados y senadores “percibirán una asignación que será fijada por las respectivas Cámaras”.  Esta asignación o retribución se considera uno de los derechos del parlamentario y forma parte más del llamado “estatuto del parlamentario” en el que se integran también una serie de prerrogativas tales como la inmunidad, la inviolabilidad o el fuero…

El estatuto del parlamentario lejos de ser un privilegio, tiene su origen en la necesidad de ‘proteger’ la autonomía personal del legislador frente a las intromisiones de los otros poderes, dentro de la concepción liberal de nuestro constitucionalismo histórico. Por supuesto, los derechos siempre han de entenderse en relación con otros, en una tensión típica del sistema de “frenos y contrapesos” que tan buen resultado ha dado en sistemas democráticos.

El Tribunal Constitucional ya señaló  a ese respecto que las “prerrogativas parlamentarias han de ser interpretadas estrictamente para no devenir privilegios que puedan lesionar derechos fundamentales de terceros” (

“La cuestión de las percepciones de los parlamentarios es una de aquellas que ha sufrido una notable evolución con el paso del tiempo. Los procuradores medievales recibían un “salario de procuración”, que tendía a resarcir los gastos y gestiones realizados por los representantes; intentando con ello que los procuradores no percibieran otros salarios o remuneraciones de otros órganos especialmente de la Corona.

Las Cortes de Cádiz mantuvieron esta fórmula del salario de procuración. Durante el siglo XIX la naturaleza censitaria del sufragio y la idea de honor que representaba el ejercicio del cargo hacía de éste una tarea  gratuita, aunque en ocasiones remunerada de forma secreta. La necesidad de remuneración se pondrá de relieve cuando accedan a los Parlamentos miembros de otros grupos sociales para los que la retribución de su cargo se convertirá en requisito imprescindible para poder ejercer su función. Así el art. 54 de la Constitución de 1931 recoge ya la retribución de los diputados.”

Artículo 54 (Constitución de la II República).  La ley determinará los casos de incompatibilidad de los Diputados, así como su  retribución

Interesa destacar dos ideas que hoy en día se proponen desde distintas opciones ideológicas como novedosas y solución a problemas actuales. Por un lado, la concepción de las dietas de los parlamentarios para resarcir gastos y la concepción de que los diputados deben trabajar ‘gratis’ por el honor que representa. Ambas ideas son propias de un concepto de la representación ligado a contar con ingresos suficientes para podérselo permitir. A veces, el conocer la historia puede ayudar a avanzar.

Los reglamentos parlamentarios han desarrollado el precepto constitucional y han añadido a la “asignación”  una “indemnización” correspondiente a gastos ejercidos para el desarrollo de la función parlamentaria que, al ser una cantidad dedicada a cubrir gastos está exenta de tributación, de acuerdo con lo previsto en el artículo 17.2 b de la Ley 35/2006 de 28 de noviembre.

Artículo 8.

  • Los Diputados percibirán una asignación económica que les permita cumplir eficaz y dignamente su función.
  • Tendrán igualmente derecho a las ayudas, franquicias e indemnizaciones por gastos que sean indispensables para el cumplimiento de su función.
  • Todas las percepciones de los Diputados estarán sujetas a las normas tributarias de carácter general.
  • La Mesa del Congreso fijará cada año la cuantía de las percepciones de los Diputados y sus modalidades dentro de las correspondientes consignaciones presupuestarias”

Se han sucedido en los últimos días numerosas noticias sobre varios debates de la Mesa del Congreso de los Diputados relativos a la publicación en la página web de la institución de las nóminas de los parlamentarios. La decisión ha quedado en suspenso o sobre la mesa al pedir el Presidente unanimidad en la decisión por parte de todos los grupos parlamentarios presentes en la Mesa, además de pedir que la decisión tenga todas las garantías jurídicas.

Datos que ya existen

En unas declaraciones posteriores el Presidente Jesús Posada dijo que “a veces parece como que hubiera un ocultismo total en los datos, y ya es muy transparente lo que hay”. A pesar de que la opinión en las redes sociales es la contraria, las palabras del presidente son consistentes con los datos verificables en una comprobación entre los datos publicados en la web y las nóminas que algunos diputados han hecho públicas por propia voluntad.


En la web del Congreso está publicado un documento sobre el régimen económico de los diputados al igual que existe un documento equivalente en la web del Senado. Las retribuciones se componen de una asignación para los 350 diputados (salvo, al parecer,  los que son ministros) de 2.813,87 € mensuales. Además se recibe también una indemnización por gastos para el cumplimiento de su función,  que indebidamente se ha denominado “dietas” y que varía entre  los 1.823,86 € para los diputados de circunscripciones distintas a Madrid y de 870,56 € para los electos por Madrid.

Algo más complejo es la parte que depende de los cargos que ocupan los diputados en la Cámara. La complejidad viene, exclusivamente, de que es necesario conocer las reglas que rigen la posibilidad o imposibilidad de sumar diversos complementos.  La publicación de las nominas de algunos diputados en la web permite, sin embargo, deducir algunas de las reglas que se sigue a la hora de poder sumar varios complementos. Las reglas que se pueden deducir, a falta de confirmación oficial, son:

  • Los complementos identificados como “gastos de representación” y que están en relación con cargos desempeñados en una comisión no se suman, es decir, se cobra únicamente por un concepto, lógicamente el  mayor. Si un diputado es presidente de la Comisión A y portavoz en la Comisión B, sólo cobra los gastos por un único concepto, el de mayor cuantía; hay que señalar que esta regla es conocida a través de la comprobación de las nóminas publicadas;
  • Los complementos ligados a cargos en la Junta de Portavoces sí se pueden acumular con los gastos derivados de cargos en una comisión. Si un diputado es Portavoz de un Grupo parlamentario en la Junta de Portavoces y, además, es portavoz en una comisión, puede cobrar los complementos asociados a los dos cargos.

Las reglas sobre las que no se puede verificar su aplicación porque no se han publicado nominas de los diputados que permitan comprobarlo son:

  • La incompatibilidad entre los complementos ligados a cargos en la Mesa de la Cámara (Presidente, Vicepresidente y Secretario) con complementos relacionados con cargos en Comisiones. Por ejemplo, sería necesario explicitar si un miembro de la Mesa que, además, asume un cargo en una comisión, puede acumular los dos complementos.
  • La regla que se aplica al número de portavoces adjuntos o sustitutos (de las dos maneras se identifican en la web del Congreso, aunque es el mismo cargo) que, perteneciendo a un mismo grupo parlamentario, pueden cobrar el complemento asociado a ese cargo. Sí que se sabe que la mera designación como portavoz adjunto o sustituto no implica cobrar automáticamente ese complemento. Cabe pensar que hay unos cupos máximos de portavoces adjuntos que pueden cobrar ese complemento.
  • La posibilidad de que los parlamentarios que además tienen la responsabilidad de un ministerio cobren únicamente la indemnización y no la asignación.

Dicho esto, lo verdaderamente significativo es que estos tres últimos puntos, sobre los que no es totalmente posible precisar las reglas de juego,  afectan a menos de un 5% de la totalidad de los diputados, por tanto, la idea básica es que es totalmente posible conocer las retribuciones íntegras del 95% de los parlamentarios.

Hay quien ya las publica

Se puede comprobar lo anterior examinando las nóminas ya publicadas en diferentes web y la ficha del parlamentario en cuestión.

Comparación de la nómina de Rosa Díez

En la imagen adjunta se puede ver el resultado de coger la ficha en la web de la diputada Rosa Diez, tomar nota de los cargos que ocupa -portavoz en la Junta de Portavoces y Portavoz en cinco Comisiones-,  contrastarlos con el documento de complementos y luego compararlos con la nómina real que la propia diputada publicó en la web de su partido junto con las nóminas de los demás diputados que igualmente se ajustan a lo indicado. Como en todas las nóminas publicadas hasta ahora, los datos concuerdan completamente.

Comparación de la nómina de Carlos Salvador

Otro ejemplo es el caso del diputado Carlos Salvador, comparando los cargos en su ficha en la web, con el documento de complementos y su nómina que publicó asociada a un tuit. Se puede ver como el parlamentario, siendo portavoz en cuatro comisiones, en su nómina sólo percibe un único complemento por esa categoría. Hace algunos meses circuló por la web un documento disparatado sobre los sueldos de los parlamentarios en los que sumaba una y otra vez el mismo complemento para casos como el de este parlamentario con un resultado completamente erróneo.

Comparación de la nómina de Chesús Yuste

Un último ejemplo para verificar que no todos los portavoces adjuntos o sustitutos de un grupo parlamentario cobran ese complemento es el de Chesus Yuste, que publicó su nómina en su propia web. Como se puede comprobar en su ficha se indica que es portavoz sustituto en la Junta de Portavoces y en su nómina se verifica que no cobra ese complemento sino un único complemento correspondiente a portavoz de comisión y que es único aunque sea portavoz en tres comisiones.

Otros diputados, igualmente con el mismo ánimo de transparencia, han hecho públicas las documentos de las nóminas que reciben a través del grupo parlamentario socialista como es el caso de Odón Elorza o Antonio Hurtado . Si se aplican los mismos pasos indicados se verifica que las cantidades, como no puede ser de otra manera, coinciden y, por tanto, no vale la pena acumular más texto con idéntico resultado.

Se puede aplicar este mismo sistema a la totalidad de las nóminas que se han publicado y que han recogido diversas web como Qué hacen los Diputados o Sueldos Públicos. La exigencia de transparencia es condición necesaria, aunque no suficiente por sí sola, para la regeneración democrática y para la recuperación de la comunicación con la institución pero también hay que ser rigurosos con la forma en que se da la información cuando, en un caso como este, queda demostrado que los sueldos de los diputados son conocidos en su práctica totalidad.

La intimidad de los diputados

Una pequeña modificación del documento del régimen económico bastaría para despejar algunas dudas planteadas y sería, además, una solución mucho más respetuosa con la protección de los datos personales o de otros elementos ligados a la intimidad.

Se puede observar en las nóminas publicadas como ha sido necesario “manipular” el documento oficial para ocultar el dato del NIF pero, sin embargo, figuran otros datos como la retención por IRPF que da pistas sobre situaciones personales tales como la existencia de pensiones compensatorias o por alimentos u otras condiciones personales que no tienen porque conocerse en este contexto que marquen una disminución del porcentaje de retención para idénticos ingresos. Hay que destacar también que todo lo dicho para las nóminas de los diputados aplica en igual manera a las nóminas de los senadores.

Otro tema más de fondo es si esta estructura de las retribuciones de los diputados tiene sentido en el contexto actual o no sería mucho más lógico y eficiente sustituirlo por un único sueldo sin la complejidad descrita anteriormente aunque, muy posiblemente, lo crispado que es este debate haga imposible una discusión razonada y razonable sobre el modelo de retribución que se quiere para una función tan importante como es la de la representación de la ciudadanía.

Finalmente, en la línea de intentar aportar más datos que opiniones, en la tabla adjunta se puede verificar como las retribuciones de los parlamentarios españoles no son, ni mucho menos, las más generosas de los parlamentos de nuestro entorno.

Comparación de salarios medios por países (Fuente: ECPRD)

Los datos están sacados de una encuesta realizada en 2010 entre los corresponsales de los diferentes parlamentos a través de un organismo de cooperación parlamentaria como es el European Centre for Parliamentary Research and Documentation (ECPRD) en el que se preguntaba por el sueldo medio de los parlamentarios.

No se incluye en la gráfica el dato del sueldo del parlamentario medio por las dudas reseñadas antes pero si se toma como referencia uno de los ejemplos comentados puede servir de referencia saber que el sueldo bruto anual del diputado Carlos Salvador estaría en torno a los 67.126,92 €, es decir, por debajo de los países de nuestro entrono.

Los votantes dicen...
  1. carles dice:

    Magnífico artículo

  2. […] ¿Es realmente necesario publicar las nóminas de los diputados? (SesiónDeControl.com) […]

  3. Irene dice:

    Muy clarificador, excelente. Los enlaces y fuentes suman valor. Gracias.

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>