using System; namespace FrenchExDev.Net.State.Economy.Dsl; /// /// Agrégat macroéconomique du SCN 2008 / SEC 2010. Les agrégats sont des /// soldes comptables agrégés sur l'économie nationale : ils portent la même /// unité (monnaie nominale) mais ont des domaines de variation distincts. /// public interface IMacroAggregate { /// Code court SEC 2010 / SCN 2008. string Code { get; } } /// PIB (B1*g) — somme des B1g + impôts nets sur les produits. public sealed class GrossDomesticProduct : IMacroAggregate { public string Code => "B1*g"; public static readonly GrossDomesticProduct Instance = new(); private GrossDomesticProduct() { } } /// RNB (B5*g) — PIB + revenus primaires nets reçus du reste du monde. public sealed class GrossNationalIncome : IMacroAggregate { public string Code => "B5*g"; public static readonly GrossNationalIncome Instance = new(); private GrossNationalIncome() { } } /// RDB (B6*g) — revenu national disponible brut. public sealed class GrossDisposableIncome : IMacroAggregate { public string Code => "B6*g"; public static readonly GrossDisposableIncome Instance = new(); private GrossDisposableIncome() { } } /// FBCF (P51g) exprimée en agrégat national. public sealed class GrossFixedCapitalFormation : IMacroAggregate { public string Code => "P51g"; public static readonly GrossFixedCapitalFormation Instance = new(); private GrossFixedCapitalFormation() { } } /// Épargne brute nationale (B8g) — RDB − dépense de consommation finale. public sealed class GrossSaving : IMacroAggregate { public string Code => "B8g"; public static readonly GrossSaving Instance = new(); private GrossSaving() { } } /// /// Montant monétaire en euros, exprimé en milliards (unité standard INSEE / /// Eurostat pour les comptes nationaux). Type-sûr : une confusion entre euros /// et millions d'euros devient une erreur de compilation plutôt qu'un bug /// silencieux dans un rapport budgétaire. /// public readonly struct EurosBillions : IEquatable { public decimal Value { get; } public EurosBillions(decimal value) { Value = value; } public static EurosBillions Of(decimal value) => new(value); public bool Equals(EurosBillions other) => Value == other.Value; public override bool Equals(object? obj) => obj is EurosBillions other && Equals(other); public override int GetHashCode() => Value.GetHashCode(); public override string ToString() => $"{Value:N1} Md€"; }