Outline: Where France’s public money goes

Revision 2 responds to the user feedback and independent reader critique. The prose renders this reviewed argument. Canonical story files remain in site/stories; the dataset remains in datasets/france-public-finances. A generated portable bundle presents README.md plus data/, charts and reproducible sources without maintaining another hand-edited story.

Argument in one sentence

France's spending is dominated by social protection and health, with old age the largest social commitment; those commitments help explain the scale of the budget, but their recent evolution and the revenue record rule out a simple story of ever-expanding welfare causing the deficit.

Reader questions and beats

  1. How big is the gap? In 2025 spending was €1.7141372 trillion, revenue €1.5616261 trillion, deficit €152.5111 billion (5.1% GDP). Display €1.71tn and €1.56tn on two zero-based bars; prose can round to €1.7 trillion and €1.6 trillion while giving the €153 billion shortfall separately. Rounded headline subtraction is not exact arithmetic. Receipts cover 91.102748% of spending: about €91 for every €100, leaving €9 financed by the deficit. All general government, not just the state budget; revenue includes contributions and other receipts.
  2. What does it buy? Latest functional data are 2024: total €1.6717938tn. Ten mutually exclusive COFOG divisions. Social protection €693.0288bn, 41.454%; health €261.1563bn, 15.621%; combined57.0755257%. Existing ranked bars retain all ten categories but round billions to whole numbers. No need to repeat the ranking in prose. Pensions, hospitals and other services are more concrete than accounting labels.
  3. What is social protection? Treemap of the nine GF10 children, using current-euro amounts: old age391954.3, sickness/disability83898.9, family/children66711.4, unemployment48520.9, survivors40608.3, social exclusion36460.8, housing21146.7, other3727.6, research0 (all €million). Old age is56.5567% of protection and23.4451342% of all spending. Chart rounds to57% and23% respectively. Survivors remains separately labelled, never folded into old age or called all pensions. Research's zero is explicitly noted; smallest positive category gets a keyed label outside its rectangle. Health is separate. Housing support here differs from the top-level housing/community-amenities function. Salaries cut across functions and must not be added as another slice.
  4. Has it grown? In which sense? GF10 rises from €528.086bn in2014 to€693.0288bn in2024, +31.2341% at current prices, yet falls from24.5% to23.7%GDP. Old age increases €99.1837bn of the €164.9428bn nominal social-protection increase,60.1322% (rounded60%). This is accounting contribution, not a causal attribution. Plot full1995–2024 annual GDP-share history for social protection and health; annotate1995(22.0/6.9),2014(24.5/8.3),2020(27.2/9.0),2024(23.7/8.9). Longer context prevents cherry-picking2014: protection was22.0% in1995 and23.7% now; health6.9→8.9. GDP shares are not inflation-adjusted volumes or spending per person. Same figure has aligned endpoint comparison of all nine protection groups,2014 versus2024, using a zero-based shared0–15%GDP scale: sickness2.7→2.9, old age13.6→13.4, survivors1.6→1.4, family2.6→2.3, unemployment1.9→1.7, housing0.9→0.7, exclusion1.0→1.2, research0→0, other0.2→0.1. Equal endpoints must show both years in labels. INSEE attributes recent pension increases to inflation-linked uprating and health increases to prices and volumes. This does not estimate the independent effects of ageing or reform.
  5. Then why the deficit? Retain1995–2025 revenue/expenditure history: all31 B9 values negative. From2022→2024 revenue53.7→51.2%GDP, spending58.4→57.0: receipts fell further, so deficit widened4.7→5.8. INSEE attributes2023 revenue weakness to taxable bases and tax reductions; benefit indexation reacts to past inflation. IMF2026 ArticleIV estimates2025 structural deficit5.0%potentialGDP and primary deficit3.0%GDP; attributed model/context figures, not our causal estimates. Neither interest alone nor a temporary downturn accounts for the persistent gap. No claim that these data identify waste or an optimal tax/spending level. Deficit bars2019–2025 remain2.4,8.9,6.6,4.7,5.4,5.8,5.1: preserve2025 improvement as counter-evidence.
  6. What does this mean for debt? Current debt €3.5955tn,119%GDP, June2026. Existing coherent quarterly series2000Q1–2026Q2; labels2007Q4 65.5%,2019Q4 98.2%,2020Q4 114.9%,2023Q4 109.5%,2026Q2 119%. Display€3.6trillion. Explain stock versus annual flow in one sentence, with GDP/financial adjustments caveat. No default forecast or claim to explain bond yields.
  7. Can I inspect/reuse it? Short method links to dataset, exact files/build and portable ZIP. Source precision remains in CSVs. Main article targets600–700words, with working/review notes outside the reader narrative. Dataset's README describes resource schemas, coverage and licences. Portable README contains story plus data links; sources folder carries original repository layout for offline reproduction.

