diff --git a/src/lib/components/budget/WithoutBudgetCard.svelte b/src/lib/components/budget/WithoutBudgetCard.svelte new file mode 100644 index 0000000000000000000000000000000000000000..4789f9e97babf921a1243f0fc05020f5b629c58a --- /dev/null +++ b/src/lib/components/budget/WithoutBudgetCard.svelte @@ -0,0 +1,280 @@ +<script lang="ts"> + import type { Variable } from "@openfisca/json-model" + import type { DisplayMode } from "$lib/displays" + import { newSimulationUrl } from "$lib/urls" + + export let displayMode: DisplayMode + export let variable: Variable +</script> + +<div class="p-2 rounded-lg border border-gray-200 bg-white shadow-md"> + <div + class="flex flex-col items-center gap-6 px-10 py-28 text-center bg-gray-100 rounded-lg" + > + {#if variable.name === "csg" || variable.name === "impots_directs" || variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire" || variable.name === "prestations_sociales" || variable.name === "prestations_familiales" || variable.name === "af_nettes_crds"} + <span class="text-lg text-gray-600 max-w-prose"> + Les impacts budgétaires ne sont pas disponibles pour {#if variable.name === "csg"}la + totalité de la + {:else if variable.name === "impots_directs" || variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire" || variable.name === "prestations_sociales" || variable.name === "prestations_familiales"}la + totalité des{:else if variable.name === "af_nettes_crds"}le montant + net des{/if} « {variable.short_label ?? + variable.label ?? + variable.name} », mais ils sont calculables pour {#if variable.name === "csg"}certaines + parts + {:else if variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire"}certaines + {:else if variable.name === "af_nettes_crds"}les allocations familiales + avant prélèvement de la CRDS{/if} + : + </span> + {#if variable.name === "csg"} + <ul class="list-disc list-inside"> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "csg_salaire", + budget: true, + })} + >CSG salaires<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "csg_retraite", + budget: true, + })} + >CSG retraites<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + </ul> + {:else if variable.name === "impots_directs"} + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "irpp_economique", + budget: true, + })} + >Impôt sur le revenu<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + {:else if variable.name === "cotisations_salariales"} + <ul class="list-disc list-inside"> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "vieillesse_salarie", + budget: true, + })} + >Cotisation d'assurance vieillesse<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "agirc_arrco_salarie", + budget: true, + })} + >Cotisation Agirc-Arcco<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "agirc_arrco_salarie", + budget: true, + })} + >Contribution d'équilibre général<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + </ul> + {:else if variable.name === "cotisations_employeur_securite_sociale"} + <ul class="list-disc list-inside"> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "mmid_employeur_net_allegement", + budget: true, + })} + >Cotisation maladie maternité invalidité décès<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "vieillesse_employeur", + budget: true, + })} + >Cotisation d'assurance vieillesse<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "famille_net_allegement", + budget: true, + })} + >Cotisation d'allocations familiales<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "contribution_solidarite_autonomie", + budget: true, + })} + >Contribution solidarité autonomie<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + </ul> + {:else if variable.name === "cotisations_employeur_retraite_complementaire"} + <ul class="list-disc list-inside"> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "agirc_arrco_employeur", + budget: true, + })} + >Cotisation Agirc-Arcco<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + <li> + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: + "contribution_equilibre_general_employeur", + budget: true, + })} + >Contribution d'équilibre général<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + </li> + </ul> + {:else if variable.name === "prestations_sociales" || variable.name === "prestations_familiales"} + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "af", + budget: true, + })} + >Allocations familiales brutes<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + {:else if variable.name === "af_nettes_crds"} + <a + class="lx-link-uppercase" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: "af", + budget: true, + })} + >Allocations familiales brutes<iconify-icon + class="align-[-0.25rem] text-xl" + icon="ri-arrow-right-line" + /> + </a> + {/if} + {:else} + <span class="text-lg text-gray-600 max-w-prose"> + Les impacts budgétaires du dispositif « {variable.short_label ?? + variable.label ?? + variable.name} » ne sont pas encore disponibles. Vous en avez + besoin ? Écrivez-nous à + <a class="lx-link-text" href="mailto:leximpact@assemblee-nationale.fr"> + leximpact@assemblee-nationale.fr + </a> + </span> + + <a + class="flex items-center gap-1.5 py-1.5 px-3 bg-white hover:bg-neutral-200 active:bg-neutral-300 rounded-lg font-semibold text-le-gris-dispositif-dark hover:text-black text-sm tracking-wider uppercase transition-all duration-200 ease-out-back" + href={newSimulationUrl({ + ...displayMode, + parametersVariableName: undefined, + budget: true, + })} + > + Voir les dispositifs avec impacts budgétaires + </a> + {/if} + + <div class="flex gap-9 mb-3 w-full mt-4"> + <hr class="mt-5 flex-1 border-dashed border-black" /> + <span class="text-lg font-light xl:text-2xl 2xl:text-3xl">ou</span> + <hr class="mt-5 flex-1 border-dashed border-black" /> + </div> + <span class="font-light text-gray-600 max-w-screen-sm"> + Les impacts sont aussi calculables sur des cas types :</span + ><a + class="flex items-center gap-1.5 py-1.5 px-3 bg-white hover:bg-neutral-200 active:bg-neutral-300 rounded-lg font-semibold text-le-gris-dispositif-dark hover:text-black text-sm tracking-wider uppercase transition-all duration-200 ease-out-back" + href={newSimulationUrl({ + ...displayMode, + budget: false, + })} + > + <!-- <iconify-icon--> + <!-- class="text-lg"--> + <!-- icon="ri-arrow-left-line"--> + <!-- />--> + Voir les impacts sur cas types + </a> + </div> +</div> diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 988aaf6f929b7ecb5377096fd6d5e81a4baa90fe..b401881091b294d8ed53cf08c7bde53bfa1e88e3 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -51,6 +51,7 @@ import VariableReferredParameters from "$lib/components/variables/VariableReferredParameters.svelte" import VariableValueChange from "$lib/components/variables/VariableValueChange.svelte" import WaterfallPlainView from "$lib/components/WaterfallPlainView.svelte" + import WithoutBudgetCard from "$lib/components/budget/WithoutBudgetCard.svelte" import { getLatestCalculation, waterfalls, @@ -1407,305 +1408,7 @@ <StaticAggregates {displayMode} /> <!--Panneau indicateur que d'autres dispositifs sont disponibles en budgétaire--> - <div - class="p-2 rounded-lg border border-gray-200 bg-white shadow-md" - > - <div - class="flex flex-col items-center gap-6 px-10 py-28 text-center bg-gray-100 rounded-lg" - > - {#if variable.name === "csg" || variable.name === "impots_directs" || variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire" || variable.name === "prestations_sociales" || variable.name === "prestations_familiales" || variable.name === "af_nettes_crds"} - <span class="text-lg text-gray-600 max-w-prose"> - Les impacts budgétaires ne sont pas disponibles - pour {#if variable.name === "csg"}la totalité de - la - {:else if variable.name === "impots_directs" || variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire" || variable.name === "prestations_sociales" || variable.name === "prestations_familiales"}la - totalité des{:else if variable.name === "af_nettes_crds"}le - montant net des{/if} « {variable.short_label ?? - variable.label ?? - variable.name} », mais ils sont - calculables pour {#if variable.name === "csg"}certaines - parts - {:else if variable.name === "cotisations_salariales" || variable.name === "cotisations_employeur_securite_sociale" || variable.name === "cotisations_employeur_retraite_complementaire"}certaines - {:else if variable.name === "af_nettes_crds"}les - allocations familiales avant prélèvement de la - CRDS{/if} - : - </span> - {#if variable.name === "csg"} - <ul class="list-disc list-inside"> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_salaire", - budget: true, - })} - >CSG salaires<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "csg_retraite", - budget: true, - })} - >CSG retraites<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - </ul> - {:else if variable.name === "impots_directs"} - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "irpp_economique", - budget: true, - })} - >Impôt sur le revenu<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - {:else if variable.name === "cotisations_salariales"} - <ul class="list-disc list-inside"> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "vieillesse_salarie", - budget: true, - })} - >Cotisation d'assurance vieillesse<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "agirc_arrco_salarie", - budget: true, - })} - >Cotisation Agirc-Arcco<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "agirc_arrco_salarie", - budget: true, - })} - >Contribution d'équilibre général<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - </ul> - {:else if variable.name === "cotisations_employeur_securite_sociale"} - <ul class="list-disc list-inside"> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "mmid_employeur_net_allegement", - budget: true, - })} - >Cotisation maladie maternité invalidité - décès<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "vieillesse_employeur", - budget: true, - })} - >Cotisation d'assurance vieillesse<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "famille_net_allegement", - budget: true, - })} - >Cotisation d'allocations familiales<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "contribution_solidarite_autonomie", - budget: true, - })} - >Contribution solidarité autonomie<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - </ul> - {:else if variable.name === "cotisations_employeur_retraite_complementaire"} - <ul class="list-disc list-inside"> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "agirc_arrco_employeur", - budget: true, - })} - >Cotisation Agirc-Arcco<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - <li> - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: - "contribution_equilibre_general_employeur", - budget: true, - })} - >Contribution d'équilibre général<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - </li> - </ul> - {:else if variable.name === "prestations_sociales" || variable.name === "prestations_familiales"} - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "af", - budget: true, - })} - >Allocations familiales brutes<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - {:else if variable.name === "af_nettes_crds"} - <a - class="lx-link-uppercase" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: "af", - budget: true, - })} - >Allocations familiales brutes<iconify-icon - class="align-[-0.25rem] text-xl" - icon="ri-arrow-right-line" - /> - </a> - {/if} - {:else} - <span class="text-lg text-gray-600 max-w-prose"> - Les impacts budgétaires du dispositif « {variable.short_label ?? - variable.label ?? - variable.name} » ne sont pas encore - disponibles. Vous en avez besoin ? Écrivez-nous - à - <a - class="lx-link-text" - href="mailto:leximpact@assemblee-nationale.fr" - > - leximpact@assemblee-nationale.fr - </a> - </span> - - <a - class="flex items-center gap-1.5 py-1.5 px-3 bg-white hover:bg-neutral-200 active:bg-neutral-300 rounded-lg font-semibold text-le-gris-dispositif-dark hover:text-black text-sm tracking-wider uppercase transition-all duration-200 ease-out-back" - href={newSimulationUrl({ - ...displayMode, - parametersVariableName: undefined, - budget: true, - })} - > - Voir les dispositifs avec impacts budgétaires - </a> - {/if} - - <div class="flex gap-9 mb-3 w-full mt-4"> - <hr - class="mt-5 flex-1 border-dashed border-black" - /> - <span - class="text-lg font-light xl:text-2xl 2xl:text-3xl" - >ou</span - > - <hr - class="mt-5 flex-1 border-dashed border-black" - /> - </div> - <span - class="font-light text-gray-600 max-w-screen-sm" - > - Les impacts sont aussi calculables sur des cas - types :</span - ><a - class="flex items-center gap-1.5 py-1.5 px-3 bg-white hover:bg-neutral-200 active:bg-neutral-300 rounded-lg font-semibold text-le-gris-dispositif-dark hover:text-black text-sm tracking-wider uppercase transition-all duration-200 ease-out-back" - href={newSimulationUrl({ - ...displayMode, - budget: false, - })} - > - <!-- <iconify-icon--> - <!-- class="text-lg"--> - <!-- icon="ri-arrow-left-line"--> - <!-- />--> - Voir les impacts sur cas types - </a> - </div> - </div> + <WithoutBudgetCard {displayMode} {variable} /> {:else if $budgetSimulation === undefined && !budgetVariablesNameRelated.has(displayMode.parametersVariableName)} {@const budgetVariableName = displayMode.parametersVariableName !== undefined