Skip to content

Instantly share code, notes, and snippets.

@komuw
Last active February 6, 2025 09:00
Show Gist options
  • Save komuw/b7fc41d1cf018bc14f945a010a2045f0 to your computer and use it in GitHub Desktop.
Save komuw/b7fc41d1cf018bc14f945a010a2045f0 to your computer and use it in GitHub Desktop.
cost/spending of public primary, jss and secondary education in kenya
# we are going to try estimate the amount of money the govt(ahem, taxpayer) spends per public school student per year/term.
# We are only interested in the figures for students in PUBLIC primary, jss AND secondary schools.
# All the figures here come from the 2024/25 supplementary estimates I.
# see: https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf
# aka, the one that was sent to parliament after the 2024/25 finance bill was rejected.
# Number of learners.
# We are only interested in primary, jss & secondary school figures.
# See page 221 of the supplementary estimates.
learners_in_public_primary_sch = 6_450_133 # 6million
learners_in_jss = 3_312_865
learners_in_sec_sch = 3_244_325
learners_in_adult_education = 151_000
learners_provided_with_sch_meals = 4_000_000
total_public_learners = learners_in_public_primary_sch + learners_in_jss + learners_in_sec_sch
total_public_learners = 13_007_323 # 13million.
# Spending for basic education
# See page 229 of the supplementary estimates.
free_primary_education = 21_633_795_702 # KES 21 billion
pri_special_needs_education = 681_248_083
ecde = 18_448_319
pri_teachers_training_in_servicing = 389_469_379
adult_education = 55_275_376
expanding_edu_in_asals = 400_000_000
free_sec_edu = 94_599_910_071 # KES 94 billion
sec_teachers_services = 231_689_981
sec_teachers_training_in_servicing = 252_582_688
sec_special_needs_education = 200_000_000
curriculum_devpt = 1_098_221_559
exams_and_certification = 1_827_000_000
co_curriculum_activities = 1_329_508_180
hq_admin_services = 1_537_919_228
county_admin_services = 3_070_957_202
total_basic_education = (
free_primary_education
+ pri_special_needs_education
+ pri_teachers_training_in_servicing
+ expanding_edu_in_asals
+ free_sec_edu
+ sec_teachers_services
+ sec_teachers_training_in_servicing
+ sec_special_needs_education
+ curriculum_devpt
+ exams_and_certification
+ co_curriculum_activities
+ hq_admin_services
+ county_admin_services
)
assert total_basic_education == 127_252_302_073 # KES 127 billion
# Spending for TSC. We are only interested in TSC spending specifically for primary, jss & secondary(ie, excluding tertiary)
# See page 865 of the supplementary estimates.
teacher_mgmnt_primary = 196_127_073_024 # KES 196 billion
teacher_mgmnt_secondary = 137_015_327_079
teacher_mgmnt_tertiary = 4_533_870_504
governance_and_standards = 1_104_431_830
general_admin = 9_107_215_823
# For `governance_and_standards` & `general_admin`, it is not broken down. ie, it's hard to know what percentage of say `general_admin` is dedicated
# for the general_admin of primary, secondary or tertiary.
# But since `teacher_mgmnt_tertiary` is 1.34% of the total for teacher_mgmnt. We will aportion `governance_and_standards`, `general_admin` in same ratios.
# ie,
governance_and_standards_primary_and_secondary = 1_104_431_830 - ((1.34 / 100) * 1_104_431_830)
governance_and_standards_primary_and_secondary = int(governance_and_standards_primary_and_secondary)
assert governance_and_standards_primary_and_secondary == 1_089_632_443
general_admin_primary_and_secondary = 9_107_215_823 - ((1.34 / 100) * 9_107_215_823)
general_admin_primary_and_secondary = int(general_admin_primary_and_secondary)
assert general_admin_primary_and_secondary == 8_985_179_130
# Thus
total_tsc_for_primary_and_secondary = (
teacher_mgmnt_primary
+ teacher_mgmnt_secondary
+ governance_and_standards_primary_and_secondary
+ general_admin_primary_and_secondary
)
assert total_tsc_for_primary_and_secondary == 343_217_211_676 # KES 343 billion
total_basic_education_budget_spending = total_basic_education + total_tsc_for_primary_and_secondary
assert total_basic_education_budget_spending == 470_469_513_749 # 470 billion
total_spending_per_learner_per_year = total_basic_education_budget_spending / total_public_learners
total_spending_per_learner_per_year = int(total_spending_per_learner_per_year)
assert total_spending_per_learner_per_year == 36_169 # KES 36k per learner per year.
total_spending_per_learner_per_term = total_spending_per_learner_per_year / 3
total_spending_per_learner_per_term = int(total_spending_per_learner_per_term)
assert total_spending_per_learner_per_term == 12_056 # KES 12k per learner per term.
# Do note that the maths is not perfect.
# For instance, the country spends KES 1.8 billion on exams and certification per year.
# I have counted that money as part of the expense for public education.
# But strictly speaking, that money is spent on both public & private
# Since private schools use the same kcpe/kcse provided by govt.
# But this estimates are not meant to be a perfect.
# In any case, if we assume that curriculum_devpt, exams_and_certification, hq_admin_services &
# governance_and_standards_primary_and_secondary are shared between public & private schools
# And we thus exclude them from the calculation.
# The cost drops from KES 36,169 to KES 35,742 per public student per year.
#
@komuw
Copy link
Author