Chart plan

#ChartData and transformationPurpose and checks
1Compact revenue/spending bars,2025fiscal FR MIO_EUR TR/TE divided by1e6 for trillions; B9/1000 for deficit billions; TR/TE×100 for coverageSame zero baseline, exact common scale; labels€1.56tn/€1.71tn and€153bn gap,91/100 comparison. Explicit rounded display.
2Ranked spending bars,2024Existing ten level1 COFOG rows; each share divided by this resource's TOTAL; values/1000All ten visible; whole billions and one decimal shares; total€1.67tn. Sum tolerance1.1million euros.
3Social-protection treemap,2024Nine GF10 level2 children; deterministic d3-hierarchy layout drawn with Plot.rect; MIO_EUR areaNo parent double counting; sum tolerance1million; zero research has no area and is named; smallest tile keyed; full labels/amounts visible. Title/subtitle gives parent€693bn, oldage57%of parent/23%of all spending.
4Evolution: GDP-share history plus group comparisonGF10/GF07 PC_GDP1995–2024; own series,30 finite consecutive years each. All nine GF10 groups PC_GDP2014/2024; paired endpointsTwo aligned panels in a single composition: aggregate history on0–30%GDP; subgroup comparison on0–15%GDP. Direct-label lines/endpoints; labelled2014/2024 markers, no implied monotonic trends. Notes show nominal€528→693bn/+31%, oldage€99bn/60%of nominal increase.
5Revenue and expenditure historyExisting fiscal FR PC_GDP TR/TE1995–2025,31 consecutive values eachPreserve45–64 truncated line axis and state truncation. Direct labels and2022→2024 arithmetic. Remove dense redundant euro-total footnote now in chart1.
6Recent deficit barsExisting FR B9 PC_GDP2019–2025, sign inverted for shortfallSeven finite negative source balances; zero baseline0–10%; labels all values, highlight2025 improvement.
7Quarterly debt lineExisting106 consecutive INSEE rows, quarter-end UTC dates, one vintagePreserve50–130% truncated line axis; labels listed above and latest€3.6tn; no secondary axis.

Run calculations from the actual CSV rows before review. Chart annotations must derive from rows, not typed numbers; additions to shared data helper are reproducible arithmetic, not new source data. Static SVGs via Observable Plot; d3-hierarchy only for treemap geometry. All deterministic, checked by two builds and desktop/mobile inspection. A treemap alone cannot show evolution; the fourth figure supplies the time dimension. Seven visual blocks are a deliberate response to the broader investigation and user feedback, not the skill's usual single-finding short story.

Outside context

Voice, limitations and review

House voice: short, concrete, attributed; author voice pass remains outstanding. Round for readers without altering source precision. Every narrative data number appears on a chart except the31-year dataset count and attributed IMF estimates. Do not overclaim causal apportionment, future solvency, service quality, cross-country efficiency or adequacy of benefits; those require further investigation. The user explicitly authorised iteration; independent outline approval remains the evidence gate before revised chart/prose implementation.

Revision 3: growth in euros, old-age meaning and ageing evidence

