Skip to content

L’essentiel du jour, rien que pour vous.

Budget : ces mesures fortes sur lesquelles les députés s’étaient accordés

FILE PHOTO: A French flag flutters on top of the National Assembly ahead of a confidence vote that the French Prime Minister Francois Bayrou seeks on the budget issue, in Paris, France, September 6, 2025. REUTERS/Abdul Saboor/File Photo ABDUL SABOOR / REUTERS tbody>tr>td { padding: 5px 8px; } } } /* DARK MODE */ [data-color-mode= »dark »] { .contenant_graphe { .axes line, .axes path { stroke: rgba(255, 255, 255, 0.85); } .axes.x .tick line { stroke: rgba(255, 255, 255, 0.3); } .axes.x .tick text { fill: rgba(255, 255, 255, 0.85); } .axes.y .tick text { fill: rgba(255, 255, 255, 0.9); } .grid line { stroke: rgba(255, 255, 255, 0.15); } .grid .tick:first-of-type line { stroke: rgba(255, 255, 255, 0.3); } } .contenant_hemicycle .lescroix line { stroke: rgba(0, 0, 0, 1); } } ]]> keys_groupes.indexOf(a[0]) – keys_groupes.indexOf(b[0])); // On invisibilise les nonVotants entries_votes.forEach(([key, value]) => { value.nonVotants = value.nonVotants.concat(value.nonVotantsVolontaires); delete value.nonVotantsVolontaires; }); accessible_btn = contenant2.querySelector(« .accessibility_choice img »); isAccessible = accessible_btn.classList.contains(« checked »); const isDarkMode = faitNuit(); const listeVotes = [« pours », « contres », « abstentions », « nonVotants »], // « nonVotantsVolontaires » est assimilé à « nonVotants » dicoLongsMois = [« janvier », « février », « mars », « avril », « mai », « juin », « juillet », « août », « septembre », « octobre », « novembre », « décembre »]; var largeurAssNat = contenant.node().offsetWidth, isMobile = window.innerWidth <= 800; let scraped = ceVote["scraped"]; /* on envoie la date */ var dt = ceVote.date.split("-"), tmpJour = +dt[2] === 1 ? "1er" : +dt[2]; // Date contenant.select("span.datespan").html("le " + tmpJour + " " + dicoLongsMois[+dt[1] - 1] + " " + dt[0]); // Nombre de suffrages contenant.select("span.deputesspan").html(ceVote.abstentions + ceVote.contres + ceVote.pours); // Sièges vacants const nb_vacants = Object.keys(vacantsCeVote).length; let deputesTotaux = `${577 - nb_vacants}`; if (nb_vacants === 1) deputesTotaux += ` (un siège était vacant)`; if (nb_vacants > 1) deputesTotaux += ` (${nb_vacants} sièges étaient vacants)`; contenant.select(« span.deputestotauxspan »).html(deputesTotaux); var voteClassique = ceVote.type_majorite !== « majorité des membres composant l’Assemblée nationale » && ceVote.type_majorite !== « Majorité requise pour une motion de censure »; let titreGraphe = title; if (!titreGraphe) { titreGraphe = «  »; //scraped ? ceVote.titre : nettoyerEtCap(ceVote.titre); } titreGraphe += ‘ : ‘ + ceVote.sort + «  »; let sousTitreGraphe; /* si c’est un vote classique, on ajoute le pourcentage */ if (voteClassique) { let prctGraphe = Math.max(ceVote.pours, ceVote.contres) / (ceVote.pours + ceVote.contres); /* EDIT : enlever le terme « texte » */ sousTitreGraphe = ` ${ceVote.sort}${fem ? « e » : «  »} avec ${prctGraphe.toLocaleString(« fr-FR », { style: « percent », minimumFractionDigits: 1, maximumFractionDigits: 1, })} des suffrages`; } else { const majoriteRequise = Math.floor((579 – nb_vacants) / 2) + 1; sousTitreGraphe = `Motion ${ceVote.sort}e avec ${ceVote.pours} votes sur ${majoriteRequise} requis`; // display node sur les instructions contenant.select(« .lmui-chart__instructions »).style(« display », « none »); } contenant.select(« .lmui-chart__title »).html(titreGraphe.replace(« . : »,  » : »)); contenant.select(« .resultat_vote »).html(sousTitreGraphe.replace(« . : »,  » : »)); try { contenant.select(« .lmui-chart__title »).html(mdm_html(titreGraphe)); } catch (e) { console.error(`mdm_html inconnu`); } function make_viz(display_graph, display_hemicycle) { if (display_hemicycle) make_an_hemicycle(contenant, entries_votes, listeVotes, dicoGroupes, ceVote, nb_vacants, vacantsCeVote, all_deputes, scraped, isDarkMode, isAccessible, isMobile, largeurAssNat); if (display_graph) make_graph(contenant, entries_votes, listeVotes, dicoGroupes, ceVote, voteClassique, isDarkMode, isAccessible, isMobile, largeurAssNat); /* EDIT : changement du nom de la fonction du tooltip et du selecteur (group plutôt que rec) */ make_tooltip_steffen(`#${contenant_id} g.groupe, #${contenant_id} circle.seat`, undefined); // make_tooltip_an(`#${contenant_id} g.groupe, #${contenant_id} circle.seat`, undefined, contenant_id); } make_viz(display_graph, display_hemicycle); accessible_btn = contenant2.querySelector(« .accessibility_choice img »); accessible_btn.addEventListener(« click », (e) => { checked = e.target.classList.contains(« checked »); document.querySelectorAll(« .accessibility_choice img »).forEach(function (img) { img.classList.toggle(« checked », !checked); }); checkAccessibility(contenant_id); make_viz(display_graph, display_hemicycle); }); } /* Override de la fonction make_graph pour introduire quelques changements */ function make_graph(contenant, entries_votes, listeVotes, dicoGroupes, ceVote, voteClassique, isDarkMode, isAccessible, isMobile, largeurAssNat) { const marginAssNat = { top: 20, right: 30, bottom: 0, left: isMobile ? 100 : 205, }; /* EDIT : ajout pour éviter erreur */ display_hemicycle = false; /* EDIT : ajout d’un dictionnaire */ let label_votes_short = { pours: « Pour », abstentions: « Abstention », contres: « Contre », // nonVotantsVolontaires: « Non votants », nonVotants: « Non votants », }; contenant.select(`.contenant_graphe svg`).remove(); const ratioAssNat = isMobile ? 0.85 : 0.55, nbrTicksAssNat = isMobile ? 5 : 10, widthAssNat = largeurAssNat – marginAssNat.left – marginAssNat.right, heightHistogram = largeurAssNat * ratioAssNat – marginAssNat.top – marginAssNat.bottom; const xScale = d3 .scaleLinear() .range([0, widthAssNat]) .domain([0, d3.max(entries_votes, ([key, value]) => value.nb_deputes)]) .nice(); const yScale = d3 .scaleBand() .range([0, heightHistogram]) .paddingInner(0.2) .domain(entries_votes.map((x) => x[0]).filter((x) => x !== « vacants » && ceVote.votes[x])); const svgAssNat = contenant .select(`.contenant_graphe`) .append(« svg ») .attr(« width », « 100% ») .attr(« viewBox », `0 0 ${widthAssNat + marginAssNat.left + marginAssNat.right} ${heightHistogram + marginAssNat.top + marginAssNat.bottom}`) .append(« g ») .attr(« transform », « translate( » + marginAssNat.left + « , » + marginAssNat.top + « ) »); const axesAssNat = svgAssNat.append(« g »), barresAssNat = svgAssNat.append(« g »).attr(« class », « groupebarres »), grilleAssNat = svgAssNat.append(« g »).attr(« class », « grid »); function make_x_gridlines() { return d3.axisBottom(xScale).ticks(nbrTicksAssNat); } const groupes = barresAssNat .selectAll(« .groupe ») .data(entries_votes) .enter() .append(« g ») .attr(« class », « groupe ») .attr(« data-groupe », ([key, val]) => key) .attr(« transform », ([key, val]) => `translate(0, ${yScale(key)})`) /* EDIT : ajout du contenu du tooltip sur le group plutôt que le rect */ .attr(« data-tt-title », function ([key, val]) { const row_groupe = dicoGroupes[key]; if (!row_groupe) couleurTemp = isDarkMode ? « #FFF » : « #000 »; else couleurTemp = isDarkMode ? row_groupe.Dark : row_groupe.Light; return `${row_groupe ? row_groupe.nom_long : key}`; }) .attr(« data-tt-desc », function ([key, val]) { let html = «  »; for (const j in label_votes_short) { label = label_votes_short[j]; if (val[j].length > 0) { count = j == « nonVotantsVolontaires » ? val[« nonVotantsVolontaires »].length + val[« nonVotants »].length : val[j].length; html += ` ${label} ${count} sur ${val.nb_deputes} ]]>`; } } return html; }); const previous_x = {}; for (let type_vote of listeVotes) { groupes .append(« rect ») .attr(« class », « votes_rect  » + type_vote) .attr(« data-vote », type_vote) .attr(« data-groupe », ([key, val]) => key) .attr(« data-nombre », function ([key, val]) { return val[type_vote].length; }) /* EDIT : suppression du fill, remplacé par du CSS */ .attr(« stroke », function ([key, val]) { return « #000 »; }) .attr(« stroke-width », 0) .attr(« x », function ([key, val]) { return previous_x[key]; }) .attr(« width », function ([key, val]) { const depts = val[type_vote].length; if (previous_x.hasOwnProperty(key)) previous_x[key] += xScale(depts); else previous_x[key] = xScale(depts); return xScale(depts); }) .attr(« height », yScale.bandwidth()) /* EDIT : suppression du contenu du tooltip, rappatrié sur le group plutôt que le rect */ .on(« mouseover », function (e, d) { const selection = d3.select(this); selection.style(« stroke-width », 1); if (display_hemicycle) { const classe = `circle.seat.${selection.attr(« data-vote »)}[data-groupe= »${selection.attr(« data-groupe »)} »]`; d3.selectAll(classe).style(« stroke-width », 1).style(« stroke-dasharray », « none »); } }) .on(« mouseout », function (d) { const selection = d3.select(this); selection.style(« stroke-width », 0); if (display_hemicycle) { d3.selectAll(« circle.seat »).style(« stroke-width », null).style(« stroke-dasharray », null); } }); } /* l’axe des ordonnées */ axesAssNat .append(« g ») .attr(« class », « axes x passelect ») .call( d3 .axisTop(xScale) .ticks(nbrTicksAssNat) .tickSizeOuter(0) .tickFormat((d) => (d > 0 ? d : «  »)) ); /* l’axe des abscisses */ axesAssNat .append(« g ») .attr(« class », « axes y passelect ») .call(d3.axisLeft(yScale).tickFormat((d) => (dicoGroupes[d] ? (isMobile ? dicoGroupes[d].nom_court : dicoGroupes[d].nom_moyen) : d))); grilleAssNat.append(« g »).attr(« class », « grid »).call(make_x_gridlines().tickSizeOuter(nbrTicksAssNat).tickSize(heightHistogram).tickFormat(«  »)); /* la légende */ /* EDIT : Modification de la génération de la légende (avec plus de CSS pour les couleurs et une différenciation entre la légende groupes et hémicycle) */ let html_legende = «  »; for (let type_vote of listeVotes) { const nb_votes = type_vote == « nonVotants » ? ceVote.nonVotantsVolontaires + ceVote.nonVotants : ceVote[type_vote]; if (voteClassique || type_vote === « pours » || type_vote === « nonVotants ») { html_legende += `