komuw commented Jul 20, 2024

Thus the taxpayer/govt spends KES 36k per year per public school learner (KES 12k per term)

All figures are taken from the 2024/25 supplementary estimates I: https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf

@komuw
Copy link
Author

komuw commented Jul 20, 2024

Is KES 12k per term feasible? Let's do some back of the envelope calculations;

students_per_class = 30  # UNESCO recommends 25, ke-govt recommends 40
# teacher earning KES 40k per month. TSC basic pay for p2 teacher is 22k-28k.
# https://teachersnews.co.ke/tsc-all-current-job-groups-and-corresponding-salary-scales/
teacher_cost_per_student_per_term = 40_000 * 12 / (3 * students_per_class)
# grade 4 has 8 subjects. Each textbook at KES 450.
# https://officemart.co.ke/catalogue/klb-visionary-mathematics-grade-4_7817/
textbooks_per_student_per_term = 8 * 450 / 3
# 1 exercise/writing book per subject per term, at KES 75 each.
# https://officemart.co.ke/catalogue/kartasi-exercise-book-a5-200pg-rl-84_767/
exercise_book_per_student_per_term = 8 * 75
# Let's assume there is a headteacher plus 5 other extra workers.
# Also assume there are 6 classes(grade 1-6) each with two streams in total.
extra_worker_cost_per_student_per_term = (
    (
        # head teacher
        60_000
        +
        # 5 extra other workers(eg watchman)
        # minimum wage is 15k in urban areas.
        (20_000 * 5)
    )
    * 12
) / (3 * students_per_class * 6 * 2)
rent_per_student_per_term = 10_000 * 12 / (3 * students_per_class) # a room for 30 pupils somewhere in the estates.
cost = (
    teacher_cost_per_student_per_term
    + textbooks_per_student_per_term
    + exercise_book_per_student_per_term
    + extra_worker_cost_per_student_per_term
    + rent_per_student_per_term
)
# let's say owner takes a 20% profit margin.
profit = (20 / 100) * cost  # profit before tax
# Zacchaeus has to be paid. I'm aproximating.
# https://nation.africa/kenya/blogs-opinion/blogs/it-is-wrong-to-think-private-schools-don-t-pay-tax-at-all-4475136
tax = (30 / 100) * profit
# I've left out some other costs like, uniforms, pens, etc.
# These are either too small(pens) or are not strictly neccesary for schooling(uniforms)
price_per_student_per_term = int(cost + profit + tax)
assert price_per_student_per_term == 12_908  # KES 12k per student per term  

So, it's kind of possible. A good entrepreneur could play around with some variables here and there.

@komuw
Copy link
Author

komuw commented Jul 21, 2024

For university education;

# https://theconversation.com/kenyas-public-universities-financing-model-overhaul-fails-to-address-biggest-challenge-funding-228320
# https://www.businessdailyafrica.com/bd/corporate/education/student-numbers-at-private-varsities-fall-state-funding-drought--4629682
number_of_students_in_public_universities = 482_586  # another 96,460 in private unis

# Budgetary allocation for higher education:
# page 214 of the supplementary estimates.
# https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf
state_Department_for_Higher_Education_and_Research = 120_392_899_167 # kes 120b
# https://www.standardmedia.co.ke/health/education/article/2001499185/153292-students-risk-missing-university-admission-over-helb-budget-cuts
helb = 31.18 * 1_000_000_000 
university_fund = 16.921  * 1_000_000_000 
total_spending = state_Department_for_Higher_Education_and_Research + helb + university_fund

