{
  "$comment": "Machine-readable companion to https://valem.run/calculators/bulgaria/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/bulgaria/vat",
  "dataUrl": "https://valem.run/calculators/bulgaria/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Bulgaria ддс (vat) model by Valem (https://valem.run/calculators/bulgaria/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/bulgaria/vat/verify",
  "country": "bulgaria",
  "countryName": "Bulgaria",
  "formula": "vat",
  "formulaName": "ДДС (VAT)",
  "title": "ДДС калкулатор 2026 — Bulgaria VAT (20% / 9%) in euro",
  "answer": "Bulgarian VAT (ДДС) is 20%, with a 9% rate on hotel accommodation, books, newspapers and magazines, and baby food and hygiene items. From 1 January 2026 a business must register once its annual turnover in the calendar year exceeds EUR 51,130.",
  "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-12"
  },
  "sources": [
    {
      "label": "НАП — ДДС в България: стандартна ставка 20% (чл. 66 ЗДДС) и намалена ставка 9% (чл. 66а ЗДДС)",
      "url": "https://nra.bg/wps/portal/nra/taxes/dds-v-balgariya",
      "checked": "2026-10-12"
    },
    {
      "label": "НАП — Регистрация по ЗДДС: задължение за регистрация при годишен оборот над националния праг от 51 130 евро, считано от 01.01.2026 (чл. 96, ал. 1 ЗДДС)",
      "url": "https://nra.bg/wps/portal/nra/taxes/dds-v-balgariya/registratsiya-po-zdds",
      "checked": "2026-10-12"
    }
  ],
  "terminalOutput": "mustRegister",
  "headlineOutput": "vatAmount",
  "inputs": [
    {
      "name": "amount",
      "type": "number",
      "label": "Amount (EUR)",
      "minimum": 0
    },
    {
      "name": "direction",
      "type": "string",
      "label": "Direction",
      "enum": [
        "add",
        "remove"
      ]
    },
    {
      "name": "category",
      "type": "string",
      "label": "What is being supplied",
      "enum": [
        "standard",
        "reduced"
      ]
    },
    {
      "name": "reverseCharge",
      "type": "boolean",
      "label": "No VAT charged by you: zero-rated supply, or the customer accounts for the tax"
    },
    {
      "name": "annualTurnover",
      "type": "number",
      "label": "Taxable turnover in Bulgaria this calendar year (EUR)",
      "minimum": 0
    }
  ],
  "outputs": [
    {
      "name": "rate",
      "type": "number",
      "label": "Rate for the category",
      "formula": "category = 'reduced' ? $const.reducedRate : $const.standardRate"
    },
    {
      "name": "effectiveRate",
      "type": "number",
      "label": "Rate applied",
      "formula": "reverseCharge ? 0 : rate"
    },
    {
      "name": "netAmount",
      "type": "number",
      "label": "Net",
      "format": "currency",
      "formula": "direction = 'remove' ? $round(amount / (1 + effectiveRate), 2) : $round(amount, 2)"
    },
    {
      "name": "vatAmount",
      "type": "number",
      "label": "ДДС",
      "format": "currency",
      "formula": "$round(netAmount * effectiveRate, 2)"
    },
    {
      "name": "grossAmount",
      "type": "number",
      "label": "Gross",
      "format": "currency",
      "formula": "$round(netAmount + vatAmount, 2)"
    },
    {
      "name": "mustRegister",
      "type": "boolean",
      "label": "Must register for VAT",
      "formula": "annualTurnover > $const.registrationThreshold"
    }
  ],
  "testCases": [
    {
      "description": "B1 100 EUR net at 20%",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 20,
        "grossAmount": 120,
        "netAmount": 100
      }
    },
    {
      "description": "B2 120 EUR gross back to net",
      "given": {
        "amount": 120,
        "direction": "remove",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 20
      }
    },
    {
      "description": "B3 a hotel night at 9%",
      "given": {
        "amount": 100,
        "direction": "add",
        "category": "reduced",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 9,
        "grossAmount": 109
      }
    },
    {
      "description": "B4 exactly EUR 51,130 does not yet require registration",
      "given": {
        "amount": 0,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 51130
      },
      "expect": {
        "mustRegister": false
      }
    },
    {
      "description": "B5 above it, registration is required",
      "given": {
        "amount": 0,
        "direction": "add",
        "category": "standard",
        "reverseCharge": false,
        "annualTurnover": 51131
      },
      "expect": {
        "mustRegister": true
      }
    }
  ],
  "spec": {
    "id": "vat-bulgaria",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number",
          "minimum": 0
        },
        "direction": {
          "type": "string",
          "enum": [
            "add",
            "remove"
          ]
        },
        "category": {
          "type": "string",
          "enum": [
            "standard",
            "reduced"
          ]
        },
        "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
        },
        "annualTurnover": {
          "type": "number",
          "minimum": 0
        }
      }
    },
    "constants": {
      "standardRate": 0.2,
      "reducedRate": 0.09,
      "registrationThreshold": 51130
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'category': 'standard', 'reverseCharge': false, 'annualTurnover': 0 }"
      }
    ],
    "derivations": [
      {
        "path": "$.rate",
        "expr": "category = 'reduced' ? $const.reducedRate : $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": "ДДС",
          "layout": "vertical",
          "components": [
            {
              "id": "note",
              "type": "staticText",
              "text": "НАП: «Стандартна ставка на данъка - 20% (по чл. 66 от ЗДДС)» and «Намалена ставка на данъка - 9% (по чл. 66а от ЗДДС)» — the 9% rate covers accommodation in hotels and similar establishments (including holiday lets and camping pitches), books in print or electronic form, newspapers and magazines, and food suitable for babies and young children, nappies and similar baby hygiene items. Exports and the other supplies in chapter three are zero-rated (art. 66b) — a mechanism, not a category you pick here."
            },
            {
              "id": "inputs",
              "type": "fieldSet",
              "label": "Your figures",
              "components": [
                {
                  "id": "amount",
                  "type": "numericField",
                  "label": "Amount (EUR)",
                  "bind": "$.amount",
                  "helperText": "Net amount when adding VAT, VAT-inclusive 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": "Zero-rated supplies (exports and the others listed in art. 66b) are a mechanism, not a rate — use the box below for those.",
                  "options": [
                    {
                      "value": "standard",
                      "label": "Standard — 20%"
                    },
                    {
                      "value": "reduced",
                      "label": "Reduced — 9% (hotel accommodation, books, periodicals, baby food and hygiene items)"
                    }
                  ]
                },
                {
                  "id": "reverseCharge",
                  "type": "checkboxField",
                  "label": "No VAT charged by you: zero-rated supply, or the customer accounts for the tax",
                  "bind": "$.reverseCharge"
                },
                {
                  "id": "turnover",
                  "type": "numericField",
                  "label": "Taxable turnover in Bulgaria this calendar year (EUR)",
                  "bind": "$.annualTurnover",
                  "helperText": "From 1 January 2026 registration is required once annual turnover in the calendar year exceeds EUR 51,130 — apply within 7 days; registration takes effect the next day."
                }
              ]
            },
            {
              "id": "sep",
              "type": "separatorLine"
            },
            {
              "id": "vatTile",
              "type": "statTile",
              "label": "ДДС",
              "bind": "$.vatAmount",
              "format": "currency",
              "currency": "EUR"
            },
            {
              "id": "netTile",
              "type": "statTile",
              "label": "Net",
              "bind": "$.netAmount",
              "format": "currency",
              "currency": "EUR"
            },
            {
              "id": "grossTile",
              "type": "statTile",
              "label": "Gross",
              "bind": "$.grossAmount",
              "format": "currency",
              "currency": "EUR"
            },
            {
              "id": "breakdown",
              "type": "keyValueList",
              "label": "Breakdown",
              "items": [
                {
                  "label": "Rate for the category",
                  "bind": "$.rate"
                },
                {
                  "label": "Rate applied",
                  "bind": "$.effectiveRate"
                },
                {
                  "label": "Must register for VAT",
                  "bind": "$.mustRegister"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 2,
              "items": [
                {
                  "label": "НАП — ДДС в България: стандартна ставка 20% (чл. 66 ЗДДС) и намалена ставка 9% (чл. 66а ЗДДС)",
                  "url": "https://nra.bg/wps/portal/nra/taxes/dds-v-balgariya",
                  "date": "2026-10-12",
                  "covers": [
                    "standardRate",
                    "reducedRate"
                  ]
                },
                {
                  "label": "НАП — Регистрация по ЗДДС: задължение за регистрация при годишен оборот над националния праг от 51 130 евро, считано от 01.01.2026 (чл. 96, ал. 1 ЗДДС)",
                  "url": "https://nra.bg/wps/portal/nra/taxes/dds-v-balgariya/registratsiya-po-zdds",
                  "date": "2026-10-12",
                  "covers": [
                    "registrationThreshold"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "B1 100 EUR net at 20%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 20,
          "$.grossAmount": 120,
          "$.netAmount": 100
        }
      },
      {
        "description": "B2 120 EUR gross back to net",
        "given": {
          "$.amount": 120,
          "$.direction": "remove",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 20
        }
      },
      {
        "description": "B3 a hotel night at 9%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.category": "reduced",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 9,
          "$.grossAmount": 109
        }
      },
      {
        "description": "B4 exactly EUR 51,130 does not yet require registration",
        "given": {
          "$.amount": 0,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 51130
        },
        "expect": {
          "$.mustRegister": false
        }
      },
      {
        "description": "B5 above it, registration is required",
        "given": {
          "$.amount": 0,
          "$.direction": "add",
          "$.category": "standard",
          "$.reverseCharge": false,
          "$.annualTurnover": 51131
        },
        "expect": {
          "$.mustRegister": true
        }
      }
    ]
  }
}
