Select Git revision
parameters.ts 2.67 KiB
import type {
Metadata,
Reference,
ValueAtInstant,
ValueParameter,
} from "@openfisca/ast"
import {
AmountUnit,
ParameterClass,
RateUnit,
ScaleType,
Unit,
ValueType,
} from "@openfisca/ast"
export interface InstantReferencesAndValue {
instant: string
references: Reference[]
valueAtInstant?: ValueAtInstant
}
export function buildInstantReferencesAndValueArray(
parameter: ValueParameter,
): InstantReferencesAndValue[] {
const instantReferencesAndValueByInstant: {
[instant: string]: InstantReferencesAndValue
} = Object.fromEntries(
Object.entries(parameter.values ?? {}).map(([instant, valueAtInstant]) => [
instant,
{ instant, references: [], valueAtInstant },
]),
)
if (parameter.reference !== undefined) {
for (const [instant, references] of Object.entries(parameter.reference)) {
if (instantReferencesAndValueByInstant[instant] === undefined) {
instantReferencesAndValueByInstant[instant] = {
instant,
references,
}
} else {
instantReferencesAndValueByInstant[instant].references = references
}
}
}
return Object.entries(instantReferencesAndValueByInstant)
.sort(([instant1], [instant2]) => instant2.localeCompare(instant1))
.map(([_instant, instantReferencesAndValue]) => instantReferencesAndValue)
}
export function labelFromParameterClass(
parameterClass: ParameterClass | string,
): string {
return (
{
[ParameterClass.Node]: "Nœud",
[ParameterClass.Scale]: "Barème",
[ParameterClass.Value]: "Valeur",
}[parameterClass] ?? parameterClass
)
}
export function labelFromScaleType(type: ScaleType | string): string {
return (
{
[ScaleType.LinearAverageRate]: "à taux moyen linéaire",
[ScaleType.MarginalAmount]: "à montant marginal",
[ScaleType.MarginalRate]: "à taux marginal",
[ScaleType.SingleAmount]: "à montant unique",
}[type] ?? type
)
}
export function labelFromUnit(
metadata: Metadata,
unit: AmountUnit | RateUnit | Unit | string,
): string {
return (
{
[Unit.CodesDepartements]: "code département",
[Unit.CountryCode]: "code pays",
[Unit.Currency]: metadata.currency,
[Unit.CurrencyFRF]: "FRF",
[Unit.Day]: "jour",
[Unit.Month]: "mois",
[Unit.Rate]: "ratio", // Number between 0 and 1
[Unit.Year]: "année",
}[unit] ?? unit
)
}
export function labelFromValueType(type: ValueType | string): string {
return (
{
[ValueType.Number]: "nombre",
[ValueType.StringArray]: "tableau de chaînes de caractères",
[ValueType.StringByString]: "dictionnaire de chaines de caractères",
}[type] ?? type
)
}