spending_per_student_per_yr = int(total_spending/number_of_students_in_public_universities)
assert spending_per_student_per_yr == 349_147 # kes 349k
#
# differentiated unit cost(DUC):
# https://www.linkedin.com/pulse/interrogating-kenyas-new-public-university-funding-model-nashon-adero/
# https://www.universitiesfund.go.ke/differentiated-unit-cost-model/
#

@komuw
Copy link
Author

komuw commented Jul 25, 2024

For technical/vocational/college(non-university) education;

# page 200 of the supplementary estimates.
# https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf
State_Department_for_Technical_Vocational_Education_and_Training = 27_515_786_255  # 27billion

# page 867 of the supplementary estimates.
# Spending for TSC. We are only interested in TSC spending specifically for primary, jss & secondary(ie, excluding tertiary)
# See page 865 of the supplementary estimates.
# For `governance_and_standards` & `general_admin`, it is not broken down. ie, it's hard to know what percentage of say `general_admin` is dedicated
# for the general_admin of primary, secondary or tertiary.
# But since `teacher_mgmnt_tertiary` is 1.34% of the total for teacher_mgmnt. We will aportion `governance_and_standards`, `general_admin` in same ratios.
# ie,
teacher_mgmnt_tertiary = 4_533_870_504
governance_and_standards_tertiary = int((1.34 / 100) * 1_104_431_830)
assert governance_and_standards_tertiary == 14_799_386
general_admin_tertiary = int((1.34 / 100) * 9_107_215_823)
assert general_admin_tertiary == 122_036_692

total_spending = (
    State_Department_for_Technical_Vocational_Education_and_Training
    + teacher_mgmnt_tertiary
    + governance_and_standards_tertiary
    + general_admin_tertiary
)
assert total_spending == 32_186_492_837

# https://www.the-star.co.ke/news/realtime/2024-05-21-kuccps-2024-breakdown-for-varsity-tvet-and-college-placements/
number_of_kcse_graduates_2023 = 895_232  # of which 201,146 had c+ and above, whereas 694,086 had grades between e-c. the former are eligible for university
number_kcse_for_colleges = 694_086
# ie, assuming college is 2yrs on average, and assuming all from kcse join colleges/tvets/etc.
# also assuming we want all students(in public & private colleges)
total_colleges_students = 694_086 * 2
spending_per_student_per_yr = int(total_spending / total_colleges_students)
assert spending_per_student_per_yr == 23_186  # KES 23k per year.

@komuw
Copy link
Author

komuw commented Jul 25, 2024

For health;

# page 318 of the supplementary estimates.
# https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf
State_Department_for_Public_Health_and_Professional_Standards = 26_243_922_035  # KES 26billion

# page 299 of the supplementary estimates.
State_Department_for_Medical_Services = 91_991_383_489  # KES 91billion

# The govt has said it expects SHIF to collect 148billion depending on how informal sector
# will contribute; https://www.the-star.co.ke/news/2024-06-19-sha-tax-to-raise-sh148-billion-in-one-year-health-ministry/
#
# NHIF in 2023 collected KES 82billion and paid out 74billion in claims
# https://www.the-star.co.ke/news/2024-06-19-sha-tax-to-raise-sh148-billion-in-one-year-health-ministry/
#
# In other places, the govt has said it expects 133billion
# https://www.businessdailyafrica.com/bd/economy/private-insurers-to-process-shif-claims--4506234
shif_tax = 133_000_000_000  # 133billion

total_spending = (
    State_Department_for_Public_Health_and_Professional_Standards
    + State_Department_for_Medical_Services
    + shif_tax
)
assert total_spending == 251_235_305_524  # KES 250b

# KNBS has projections for Kenya population for various years.
# For 2024 it is 52million
# https://new.knbs.or.ke/wp-content/uploads/2023/09/2019-Kenya-population-and-Housing-Census-Summary-Report-on-Kenyas-Population-Projections.pdf
kenya_population = 52_428_290

spending_per_citizen_per_yr = int(total_spending / kenya_population)
assert spending_per_citizen_per_yr == 4_791  # KES 4k per year.

