{
  "$comment": "Machine-readable companion to https://valem.run/calculators/spain/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/spain/vat",
  "dataUrl": "https://valem.run/calculators/spain/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Spain iva (vat) model by Valem (https://valem.run/calculators/spain/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/spain/vat/verify",
  "country": "spain",
  "countryName": "Spain",
  "formula": "vat",
  "formulaName": "IVA (VAT)",
  "title": "Calcular IVA 2026 — Spain VAT calculator",
  "answer": "Spanish VAT is 21% as the general rate, 10% reducido on food, hospitality and passenger transport, and 4% superreducido on staples such as bread, milk, eggs, books and medicines.",
  "lang": "en",
  "currency": "EUR",
  "taxYear": "2026",
  "verification": {
    "claim": "internal-consistency",
    "statement": "The Valem engine reproduces this model's stated formula through 5 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": 5,
    "ratesAreIllustrative": false,
    "sourcesCheckedOn": "2026-10-05"
  },
  "sources": [
    {
      "label": "Agencia Tributaria — Tipos impositivos de IVA (21%, 10%, 4%)",
      "url": "https://sede.agenciatributaria.gob.es/Sede/iva/calculo-iva-repercutido-clientes/tipos-impositivos-iva.html",
      "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": "category",
      "type": "string",
      "label": "What is being supplied",
      "enum": [
        "standard",
        "reduced1",
        "reduced2"
      ]
    },
    {
      "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)"
    }
  ],
  "testCases": [
    {
      "description": "S1 100.00 EUR net at the general rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 21,
        "grossAmount": 121,
        "netAmount": 100
      }
    },
    {
      "description": "S2 121.00 EUR gross back to net at the general rate",
      "given": {
        "amount": 121,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 21
      }
    },
    {
      "description": "S3 100.00 EUR net at the 10% reduced rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced2",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 10,
        "grossAmount": 110
      }
    },
    {
      "description": "S4 100.00 EUR net at the 4% super-reduced rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced1",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 4,
        "grossAmount": 104
      }
    },
    {
      "description": "S5 reverse charge: the supplier charges no VAT",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": true
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    }
  ],
  "spec": {
    "id": "vat-spain",
    "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"
          ]
        },
        "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.21,
      "reducedRate1": 0.04,
      "reducedRate2": 0.1
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'category': 'standard', 'reverseCharge': false }"
      }
    ],
    "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)"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "VAT",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "This page covers the RATE SCHEDULE only. Spain is widely reported to have no turnover threshold below which you need not register, but the Agencia Tributaria does not state that on its rates page and it could not be confirmed from a primary source, so no registration figure is published here rather than one taken on trust. The 0% that applies to certain operations is likewise not offered as a category, because what it covers was not established."
            },
            {
              "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": "General — 21%"
                    },
                    {
                      "value": "reduced1",
                      "label": "Superreducido — 4% (bread, milk, eggs, books, medicines)"
                    },
                    {
                      "value": "reduced2",
                      "label": "Reducido — 10% (food, hospitality, passenger transport)"
                    }
                  ]
                },
                {
                  "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 for this category",
                  "value": "$.rate"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 1,
              "items": [
                {
                  "label": "Agencia Tributaria — Tipos impositivos de IVA (21%, 10%, 4%)",
                  "url": "https://sede.agenciatributaria.gob.es/Sede/iva/calculo-iva-repercutido-clientes/tipos-impositivos-iva.html",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate",
                    "reducedRate1",
                    "reducedRate2"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 EUR net at the general rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 21,
          "$.grossAmount": 121,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 121.00 EUR gross back to net at the general rate",
        "given": {
          "$.amount": 121,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 21
        }
      },
      {
        "description": "S3 100.00 EUR net at the 10% reduced rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced2",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 10,
          "$.grossAmount": 110
        }
      },
      {
        "description": "S4 100.00 EUR net at the 4% super-reduced rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced1",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 4,
          "$.grossAmount": 104
        }
      },
      {
        "description": "S5 reverse charge: the supplier charges no VAT",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": true
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      }
    ]
  }
}
