{
  "$comment": "Machine-readable companion to https://valem.run/calculators/ukraine/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/ukraine/vat",
  "dataUrl": "https://valem.run/calculators/ukraine/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Ukraine pdv (vat) model by Valem (https://valem.run/calculators/ukraine/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/ukraine/vat/verify",
  "country": "ukraine",
  "countryName": "Ukraine",
  "formula": "vat",
  "formulaName": "PDV (VAT)",
  "title": "VAT Calculator Ukraine 2026 — 20% / 14% / 7% PDV",
  "answer": "Ukrainian PDV is 20% as the standard rate, 7% on medicines and medical devices, and 14% on six listed agricultural commodity codes. Registration is required above 1 000 000 UAH of supplies over 12 months.",
  "lang": "en",
  "currency": "UAH",
  "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": "Tax Code of Ukraine, art. 193.1 - rates of 20%, 7% and 14%",
      "url": "https://zakon.rada.gov.ua/laws/show/2755-17",
      "checked": "2026-10-05"
    },
    {
      "label": "Tax Code of Ukraine, art. 181.1 - registration above 1 000 000 UAH over 12 months",
      "url": "https://zakon.rada.gov.ua/laws/show/2755-17",
      "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",
        "superReduced",
        "reduced1"
      ]
    },
    {
      "name": "annualTurnover",
      "type": "number",
      "label": "Taxable turnover, last 12 months",
      "minimum": 0
    },
    {
      "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)"
    },
    {
      "name": "mustRegister",
      "type": "boolean",
      "formula": "annualTurnover > $const.registrationThreshold"
    }
  ],
  "testCases": [
    {
      "description": "S1 100.00 UAH net at the standard rate",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 20,
        "grossAmount": 120,
        "netAmount": 100
      }
    },
    {
      "description": "S2 120.00 UAH gross back to net at 20%",
      "given": {
        "amount": 120,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 20
      }
    },
    {
      "description": "S3 100.00 UAH of medicines at 7%",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "superReduced",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 7,
        "grossAmount": 107
      }
    },
    {
      "description": "S4 100.00 UAH of listed grain at 14%",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced1",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 14,
        "grossAmount": 114
      }
    },
    {
      "description": "S5 reverse charge: the supplier charges no PDV",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": true,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    },
    {
      "description": "S6 supplies over 1 000 000 UAH in 12 months: registration required",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 1500000
      },
      "expect": {
        "mustRegister": true
      }
    },
    {
      "description": "S7 under the threshold: not required",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 800000
      },
      "expect": {
        "mustRegister": false
      }
    }
  ],
  "spec": {
    "id": "vat-ukraine",
    "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"
          ]
        },
        "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.2,
      "superReducedRate": 0.07,
      "reducedRate1": 0.14,
      "registrationThreshold": 1000000
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'category': 'standard', 'reverseCharge': false, 'annualTurnover': 0 }"
      }
    ],
    "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)"
      },
      {
        "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": "Three positive rates, and the 14% band is the most narrowly drawn in this catalog: it applies not to \"agricultural produce\" generally but to six specific customs codes - UKTZED 1001, 1003, 1005, 1201, 1205 and 1206 00, which are wheat, barley, maize, soya beans, rapeseed and sunflower seed. Anything outside those codes takes 20% however agricultural it looks, so the commodity code is the question and not the crop. The 7% band covers medicines and medical devices entered in the State registers. The registration test counts supplies over the last 12 calendar months and the Code is explicit that the figure is net of the tax itself."
            },
            {
              "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 - 20%"
                    },
                    {
                      "value": "superReduced",
                      "label": "Medicines and medical devices - 7%"
                    },
                    {
                      "value": "reduced1",
                      "label": "Listed agricultural produce - 14% (UKTZED 1001, 1003, 1005, 1201, 1205, 1206 00)"
                    }
                  ]
                },
                {
                  "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": "Taxable turnover, last 12 months",
                  "bind": "$.annualTurnover",
                  "helperText": "Supplies over the last 12 CALENDAR months, excluding the tax itself - the Code says \"без урахування податку на додану вартість\", so enter net figures."
                }
              ]
            },
            {
              "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": "Tax Code of Ukraine, art. 193.1 - rates of 20%, 7% and 14%",
                  "url": "https://zakon.rada.gov.ua/laws/show/2755-17",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate",
                    "superReducedRate",
                    "reducedRate1"
                  ]
                },
                {
                  "label": "Tax Code of Ukraine, art. 181.1 - registration above 1 000 000 UAH over 12 months",
                  "url": "https://zakon.rada.gov.ua/laws/show/2755-17",
                  "date": "2026-10-05",
                  "covers": [
                    "registrationThreshold"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 UAH net at the standard rate",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 20,
          "$.grossAmount": 120,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 120.00 UAH gross back to net at 20%",
        "given": {
          "$.amount": 120,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 20
        }
      },
      {
        "description": "S3 100.00 UAH of medicines at 7%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "superReduced",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 7,
          "$.grossAmount": 107
        }
      },
      {
        "description": "S4 100.00 UAH of listed grain at 14%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced1",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 14,
          "$.grossAmount": 114
        }
      },
      {
        "description": "S5 reverse charge: the supplier charges no PDV",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": true,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      },
      {
        "description": "S6 supplies over 1 000 000 UAH in 12 months: registration required",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 1500000
        },
        "expect": {
          "$.mustRegister": true
        }
      },
      {
        "description": "S7 under the threshold: not required",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 800000
        },
        "expect": {
          "$.mustRegister": false
        }
      }
    ]
  }
}
