Skip to content
Snippets Groups Projects
Commit 23fff202 authored by Emmanuel Raviart's avatar Emmanuel Raviart
Browse files

Add linked_added_variables, linked_other_variables and linked_output_variables...

Add linked_added_variables, linked_other_variables and linked_output_variables instead of linked_variables
parent 4181811b
No related branches found
No related tags found
No related merge requests found
Pipeline #8708 failed
......@@ -44,7 +44,15 @@ export function auditCustomization(
)
audit.attribute(
data,
"linked_variables",
"linked_added_variables",
true,
errors,
remainingKeys,
auditSwitch(auditBoolean, [auditCleanArray(auditTrimString), auditUnique]),
)
audit.attribute(
data,
"linked_other_variables",
true,
errors,
remainingKeys,
......
......@@ -3,9 +3,14 @@ import type { ReferencesByInstant } from "./references"
export interface Customization extends DecompositionCore {
description?: ReferencesByInstant
input?: boolean
/// The (indirect) input & output variables to highlight in UI
/// `true` means "link all input variables"
linked_variables?: boolean | string[]
/// The names of the (indirect) input variables that are added in the formula.
/// These variables are highlighted in UI.
linked_added_variables?: string[]
/// The names of the (indirect) input variables that are not added in the formula.
/// For example "part de quotient familial" or "revenu fiscal de référence" are
/// used to calculate "impôt sur le revenu" but are not added.
/// These variables are highlighted in UI.
linked_other_variables?: string[]
main_parameters?: string[]
reference?: ReferencesByInstant
variables?: string[]
......
......@@ -48,8 +48,16 @@ export interface Variable {
input?: boolean
label?: string
last_value_still_valid_on?: string
/// The (indirect) input & output variables to highlight in UI
linked_variables?: string[]
/// The names of the (indirect) input variables that are added in the formula.
/// These variables are highlighted in UI.
linked_added_variables?: string[]
/// The names of the (indirect) input variables that are not added in the formula.
/// For example "part de quotient familial" or "revenu fiscal de référence" are
/// used to calculate "impôt sur le revenu" but are not added.
/// These variables are highlighted in UI.
linked_other_variables?: string[]
/// The names of the (indirect) output variables that are highlighted in UI.
linked_output_variables?: string[]
name: string
/// True when latest formula of variable needs to be updated or set to null
/// or...
......
......@@ -54,7 +54,9 @@ async function main() {
)
: []
for (const taxBenefitDir of [options.jsonDir, ...reformDirArray]) {
const linkedVariablesNameByVariableName: { [name: string]: string[] } = {}
const linkedOutputVariablesNameByVariableName: {
[name: string]: string[]
} = {}
const variablesDir = path.join(taxBenefitDir, "variables")
for (const [name, customization] of Object.entries(customizationByName)) {
......@@ -78,29 +80,51 @@ async function main() {
if (customization.label !== undefined) {
variable.label = customization.label
}
if (customization.linked_variables !== undefined) {
let linkedVariablesName: string[] = []
if (Array.isArray(customization.linked_variables)) {
linkedVariablesName = customization.linked_variables
} else if (customization.linked_variables) {
if (customization.linked_added_variables !== undefined) {
let linkedAddedVariablesName: string[] = []
if (Array.isArray(customization.linked_added_variables)) {
linkedAddedVariablesName = customization.linked_added_variables
} else if (customization.linked_added_variables) {
const latest_formula = Object.entries(variable.formulas ?? {}).sort(
([date1], [date2]) => date2.localeCompare(date1),
)[0][1]
if (latest_formula?.variables !== undefined) {
linkedVariablesName = latest_formula.variables
linkedAddedVariablesName = latest_formula.variables
}
}
if (linkedVariablesName.length > 0) {
linkedVariablesNameByVariableName[variable.name] ??= []
linkedVariablesNameByVariableName[variable.name].push(
...linkedVariablesName,
)
if (linkedAddedVariablesName.length > 0) {
variable.linked_added_variables = linkedAddedVariablesName
// Also add reverse links.
for (const linkedVariableName of linkedVariablesName) {
linkedVariablesNameByVariableName[linkedVariableName] ??= []
linkedVariablesNameByVariableName[linkedVariableName].push(
variable.name,
)
for (const linkedAddedVariableName of linkedAddedVariablesName) {
linkedOutputVariablesNameByVariableName[linkedAddedVariableName] ??=
[]
linkedOutputVariablesNameByVariableName[
linkedAddedVariableName
].push(variable.name)
}
}
}
if (customization.linked_other_variables !== undefined) {
let linkedOtherVariablesName: string[] = []
if (Array.isArray(customization.linked_other_variables)) {
linkedOtherVariablesName = customization.linked_other_variables
} else if (customization.linked_other_variables) {
const latest_formula = Object.entries(variable.formulas ?? {}).sort(
([date1], [date2]) => date2.localeCompare(date1),
)[0][1]
if (latest_formula?.variables !== undefined) {
linkedOtherVariablesName = latest_formula.variables
}
}
if (linkedOtherVariablesName.length > 0) {
variable.linked_other_variables = linkedOtherVariablesName
// Also add reverse links.
for (const linkedOtherVariableName of linkedOtherVariablesName) {
linkedOutputVariablesNameByVariableName[linkedOtherVariableName] ??=
[]
linkedOutputVariablesNameByVariableName[
linkedOtherVariableName
].push(variable.name)
}
}
}
......@@ -171,10 +195,10 @@ async function main() {
}
}
const linkedVariablesName =
linkedVariablesNameByVariableName[variable.name]
if (linkedVariablesName !== undefined) {
variable.linked_variables = linkedVariablesName
const linkedOutputVariablesName =
linkedOutputVariablesNameByVariableName[variable.name]
if (linkedOutputVariablesName !== undefined) {
variable.linked_output_variables = linkedOutputVariablesName
changed = true
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment