Marimo-quarto
  • Home
import%20marimo%20as%20mo%0A

Rémunération

import%20numpy%20as%20np%0Avaleur_point_default%20%3D%204.92278%20%0A%0A%0Adef%20gross2taxable_net(gross_salary)%3A%0A%20%20%20%20return%200.792893401*gross_salary%0A%0Adef%20gross2annual_net(gross_salary)%3A%0A%20%20%20%20return%2012*0.792893401*gross_salary%0A%0Adef%20annual_taxable_net(gross_salary)%3A%0A%20%20%20%20return%2012*gross2taxable_net(gross_salary)%0A%0A%0A%0Adef%20taxes(annual_taxable_net%2C%20threshold_1%20%3D%2011497.0%2C%20threshold_2%20%3D%2029315.0)%3A%0A%20%20%20%20%23%20print(f%22salary%20%3A%20%7Bannual_taxable_net%2F12%7D%22)%0A%20%20%20%20thirty_part%20%3D%20max((0.9*annual_taxable_net%20-%20threshold_2%2C0))%0A%20%20%20%20thirty_tax%20%3D%200.3*thirty_part%0A%20%20%20%20print(f%2230%20pourcents%20%3A%20%7Bthirty_tax%7D%22)%0A%20%20%20%20second_pal_tax%20%3D%200.11*(threshold_2-threshold_1)%0A%20%20%20%20print(f%2211%20pourcents%20%3A%20%7Bsecond_pal_tax%7D%22)%0A%20%20%20%20return%20second_pal_tax%2Bthirty_tax%0A%0A slider_res%20%3D%20mo.ui.slider(0%2C%2010%2C%201%2C%20label%3D%22IR%20(%25)%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%203)%0A%23%20slider_res%0A slider_pi%20%3D%20mo.ui.slider(0%2C%2050%2C%201%2C%20label%3D%22Reval.%20pt%20(%25)%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%200)%0A%23%20slider_pi%0A
mo.hstack(%5Bslider_res%2C%20slider_pi%5D)%0A%0A
slider_anc%20%3D%20mo.ui.slider(0%2C%2045%2C%203%2C%20label%3D%22Anciennet%C3%A9%20%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%2021)%0Aslider_anc%0A slider_augmentation%20%3D%20mo.ui.slider(0%2C%2045%2C%205%2C%20label%3D%22Palier%20(pt)%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%2030)%0Aslider_augmentation%0A%0A

Cas 1

slider_start%20%3D%20mo.ui.slider(589%2C%20835%2C%201%2C%20label%3Dr%22IM%20initial%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%20678)%0Aslider_start%0A%0A prime_slider%20%3D%20mo.ui.slider(0%2C%207000%2C%201%2C%20label%3Dr%22Prime%20C1%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%202000)%0Aprime_slider%0A

Cas 2

