{
  "$comment": "Machine-readable companion to https://valem.run/calculators/denmark/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/denmark/vat",
  "dataUrl": "https://valem.run/calculators/denmark/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Denmark moms (vat) model by Valem (https://valem.run/calculators/denmark/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/denmark/vat/verify",
  "country": "denmark",
  "countryName": "Denmark",
  "formula": "vat",
  "formulaName": "Moms (VAT)",
  "title": "Momsberegner 2026 — Denmark VAT calculator",
  "answer": "Danish moms is 25%, and that is the only rate. There are no reduced bands: the alternative to 25% is exemption or zero-rating, not a lower percentage.",
  "lang": "en",
  "currency": "DKK",
  "taxYear": "2026",
  "verification": {
    "claim": "internal-consistency",
    "statement": "The Valem engine reproduces this model's stated formula through 4 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": 4,
    "ratesAreIllustrative": false,
    "sourcesCheckedOn": "2026-10-05"
  },
  "sources": [
    {
      "label": "Skattestyrelsen - Hvad er moms? (25%)",
      "url": "https://sktst.dk/skattekontrol/moms",
      "checked": "2026-10-05"
    }
  ],
  "terminalOutput": "grossAmount",
  "headlineOutput": "vatAmount",
  "inputs": [
    {
      "name": "amount",
      "type": "number",
      "label": "Amount",
      "minimum": 0
    },
    {
      "name": "direction",
      "type": "string",
      "label": "Direction",
      "enum": [
        "add",
        "remove"
      ]
    },
    {
      "name": "reverseCharge",
      "type": "boolean",
      "label": "B2B reverse charge applies"
    }
  ],
  "outputs": [
    {
      "name": "rate",
      "type": "number",
      "formula": "$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)"
    }
  ],
  "testCases": [
    {
      "description": "S1 100.00 DKK net at 25%",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 25,
        "grossAmount": 125,
        "netAmount": 100
      }
    },
    {
      "description": "S2 125.00 DKK gross back to net",
      "given": {
        "amount": 125,
        "direction": "remove",
        "reverseCharge": false
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 25
      }
    },
    {
      "description": "S3 reverse charge: the supplier charges no moms",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": true
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    },
    {
      "description": "S4 a round 1 000.00 DKK invoice",
      "given": {
        "amount": 1000,
        "direction": "add",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 250,
        "grossAmount": 1250
      }
    }
  ],
  "spec": {
    "id": "vat-denmark",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number",
          "minimum": 0
        },
        "direction": {
          "type": "string",
          "enum": [
            "add",
            "remove"
          ]
        },
        "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
        }
      }
    },
    "constants": {
      "standardRate": 0.25
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'reverseCharge': false }"
      }
    ],
    "derivations": [
      {
        "path": "$.rate",
        "expr": "$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)"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "VAT",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "Denmark has a single rate, so there is no category to choose: 25% applies to goods and services generally, and the alternative to it is exemption or zero-rating rather than a lower rate. This page covers the rate only. The 50 000 kr registration limit is widely quoted but is NOT published here, because the period it is measured over is exactly what secondary sources disagree about: Denmark moved from a rolling 12-month test to a calendar year when it adopted the EU small-business scheme, so guidance written before that change is wrong in a way that is invisible unless you already know. No current primary stating both the figure and the period could be reached, so neither is asserted."
            },
            {
              "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": "reverseCharge",
                  "type": "checkboxField",
                  "label": "B2B reverse charge applies",
                  "bind": "$.reverseCharge",
                  "helperText": "The customer accounts for the VAT, so you charge none."
                }
              ]
            },
            {
              "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",
                  "value": "$.rate"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 1,
              "items": [
                {
                  "label": "Skattestyrelsen - Hvad er moms? (25%)",
                  "url": "https://sktst.dk/skattekontrol/moms",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 DKK net at 25%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 25,
          "$.grossAmount": 125,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 125.00 DKK gross back to net",
        "given": {
          "$.amount": 125,
          "$.direction": "remove",
          "$.reverseCharge": false
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 25
        }
      },
      {
        "description": "S3 reverse charge: the supplier charges no moms",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": true
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      },
      {
        "description": "S4 a round 1 000.00 DKK invoice",
        "given": {
          "$.amount": 1000,
          "$.direction": "add",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 250,
          "$.grossAmount": 1250
        }
      }
    ]
  }
}