This section supersedes the affected revision-2 chart/wording specifications. Trigger: user round-2 feedback and the follow-up screenshot showing that GDP-share declines looked inconsistent with the claim of growth. Keep all existing source series and counter-evidence; do not relabel nominal spending growth as real growth. Revenue becomes near-black (#242424), expenditure red (#c83232) in the opening bars and historical gap. Other comparisons avoid the former blue/green pairing.

Revised argument and reader sequence

France's larger euro spending bill is led by retirement-related support and health; ageing contributes to pension pressure, but recent indexation and the revenue side also matter, and more euros need not mean a higher share of GDP.

  1. Preserve the compact fiscal snapshot and overall spending mix. Define old age immediately beside the treemap as retirement income and support for older people, including retirement pensions, care allowances, accommodation, home help and administration. UN COFOG10.2.0 explicitly includes government-employee and military pension schemes. It is not a line for nursing homes alone; survivors and healthcare remain separate categories. Do not derive an unverified pensions/care pie from a different accounting framework.
  2. Directly answer what is growing. New zero-based horizontal bars show changes in current €bn, with two vertically stacked panels for2014–2024 and2023–2024, both using mutually exclusive categories: GF1002 old age, GF10 minus GF1002 other social protection, and the other nine top-level functions. Sort each panel by its own change. All11 changes must add to TOTAL's change within0.002bn source rounding. Over2014–2024 total spending grows€414.1448bn; old age€99.1837bn, health€81.5841bn, other social protection€65.7591bn are the largest additions. In2023–2024 total grows€64.4013bn; old age€22.8755bn and health€11.4799bn increase while economic affairs falls€11.5475bn. Label each bar to one decimal €bn, retain a visible zero and negatives, and state the different panel scales (decade approximately−5 to110; year−15 to30). GDP ratios and real volumes are not being charted here. Never add GF10 parent on top of the two social-protection components.
  3. Explain the denominator visually. Retain aggregate1995–2024 GDP-share history, but replace the subgroup comparison with two aligned panels: current-euro spending2014/2024 (common0–420€bn scale), then share of GDP2014/2024 (common0–15% scale). Same nine categories and row order, largest2024 euro amount first. Each panel has two explicit numeric columns labelled2014 and2024 in the same colours as the marks; values are not a single unexplained arrow. Both dots are filled, radius4.5;2014 orange #b65d16,2024 blue #2563eb. Small opposing vertical offsets keep coincident/nearby values visible; connector joins actual marker positions without shifting x values. Include actual coloured circle/year keys. Social protection€528.086→693.0288bn (+31.2341%) while GDP share24.5→23.7%; old age€292.7706→391.9543bn (+33.8776%) while13.6→13.4%GDP. These are current prices, not inflation-adjusted purchasing power. Label in large text: “More euros spent” and “Smaller/larger share of GDP” before the reader reaches the chart. Keep longer-run protection22.0→23.7%GDP and health6.9→8.9%GDP context; avoid implying that GDP-share declines mean nominal cuts.
  4. Answer ageing with attributed evidence, not a new unsupported causal estimate. UN supplies the category definition. DREES2025 social-protection report, printed p36, describes baby-boom retirements and longer lives as increasing recipient numbers, with retirement reforms moderating expenditure dynamics. Printed pp54–57 identifies inflation-linked pension uprating as the main2024 pension-growth driver and rising recipients as another contributor: basic pension uprating5.3% from1January2024; CNAV recipient count+1.0% in2024. These two figures measure different populations/concepts and MUST NOT be added into a causal decomposition of the€392bn COFOG category. Retain as attributed external figures exempt from the chart-number rule, with a direct source link. Explain pension expenditure roughly as recipients × average payment, with eligibility/retirement age affecting the first and indexation/career mix affecting the second. No estimate of what fraction of the decade's COFOG increase was caused by ageing. DREES' broader protection accounts include some private schemes and differ from COFOG: use them for mechanisms, not substitution of totals.
  5. Keep the deficit and debt context concise. Aim for no more than700 prose words, allowing the extra visual evidence to carry numerical detail. No new top-level dataset: the three validated CSVs already support growth calculations; new external context snapshots live in france-public-finances-src with provenance and hashes. Portable source/bundle includes this directory. Author voice pass remains outstanding.

Added and revised chart plan

ChartFields and calculationReview checks
New growth rankingspending-functions year/unit/function_code/value; annual end minus start in MIO_EUR/1000; split GF10 into GF1002 and residualAll11 leaves finite, add to total change within€2m; includes negative economic-affairs change; distinct decade/year scales clearly stated; labels derived from rows.
Revised evolutionExisting aggregate series plus all nine GF10 children,2014 and2024, MIO_EUR/1000 and PC_GDPSeparate units and scales, equal-sized filled year markers, actual colour key and year-labelled numeric columns; no summing rounded GDP shares; dates are years, not before/after claims about a single reform.
Snapshot and gapExisting TR/TE series, no data changesNear-black revenue, red expenditure consistently; explicit labels preserved.

New sources and record

The user feedback is preserved verbatim in docs/reviews/france-public-finances-user-feedback.md. Review this revision's arithmetic, category meaning and causal limits before chart/prose implementation.

Built with LogoFlowershow