# Is 4k/yr too little or too much?
# Let's look at the free market for guidance.
# Equity bank offers a product called equihealth
# https://equitygroupholdings.com/ke/insure/equihealth
# https://businesstoday.co.ke/equihealth-an-affordable-group-health-insurance-by-equity-bank/
# Where a family gets health insurance for a shared limit of KES 300k.
# The premiums is KES 15,000 for the principal plus five dependants.
# So premiums per person per year is 15000/6. ie, KES 2,500 per year.
#
# So the kenyan government could purchase a much better health policy for each kenyan
# on the free market using the same amount of money that is already allocated to health.
# And we haven't even mentioned that the govt would get a much much better deal
# because it would have 'economies of scale' in its favour.
#
# In fact, just from SHIF alone; allocation per citizen is 133b/52m
# which comes to KES 2536 per citizen per year. This amount is still
# more than enough to get the free market policy mentioned previously.
#
# Another way of thinking about it is that we could cut the health budget almost by half
# from KES 4,791 to KES 2,500 per person and still end up with far better healthcare than we have right now.
#
# Jubilee insurance also has a product that starts at KES 12,600 p/a for a family of 5. That's KES 2520 p/a per person
# It has an inpatient limit of 250k, maternity of 40k and last expense of 20k
# https://jubileeinsurance.com/ke/product/cover-bora-medical-cover/

@komuw
Copy link
Author

komuw commented Aug 2, 2024

For roads;

#
# The total length of tarmac/bitumen road in Kenya(yr 2024) is: 25,410km.
# See:
# 1. https://www.knbs.or.ke/wp-content/uploads/2024/05/Chapter-11-Construction-Sector-Tables.xlsx (table 11.10 & 11.11)
# 2. https://africacheck.org/fact-checks/blog/analysis-road-not-travelled-conflicting-data-threatens-kenya-president-uhuru
total_length_of_tarmac = 25_410  # 25,000 kilometers

# The cost of periodic maintenance of tarmac in year 2024 is KES ~14million/km
# ie, to lay an 35mm(3.5cm/1.3inch) of AC Overlay(asphalt concrete overaly)
# See:
# 1. https://krb.go.ke/RMLF/RMLF_2024.pdf (page 6)
# 2. https://www.knbs.or.ke/wp-content/uploads/2024/05/Chapter-11-Construction-Sector-Tables.xlsx (table 11.10 & 11.11)
# 3. https://integrum.co.ke/road-construction-costs-per-km-in-kenya-2021/
cost_of_maintenance_of_tarmac_per_km = 14_000_000  # KES 13.28m per km.

# Tarmac is estimated to last ~20yrs before a major rehabilitation is needed.
# And a 35mm overalyed road will last about ~15yrs
# See:
# 1. https://www.engineering.com/how-many-years-is-the-average-life-time-of-standard-asphalt-pavementsdoes-it-contain-partial-rehabilitation/
# 2. https://onlinepubs.trb.org/Onlinepubs/trr/1987/1117/1117-017.pdf
#
# Assuming, for whatever reason, Kenyan roads need maintenance every ~8yrs,
maintenance_cadence = 8  # ie, a road will require maintenance every 8years.
total_cost_of_maintenance_of_tarmac_per_yr = (
    total_length_of_tarmac * cost_of_maintenance_of_tarmac_per_km
) / maintenance_cadence
assert total_cost_of_maintenance_of_tarmac_per_yr == 44_467_500_000
# ie, you require KES 44billion to maintain tarmac roads per year.

# The cost of  constructing a new road in year 2024 is KES 110 million/km
# 1. https://krb.go.ke/RMLF/RMLF_2024.pdf
# 2. https://www.knbs.or.ke/wp-content/uploads/2024/05/Chapter-11-Construction-Sector-Tables.xlsx (table 11.10 & 11.11)
cost_of_new_road_per_km = 110_000_000  # KES 110m per km.

# If we set ourselves the audacious task of building 500 km/yr of new tarmac roads.
# (For reference: Kibaki built about ~250km/yr and Uhuru did ~1000km/yr.)
# See:
# 1. https://africacheck.org/fact-checks/blog/analysis-road-not-travelled-conflicting-data-threatens-kenya-president-uhuru
km_of_new_roads_per_yr = 500  # km

total_cost_of_new_roads_per_yr = cost_of_new_road_per_km * km_of_new_roads_per_yr
assert total_cost_of_new_roads_per_yr == 55_000_000_000
# ie, you require KES 55billion to construct new tarmac roads per year.


