From 8293554280177f1e8337ea8b4e533d488a6388d9 Mon Sep 17 00:00:00 2001
From: Toufic Batache <taffou2a@gmail.com>
Date: Fri, 14 Jun 2024 12:16:14 +0200
Subject: [PATCH] =?UTF-8?q?-=20Remplace=20"foyers=20fiscaux"=20par=20"m?=
=?UTF-8?q?=C3=A9nages"=20lorsque=20c'est=20le=20dispositif=20allocations?=
=?UTF-8?q?=20familiales=20qui=20a=20=C3=A9t=C3=A9=20choisi=20dans=20la=20?=
=?UTF-8?q?modale=20de=20d=C3=A9tail=20de=20variable=20-=20Temp=20fix=20d'?=
=?UTF-8?q?un=20bug=20r=C3=A9solu=20dans=20la=20MR=20!232?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../components/budget/BudgetDetailView.svelte | 22 +-
src/lib/components/budget/BudgetLayout.svelte | 148 +++++++++++-
src/lib/variables.ts | 32 +++
src/routes/+layout.svelte | 168 +++++++-------
src/routes/+page.svelte | 214 ++++++++----------
5 files changed, 369 insertions(+), 215 deletions(-)
diff --git a/src/lib/components/budget/BudgetDetailView.svelte b/src/lib/components/budget/BudgetDetailView.svelte
index ee274caed..312aa697e 100644
--- a/src/lib/components/budget/BudgetDetailView.svelte
+++ b/src/lib/components/budget/BudgetDetailView.svelte
@@ -18,7 +18,9 @@
import type { VariableValueByCalculationName } from "$lib/variables"
export let budgetSimulation: BudgetSimulation
- export let secu: boolean = false //Si le dispositif concerne la sécurité sociale
+ // regime? organisme?
+ // export let regime: "etat" | "securite_sociale" | "agirc_arrco"
+ export let secu: boolean = false // Si le dispositif concerne la sécurité sociale
export let type: "prelevement" | "prestation" | "csg"
export let unzoomFactor: number = 1
export let variableLabels: {
@@ -905,10 +907,10 @@
/></span
>de recettes
{#if !secu}
- pour l'État
+ pour l'État.
{:else}
- pour la Sécurité sociale
- {/if}.
+ pour la Sécurité sociale.
+ {/if}
{:else if (!showAmendment || yFromQuantile(amendmentQuantile) < 0) && (!showBill || yFromQuantile(billQuantile) < 0) && yFromQuantile(lawQuantile) < 0}
perçoit <span class="text-xl font-bold"
><ValueChange
@@ -989,10 +991,10 @@
/></span
>de recettes
{#if !secu}
- pour l'État
+ pour l'État.
{:else}
- pour la Sécurité sociale
- {/if}.
+ pour la Sécurité sociale.
+ {/if}
{/if}
{:else}
représente <span class="text-xl font-bold"
@@ -1018,10 +1020,10 @@
>
{variableLabels.of}
{#if !secu}
- pour l'État
+ pour l'État.
{:else}
- pour la Sécurité sociale
- {/if}.
+ pour la Sécurité sociale.
+ {/if}
{/if}
</p>
<p class="mt-2 text-sm text-gray-600">
diff --git a/src/lib/components/budget/BudgetLayout.svelte b/src/lib/components/budget/BudgetLayout.svelte
index 2840dd1bd..28ee46a6f 100644
--- a/src/lib/components/budget/BudgetLayout.svelte
+++ b/src/lib/components/budget/BudgetLayout.svelte
@@ -5,13 +5,33 @@
import Tooltip from "$lib/components/Tooltip.svelte"
import type { DisplayMode } from "$lib/displays"
import { newSimulationUrl } from "$lib/urls"
+ import { budgetVariablesNameByGroup } from "$lib/variables"
- export let budgetSimulation: BudgetSimulation
+ export let budgetSimulation: BudgetSimulation | undefined
export let displayMode: DisplayMode
+
+ $: budgetVariableGroupByName = Object.fromEntries(
+ Object.entries(budgetVariablesNameByGroup).reduce(
+ (arr: [string, string][], curr: [string, Set<string>]) => {
+ const group = curr[0]
+ const variables = curr[1]
+ for (const variable of variables) {
+ arr.push([variable, group])
+ }
+ return arr
+ },
+ [],
+ ),
+ )
+
+ $: budgetVariable = displayMode.parametersVariableName
+ ? budgetVariableGroupByName[displayMode.parametersVariableName] ??
+ displayMode.parametersVariableName
+ : undefined
</script>
-{#if displayMode.parametersVariableName !== undefined}
- {#if displayMode.parametersVariableName === "irpp_economique"}
+{#if budgetVariable !== undefined}
+ {#if budgetVariable === "irpp_economique" && budgetSimulation !== undefined}
<h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">Impôt sur le revenu</h3>
<BudgetDetailView
{budgetSimulation}
@@ -22,7 +42,7 @@
ofThe: "de l'IR",
the: "l'IR",
}}
- variableName="irpp_economique"
+ variableName={budgetVariable}
>
<span slot="title"> Recettes pour l'État </span>
<span slot="description">
@@ -67,7 +87,7 @@
of: "de l'IR",
}}
/>
- {:else if ["csg_deductible_retraite", "csg_imposable_retraite", "csg_retraite"].includes(displayMode.parametersVariableName)}
+ {:else if budgetVariable === "csg_retraite" && budgetSimulation !== undefined}
<h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
CSG totale prélevée sur les retraites
<br /><span class="text-xl font-normal">Imposable et déductible</span>
@@ -82,7 +102,7 @@
ofThe: "de CSG sur les retraites",
the: "la CSG",
}}
- variableName="csg_retraite"
+ variableName={budgetVariable}
>
<span slot="title"> Recettes pour la Sécurité sociale </span>
<span slot="description">
@@ -138,7 +158,7 @@
of: "de CSG retraites",
}}
/>
- {:else if ["csg_deductible_salaire", "csg_imposable_salaire", "csg_salaire"].includes(displayMode.parametersVariableName)}
+ {:else if budgetVariable === "csg_salaire" && budgetSimulation !== undefined}
<h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
CSG totale prélevée sur les salaires
<br /><span class="text-xl font-normal">Imposable et déductible</span>
@@ -153,7 +173,7 @@
ofThe: "de CSG sur les salaires",
the: "la CSG",
}}
- variableName="csg_salaire"
+ variableName={budgetVariable}
>
<span slot="title"> Recettes pour la Sécurité sociale </span>
<span slot="description">
@@ -209,7 +229,7 @@
of: "de CSG salaires",
}}
/>
- {:else if ["af", "af_base", "af_majoration", "af_allocation_forfaitaire", "af_complement_degressif", "af_allocation_forfaitaire_complement_degressif"].includes(displayMode.parametersVariableName)}
+ {:else if budgetVariable === "af" && budgetSimulation !== undefined}
<h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
Allocations familiales brutes
</h3>
@@ -224,7 +244,7 @@
ofThe: "des allocations familiales",
the: "les allocations familiales",
}}
- variableName="af"
+ variableName={budgetVariable}
>
<span slot="title"
>Dépenses des allocations familiales pour la Sécurité sociale</span
@@ -281,7 +301,7 @@
of: "d'allocations familiales",
}}
/>
- {:else if displayMode.parametersVariableName === "af_nettes_crds"}
+ {:else if budgetVariable === "af_nettes_crds"}
<div class="w-screen md:w-full mx-4 text-center md:text-left">
<h3 class="mb-2 text-2xl font-bold">Estimer l'impact budgétaire</h3>
<p class="text-base text-black max-w-prose">
@@ -300,5 +320,111 @@
</a>
</div>
</div>
+ <!-- TODO: modify title, description and variable labels, regime -->
+ {:else if budgetVariable === "agirc_arrco_salarie" && budgetSimulation !== undefined}
+ <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+ Cotisations salariales au régime de retraite complémentaire des salariés
+ du secteur privé
+ </h3>
+ <BudgetDetailView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "Cotisations salariales",
+ of: "de cotisations salariales",
+ ofThe: "des cotisations salariales",
+ the: "les cotisations salariales",
+ }}
+ variableName={budgetVariable}
+ >
+ <span slot="title"> Recettes pour l'État </span>
+ <span slot="description"> Recettes de cotisations salariales </span>
+ </BudgetDetailView>
+ <GagnantsPerdantsView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "les cotisations salariales",
+ of: "de cotisations salariales",
+ }}
+ />
+ {:else if budgetVariable === "contribution_equilibre_general_salarie" && budgetSimulation !== undefined}
+ <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+ Contribution d'équilibre général (CEG) à la charge du salarié
+ </h3>
+ <BudgetDetailView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "Cotisations salariales",
+ of: "de cotisations salariales",
+ ofThe: "des cotisations salariales",
+ the: "les cotisations salariales",
+ }}
+ variableName={budgetVariable}
+ >
+ <span slot="title"> Recettes pour l'État </span>
+ <span slot="description"> Recettes de cotisations salariales </span>
+ </BudgetDetailView>
+ <GagnantsPerdantsView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "les cotisations salariales",
+ of: "de cotisations salariales",
+ }}
+ />
+ {:else if budgetVariable === "vieillesse_deplafonnee_salarie" && budgetSimulation !== undefined}
+ <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+ Cotisation salariale d'assurance vieillesse déplafonnée
+ </h3>
+ <BudgetDetailView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "Cotisations salariales",
+ of: "de cotisations salariales",
+ ofThe: "des cotisations salariales",
+ the: "les cotisations salariales",
+ }}
+ variableName={budgetVariable}
+ >
+ <span slot="title"> Recettes pour l'État </span>
+ <span slot="description"> Recettes de cotisations salariales </span>
+ </BudgetDetailView>
+ <GagnantsPerdantsView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "les cotisations salariales",
+ of: "de cotisations salariales",
+ }}
+ />
+ {:else if budgetVariable === "vieillesse_plafonnee_salarie" && budgetSimulation !== undefined}
+ <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+ Cotisation salariale d'assurance vieillesse plafonnée
+ </h3>
+ <BudgetDetailView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "Cotisations salariales",
+ of: "de cotisations salariales",
+ ofThe: "des cotisations salariales",
+ the: "les cotisations salariales",
+ }}
+ variableName={budgetVariable}
+ >
+ <span slot="title"> Recettes pour l'État </span>
+ <span slot="description"> Recettes de cotisations salariales </span>
+ </BudgetDetailView>
+ <GagnantsPerdantsView
+ {budgetSimulation}
+ type="prelevement"
+ variableLabels={{
+ default: "les cotisations salariales",
+ of: "de cotisations salariales",
+ }}
+ />
{/if}
{/if}
diff --git a/src/lib/variables.ts b/src/lib/variables.ts
index b05eafbf3..478ce0391 100644
--- a/src/lib/variables.ts
+++ b/src/lib/variables.ts
@@ -189,7 +189,13 @@ for (const parametersName of Object.values(
}
}
+// Variables dont l'impact budgétaire peut être calculé
+// (pas vraiment, mais pour lesquelles on montre un impact budgétaire)
export const budgetVariablesName = new Set([
+ "agirc_arrco_salarie",
+ "contribution_equilibre_general_salarie",
+ "vieillesse_deplafonnee_salarie",
+ "vieillesse_plafonnee_salarie",
"csg_deductible_retraite",
"csg_deductible_salaire",
"csg_imposable_retraite",
@@ -205,6 +211,32 @@ export const budgetVariablesName = new Set([
"af_allocation_forfaitaire_complement_degressif",
])
+// Variables groupées par l'impact budgétaire commun qu'elles partagent (celle du nom du groupe) :
+// l'impact budgétaire des variables "filles" d'un groupe correspond à celui de la variable "parent" de ce groupe
+export const budgetVariablesNameByGroup = {
+ af: new Set([
+ "af",
+ "af_base",
+ "af_majoration",
+ "af_allocation_forfaitaire",
+ "af_complement_degressif",
+ "af_allocation_forfaitaire_complement_degressif",
+ ]),
+ csg_retraite: new Set([
+ "csg_retraite",
+ "csg_deductible_retraite",
+ "csg_imposable_retraite",
+ ]),
+ csg_salaire: new Set([
+ "csg_salaire",
+ "csg_deductible_salaire",
+ "csg_imposable_salaire",
+ ]),
+}
+
+// Variables dont l'impact budgétaire ne peut pas être calculé mais qui ont un layout custom
+export const budgetVariablesNameRelated = new Set(["af_nettes_crds"])
+
export const oilTypes = [
"essence_sp95",
"essence_sp95_e10",
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 8e6c17da1..d3c222152 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -70,6 +70,7 @@
type ValuesByCalculationNameByVariableName,
type VariableValue,
type VariableValues,
+ budgetVariablesNameByGroup,
} from "$lib/variables"
export let data: LayoutData
@@ -328,95 +329,75 @@
$showTutorial = localStorage.getItem("hideTutorial") === null
}
+ function buildBudgetDemandBody(
+ variableName: string,
+ outputVariables: string[],
+ quantileVaseVariable: string[],
+ quantileCompareVariables: string[],
+ ) {
+ const budgetParametricReform = Object.fromEntries(
+ Object.entries($parametricReform).filter(([parameterName]) =>
+ budgetEditableParametersName.has(parameterName),
+ ),
+ )
+ return {
+ amendement: budgetParametricReform,
+ base: 2024,
+ displayMode: $displayMode,
+ metadata,
+ output_variables: outputVariables,
+ quantile_base_variable: quantileVaseVariable,
+ quantile_compare_variables: quantileCompareVariables,
+ winners_loosers_variable: variableName,
+ quantile_nb: 10,
+ plf: $billName === undefined ? undefined : 2024,
+ }
+ }
+
async function calculateBudget(
budgetVariableName: string,
// budgetCalculationNames: Set<CalculationName>,
): Promise<void> {
budgetSimulationAbortController.abort()
budgetSimulationAbortController = new AbortController()
- const budgetParametricReform = Object.fromEntries(
- Object.entries($parametricReform).filter(([parameterName]) =>
- budgetEditableParametersName.has(parameterName),
- ),
- )
const body = JSON.stringify(
budgetVariableName === "irpp_economique"
- ? {
- amendement: budgetParametricReform,
- base: 2024,
- displayMode: $displayMode,
- metadata,
- output_variables: ["rfr_par_part", "irpp_economique"],
- quantile_base_variable: ["rfr_par_part"],
- quantile_compare_variables: ["irpp_economique", "rfr"],
- winners_loosers_variable: "irpp_economique",
- quantile_nb: 10,
- plf: $billName === undefined ? undefined : 2024,
- }
- : [
- "csg_deductible_retraite",
- "csg_imposable_retraite",
+ ? buildBudgetDemandBody(
+ "irpp_economique",
+ ["rfr_par_part", "irpp_economique"],
+ ["rfr_par_part"],
+ ["irpp_economique", "rfr"],
+ )
+ : [...budgetVariablesNameByGroup["csg_retraite"]].includes(
+ budgetVariableName,
+ )
+ ? buildBudgetDemandBody(
"csg_retraite",
- ].includes(budgetVariableName)
- ? {
- amendement: budgetParametricReform,
- base: 2024,
- displayMode: $displayMode,
- metadata,
- output_variables: [
+ [
"rfr_par_part", // "assiette_csg_abattue",
"csg_deductible_retraite",
"csg_imposable_retraite",
],
- quantile_base_variable: ["rfr_par_part"], // ["assiette_csg_abattue"],
- quantile_compare_variables: [
- "csg_deductible_retraite",
- "csg_imposable_retraite",
- "rfr",
- ],
- winners_loosers_variable: "csg_retraite",
- quantile_nb: 10,
- plf: $billName === undefined ? undefined : 2024,
- }
- : [
- "csg_deductible_salaire",
- "csg_imposable_salaire",
+ ["rfr_par_part"], // ["assiette_csg_abattue"],
+ ["csg_deductible_retraite", "csg_imposable_retraite", "rfr"],
+ )
+ : [...budgetVariablesNameByGroup["csg_salaire"]].includes(
+ budgetVariableName,
+ )
+ ? buildBudgetDemandBody(
"csg_salaire",
- ].includes(budgetVariableName)
- ? {
- amendement: budgetParametricReform,
- displayMode: $displayMode,
- base: 2024,
- metadata,
- output_variables: [
+ [
"rfr_par_part", // "assiette_csg_abattue",
"csg_deductible_salaire",
"csg_imposable_salaire",
],
- quantile_base_variable: ["rfr_par_part"], // ["assiette_csg_abattue"],
- quantile_compare_variables: [
- "csg_deductible_salaire",
- "csg_imposable_salaire",
- "rfr",
- ],
- winners_loosers_variable: "csg_salaire",
- quantile_nb: 10,
- plf: $billName === undefined ? undefined : 2024,
- }
- : [
+ ["rfr_par_part"], // ["assiette_csg_abattue"],
+ ["csg_deductible_salaire", "csg_imposable_salaire", "rfr"],
+ )
+ : [...budgetVariablesNameByGroup["af"]].includes(budgetVariableName)
+ ? buildBudgetDemandBody(
"af",
- "af_base",
- "af_majoration",
- "af_allocation_forfaitaire",
- "af_complement_degressif",
- "af_allocation_forfaitaire_complement_degressif",
- ].includes(budgetVariableName)
- ? {
- amendement: budgetParametricReform,
- displayMode: $displayMode,
- base: 2024,
- metadata,
- output_variables: [
+ [
"revenus_menage_par_uc",
"af",
"af_base",
@@ -425,15 +406,44 @@
"af_complement_degressif",
"af_allocation_forfaitaire_complement_degressif",
],
- quantile_base_variable: ["revenus_menage_par_uc"],
- quantile_compare_variables: ["af", "revenus_menage"],
- winners_loosers_variable: "af",
- quantile_nb: 10,
- plf: $billName === undefined ? undefined : 2024,
- }
- : {
- // Should never occur.
- },
+ ["revenus_menage_par_uc"],
+ ["af", "revenus_menage"],
+ )
+ : budgetVariableName === "agirc_arrco_salarie"
+ ? buildBudgetDemandBody(
+ "agirc_arrco_salarie",
+ ["rfr_par_part", "agirc_arrco_salarie"],
+ ["rfr_par_part"],
+ ["agirc_arrco_salarie", "rfr"],
+ )
+ : budgetVariableName ===
+ "contribution_equilibre_general_salarie"
+ ? buildBudgetDemandBody(
+ "contribution_equilibre_general_salarie",
+ [
+ "rfr_par_part",
+ "contribution_equilibre_general_salarie",
+ ],
+ ["rfr_par_part"],
+ ["contribution_equilibre_general_salarie", "rfr"],
+ )
+ : budgetVariableName === "vieillesse_deplafonnee_salarie"
+ ? buildBudgetDemandBody(
+ "vieillesse_deplafonnee_salarie",
+ ["rfr_par_part", "vieillesse_deplafonnee_salarie"],
+ ["rfr_par_part"],
+ ["vieillesse_deplafonnee_salarie", "rfr"],
+ )
+ : budgetVariableName === "vieillesse_plafonnee_salarie"
+ ? buildBudgetDemandBody(
+ "vieillesse_plafonnee_salarie",
+ ["rfr_par_part", "vieillesse_plafonnee_salarie"],
+ ["rfr_par_part"],
+ ["vieillesse_plafonnee_salarie", "rfr"],
+ )
+ : {
+ // Should never occur.
+ },
null,
2,
)
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 6129f8a5a..0cf5d6599 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -48,7 +48,6 @@
import TestCaseSummary from "$lib/components/test_cases/TestCaseSummary.svelte"
import TestCaseView from "$lib/components/test_cases/TestCaseView.svelte"
import TestCaseSimulationSharingModal from "$lib/components/TestCaseSimulationSharingModal.svelte"
- import Tooltip from "$lib/components/Tooltip.svelte"
import NonVariableReferredParameter from "$lib/components/variables/NonVariableReferredParameter.svelte"
import VariableDetail from "$lib/components/variables/VariableDetail.svelte"
import VariableReferredInputsPane from "$lib/components/variables/VariableReferredInputsPane.svelte"
@@ -83,10 +82,11 @@
import type { TabsConfig } from "$lib/tabs"
import { newSimulationUrl, type SelfTargetAProps } from "$lib/urls"
import {
+ budgetEditableParametersName,
budgetVariablesName,
- variableSummaryByName,
+ budgetVariablesNameRelated,
type ValuesByCalculationNameByVariableName,
- budgetEditableParametersName,
+ variableSummaryByName,
variableSummaryByNameByReformName,
} from "$lib/variables"
@@ -1415,118 +1415,54 @@
-->
<!--Affichage du titre "impacts" et onglets de choix cas types ou budget-->
- {#if displayMode.parametersVariableName === undefined || (displayMode.parametersVariableName !== undefined && budgetVariablesName.has(displayMode.parametersVariableName)) || displayMode.parametersVariableName === "af_nettes_crds"}
- <ul
- class="flex items-center justify-between md:justify-start w-screen md:w-full"
- >
- <li class="w-1/2 md:w-auto flex justify-end">
- <a
- class:hover:bg-le-vert-50={displayMode.budget}
- class:hover:text-le-bleu={displayMode.budget}
- data-sveltekit-noscroll
- href={newSimulationUrl({
- ...displayMode,
- budget: undefined,
- })}
- >
- <h2
- class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-black 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
- class:!border-black={!displayMode.budget}
- class:text-black={!displayMode.budget}
- class:font-bold={!displayMode.budget}
- >
- <span class="hidden sm:flex"> Impact cas type </span>
- <span class="flex sm:hidden"> Cas type </span>
- </h2>
- </a>
- </li>
- <li
- class="w-1/2 flex md:w-auto justify-start"
- id="situation_budget"
+ <ul
+ class="flex items-center justify-between md:justify-start w-screen md:w-full"
+ >
+ <li class="w-1/2 md:w-auto flex justify-end">
+ <a
+ class:hover:bg-le-vert-50={displayMode.budget}
+ class:hover:text-le-bleu={displayMode.budget}
+ data-sveltekit-noscroll
+ href={newSimulationUrl({
+ ...displayMode,
+ budget: undefined,
+ })}
>
- <a
- class:hover:bg-le-vert-50={!displayMode.budget}
- class:hover:text-le-bleu={!displayMode.budget}
- data-sveltekit-noscroll
- href={newSimulationUrl({
- ...displayMode,
- budget: true,
- })}
+ <h2
+ class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-black 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
+ class:!border-black={!displayMode.budget}
+ class:text-black={!displayMode.budget}
+ class:font-bold={!displayMode.budget}
>
- <h2
- class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
- class:!border-black={displayMode.budget}
- class:font-bold={displayMode.budget}
- >
- <span class="hidden sm:flex"> Impact budgétaire </span>
- <span class="flex sm:hidden"> Budget </span>
- </h2>
- </a>
- </li>
- </ul>
- {:else}
- <ul
- class="flex items-center justify-between md:justify-start w-screen md:w-full"
+ <span class="hidden sm:flex"> Impact cas type </span>
+ <span class="flex sm:hidden"> Cas type </span>
+ </h2>
+ </a>
+ </li>
+ <li
+ class="w-1/2 flex md:w-auto justify-start"
+ id="situation_budget"
>
- <li class="w-1/2 md:w-auto flex justify-end">
+ <a
+ class:hover:bg-le-vert-50={!displayMode.budget}
+ class:hover:text-le-bleu={!displayMode.budget}
+ data-sveltekit-noscroll
+ href={newSimulationUrl({
+ ...displayMode,
+ budget: true,
+ })}
+ >
<h2
- class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] 2xl:border-b-4 border-black px-3 pt-2 pb-1 text-black text-xl 2xl:text-2xl"
+ class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
+ class:!border-black={displayMode.budget}
+ class:font-bold={displayMode.budget}
>
- <span class="font-bold tracking-wide">
- <span class="block md:hidden">Cas type</span>
- <span class="hidden md:block">Impact cas type</span>
- </span>
+ <span class="hidden sm:flex"> Impact budgétaire </span>
+ <span class="flex sm:hidden"> Budget </span>
</h2>
- </li>
- <li class="w-1/2 md:w-auto flex justify-start">
- {#if displayMode.parametersVariableName !== undefined}
- {@const variable =
- $decompositionByName[displayMode.parametersVariableName] ??
- variableSummaryByName[displayMode.parametersVariableName]}
- <Tooltip
- arrowClass="bg-gray-100"
- widthClass="w-80"
- initialPlacement="bottom"
- >
- <h2
- class="h-12 md:h-14 2xl:h-16 flex items-center border-b-[3px] border-transparent px-3 pt-2 pb-1 text-xl text-gray-300 2xl:border-b-4 2xl:text-2xl justify-center tracking-wide"
- >
- <span class="block md:hidden">Budget</span>
- <span class="hidden md:block">Impact budgétaire</span>
- </h2>
- <!--Tooltip info budget manquant pour ce dispositif-->
- <div
- slot="tooltip"
- class="overflow-hidden bg-white text-sm font-light rounded-lg border border-gray-200 shadow-2xl"
- >
- <h3
- class="font-semibold text-gray-900 py-2 px-3 bg-gray-100 border-b border-gray-200"
- >
- Impact budgétaire indisponible
- </h3>
-
- <div class="py-2 px-3">
- <span class="text-black">
- Le calcul des impacts budgétaires du dispositif
- « {variable.short_label ??
- variable.label ??
- variable.name} » n'est pas encore disponible.
- <span class="font-normal"
- >Ce sujet vous intéresse ? Écrivez-nous à
- <a
- class="lx-link-text"
- href="mailto:leximpact@assemblee-nationale.fr"
- >leximpact@assemblee-nationale.fr</a
- ></span
- >
- </span>
- </div>
- </div>
- </Tooltip>
- {/if}
- </li>
- </ul>
- {/if}
+ </a>
+ </li>
+ </ul>
{#if (displayMode.parametersVariableName !== undefined || displayMode.testCasesIndex.length > 0) && (mobileLawTab || !displayMode.budget)}
<button
class="z-30 absolute -bottom-4 right-2 lg:right-5 xl:right-10 flex items-center gap-2 py-2 px-5 shadow-lg bg-white hover:bg-gray-100 active:bg-gray-200 rounded border border-le-bleu text-le-bleu text-sm font-bold tracking-[0.085em] uppercase transition-all duration-200 ease-out-back disabled:opacity-0 disabled:scale-90"
@@ -1577,13 +1513,61 @@
<div
class="w-screen md:w-full flex flex-col px-2 xl:px-10 py-5"
>
- {#if $budgetSimulation === undefined}
- {#if displayMode.parametersVariableName !== undefined}
- <div class="z-10 bg-le-jaune bg-opacity-20">
- <Spinner />
+ {#if !budgetVariablesName.has(displayMode.parametersVariableName) && !budgetVariablesNameRelated.has(displayMode.parametersVariableName)}
+ {@const variable =
+ $decompositionByName[
+ displayMode.parametersVariableName
+ ] ??
+ variableSummaryByName[
+ displayMode.parametersVariableName
+ ]}
+ <h3 class="mx-4 mb-2 text-2xl font-bold md:mx-0">
+ {variable.short_label ??
+ variable.label ??
+ variable.name}
+ </h3>
+ <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"
+ >
+ <span class="text-lg">
+ Le calcul des impacts budgétaires du dispositif
+ « {variable.short_label ??
+ variable.label ??
+ variable.name} » n'est pas encore
+ disponible.
+ </span>
+ <span>
+ Ce sujet vous intéresse ? Écrivez-nous à
+ <a
+ class="lx-link-text"
+ href="mailto:leximpact@assemblee-nationale.fr"
+ >
+ leximpact@assemblee-nationale.fr
+ </a>
+ </span>
+ <a
+ class="mt-10 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 s-y_bCXRrkrYfP"
+ href={newSimulationUrl({
+ ...displayMode,
+ budget: false,
+ })}
+ >
+ <!-- <iconify-icon-->
+ <!-- class="text-lg"-->
+ <!-- icon="ri-arrow-left-line"-->
+ <!-- />-->
+ Voir l'impact sur les cas types
+ </a>
</div>
- {/if}
- {:else if $budgetSimulation.errors != null && $budgetSimulation.errors.length > 0}
+ </div>
+ {:else if $budgetSimulation === undefined && !budgetVariablesNameRelated.has(displayMode.parametersVariableName)}
+ <div class="z-10 bg-le-jaune bg-opacity-20">
+ <Spinner />
+ </div>
+ {:else if $budgetSimulation !== undefined && $budgetSimulation.errors != null && $budgetSimulation.errors.length > 0}
<div
class="w-fit mx-auto md:mt-32 flex flex-col items-center gap-10 p-10 bg-white rounded-lg border border-gray-200 shadow-md"
>
--
GitLab