using System; namespace FrenchExDev.Net.State.Economy.Dsl; /// /// Secteur institutionnel au sens SEC 2010 / SCN 2008. /// Implémenté comme phantom type : la classification d'une unité /// institutionnelle devient une contrainte générique compile-time, /// pas un champ string susceptible d'incohérence. /// public interface IInstitutionalSector { /// Code SEC 2010 (ex : "S13", "S1311"). string Code { get; } } /// Économie nationale totale (S1 = S11 + S12 + S13 + S14 + S15). public sealed class S1_NationalEconomy : IInstitutionalSector { public string Code => "S1"; public static readonly S1_NationalEconomy Instance = new(); private S1_NationalEconomy() { } } /// Sociétés non financières. public sealed class S11_NonFinancialCorporations : IInstitutionalSector { public string Code => "S11"; public static readonly S11_NonFinancialCorporations Instance = new(); private S11_NonFinancialCorporations() { } } /// Sociétés financières. public sealed class S12_FinancialCorporations : IInstitutionalSector { public string Code => "S12"; public static readonly S12_FinancialCorporations Instance = new(); private S12_FinancialCorporations() { } } /// /// Administrations publiques (APU). Regroupe S1311 (Central), /// S1313 (Collectivités locales), S1314 (Sécurité sociale). /// C'est le secteur pour lequel les critères Maastricht s'appliquent. /// public sealed class S13_GeneralGovernment : IInstitutionalSector { public string Code => "S13"; public static readonly S13_GeneralGovernment Instance = new(); private S13_GeneralGovernment() { } } /// État central (APUC). public sealed class S1311_CentralGovernment : IInstitutionalSector { public string Code => "S1311"; public static readonly S1311_CentralGovernment Instance = new(); private S1311_CentralGovernment() { } } /// Administrations publiques locales (APUL). public sealed class S1313_LocalGovernment : IInstitutionalSector { public string Code => "S1313"; public static readonly S1313_LocalGovernment Instance = new(); private S1313_LocalGovernment() { } } /// Administrations de sécurité sociale (ASSO). public sealed class S1314_SocialSecurityFunds : IInstitutionalSector { public string Code => "S1314"; public static readonly S1314_SocialSecurityFunds Instance = new(); private S1314_SocialSecurityFunds() { } } /// Ménages. public sealed class S14_Households : IInstitutionalSector { public string Code => "S14"; public static readonly S14_Households Instance = new(); private S14_Households() { } } /// Institutions sans but lucratif au service des ménages (ISBLSM). public sealed class S15_NPISH : IInstitutionalSector { public string Code => "S15"; public static readonly S15_NPISH Instance = new(); private S15_NPISH() { } } /// Reste du monde. public sealed class S2_RestOfWorld : IInstitutionalSector { public string Code => "S2"; public static readonly S2_RestOfWorld Instance = new(); private S2_RestOfWorld() { } }