${label_votes_short[type_vote]} (${nb_votes ? nb_votes : « 0 »})

`; } else { console.log(type_vote); } } contenant.select(`.d_legende_hemicycle`).html(html_legende); contenant.select(`.d_legende_groupes`).html(html_legende); } { if (all_deputes[depute]) { let circo = +all_deputes[depute].circo; const is_men = all_deputes[depute].civ === « M. »; try { correction_vote = clean_votes[votes[« corrections »][depute]]; } catch (e) { correction_vote = null; } if (!correction_vote) correction_vote = null; dico_g = dicoGroupes[groupe]; if (!dico_g) console.warn(`Le groupe ${groupe} n’est pas dans le tableur`); groupe_color = dico_g ? (modeSombre ? dico_g.Dark : dico_g.Light) : « black »; output.push({ nom: all_deputes[depute].nom, prenom: all_deputes[depute].prenom, groupe: groupe, groupe_color: groupe_color, circo: `${dicoDep[all_deputes[depute].dept].nom} (${circo}${circo === 1 ? « re » : « e »})`, vote: elem, correction: correction_vote, is_men: is_men, }); } else { console.warn(`Le député ${depute} n’est pas trouvable`); } }); }); } var columns = [ { title: « Député(e) », data: « nom », visible: true, orderSequence: [« asc », « desc »], render: function (data, type, full, meta) { if (type == « display ») { h = `