slider_start_2%20%3D%20mo.ui.slider(589%2C%20835%2C%201%2C%20label%3Dr%22IM%20initial%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%20710)%0Aslider_start_2%0A prime_slider_2%20%3D%20mo.ui.slider(0%2C%207000%2C%201%2C%20label%3Dr%22Prime%20C1%22%2C%20show_value%3DTrue%2C%20include_input%3DTrue%2C%20value%20%3D%202000)%0Aprime_slider_2%0A number_years%20%3D%20int(np.floor(slider_anc.value%2F3))%2B1%0Ajump_indice%20%3D%20slider_augmentation.value%0Astart_indice_default%20%3D%20slider_start.value%0Astart_indice_CPJ%20%3D%20slider_start_2.value%0A res%20%3D%201%2Bslider_res.value%2F100%0Avaleur_point%20%3D%20valeur_point_default*(1%2Bslider_pi.value%2F100)%0A%0A%0A%0Aindice_majore_ENSTA_default%20%3D%20np.array(%5Bstart_indice_default%20%2B%20i%20*%20jump_indice%20for%20i%20in%20range(number_years)%5D)%0Aindice_majore_ENSTA_CPJ%20%3D%20np.array(%5Bstart_indice_CPJ%20%2B%20i%20*%20jump_indice%20for%20i%20in%20range(number_years)%5D)%0Ayears_ENSTA%20%3D%20np.array(%5B0%5D%20%2B%20%5B3%5D%20*%20(number_years%20-%201))%0APrime%20%3D%20prime_slider.value%20%2F%2012%0APrime_2%20%3D%20prime_slider_2.value%20%2F%2012%0APrime_mieux%20%3D%203000%20%2F%2012%0ASalaire_ENSTA_default%20%3D%20indice_majore_ENSTA_default%20*%20valeur_point%20*%20res%0ASalaire_ENSTA_CPJ%20%3D%20indice_majore_ENSTA_CPJ%20*%20valeur_point%20*%20res%0ASalaire_mcf_ENS%20%3D%20indice_majore_mcf_ENS%20*%20valeur_point%0A%23%20indice_majore_ENSTA_default%20%3D%20np.array(number_years*%5Bstart_indice_default%5D)%0A%23%20indice_majore_ENSTA_CPJ%20%3D%20np.array(number_years*%5Bstart_indice_CPJ%5D)%0ASalaire_mcf%20%3D%20indice_majore_mcf%20*%20valeur_point%0Aind%C3%A9mnite_residence_mcf_ENS%20%3D%200.03%20*%20Salaire_mcf_ENS%0Aind%C3%A9mnite_residence_mcf%20%3D%200.03%20*%20Salaire_mcf%0ASalaire_ENSTA_default_prime%20%3D%20Salaire_ENSTA_default%20%2B%20Prime%0ASalaire_ENSTA_CPJ_prime%20%3D%20Salaire_ENSTA_CPJ%20%2B%20Prime_2%0A%0A%0A%0A%0ASalaire_ENSTA_moy_default%20%3D%20start_indice_default*valeur_point*res%0ASalaire_ENSTA_moy_CPJ%20%3D%20(start_indice_CPJ*valeur_point)*res%0A%0Agross_salary%20%3D%20Salaire_ENSTA_moy_CPJ%2BPrime_2%0Atotal_annual_net%20%3D%20gross2annual_net(gross_salary)%20-%20taxes(annual_taxable_net(gross_salary))%0A%0A%0Agross_salary_default%20%3D%20Salaire_ENSTA_moy_default%2BPrime%0Atotal_annual_net_default%20%3D%20gross2annual_net(gross_salary_default)%20-%20taxes(annual_taxable_net(gross_salary_default))%0A
import%20pandas%20as%20pd%0A%23%20---%20Table%20data%20---%0Adata%20%3D%20%7B%0A%20%20%20%20%22Salaire%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%22Brut%20mensuel%22%2C%0A%20%20%20%20%20%20%20%20%22Net%20mensuel%22%2C%0A%20%20%20%20%20%20%20%20%22Net%20mensuel%20apr%C3%A8s%20imp%C3%B4ts%22%2C%0A%20%20%20%20%20%20%20%20%22Brut%20annuel%22%2C%0A%20%20%20%20%20%20%20%20%23%20%22Brut%20%C3%A9quivalent%20priv%C3%A9%22%2C%0A%20%20%20%20%20%20%20%20%23%20%22taxes%20annuelles%22%2C%0A%20%20%20%20%20%20%20%20%22Pourcentage%20%C3%A0%20la%20source%22%0A%20%20%20%20%5D%2C%0A%20%20%20%20f%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_CPJ%7D%22%3A%20%5B%0A%20%20%20%20%20%20%20%20gross_salary%2C%0A%20%20%20%20%20%20%20%20gross2annual_net(gross_salary)%2F12%2C%0A%20%20%20%20%20%20%20%20total_annual_net%2F12%2C%0A%20%20%20%20%20%20%20%2012*gross_salary%2C%0A%20%20%20%20%20%20%20%20%23%2012*gross_salary*0.8%2F0.75%2C%0A%20%20%20%20%20%20%20%20%23%20taxes(annual_taxable_net(gross_salary))%2C%0A%20%20%20%20%20%20%20%20100*taxes(annual_taxable_net(gross_salary))%2Fgross2annual_net(gross_salary)%0A%20%20%20%20%5D%2C%0A%0A%20%20%20%20f%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_default%7D%22%3A%20%5B%0A%20%20%20%20%20%20%20%20gross_salary_default%2C%0A%20%20%20%20%20%20%20%20gross2annual_net(gross_salary_default)%2F12%2C%0A%20%20%20%20%20%20%20%20total_annual_net_default%2F12%2C%0A%20%20%20%20%20%20%20%2012*gross_salary_default%2C%0A%20%20%20%20%20%20%20%20%23%2012*gross_salary_default*0.8%2F0.75%2C%0A%20%20%20%20%20%20%20%20%23%20taxes(annual_taxable_net(gross_salary_default))%2C%0A%20%20%20%20%20%20%20%20100*taxes(annual_taxable_net(gross_salary_default))%2Fgross2annual_net(gross_salary_default)%0A%20%20%20%20%5D%0A%7D%0A%0Adf%20%3D%20pd.DataFrame(data)%0Adf%5Bf%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_CPJ%7D%22%5D%20%3D%20df%5Bf%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_CPJ%7D%22%5D.map(lambda%20x%3A%20f%22%E2%82%AC%7Bx%3A%2C.2f%7D%22)%0Adf%5Bf%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_default%7D%22%5D%20%3D%20df%5Bf%22Montant%20(%E2%82%AC)%20-%20IM%20%7Bstart_indice_default%7D%22%5D.map(lambda%20x%3A%20f%22%E2%82%AC%7Bx%3A%2C.2f%7D%22)%0A%0A%23%20---%20Display%20both%20---%0A%0Amo.ui.table(df)%0A

