diff --git a/src/lib/components/test_cases/TestCaseGraph.svelte b/src/lib/components/test_cases/TestCaseGraph.svelte index bf35c38ced913ea9c2572cb7269a32146c6f11ce..da9da53febe57b789535b964abad8f6fd2668991 100644 --- a/src/lib/components/test_cases/TestCaseGraph.svelte +++ b/src/lib/components/test_cases/TestCaseGraph.svelte @@ -169,244 +169,7 @@ visibleDecompositionsGraph !== undefined ) { untrack(() => { - const ressourcesBrutes = [ - "chomage_brut", - "remuneration_brute", - "retraite_brute", - ] - - if (waterfall.name === "brut_to_disponible") { - const decompositions = visibleDecompositionsGraph.filter( - (decomposition) => - !decomposition.trunk || - ressourcesBrutes.includes(decomposition.decomposition.name) || - decomposition.decomposition.name === "revenu_disponible", - ) - - const versementBrutIndex = decompositions.findIndex((decomposition) => - ressourcesBrutes.includes(decomposition.decomposition.name), - ) - const prestationsIndex = decompositions.findIndex( - (decomposition) => - decomposition.decomposition.name === "prestations_sociales", - ) - const revenuIndex = decompositions.findIndex( - (decomposition) => - decomposition.decomposition.name === "revenu_disponible", - ) - - const prelevementsDecompositions = [ - ...decompositions.slice(0, versementBrutIndex), - ...decompositions - .slice(versementBrutIndex, prestationsIndex) - .filter( - (decomposition) => - ressourcesBrutes.includes(decomposition.decomposition.name) || - getLatestVisibleCalculation(decomposition.rows)?.isNegative, - ), - ] - - const complementsDeRessourcesDecompositions = decompositions - .slice(versementBrutIndex, prestationsIndex) - .filter( - (decomposition) => - !ressourcesBrutes.includes(decomposition.decomposition.name) && - !getLatestVisibleCalculation(decomposition.rows)?.isNegative, - ) - - const prestationsDecompositions = decompositions.slice( - prestationsIndex, - revenuIndex, - ) - - const revenuDisponibleDecomposition = decompositions[revenuIndex] - const revenuDisponibleValues = generateValues([ - revenuDisponibleDecomposition, - ]) - - const [ - prelevementsValues, - complementsDeRessourcesValues, - prestationsValues, - ] = stackValues( - generateValues(prelevementsDecompositions), - generateValues(complementsDeRessourcesDecompositions), - generateValues(prestationsDecompositions, true), - ) - - variableValues = [ - prelevementsValues, - complementsDeRessourcesValues, - prestationsValues, - revenuDisponibleValues, - ] - - const splitIndex = - prelevementsValues.findLastIndex((variable) => - ressourcesBrutes.includes(variable.name), - ) + 1 - variableGroups = [ - { - variables: [ - ...prelevementsValues.slice(0, splitIndex).reverse(), - ...complementsDeRessourcesValues, - ...revenuDisponibleValues, - ], - }, - { - css: "text-red-600", - label: "Prélèvements", - name: "prelevements", - hideOpen: true, - variables: prelevementsValues.slice(splitIndex), - }, - { - css: "text-green-800", - label: "Prestations", - name: "prestations", - hideOpen: true, - variables: prestationsValues, - }, - ] - - for (const [groupIndex, group] of variableGroups.entries()) { - for (const variable of group.variables) { - for (const row of variable.rows) { - const key = `${variable.name}_${row.calculationName}` - if ( - variableCustomizations[variable.name] === undefined || - (variableCustomizations[key] === undefined && - row.calculationName !== "law" && - row.calculationName !== "revaluation") - ) { - const types = ["base", "prelevement", "prestation"] - variableCustomizations[key] = - variableCustomizations[ - getVariableCustomizationName( - variable.parent, - row.calculationName, - ) - ] ?? - defaultCustomization[waterfall.name][types[groupIndex]][ - row.calculationName === "revaluation" - ? "law" - : row.calculationName - ] - } - } - } - } - } else { - const decompositions = visibleDecompositionsGraph.filter( - (decomposition) => - !decomposition.trunk || - decomposition.decomposition.name === "remuneration_brute" || - decomposition.decomposition.name === "salaire_super_brut", - ) - - const allValues = generateValues(decompositions) - - const versementBrutIndex = allValues.findIndex( - (value) => value.name === "remuneration_brute", - ) - const allegementGeneralIndex = allValues.findIndex( - (value) => value.name === "allegement_general", - ) - - const versementBrutValues = allValues.slice(0, versementBrutIndex + 1) - - const superBrutValues = allValues.slice(-1) - - const cotisationsValues = allValues.slice( - versementBrutIndex + 1, - allegementGeneralIndex, - ) - - const allegementsValues = allValues.slice(allegementGeneralIndex, -1) - - variableValues = [ - versementBrutValues, - cotisationsValues, - allegementsValues, - superBrutValues, - ] - - variableGroups = [ - { - variables: [ - ...allValues.slice(0, versementBrutIndex + 1), - ...allValues.slice(-1), - ], - }, - { - css: "text-green-800", - label: "Cotisations employeur", - name: "cotisations_employeur", - hideOpen: true, - variables: allValues.slice( - allValues.findIndex( - (value) => - value.name === "cotisations_employeur_securite_sociale", - ), - allegementGeneralIndex, - ), - }, - { - css: "text-red-600", - label: "Allègements", - name: "allegements", - hideOpen: true, - variables: allValues.slice(allegementGeneralIndex, -1), - }, - ] - - for (const [groupIndex, group] of variableGroups.entries()) { - for (const variable of group.variables) { - for (const row of variable.rows) { - const key = `${variable.name}_${row.calculationName}` - if ( - variableCustomizations[variable.name] === undefined || - (variableCustomizations[key] === undefined && - row.calculationName !== "law" && - row.calculationName !== "revaluation") - ) { - const types = ["base", "cotisation", "allegement"] - variableCustomizations[key] = - variableCustomizations[ - getVariableCustomizationName( - variable.parent, - row.calculationName, - ) - ] ?? - defaultCustomization[waterfall.name][types[groupIndex]][ - row.calculationName === "revaluation" - ? "law" - : row.calculationName - ] - } - } - } - } - } - - maxVariableValue = variableValues.reduce( - (max: number, values: VariableGraph[]) => { - max = Math.max( - max, - Math.max( - ...values.map(({ rows }) => - Math.max( - ...rows.map(({ summedValues }) => - Math.max(...summedValues), - ), - ), - ), - ), - ) - return max - }, - 0, - ) + updateVariableValuesAndCustomizations() }) } }) @@ -871,6 +634,245 @@ requestAxesCalculation() } } + + function updateVariableValuesAndCustomizations() { + const ressourcesBrutes = [ + "chomage_brut", + "remuneration_brute", + "retraite_brute", + ] + + if (waterfall.name === "brut_to_disponible") { + const decompositions = visibleDecompositionsGraph!.filter( + (decomposition) => + !decomposition.trunk || + ressourcesBrutes.includes(decomposition.decomposition.name) || + decomposition.decomposition.name === "revenu_disponible", + ) + + const versementBrutIndex = decompositions.findIndex((decomposition) => + ressourcesBrutes.includes(decomposition.decomposition.name), + ) + const prestationsIndex = decompositions.findIndex( + (decomposition) => + decomposition.decomposition.name === "prestations_sociales", + ) + const revenuIndex = decompositions.findIndex( + (decomposition) => + decomposition.decomposition.name === "revenu_disponible", + ) + + const prelevementsDecompositions = [ + ...decompositions.slice(0, versementBrutIndex), + ...decompositions + .slice(versementBrutIndex, prestationsIndex) + .filter( + (decomposition) => + ressourcesBrutes.includes(decomposition.decomposition.name) || + getLatestVisibleCalculation(decomposition.rows)?.isNegative, + ), + ] + + const complementsDeRessourcesDecompositions = decompositions + .slice(versementBrutIndex, prestationsIndex) + .filter( + (decomposition) => + !ressourcesBrutes.includes(decomposition.decomposition.name) && + !getLatestVisibleCalculation(decomposition.rows)?.isNegative, + ) + + const prestationsDecompositions = decompositions.slice( + prestationsIndex, + revenuIndex, + ) + + const revenuDisponibleDecomposition = decompositions[revenuIndex] + const revenuDisponibleValues = generateValues([ + revenuDisponibleDecomposition, + ]) + + const [ + prelevementsValues, + complementsDeRessourcesValues, + prestationsValues, + ] = stackValues( + generateValues(prelevementsDecompositions), + generateValues(complementsDeRessourcesDecompositions), + generateValues(prestationsDecompositions, true), + ) + + variableValues = [ + prelevementsValues, + complementsDeRessourcesValues, + prestationsValues, + revenuDisponibleValues, + ] + + const splitIndex = + prelevementsValues.findLastIndex((variable) => + ressourcesBrutes.includes(variable.name), + ) + 1 + variableGroups = [ + { + variables: [ + ...prelevementsValues.slice(0, splitIndex).reverse(), + ...complementsDeRessourcesValues, + ...revenuDisponibleValues, + ], + }, + { + css: "text-red-600", + label: "Prélèvements", + name: "prelevements", + hideOpen: true, + variables: prelevementsValues.slice(splitIndex), + }, + { + css: "text-green-800", + label: "Prestations", + name: "prestations", + hideOpen: true, + variables: prestationsValues, + }, + ] + + for (const [groupIndex, group] of variableGroups.entries()) { + for (const variable of group.variables) { + for (const row of variable.rows) { + const key = `${variable.name}_${row.calculationName}` + if ( + variableCustomizations[key] === undefined && + ((row.calculationName !== "law" && + row.calculationName !== "revaluation") || + variableCustomizations[variable.name] === undefined) + ) { + const types = ["base", "prelevement", "prestation"] + variableCustomizations[key] = + variableCustomizations[ + getVariableCustomizationName( + variable.parent, + row.calculationName, + ) + ] ?? + defaultCustomization[waterfall.name][types[groupIndex]][ + row.calculationName === "revaluation" + ? "law" + : row.calculationName + ] + } + } + } + } + } else { + const decompositions = visibleDecompositionsGraph.filter( + (decomposition) => + !decomposition.trunk || + decomposition.decomposition.name === "remuneration_brute" || + decomposition.decomposition.name === "salaire_super_brut", + ) + + const allValues = generateValues(decompositions) + + const versementBrutIndex = allValues.findIndex( + (value) => value.name === "remuneration_brute", + ) + const allegementGeneralIndex = allValues.findIndex( + (value) => value.name === "allegement_general", + ) + + const versementBrutValues = allValues.slice(0, versementBrutIndex + 1) + + const superBrutValues = allValues.slice(-1) + + const cotisationsValues = allValues.slice( + versementBrutIndex + 1, + allegementGeneralIndex, + ) + + const allegementsValues = allValues.slice(allegementGeneralIndex, -1) + + variableValues = [ + versementBrutValues, + cotisationsValues, + allegementsValues, + superBrutValues, + ] + + variableGroups = [ + { + variables: [ + ...allValues.slice(0, versementBrutIndex + 1), + ...allValues.slice(-1), + ], + }, + { + css: "text-green-800", + label: "Cotisations employeur", + name: "cotisations_employeur", + hideOpen: true, + variables: allValues.slice( + allValues.findIndex( + (value) => + value.name === "cotisations_employeur_securite_sociale", + ), + allegementGeneralIndex, + ), + }, + { + css: "text-red-600", + label: "Allègements", + name: "allegements", + hideOpen: true, + variables: allValues.slice(allegementGeneralIndex, -1), + }, + ] + + for (const [groupIndex, group] of variableGroups.entries()) { + for (const variable of group.variables) { + for (const row of variable.rows) { + const key = `${variable.name}_${row.calculationName}` + if ( + variableCustomizations[key] === undefined && + ((row.calculationName !== "law" && + row.calculationName !== "revaluation") || + variableCustomizations[variable.name] === undefined) + ) { + const types = ["base", "cotisation", "allegement"] + variableCustomizations[key] = + variableCustomizations[ + getVariableCustomizationName( + variable.parent, + row.calculationName, + ) + ] ?? + defaultCustomization[waterfall.name][types[groupIndex]][ + row.calculationName === "revaluation" + ? "law" + : row.calculationName + ] + } + } + } + } + } + + maxVariableValue = variableValues.reduce( + (max: number, values: VariableGraph[]) => { + max = Math.max( + max, + Math.max( + ...values.map(({ rows }) => + Math.max( + ...rows.map(({ summedValues }) => Math.max(...summedValues)), + ), + ), + ), + ) + return max + }, + 0, + ) + } </script> {#if situation.slider !== undefined && visibleDecompositionsGraph !== undefined} @@ -1065,6 +1067,7 @@ row.calculationName, ) ].selected = isSelected ? "false" : "true" + updateVariableValuesAndCustomizations() }} > <div