${full.prenom} ${data}`; if (isMobile) h += ` ${ dicoGroupes[full.groupe][« nom_court »] } `; return h; } else { return data; } }, }, { title: « Prénom », data: « prenom », visible: false, orderSequence: [« asc », « desc »], }, { title: « Groupe », data: « groupe », visible: !isMobile, orderSequence: [« asc », « desc »], render: function (data, type, full, meta) { if (dicoGroupes[data]) { if (type == « display ») { return ` ${dicoGroupes[data][« nom_court »]}`; } else if (dicoGroupes[data]) { return dicoGroupes[data][« nom_court »]; } } else { return data; } }, }, { title: « Circonscription », data: « circo », visible: !isMobile, orderSequence: [« asc », « desc »], }, { title: « Vote », data: « vote », visible: true, orderSequence: [« asc », « desc »], width: isMobile ? « 110px » : null, render: function (data, type, full, meta) { if (type == « sort ») { val = Object.keys(clean_votes).indexOf(data); if (full.correction) val += 0.5 * Object.keys(clean_votes).indexOf(full.correction); return val; } else { return ( `${clean_votes[data]}` + (full.correction ? `

(A fait savoir qu’${full.is_men ? « il » : « elle »} aurait voulu voter ${full.correction})` : «  ») ); } }, }, { title: « Correction », data: « correction », visible: false, }, { title: « is_men », data: « is_men », type: « boolean », visible: false, }, { title: « groupe_color », data: « groupe_color », visible: false, }, ]; const myTable = new DataTable(table_container, { orderClasses: false, data: output, columns: columns, scrollY: « 280px » /* EDIT : passage de 500 à 300 */, scrollX: false, scrollCollapse: true, responsive: true, searching: true, paging: false, sorting: true, order: [[0, « asc »]], language: { zeroRecords: « Aucun député ne correspond à votre recherche » /* EDIT : changement de la mention */, lengthMenu: « _MENU_ entrées affichées », info: «  », search: «  », infoEmpty: «  », infoFiltered: «  », paginate: { previous: « Précédent », next: « Suivant », }, infoEmpty: «  », }, initComplete: function () { const wrapper = document.querySelector(`#table${vote_id}_wrapper`); const entete = wrapper.parentElement.querySelector(« .d_entete »); const filterInput = wrapper.querySelector(« .dt-search input »); const filterDiv = wrapper.querySelector(« .dt-search »); if (filterInput) { filterInput.setAttribute(« placeholder », « Rechercher un nom, un groupe… »); } if (filterDiv) { const searchIcon = document.createElement(« span »); searchIcon.className = « d_search_icon »; filterDiv.appendChild(searchIcon); if (entete) { entete.appendChild(filterDiv); } } }, }); } ]]>