Comparaison avec la grille des maîtres de conférences

if%20switch.value%3A%0A%20%20%20%20RIPEC_2026%20%3D%20((6400%2B4800)%2F2)%2F12%0Aelse%3A%0A%20%20%20%20RIPEC_2026%20%3D%204800%2F12%0A%0Ayears_mcf_default%20%3D%20np.array(%5B0%2C%200.67%2C%201-0.67%2C%202.833%2C%202.833%2C%203.5%2C%202.833%2C%202.833%5D)%0Ayears_mcf_ENS%20%3D%20np.array(%5B0%2C%201%2C%200.5%2C%202.833%2C%203.5%2C%202.833%2C%202.833%5D)%0Aindice_majore_mcf_ENS%20%3D%20np.array(%5B648%2C%20648%2C%20698%2C%20744%2C%20774%2C%20808%2C%20835%5D)%0Aindice_majore_mcf%20%3D%20np.array(%5B589%2C%20648%2C648%2C%20698%2C%20744%2C%20774%2C%20808%2C%20835%5D)%0ARIPEC%20%3D%20np.array(%5BRIPEC_2026%5D*2%20%2B%20%5B530%5D%20*%206)%20%20%23%20Default%20avec%20theses%20%2B%201%20an%20bonifcations%20%2B%202PoD%0ARIPEC_ENS%20%3D%20np.array(%5BRIPEC_2026%5D%20%2B%20%5B530%5D%20*%206)%20%20%23%20ENS%20avec%203%2B1%20ans%20pour%20these%202%20ans%20pour%20ens%20et%202%20ans%20PoD%0A mo.md(f%22RIPEC%202026%20retenue%20%3A%20%7BRIPEC_2026%3A.0f%7D%20euros%20mensuels%20(see%20below)%22)%0A%0A import%20plotly.graph_objects%20as%20go%0Afig%20%3D%20go.Figure()%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_default%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'%20IM%20%7Bstart_indice_default%7D%20(salaire%20seul)'%2C%20line%3Ddict(color%3D'skyblue'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'cross')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_default_prime%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'%20IM%20%7Bstart_indice_default%7D%20(avec%20C1)%20'%2C%20line%3Ddict(color%3D'skyblue'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_default_prime%20-%20Prime%20%2B%20Prime_mieux%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'%20IM%20%7Bstart_indice_default%7D%20(avec%20C1%20%2B%20C3)%20'%2C%20line%3Ddict(color%3D'skyblue'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_CPJ%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'IM%20%7Bstart_indice_CPJ%7D%20(salaire%20seul)%20'%2C%20line%3Ddict(color%3D'blue'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'cross')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_CPJ_prime%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'IM%20%7Bstart_indice_CPJ%7D%20(avec%20C1)%20'%2C%20line%3Ddict(color%3D'blue'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_ENSTA)%2C%20y%3DSalaire_ENSTA_CPJ_prime%20-%20Prime%20%2B%20Prime_mieux%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3Df'IM%20%7Bstart_indice_CPJ%7D%20(avec%20C1%20%2B%20C3)%20'%2C%20line%3Ddict(color%3D'blue'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0A%23%20Polytechnique%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_ENS)%2C%20y%3Dres%20*%20Salaire_mcf_ENS%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20ENS%20(salaire%20seul)%20'%2C%20line%3Ddict(color%3D'lightcoral'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'cross')))%0A%23%20fig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_ENS)%2C%20y%3DSalaire_mcf_ENS%20%2B%20RIPEC_ENS%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20ENS%20(avec%20RIPEC)%20'%2C%20line%3Ddict(color%3D'lightcoral'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_ENS)%2C%20y%3Dres%20*%20Salaire_mcf_ENS%20%2B%20RIPEC_ENS%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20ENS%20(C1)%20'%2C%20line%3Ddict(color%3D'lightcoral'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_default)%2C%20y%3Dres%20*%20Salaire_mcf%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20(salaire%20seul)%20'%2C%20line%3Ddict(color%3D'chocolate'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'cross')))%0A%23%20fig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_default)%2C%20y%3DSalaire_mcf%20%2B%20RIPEC%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20(avec%20RIPEC)%20'%2C%20line%3Ddict(color%3D'chocolate'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0Afig.add_trace(go.Scatter(x%3Dnp.cumsum(years_mcf_default)%2C%20y%3Dres%20*%20Salaire_mcf%20%2B%20RIPEC%2C%20visible%3D'legendonly'%2C%20mode%3D'lines%2Bmarkers'%2C%20name%3D'MCF%20(C1)%20'%2C%20line%3Ddict(color%3D'chocolate'%2C%20dash%3D'dash'%2C%20shape%3D'hv')%2C%20marker%3Ddict(symbol%3D'circle')))%0A%0A%23%23%23%23%23%23%23%23%23%23%23%23%23%23%20Plotly%0Afig.update_layout(title%3D'%C3%89volution%20de%20la%20r%C3%A9mun%C3%A9ration'%2C%20xaxis_title%3D'Anciennet%C3%A9%20(ann%C3%A9es)'%2C%20yaxis_title%3D'R%C3%A9mun%C3%A9ration%20mensuelle%20(%E2%82%AC)'%2C%20template%3D'plotly_white'%2C%20legend%3Ddict(title%3D'Cat%C3%A9gorie')%2C%20font%3Ddict(size%3D12)%2C%20width%3D1000%2C%20height%3D600)%0Afig.update_xaxes(showgrid%3DTrue%2C%20gridwidth%3D1%2C%20gridcolor%3D'lightgrey')%0Afig.update_yaxes(showgrid%3DTrue%2C%20gridwidth%3D1%2C%20gridcolor%3D'lightgrey')%0A