total_spending_on_tarmac_roads_per_yr = (
    total_cost_of_maintenance_of_tarmac_per_yr + total_cost_of_new_roads_per_yr
)
assert total_spending_on_tarmac_roads_per_yr == 99_467_500_000
# ie, you require KES 99billion to both construct new roads AND maintain existing ones per year.

# Do we have enough money to do that?
# The road maintenance levy collected KES 84billion in 2023/24(at KES 18/ltr).
# In 2024/25 it is projected to collect KES 115billion (at KES 25/ltr).
# See:
# 1. https://www.businessdailyafrica.com/bd/economy/where-rise-in-road-maintenance-levy-will-hurt-most-4692312
road_maintenance_levy_collection = 115_000_000_000  # KES 115billion per year

road_levy_surplus = road_maintenance_levy_collection - total_spending_on_tarmac_roads_per_yr
assert road_levy_surplus == 15_532_500_000  # KES 15billion

# Thus the road maintenance levy is enough to cater for the needs of both:
# (a) building new tarmac roads and
# (b) maintaining all existing tarmac roads.
# (c) their will be KES 15billion remaining.

# Kenya additionaly has about ~200,000km of un-tarmacked(earth) roads. What to do with those?
# See:
# 1. https://krb.go.ke/RMLF/RMLF_2024.pdf
#
# According to the the 2024/25 supplementary estimates I.
# See(page 221):
# 1. https://mwangocapital.com/wp-content/uploads/2024/07/fy-24-25-supplementary-1-.pdf
#
# the state department of roads has been assigned the following monies.
Construction_of_Roads_and_Bridges = 72_785_576_625  # KES 72billion
Rehabilitation_of_Roads = 36_577_853_501
Maintenance_of_Roads = 69_536_000_000
General_Administration_Planning_and_Support_Services = 5_942_520_610
total_roads_budget_per_yr = (
    Construction_of_Roads_and_Bridges + Rehabilitation_of_Roads + Maintenance_of_Roads
)
# I have not included the general admin in the total, since I think those are salaries for the rank & file at the ministry.
assert total_roads_budget_per_yr == 178_899_430_126  # KES 178billion per year.

# The cost of periodic maintenance of earth roads(ie, Gravelling) in year 2024 is KES ~4.83 million/km.
# See:
# https://krb.go.ke/RMLF/RMLF_2024.pdf
cost_of_maintenance_of_earth_roads_per_km = 4_830_000  # KES 4.83m per km.
total_length_of_earth_roads = 213_712  # km
total_cost_of_maintenance_of_earth_roads_per_yr = (
    total_length_of_earth_roads * cost_of_maintenance_of_earth_roads_per_km
) / maintenance_cadence
assert total_cost_of_maintenance_of_earth_roads_per_yr == 129_028_620_000
# KES 129billion. # ie, you require KES 129billion to maintain earth roads per year.

roads_budget_surplus = total_roads_budget_per_yr - total_cost_of_maintenance_of_earth_roads_per_yr
assert roads_budget_surplus == 49_870_810_126  # KES 49billion
# Thus the roads budget of KES 178billion is more than enough to maintain all earth roads.
# and have a surplus of 49billion.

total_roads_surplus = road_levy_surplus + roads_budget_surplus
assert total_roads_surplus == 65_403_310_126  # KES 65billion
# Thus the total surplus from roads is 65billion.

# In fact, if we changed so that we recarpet all tarmac roads every 5years(instead of 8) 
# and we still re-gravel all earth roads every 8years.
# We would still have a surplus of KES 38billion

# PS:
# The AC(asphalt concrete overal) overlay process is;
# (a) Preparation: existing road surface is cleaned & repaired to ensure proper adhesion of the new layer.
# (b) Tack Coat: sticky asphalt emulsion(tack coat) is applied to existing surface 2 bond the new layer.
# (c) Placement: 35mm thick layer of asphalt is spread evenly over the prepared surface.
# (d) Compaction: newly laid asphalt is compacted using rollers.
# (e) Cooling: asphalt concrete is allowed to cool and harden.
# See:
# https://www.youtube.com/watch?v=kWCJUQzre0o

# https://www.nature.com/articles/s41467-024-49193-1 (Efficient self-organization of informal public transport networks)

@komuw
Copy link
Author

komuw commented Aug 3, 2024

judiciary:

according to IEA kenya, judiciary budget should be  KES 40 bn
# https://x.com/LeoKemboi/status/1819419715225186735
# https://ieakenya.or.ke/?wpdmdl=2925

