{
  "$comment": "Machine-readable companion to https://valem.run/calculators/latvia/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/latvia/vat",
  "dataUrl": "https://valem.run/calculators/latvia/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Latvia pvn (vat) model by Valem (https://valem.run/calculators/latvia/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/latvia/vat/verify",
  "country": "latvia",
  "countryName": "Latvia",
  "formula": "vat",
  "formulaName": "PVN (VAT)",
  "title": "PVN Kalkulators 2026 — Latvia VAT calculator",
  "answer": "Latvian VAT is 21% as the standard rate with reduced rates of 12% and 5%, and registration is required once transactions pass 50 000 EUR — though while the excess stays within 10%, up to 55 000 EUR, you may defer registering until the end of the year.",
  "lang": "en",
  "currency": "EUR",
  "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": "Pievienotas vertibas nodokla likums, 41. pants — nodokla likmes",
      "url": "https://likumi.lv/ta/id/253451-pievienotas-vertibas-nodokla-likums",
      "checked": "2026-10-05"
    },
    {
      "label": "VID metodiskais materials (02.01.2025) — registracijas slieksnis un 10 % pielaide",
      "url": "https://www.vid.gov.lv/lv/media/28251/download?attachment=",
      "checked": "2026-10-05"
    }
  ],
  "terminalOutput": "payerFrom",
  "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": "Turnover this year",
      "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.registrationThresholdDeferred"
    },
    {
      "name": "payerFrom",
      "type": "string",
      "formula": "annualTurnover > $const.registrationThresholdImmediate ? 'immediately (no deferral above 55 000)' : annualTurnover > $const.registrationThresholdDeferred ? '1 January next year' : 'not required'"
    }
  ],
  "testCases": [
    {
      "description": "S1 100.00 EUR net at the standard rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 21,
        "grossAmount": 121,
        "netAmount": 100
      }
    },
    {
      "description": "S2 121.00 EUR gross back to net at the standard rate",
      "given": {
        "amount": 121,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 21
      }
    },
    {
      "description": "S3 100.00 EUR net at the 12% reduced rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced2",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 12,
        "grossAmount": 112
      }
    },
    {
      "description": "S4 100.00 EUR net at the 5% reduced rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced1",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 5,
        "grossAmount": 105
      }
    },
    {
      "description": "S5 under 50 000 EUR: no obligation",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 45000
      },
      "expect": {
        "mustRegister": false,
        "payerFrom": "not required"
      }
    },
    {
      "description": "S6 inside the 10 % tolerance: may defer to year end",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 53000
      },
      "expect": {
        "mustRegister": true,
        "payerFrom": "1 January next year"
      }
    },
    {
      "description": "S7 above 55 000 EUR: no right to defer",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 60000
      },
      "expect": {
        "mustRegister": true,
        "payerFrom": "immediately (no deferral above 55 000)"
      }
    }
  ],
  "spec": {
    "id": "vat-latvia",
    "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
        },
        "payerFrom": {
          "type": "string",
          "readOnly": true
        }
      }
    },
    "constants": {
      "standardRate": 0.21,
      "reducedRate1": 0.05,
      "reducedRate2": 0.12,
      "registrationThresholdDeferred": 50000,
      "registrationThresholdImmediate": 55000
    },
    "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.registrationThresholdDeferred"
      },
      {
        "path": "$.payerFrom",
        "expr": "annualTurnover > $const.registrationThresholdImmediate ? 'immediately (no deferral above 55 000)' : annualTurnover > $const.registrationThresholdDeferred ? '1 January next year' : 'not required'"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "VAT",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "Latvia states ONE threshold, 50 000 EUR, and then a 10 % tolerance on top of it: while the excess stays within 5 000 EUR — so up to 55 000 EUR of total transactions — registration may be deferred to the end of the year. Above 55 000 EUR there is no right to defer. That is why sources disagree between 50 000 and 55 000: they are the threshold and the top of its tolerance, not rival figures."
            },
            {
              "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": "Standard — 21%"
                    },
                    {
                      "value": "reduced1",
                      "label": "Reduced — 5% (certain books and publications)"
                    },
                    {
                      "value": "reduced2",
                      "label": "Reduced — 12% (medicines, heating, 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": "annualTurnover",
                  "type": "numericField",
                  "label": "Turnover this year",
                  "bind": "$.annualTurnover"
                }
              ]
            },
            {
              "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"
                },
                {
                  "label": "Registration takes effect",
                  "value": "$.payerFrom"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 2,
              "items": [
                {
                  "label": "Pievienotas vertibas nodokla likums, 41. pants — nodokla likmes",
                  "url": "https://likumi.lv/ta/id/253451-pievienotas-vertibas-nodokla-likums",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate",
                    "reducedRate1",
                    "reducedRate2"
                  ]
                },
                {
                  "label": "VID metodiskais materials (02.01.2025) — registracijas slieksnis un 10 % pielaide",
                  "url": "https://www.vid.gov.lv/lv/media/28251/download?attachment=",
                  "date": "2026-10-05",
                  "covers": [
                    "registrationThresholdDeferred",
                    "registrationThresholdImmediate"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 EUR net at the standard rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 21,
          "$.grossAmount": 121,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 121.00 EUR gross back to net at the standard rate",
        "given": {
          "$.amount": 121,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 21
        }
      },
      {
        "description": "S3 100.00 EUR net at the 12% reduced rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced2",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 12,
          "$.grossAmount": 112
        }
      },
      {
        "description": "S4 100.00 EUR net at the 5% reduced rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced1",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 5,
          "$.grossAmount": 105
        }
      },
      {
        "description": "S5 under 50 000 EUR: no obligation",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 45000
        },
        "expect": {
          "$.mustRegister": false,
          "$.payerFrom": "not required"
        }
      },
      {
        "description": "S6 inside the 10 % tolerance: may defer to year end",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 53000
        },
        "expect": {
          "$.mustRegister": true,
          "$.payerFrom": "1 January next year"
        }
      },
      {
        "description": "S7 above 55 000 EUR: no right to defer",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 60000
        },
        "expect": {
          "$.mustRegister": true,
          "$.payerFrom": "immediately (no deferral above 55 000)"
        }
      }
    ]
  }
}