Comparaison du salaire moyen sur les trois premières années en poste

Le montant de la RIPEC 2026 n’est pas encore connu, on se propose donc deux options :

  • interpoler une valeur probable entre la valeur de 2025 (4800 euros) et celle de 2027 (6400 euros)
  • un choix plus conservateur qui consite à conserver le montant de 2025 pour les estimations de 2026.
Average_IM_3_year_MCF%20%3D%20(8*589%2B28*648)%2F36%0AAverage_IM_3_year_MCF_ENS%20%3D%20(1.5*648%2B1.5*698)%2F3%0A%0Aswitch%20%3D%20mo.ui.switch(label%3D%22Interpolation%20de%20la%20RIPEC%20C1%20pour%202026%22%2C%20value%20%3D%20True)%0Aswitch
RIPEC 2026 retenue : 5600 euros if%20switch.value%3A%0A%20%20%20%20RIPEC_26%20%3D%20(6400%2B4800)%2F2%0Aelse%3A%0A%20%20%20%20RIPEC_26%20%3D%204800%0Aaverage_RIPEC%20%3D%20(2*6400%2BRIPEC_26)%2F3%0Amo.md(f%22RIPEC%202026%20retenue%20%3A%20%7BRIPEC_26%3A.0f%7D%20euros%22)%0A%0A
Average_salary_MCF%20%3D%20Average_IM_3_year_MCF%20*%20valeur_point%20*%20res%20%2B%20average_RIPEC%2F12%0AAverage_salary_MCF_ENS%20%3D%20Average_IM_3_year_MCF_ENS%20*%20valeur_point%20*%20res%20%2B%20average_RIPEC%2F12%0A%0AAverage_salary_IM_default%20%3D%20gross_salary_default%20%0AAverage_salary_IM_CPJ%20%3D%20gross_salary%20%0A%0Adata_2%20%3D%20%7B%0A%20%20%20%20%22Diff%C3%A9rence%20MCF%20-%20IM%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%22Mensuelle%20(ENS)%22%2C%0A%20%20%20%20%20%20%20%20%22Annuelle%20(ENS)%22%2C%0A%20%20%20%20%20%20%20%20%22Mensuelle%22%2C%0A%20%20%20%20%20%20%20%20%22Annuelle%22%2C%0A%20%20%20%20%5D%2C%0A%20%20%20%20f%22IM%20%7Bstart_indice_CPJ%7D%22%3A%20%5B%0A%20%20%20%20%20%20%20%20Average_salary_MCF_ENS-Average_salary_IM_CPJ%2C%0A%20%20%20%20%20%20%20%20(Average_salary_MCF_ENS-Average_salary_IM_CPJ)*12%2C%0A%20%20%20%20%20%20%20%20Average_salary_MCF-Average_salary_IM_CPJ%2C%0A%20%20%20%20%20%20%20%20(Average_salary_MCF-Average_salary_IM_CPJ)*12%2C%0A%20%20%20%20%5D%2C%0A%0A%20%20%20%20f%22IM%20%7Bstart_indice_default%7D%22%3A%20%5B%0A%20%20%20%20%20%20%20%20Average_salary_MCF_ENS-Average_salary_IM_default%2C%0A%20%20%20%20%20%20%20%20(Average_salary_MCF_ENS-Average_salary_IM_default)*12%2C%0A%20%20%20%20%20%20%20%20Average_salary_MCF-Average_salary_IM_default%2C%0A%20%20%20%20%20%20%20%20(Average_salary_MCF-Average_salary_IM_default)*12%2C%0A%20%20%20%20%5D%0A%7D%0A%0Adf2%20%3D%20pd.DataFrame(data_2)%0Adf2%5Bf%22IM%20%7Bstart_indice_CPJ%7D%22%5D%20%3D%20df2%5Bf%22IM%20%7Bstart_indice_CPJ%7D%22%5D.map(lambda%20x%3A%20f%22%E2%82%AC%7Bx%3A%2C.2f%7D%22)%0Adf2%5Bf%22IM%20%7Bstart_indice_default%7D%22%5D%20%3D%20df2%5Bf%22IM%20%7Bstart_indice_default%7D%22%5D.map(lambda%20x%3A%20f%22%E2%82%AC%7Bx%3A%2C.2f%7D%22)%0A%0A%23%20---%20Display%20both%20---%0A%0Amo.ui.table(df2)%0A%0A

Salaires moyens sur les trois premières années

mo.md(rf%22Salaire%20moyen%20mensuel%20MCF%20(ENS)%20%3A%20%7BAverage_salary_MCF_ENS%3A.2f%7D%20euros%22)%0A
%23%20mo.md(f%22RIPEC%202026%20%3A%20%7BRIPEC_26%3A.0f%7D%20euros%22)%0A%0Amo.md(rf%22Salaire%20moyen%20mensuel%20MCF%20%3A%20%7BAverage_salary_MCF%3A.2f%7D%20euros%22)%0A
Back to top