{
  "$comment": "Machine-readable companion to https://valem.run/calculators/turkey/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/turkey/vat",
  "dataUrl": "https://valem.run/calculators/turkey/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Türkiye kdv (vat) model by Valem (https://valem.run/calculators/turkey/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/turkey/vat/verify",
  "country": "turkey",
  "countryName": "Türkiye",
  "formula": "vat",
  "formulaName": "KDV (VAT)",
  "title": "KDV Hesaplama 2026 — Türkiye VAT calculator",
  "answer": "Turkish KDV is %20 as the general rate, %10 for goods and services in list (II) — textiles, health, education, hotels — and %1 for list (I), mainly basic food.",
  "lang": "en",
  "currency": "TRY",
  "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": "GIB - Guncel KDV Oranlari, MADDE 1 (%20 / %10 / %1)",
      "url": "https://cdn.gib.gov.tr/api/gibportal-file/file/getFileResources?objectKey=arsiv%2Fyardim-kaynaklar%2Fyararli-bilgiler%2Fkdv-oranlari.pdf",
      "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",
        "superReduced",
        "reduced1"
      ]
    },
    {
      "name": "reverseCharge",
      "type": "boolean",
      "label": "B2B reverse charge applies"
    }
  ],
  "outputs": [
    {
      "name": "rate",
      "type": "number",
      "formula": "category = 'reduced1' ? $const.reducedRate1 : category = 'superReduced' ? $const.superReducedRate : $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 TRY net at the genel oran",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 20,
        "grossAmount": 120,
        "netAmount": 100
      }
    },
    {
      "description": "S2 120.00 TRY gross back to net at %20",
      "given": {
        "amount": 120,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 20
      }
    },
    {
      "description": "S3 100.00 TRY net at %10",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced1",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 10,
        "grossAmount": 110
      }
    },
    {
      "description": "S4 100.00 TRY of basic food at %1",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "superReduced",
        "reverseCharge": false
      },
      "expect": {
        "vatAmount": 1,
        "grossAmount": 101
      }
    },
    {
      "description": "S5 reverse charge: the supplier charges no KDV",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": true
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    }
  ],
  "spec": {
    "id": "vat-turkey",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number",
          "minimum": 0
        },
        "direction": {
          "type": "string",
          "enum": [
            "add",
            "remove"
          ]
        },
        "category": {
          "type": "string",
          "enum": [
            "standard",
            "superReduced",
            "reduced1"
          ]
        },
        "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.2,
      "superReducedRate": 0.01,
      "reducedRate1": 0.1
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'category': 'standard', 'reverseCharge': false }"
      }
    ],
    "derivations": [
      {
        "path": "$.rate",
        "expr": "category = 'reduced1' ? $const.reducedRate1 : category = 'superReduced' ? $const.superReducedRate : $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": "Three rates, and the instrument that sets them is a presidential decree rather than the VAT code: the rates live in MADDE 1 of the Karar first published in 2007 and amended since, with the current %20 and %10 figures introduced by Cumhurbaskani Karari 7346 with effect from 10 July 2023 - the standard rate rose from %18 and the middle rate from %8 on that date, so guidance written earlier is wrong by two points in both. The %1 band on basic food was not changed. Which rate applies is decided by whether the supply appears in the attached (I) or (II) list, so the category labels here give examples rather than the lists themselves. This page covers the RATE SCHEDULE only; Turkey's registration rule is not in this decree and is not published here."
            },
            {
              "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": "Genel oran - %20"
                    },
                    {
                      "value": "superReduced",
                      "label": "(I) sayili liste - %1 (basic food, agricultural inputs)"
                    },
                    {
                      "value": "reduced1",
                      "label": "(II) sayili liste - %10 (textiles, health, education, hotels)"
                    }
                  ]
                },
                {
                  "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": "GIB - Guncel KDV Oranlari, MADDE 1 (%20 / %10 / %1)",
                  "url": "https://cdn.gib.gov.tr/api/gibportal-file/file/getFileResources?objectKey=arsiv%2Fyardim-kaynaklar%2Fyararli-bilgiler%2Fkdv-oranlari.pdf",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate",
                    "reducedRate1",
                    "superReducedRate"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 TRY net at the genel oran",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 20,
          "$.grossAmount": 120,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 120.00 TRY gross back to net at %20",
        "given": {
          "$.amount": 120,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 20
        }
      },
      {
        "description": "S3 100.00 TRY net at %10",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced1",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 10,
          "$.grossAmount": 110
        }
      },
      {
        "description": "S4 100.00 TRY of basic food at %1",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "superReduced",
          "$.reverseCharge": false
        },
        "expect": {
          "$.vatAmount": 1,
          "$.grossAmount": 101
        }
      },
      {
        "description": "S5 reverse charge: the supplier charges no KDV",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": true
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      }
    ]
  }
}
