{
    "country": "Switzerland",
    "country_code": "CH",
    "module_name": "Swiss Labour Cost Lab",
    "version": "2026-01",
    "effective_from": "2026-01-01",
    "currency": "CHF",
    "status": "prototype",
    "description": "Swiss labour cost simulation module with canton-level fiscal profiles. Combines national social contributions, standard occupational pension assumptions, accident insurance assumptions, canton-level withholding tax (impot a la source, all 26 cantons, official ESTV 2026 tariff files) and canton-level ordinary tax assessment (federal + cantonal + communal, all 26 cantons).",

    "wage_grid": {
        "gross_monthly_min_chf": 3000,
        "gross_monthly_max_chf": 20000,
        "gross_monthly_step_chf": 100,
        "reference_wage_monthly_chf": 5000,
        "reference_unit_label": "CHF gross monthly wage"
    },

    "social_contributions": {
        "ahv_iv_eo": {
            "employee_rate": 0.053,
            "employer_rate": 0.053,
            "label_fr": "AVS / AI / APG",
            "label_en": "OASI / DI / EO",
            "source_note": "Official Swiss federal social contribution rate, split equally between employee and employer."
        },
        "unemployment_insurance": {
            "employee_rate": 0.011,
            "employer_rate": 0.011,
            "annual_salary_ceiling_chf": 148200,
            "label_fr": "Assurance chômage",
            "label_en": "Unemployment insurance",
            "source_note": "Standard unemployment insurance contribution rate up to the insured salary ceiling."
        }
    },

    "occupational_pension_lpp": {
        "status": "standardized_assumption",
        "entry_threshold_annual_chf": 22680,
        "coordination_deduction_annual_chf": 26460,
        "maximum_insured_salary_annual_chf": 90720,
        "minimum_coordinated_salary_annual_chf": 3780,
        "default_age_band": "35-44",
        "age_bands": {
            "25-34": {
                "total_savings_rate": 0.07,
                "employee_share": 0.5,
                "employer_share": 0.5
            },
            "35-44": {
                "total_savings_rate": 0.10,
                "employee_share": 0.5,
                "employer_share": 0.5
            },
            "45-54": {
                "total_savings_rate": 0.15,
                "employee_share": 0.5,
                "employer_share": 0.5
            },
            "55-65": {
                "total_savings_rate": 0.18,
                "employee_share": 0.5,
                "employer_share": 0.5
            }
        },
        "source_note": "The LPP/BVG component is standardized. Actual pension contributions vary by age, pension plan and employer scheme."
    },

    "accident_insurance": {
        "status": "standardized_assumption",
        "employee_non_occupational_accident_rate": 0.012,
        "employer_occupational_accident_rate": 0.005,
        "annual_salary_ceiling_chf": 148200,
        "source_note": "Accident insurance rates vary by insurer, firm risk class and sector. The module uses standardized benchmark rates for comparability."
    },

    "withholding_tax": {
        "status": "implemented_2026",
        "year": 2026,
        "profile": {
            "tariff_code": "A0",
            "marital_status": "single",
            "children": 0,
            "church_tax": false
        },
        "source_note": "Canton-level withholding-tax tables (impot a la source, tariff A0, all 26 cantons) are published by the Swiss Federal Tax Administration (ESTV) and are fully implemented in analysis/switzerland/swiss_withholding_tax_2026.py, which parses the official 2026 fixed-width tariff files directly. See switzerland_sources_2026.json for exact source URLs."
    },

    "ordinary_tax": {
        "status": "implemented_2026",
        "year": 2026,
        "profile": {
            "marital_status": "single",
            "children": 0,
            "church_tax": false,
            "residence": "reference_municipality (cantonal capital)"
        },
        "note": "Ordinary assessment (taxation ordinaire / imposition ordinaire / ordentliche Veranlagung), the annual tax-return regime applying to Swiss citizens and C-permit holders, as opposed to withholding tax at source (foreign workers without a C permit). Combines federal (impot federal direct, single national scale), cantonal (each canton's own base scale and mechanism) and communal (the reference municipality's own multiplier) income tax. Full computation engine: analysis/switzerland/swiss_ordinary_tax_2026.py -- that file's docstring documents the exact mechanism used for each canton (marginal brackets, flat rate, marginal-with-cliff, whole-income interpolated rate, or Basel-Landschaft's continuous logarithmic formula) and Geneva's bespoke multi-stage centimes-additionnels calculation. See switzerland_sources_2026.json for exact source URLs and legal article citations per canton.",
        "federal_scale": {
            "source": "ESTV, Form 58c, 2026, single taxpayer (Alleinstehende)",
            "maximum_average_rate": 0.115,
            "exemption_threshold_annual_chf": 18500
        },
        "cantonal_and_communal_multipliers_2026": {
            "source": "ESTV/SSK, \"Taux et coefficients d'impots\" / \"Steuersatz und Steuerfuss\", section 3.4.1, etat de la legislation au 1er janvier 2026 -- cantonal capitals only",
            "note": "Where a canton's own Kantonsblatt cited a different numeric multiplier than this consolidated table (found for OW and ZG), the canton-specific Kantonsblatt figure was used instead, as a more directly-cited primary source -- see switzerland_sources_2026.json.",
            "values": {
                "ZH": {"cantonal": 0.95, "communal": 1.19},
                "BE": {"cantonal": 2.975, "communal": 1.54},
                "LU": {"cantonal": 1.45, "communal": 1.45},
                "UR": {"cantonal": 1.00, "communal": 0.95},
                "SZ": {"cantonal": 1.10, "communal": 1.75},
                "OW": {"cantonal": 3.15, "communal": 3.86},
                "NW": {"cantonal": 2.66, "communal": 2.35},
                "GL": {"cantonal": 0.597, "communal": 0.61},
                "ZG": {"cantonal": 0.82, "communal": 0.5211},
                "FR": {"cantonal": 0.96, "communal": 0.80},
                "SO": {"cantonal": 1.04, "communal": 1.07},
                "BS": {"cantonal": 1.00, "communal": 0.0, "note": "no separate communal tax at the cantonal capital"},
                "BL": {"cantonal": 1.00, "communal": 0.65},
                "SH": {"cantonal": 0.76, "communal": 0.83},
                "AR": {"cantonal": 3.30, "communal": 4.10},
                "AI": {"cantonal": 0.96, "communal": 0.56},
                "SG": {"cantonal": 1.05, "communal": 1.38},
                "GR": {"cantonal": 0.92, "communal": 0.88},
                "AG": {"cantonal": 1.03, "communal": 0.96},
                "TG": {"cantonal": 1.09, "communal": 1.42},
                "TI": {"cantonal": 1.00, "communal": 0.93},
                "VD": {"cantonal": 1.55, "communal": 0.785},
                "VS": {"cantonal": 1.00, "communal": 1.10, "note": "no cantonal-level multiplier by law; the barreme gives the cantonal tax directly"},
                "NE": {"cantonal": 1.24, "communal": 0.65},
                "GE": {"cantonal_centimes": 0.485, "cantonal_statutory_reduction": 0.12, "communal": 0.4549, "note": "bespoke multi-stage mechanism, see engine docstring"},
                "JU": {"cantonal": 2.85, "communal": 1.90}
            }
        }
    },

    "cantons": [
        { "code": "ZH", "name_fr": "Zurich", "name_en": "Zurich", "reference_municipality": "Zürich" },
        { "code": "BE", "name_fr": "Berne", "name_en": "Bern", "reference_municipality": "Bern" },
        { "code": "LU", "name_fr": "Lucerne", "name_en": "Lucerne", "reference_municipality": "Luzern" },
        { "code": "UR", "name_fr": "Uri", "name_en": "Uri", "reference_municipality": "Altdorf" },
        { "code": "SZ", "name_fr": "Schwytz", "name_en": "Schwyz", "reference_municipality": "Schwyz" },
        { "code": "OW", "name_fr": "Obwald", "name_en": "Obwalden", "reference_municipality": "Sarnen" },
        { "code": "NW", "name_fr": "Nidwald", "name_en": "Nidwalden", "reference_municipality": "Stans" },
        { "code": "GL", "name_fr": "Glaris", "name_en": "Glarus", "reference_municipality": "Glarus" },
        { "code": "ZG", "name_fr": "Zoug", "name_en": "Zug", "reference_municipality": "Zug" },
        { "code": "FR", "name_fr": "Fribourg", "name_en": "Fribourg", "reference_municipality": "Fribourg" },
        { "code": "SO", "name_fr": "Soleure", "name_en": "Solothurn", "reference_municipality": "Solothurn" },
        { "code": "BS", "name_fr": "Bâle-Ville", "name_en": "Basel-Stadt", "reference_municipality": "Basel" },
        { "code": "BL", "name_fr": "Bâle-Campagne", "name_en": "Basel-Landschaft", "reference_municipality": "Liestal" },
        { "code": "SH", "name_fr": "Schaffhouse", "name_en": "Schaffhausen", "reference_municipality": "Schaffhausen" },
        { "code": "AR", "name_fr": "Appenzell Rhodes-Extérieures", "name_en": "Appenzell Ausserrhoden", "reference_municipality": "Herisau" },
        { "code": "AI", "name_fr": "Appenzell Rhodes-Intérieures", "name_en": "Appenzell Innerrhoden", "reference_municipality": "Appenzell" },
        { "code": "SG", "name_fr": "Saint-Gall", "name_en": "St. Gallen", "reference_municipality": "St. Gallen" },
        { "code": "GR", "name_fr": "Grisons", "name_en": "Graubünden", "reference_municipality": "Chur" },
        { "code": "AG", "name_fr": "Argovie", "name_en": "Aargau", "reference_municipality": "Aarau" },
        { "code": "TG", "name_fr": "Thurgovie", "name_en": "Thurgau", "reference_municipality": "Frauenfeld" },
        { "code": "TI", "name_fr": "Tessin", "name_en": "Ticino", "reference_municipality": "Bellinzona" },
        { "code": "VD", "name_fr": "Vaud", "name_en": "Vaud", "reference_municipality": "Lausanne" },
        { "code": "VS", "name_fr": "Valais", "name_en": "Valais", "reference_municipality": "Sion" },
        { "code": "NE", "name_fr": "Neuchâtel", "name_en": "Neuchâtel", "reference_municipality": "Neuchâtel" },
        { "code": "GE", "name_fr": "Genève", "name_en": "Geneva", "reference_municipality": "Genève" },
        { "code": "JU", "name_fr": "Jura", "name_en": "Jura", "reference_municipality": "Delémont" }
    ],

    "methodological_limits": [
        "The module is not an individual Swiss payslip calculator.",
        "Occupational pension contributions are standardized and do not reproduce firm-level pension plans.",
        "Accident insurance rates are benchmark assumptions and do not reflect sector-specific risk classes.",
        "The selected canton is represented by a reference municipality for comparability (the cantonal capital in every case).",
        "Ordinary assessment: family quotient / income-splitting mechanisms (relevant for married or single-parent households, e.g. Vaud's quotient familial) are not modeled, consistent with this module's single/childless reference profile.",
        "Ordinary assessment: aggregate income+wealth tax caps ('bouclier fiscal' / 'Hoechstbelastung' / 'freno all'imposta', in effect in Bern, Lucerne, Basel-Stadt, Aargau, Vaud, Valais, Ticino, Geneva and others) are not modeled, since this module does not compute wealth tax.",
        "Ordinary assessment: church tax is not modeled, consistent with the withholding-tax module's existing convention.",
        "Ordinary assessment: capital pension payments and liquidation gains, taxed separately at reduced rates by nearly every canton, are not modeled (irrelevant for this module's standard-employment reference profile).",
        "Ordinary assessment, Basel-Landschaft (BL): the continuous logarithmic formula uses the base (2005) legislative parameters; the annual cold-progression re-indexation to the current tax year is not reproduced -- medium confidence.",
        "Ordinary assessment, Fribourg (FR) and Valais (VS): both cantons' own law states that a single average tax rate applies to the whole income and interpolates continuously within each income class; this module approximates that continuous interpolation using the discrete class boundaries actually sourced, rather than the full official schedule (published at CHF 100 increments)."
    ]
}