ded5e66ccc
Wraps temp file operations in try/except to ensure the temporary database file is always cleaned up, even if an exception occurs during write_snapshot or verify_integrity. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
198 lines
7.1 KiB
Plaintext
198 lines
7.1 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "c5b66458e29113e9",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import polars as pl\n",
|
|
"\n",
|
|
"pl.Config(\n",
|
|
" fmt_str_lengths=120,\n",
|
|
" fmt_table_cell_list_len=50,\n",
|
|
" set_tbl_rows=100,\n",
|
|
" tbl_cols=-1,\n",
|
|
")\n",
|
|
"\n",
|
|
"for methode_dividendes in (\"flat\", \"progressif\"):\n",
|
|
" df: pl.DataFrame = pl.DataFrame()\n",
|
|
"\n",
|
|
" for i in range(0, 11):\n",
|
|
" benefice_reel = 3000\n",
|
|
" ca = 50000\n",
|
|
" depenses_pro = 5000\n",
|
|
" remuneration_plus_is = ca - depenses_pro - benefice_reel\n",
|
|
" is_minimal = benefice_reel * 0.15\n",
|
|
"\n",
|
|
" salaires_brut = (remuneration_plus_is - is_minimal) * i / 10\n",
|
|
"\n",
|
|
" def taux_dividendes():\n",
|
|
" taux = {}\n",
|
|
" if methode_dividendes == \"flat\":\n",
|
|
" taux = {\"retenue_source\": 0.7, \"abattement\": 0}\n",
|
|
" elif methode_dividendes == \"progressif\":\n",
|
|
" taux = {\"retenue_source\": 0.828, \"abattement\": 0.6}\n",
|
|
" return taux\n",
|
|
"\n",
|
|
" def calcul_cout_dividendes():\n",
|
|
" return remuneration_plus_is - salaires_brut - is_minimal\n",
|
|
"\n",
|
|
" def calcul_dividendes_bruts():\n",
|
|
" return calcul_cout_dividendes() / 1.15\n",
|
|
"\n",
|
|
" def calcul_cout_remuneration():\n",
|
|
" return calcul_dividendes_bruts() * 1.15 + salaires_brut\n",
|
|
"\n",
|
|
" def calcul_dividendes_net():\n",
|
|
" dividendes_bruts = calcul_dividendes_bruts()\n",
|
|
" dividendes_net = dividendes_bruts * taux_dividendes()[\"retenue_source\"]\n",
|
|
" return dividendes_net\n",
|
|
"\n",
|
|
" def calcul_salaires_net():\n",
|
|
" return salaires_brut * 0.563\n",
|
|
"\n",
|
|
" def calcul_revenu_imposable():\n",
|
|
" return (calcul_salaires_net() * 0.9) + (\n",
|
|
" calcul_dividendes_net() * taux_dividendes()[\"abattement\"]\n",
|
|
" )\n",
|
|
"\n",
|
|
" def calcul_revenu_net():\n",
|
|
" return calcul_salaires_net() + calcul_dividendes_net()\n",
|
|
"\n",
|
|
" def calcul_benefice():\n",
|
|
" return ca - depenses_pro - salaires_brut\n",
|
|
"\n",
|
|
" def calcul_is():\n",
|
|
" return (calcul_benefice() - is_minimal) * 0.15\n",
|
|
"\n",
|
|
" def calcul_ir(revenu):\n",
|
|
" tranches_ir = [[11488, 0], [29315, 0.11], [83283, 0.3]]\n",
|
|
" revenu_restant = revenu\n",
|
|
" ir = 0\n",
|
|
" for tranche in tranches_ir:\n",
|
|
" if revenu_restant > 0:\n",
|
|
" ir_tranche = min(revenu_restant, tranche[0]) * tranche[1]\n",
|
|
" ir = +ir_tranche\n",
|
|
" revenu_restant = revenu_restant - tranche[0]\n",
|
|
"\n",
|
|
" return ir\n",
|
|
"\n",
|
|
" def calcul_revenu_ae():\n",
|
|
" apres_cotisations = calcul_cout_remuneration() * 0.76 - depenses_pro\n",
|
|
" impots = calcul_ir(apres_cotisations * 0.66)\n",
|
|
" return apres_cotisations - impots\n",
|
|
"\n",
|
|
" def fmt(value):\n",
|
|
" return str(int(value))\n",
|
|
"\n",
|
|
" # print(salaires_brut)\n",
|
|
" # print(calcul_cout_dividendes())\n",
|
|
" # print(calcul_dividendes_bruts())\n",
|
|
" # print(calcul_is())\n",
|
|
" # print(\"\")\n",
|
|
" # print(\"\")\n",
|
|
" #\n",
|
|
" # print(salaires_brut + calcul_dividendes_bruts() + calcul_is(), \" == \", remuneration_plus_is)\n",
|
|
"\n",
|
|
" # assert salaires_brut + calcul_dividendes_bruts() + calcul_is() == remuneration_plus_is\n",
|
|
"\n",
|
|
" row: dict = {\n",
|
|
" \"Salaires bruts\": [fmt(salaires_brut / 12)],\n",
|
|
" \"Dividendes bruts\": [fmt(calcul_cout_dividendes() / 12)],\n",
|
|
" \"Benefice\": [fmt(calcul_benefice())],\n",
|
|
" \"Benefice réél\": [\n",
|
|
" fmt(calcul_benefice() - calcul_is() - calcul_dividendes_bruts())\n",
|
|
" ],\n",
|
|
" \"IS\": [fmt(calcul_is())],\n",
|
|
" \"IR\": [fmt(calcul_ir(calcul_revenu_imposable()) / 12)],\n",
|
|
" \"IS + IR\": [fmt(calcul_is() + calcul_ir(calcul_revenu_imposable()))],\n",
|
|
" \"Salaires net\": [fmt(calcul_salaires_net() / 12)],\n",
|
|
" \"Dividendes net\": [fmt(calcul_dividendes_net() / 12)],\n",
|
|
" \"Revenu net ap. impôts\": [\n",
|
|
" fmt((calcul_revenu_net() - calcul_ir(calcul_revenu_imposable())) / 12)\n",
|
|
" ],\n",
|
|
" \"Revenue AE ap. impôts\": [fmt(calcul_revenu_ae() / 12)],\n",
|
|
" }\n",
|
|
"\n",
|
|
" df = pl.concat([df, pl.from_dict(row)])\n",
|
|
"\n",
|
|
" print(df)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "initial_id",
|
|
"metadata": {
|
|
"collapsed": true
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"from dash import ALL, Dash, Input, Output, Patch, State, callback, dcc, html\n",
|
|
"\n",
|
|
"app = Dash()\n",
|
|
"\n",
|
|
"app.layout = html.Div(\n",
|
|
" [\n",
|
|
" html.Button(\"Add Filter\", id=\"add-filter-btn\", n_clicks=0),\n",
|
|
" html.Div(id=\"dropdown-container-div\", children=[]),\n",
|
|
" html.Div(id=\"dropdown-container-output-div\"),\n",
|
|
" ]\n",
|
|
")\n",
|
|
"\n",
|
|
"\n",
|
|
"@callback(\n",
|
|
" Output(\"dropdown-container-div\", \"children\"), Input(\"add-filter-btn\", \"n_clicks\")\n",
|
|
")\n",
|
|
"def display_dropdowns(n_clicks):\n",
|
|
" patched_children = Patch()\n",
|
|
" new_dropdown = dcc.Dropdown(\n",
|
|
" [\"NYC\", \"MTL\", \"LA\", \"TOKYO\"],\n",
|
|
" id={\"type\": \"city-filter-dropdown\", \"index\": n_clicks},\n",
|
|
" )\n",
|
|
" patched_children.append(new_dropdown)\n",
|
|
" return patched_children\n",
|
|
"\n",
|
|
"\n",
|
|
"@callback(\n",
|
|
" Output(\"dropdown-container-output-div\", \"children\"),\n",
|
|
" Input({\"type\": \"city-filter-dropdown\", \"index\": ALL}, \"value\"),\n",
|
|
" State({\"type\": \"city-dynamic-dropdown\", \"index\": ALL}, \"id\"),\n",
|
|
")\n",
|
|
"def display_output(values, ids):\n",
|
|
" return html.Div(\n",
|
|
" [html.Div(f\"Dropdown {i + 1} = {value}\") for (i, value) in enumerate(values)]\n",
|
|
" + [html.P(ids)],\n",
|
|
" )\n",
|
|
"\n",
|
|
"\n",
|
|
"if __name__ == \"__main__\":\n",
|
|
" app.run(debug=True)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 2
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython2",
|
|
"version": "2.7.6"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|