Table des matières

${titre ? `

${titre}` : «  »}

(source) Couleurs adaptées

debut && actuel

Près de 3 000 amendements discutés, au cours de quelque 125 heures de débat… pour accoucher d’un texte qui n’aura recueilli qu’une seule voix. Au Palais-Bourbon, l’examen en séance publique du projet de loi de finances pour 2026 – « le plus long débat budgétaire que la Ve République ait connu, et de loin », a commenté la ministre des comptes publics, Amélie de Montchalin –, s’est avéré inédit à de multiples égards.

Certes, le texte finalisé dans la nuit du 21 au 22 novembre relève davantage du patchwork de mesures dissonantes que d’une feuille de route cohérente, aucun député ou presque n’a souhaité l’assumer dans son ensemble, et aucune des mesures adoptées ne sera pour l’heure appliquée.

Il vous reste 98.49% de cet article à lire. La suite est réservée aux abonnés.

Source

No comment yet, add your voice below!


Add a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Initiales logo Exotik Garden
Résumé de la politique de confidentialité

Ce site utilise des cookies afin que nous puissions vous fournir la meilleure expérience utilisateur possible. Les informations sur les cookies sont stockées dans votre navigateur et remplissent des fonctions telles que vous reconnaître lorsque vous revenez sur notre site Web et aider notre équipe à comprendre les sections du site que vous trouvez les plus intéressantes et utiles.