{
  "$comment": "Machine-readable companion to https://valem.run/calculators/switzerland/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/switzerland/vat",
  "dataUrl": "https://valem.run/calculators/switzerland/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Switzerland mwst (vat) model by Valem (https://valem.run/calculators/switzerland/vat), CC BY 4.0.",
    "note": "Covers the model — the expression of each rule and the arrangement of the catalog. The rates and thresholds themselves are law and are not licensed by anyone; the cited sources are where they come from."
  },
  "verificationUrl": "https://valem.run/calculators/switzerland/vat/verify",
  "country": "switzerland",
  "countryName": "Switzerland",
  "formula": "vat",
  "formulaName": "MWST (VAT)",
  "title": "Mehrwertsteuer berechnen 2026 — Swiss VAT",
  "answer": "Swiss MWST is 8,1% as the Normalsatz, 2,6% on food, water, medicines, books and newspapers, and a 3,8% Sondersatz for accommodation. Registration is required once turnover reaches 100 000 francs.",
  "lang": "en",
  "currency": "CHF",
  "taxYear": "2026",
  "verification": {
    "claim": "internal-consistency",
    "statement": "The Valem engine reproduces this model's stated formula through 7 self-test cases (below, and re-runnable against the spec). That asserts internal consistency, NOT that the formula matches current law — the cited sources are the evidence for that, and carry the date each was last checked.",
    "selfTestCases": 7,
    "ratesAreIllustrative": false,
    "sourcesCheckedOn": "2026-10-05"
  },
  "sources": [
    {
      "label": "ESTV - Schweizer Mehrwertsteuersaetze (8,1% / 2,6% / 3,8%)",
      "url": "https://www.estv.admin.ch/de/mwst-steuersaetze-schweiz",
      "checked": "2026-10-05"
    },
    {
      "label": "ESTV - Mehrwertsteuer: Umsatzgroesse 100 000 Franken",
      "url": "https://www.estv.admin.ch/de/mehrwertsteuer",
      "checked": "2026-10-05"
    }
  ],
  "terminalOutput": "mustRegister",
  "headlineOutput": "vatAmount",
  "inputs": [
    {
      "name": "amount",
      "type": "number",
      "label": "Amount",
      "minimum": 0
    },
    {
      "name": "direction",
      "type": "string",
      "label": "Direction",
      "enum": [
        "add",
        "remove"
      ]
    },
    {
      "name": "category",
      "type": "string",
      "label": "What is being supplied",
      "enum": [
        "standard",
        "reduced1",
        "reduced2"
      ]
    },
    {
      "name": "annualTurnover",
      "type": "number",
      "label": "Annual turnover",
      "minimum": 0
    },
    {
      "name": "reverseCharge",
      "type": "boolean",
      "label": "B2B reverse charge applies"
    }
  ],
  "outputs": [
    {
      "name": "rate",
      "type": "number",
      "formula": "category = 'reduced1' ? $const.reducedRate1 : category = 'reduced2' ? $const.reducedRate2 : $const.standardRate"
    },
    {
      "name": "effectiveRate",
      "type": "number",
      "formula": "reverseCharge ? 0 : rate"
    },
    {
      "name": "netAmount",
      "type": "number",
      "formula": "direction = 'remove' ? $round(amount / (1 + effectiveRate), 2) : $round(amount, 2)"
    },
    {
      "name": "vatAmount",
      "type": "number",
      "formula": "$round(netAmount * effectiveRate, 2)"
    },
    {
      "name": "grossAmount",
      "type": "number",
      "formula": "$round(netAmount + vatAmount, 2)"
    },
    {
      "name": "mustRegister",
      "type": "boolean",
      "formula": "annualTurnover >= $const.registrationThreshold"
    }
  ],
  "testCases": [
    {
      "description": "S1 100.00 CHF net at the Normalsatz",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 8.1,
        "grossAmount": 108.1,
        "netAmount": 100
      }
    },
    {
      "description": "S2 108.10 CHF gross back to net at 8,1%",
      "given": {
        "amount": 108.1,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 8.1
      }
    },
    {
      "description": "S3 100.00 CHF net at the reduzierter Satz",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced1",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 2.6,
        "grossAmount": 102.6
      }
    },
    {
      "description": "S4 100.00 CHF a night at the Beherbergung Sondersatz",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced2",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 3.8,
        "grossAmount": 103.8
      }
    },
    {
      "description": "S5 reverse charge: the supplier charges no MWST",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": true,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    },
    {
      "description": "S6 turnover of EXACTLY 100 000 is already liable (erreicht, not ueberschritten)",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 100000
      },
      "expect": {
        "mustRegister": true
      }
    },
    {
      "description": "S7 one franc under the figure: not liable",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 99999
      },
      "expect": {
        "mustRegister": false
      }
    }
  ],
  "spec": {
    "id": "vat-switzerland",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number",
          "minimum": 0
        },
        "direction": {
          "type": "string",
          "enum": [
            "add",
            "remove"
          ]
        },
        "category": {
          "type": "string",
          "enum": [
            "standard",
            "reduced1",
            "reduced2"
          ]
        },
        "annualTurnover": {
          "type": "number",
          "minimum": 0
        },
        "reverseCharge": {
          "type": "boolean"
        },
        "rate": {
          "type": "number",
          "readOnly": true
        },
        "effectiveRate": {
          "type": "number",
          "readOnly": true
        },
        "netAmount": {
          "type": "number",
          "readOnly": true
        },
        "vatAmount": {
          "type": "number",
          "readOnly": true
        },
        "grossAmount": {
          "type": "number",
          "readOnly": true
        },
        "mustRegister": {
          "type": "boolean",
          "readOnly": true
        }
      }
    },
    "constants": {
      "standardRate": 0.081,
      "reducedRate1": 0.026,
      "reducedRate2": 0.038,
      "registrationThreshold": 100000
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'category': 'standard', 'reverseCharge': false, 'annualTurnover': 0 }"
      }
    ],
    "derivations": [
      {
        "path": "$.rate",
        "expr": "category = 'reduced1' ? $const.reducedRate1 : category = 'reduced2' ? $const.reducedRate2 : $const.standardRate"
      },
      {
        "path": "$.effectiveRate",
        "expr": "reverseCharge ? 0 : rate"
      },
      {
        "path": "$.netAmount",
        "expr": "direction = 'remove' ? $round(amount / (1 + effectiveRate), 2) : $round(amount, 2)"
      },
      {
        "path": "$.vatAmount",
        "expr": "$round(netAmount * effectiveRate, 2)"
      },
      {
        "path": "$.grossAmount",
        "expr": "$round(netAmount + vatAmount, 2)"
      },
      {
        "path": "$.mustRegister",
        "expr": "annualTurnover >= $const.registrationThreshold"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "VAT",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "The 3,8% is a Sondersatz, not a third reduced rate: it exists for accommodation alone - \"dem Gewaehren von Unterkunft einschliesslich der allfaelligen Abgabe eines Fruehstuecks\" - so a hotel bill can carry 3,8% on the room and 8,1% on everything else. These rates have applied since 1 January 2024, and the ESTV page carrying them was updated 22 September 2026, the freshest dateline of any source in this family. Unlike every other country here, liability begins when turnover REACHES 100 000 francs rather than exceeding it, so a business at exactly 100 000 must register. Swiss VAT is federal, so the 26-canton variation that stops the Swiss car-tax page from publishing an official schedule does not arise here: these rates apply nationwide."
            },
            {
              "id": "inputs",
              "type": "fieldSet",
              "label": "Your figures",
              "components": [
                {
                  "id": "amount",
                  "type": "numericField",
                  "label": "Amount",
                  "bind": "$.amount",
                  "helperText": "Net amount when adding VAT, gross amount when removing it."
                },
                {
                  "id": "direction",
                  "type": "selectField",
                  "label": "Direction",
                  "bind": "$.direction",
                  "options": [
                    {
                      "value": "add",
                      "label": "Add VAT (net → gross)"
                    },
                    {
                      "value": "remove",
                      "label": "Remove VAT (gross → net)"
                    }
                  ]
                },
                {
                  "id": "category",
                  "type": "selectField",
                  "label": "What is being supplied",
                  "bind": "$.category",
                  "helperText": "The rate follows the category. Exports and intra-EU supplies are zero-rated or exempt — a different mechanism, not a rate you pick here.",
                  "options": [
                    {
                      "value": "standard",
                      "label": "Normalsatz - 8,1%"
                    },
                    {
                      "value": "reduced1",
                      "label": "Reduzierter Satz - 2,6% (food, water, medicines, books, newspapers)"
                    },
                    {
                      "value": "reduced2",
                      "label": "Sondersatz Beherbergung - 3,8% (accommodation, breakfast included)"
                    }
                  ]
                },
                {
                  "id": "reverseCharge",
                  "type": "checkboxField",
                  "label": "B2B reverse charge applies",
                  "bind": "$.reverseCharge",
                  "helperText": "The customer accounts for the VAT, so you charge none."
                },
                {
                  "id": "annualTurnover",
                  "type": "numericField",
                  "label": "Annual turnover",
                  "bind": "$.annualTurnover",
                  "helperText": "Liability starts when turnover REACHES 100 000 francs, not when it passes it, so exactly 100 000 is already liable. The ESTV states the figure without naming the window it is measured over, so this page does not either."
                }
              ]
            },
            {
              "id": "sep",
              "type": "separatorLine"
            },
            {
              "id": "vatTile",
              "type": "statTile",
              "label": "VAT",
              "value": "$.vatAmount"
            },
            {
              "id": "netTile",
              "type": "statTile",
              "label": "Net",
              "value": "$.netAmount"
            },
            {
              "id": "grossTile",
              "type": "statTile",
              "label": "Gross",
              "value": "$.grossAmount"
            },
            {
              "id": "breakdown",
              "type": "keyValueList",
              "label": "Detail",
              "items": [
                {
                  "label": "Rate applied",
                  "value": "$.effectiveRate"
                },
                {
                  "label": "Statutory rate for this category",
                  "value": "$.rate"
                },
                {
                  "label": "VAT registration required",
                  "value": "$.mustRegister"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 2,
              "items": [
                {
                  "label": "ESTV - Schweizer Mehrwertsteuersaetze (8,1% / 2,6% / 3,8%)",
                  "url": "https://www.estv.admin.ch/de/mwst-steuersaetze-schweiz",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate",
                    "reducedRate1",
                    "reducedRate2"
                  ]
                },
                {
                  "label": "ESTV - Mehrwertsteuer: Umsatzgroesse 100 000 Franken",
                  "url": "https://www.estv.admin.ch/de/mehrwertsteuer",
                  "date": "2026-10-05",
                  "covers": [
                    "registrationThreshold"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 CHF net at the Normalsatz",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 8.1,
          "$.grossAmount": 108.1,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 108.10 CHF gross back to net at 8,1%",
        "given": {
          "$.amount": 108.1,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 8.1
        }
      },
      {
        "description": "S3 100.00 CHF net at the reduzierter Satz",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced1",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 2.6,
          "$.grossAmount": 102.6
        }
      },
      {
        "description": "S4 100.00 CHF a night at the Beherbergung Sondersatz",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced2",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 3.8,
          "$.grossAmount": 103.8
        }
      },
      {
        "description": "S5 reverse charge: the supplier charges no MWST",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": true,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      },
      {
        "description": "S6 turnover of EXACTLY 100 000 is already liable (erreicht, not ueberschritten)",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 100000
        },
        "expect": {
          "$.mustRegister": true
        }
      },
      {
        "description": "S7 one franc under the figure: not liable",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 99999
        },
        "expect": {
          "$.mustRegister": false
        }
      }
    ]
  }
}