@komuw
Copy link
Author

komuw commented Nov 5, 2024

Tax to gdp ratios:

tax_revenue_2012 = 707.4  # billion # https://www.kra.go.ke/images/publications/202021-annual-revenue-performance-final.pdf
tax_revenue_2017 = 1340  # billion #ie, 1.340 trn # https://www.kra.go.ke/images/publications/Revenue-Performance-Report-2018-19.pdf
tax_revenue_2023 = 2407  # billion #ie, 2.407 trn # https://www.kra.go.ke/news-center/press-release/2122-kra-records-11-1-growth-in-revenue-collection

# https://x.com/komu_wairagu/status/1790721073849196944
govt_contribution_to_gdp_2012 = 25  # percent
# https://x.com/komu_wairagu/status/1790721073849196944
govt_contribution_to_gdp_2017 = 40  # percent
# https://www.youtube.com/watch?v=G0OoDb6V-SI&t=2994
govt_contribution_to_gdp_2023 = 50  # percent

# We are using nominal GDP figures since the tax revenues are also nominal.
gdp_2012 = 4_767.191  # billion # nominal # https://www.centralbank.go.ke/annual-gdp/
gdp_2017 = 8_483.396  # billion # nominal # https://www.centralbank.go.ke/annual-gdp/
gdp_2023 = 15_108.806  # billion # nominal # https://www.centralbank.go.ke/annual-gdp/

gdp_without_govt_contribution_to_gdp_2012 = gdp_2012 - (
    (govt_contribution_to_gdp_2012 / 100) * gdp_2012
)
gdp_without_govt_contribution_to_gdp_2017 = gdp_2017 - (
    (govt_contribution_to_gdp_2017 / 100) * gdp_2017
)
gdp_without_govt_contribution_to_gdp_2023 = gdp_2023 - (
    (govt_contribution_to_gdp_2023 / 100) * gdp_2023
)

tax_to_gdp_with_govt_contribution_to_gdp_2012 = (float(tax_revenue_2012) / float(gdp_2012)) * 100
tax_to_gdp_with_govt_contribution_to_gdp_2017 = (float(tax_revenue_2017) / float(gdp_2017)) * 100
tax_to_gdp_with_govt_contribution_to_gdp_2023 = (float(tax_revenue_2023) / float(gdp_2023)) * 100


tax_to_gdp_without_govt_contribution_to_gdp_2012 = (
    float(tax_revenue_2012) / float(gdp_without_govt_contribution_to_gdp_2012)
) * 100
tax_to_gdp_without_govt_contribution_to_gdp_2017 = (
    float(tax_revenue_2017) / float(gdp_without_govt_contribution_to_gdp_2017)
) * 100
tax_to_gdp_without_govt_contribution_to_gdp_2023 = (
    float(tax_revenue_2023) / float(gdp_without_govt_contribution_to_gdp_2023)
) * 100

print(
    f"""
tax_to_gdp_with_govt_contribution_to_gdp_2012: {tax_to_gdp_with_govt_contribution_to_gdp_2012:.2f}%
tax_to_gdp_with_govt_contribution_to_gdp_2017: {tax_to_gdp_with_govt_contribution_to_gdp_2017:.2f}%
tax_to_gdp_with_govt_contribution_to_gdp_2023: {tax_to_gdp_with_govt_contribution_to_gdp_2023:.2f}%

tax_to_gdp_without_govt_contribution_to_gdp_2012: {tax_to_gdp_without_govt_contribution_to_gdp_2012:.2f}%
tax_to_gdp_without_govt_contribution_to_gdp_2017: {tax_to_gdp_without_govt_contribution_to_gdp_2017:.2f}%
tax_to_gdp_without_govt_contribution_to_gdp_2023: {tax_to_gdp_without_govt_contribution_to_gdp_2023:.2f}%
      """
)

# Output:
# tax_to_gdp_with_govt_contribution_to_gdp_2012: 14.84%
# tax_to_gdp_with_govt_contribution_to_gdp_2017: 15.80%
# tax_to_gdp_with_govt_contribution_to_gdp_2023: 15.93%

# tax_to_gdp_without_govt_contribution_to_gdp_2012: 19.79%
# tax_to_gdp_without_govt_contribution_to_gdp_2017: 26.33%
# tax_to_gdp_without_govt_contribution_to_gdp_2023: 31.86%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment