{
  "$comment": "Machine-readable companion to https://valem.run/calculators/new-zealand/vat. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/new-zealand/vat",
  "dataUrl": "https://valem.run/calculators/new-zealand/vat.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "New Zealand gst model by Valem (https://valem.run/calculators/new-zealand/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/new-zealand/vat/verify",
  "country": "new-zealand",
  "countryName": "New Zealand",
  "formula": "vat",
  "formulaName": "GST",
  "title": "GST Calculator NZ 2026 — Add or Remove 15%",
  "answer": "New Zealand GST is 15%, and it is the only rate. You must register once turnover passes NZ$60,000 in any rolling 12-month period — or once you expect it to in the next 12.",
  "lang": "en",
  "currency": "NZD",
  "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": "Inland Revenue - GST guide IR375 (15%)",
      "url": "https://www.ird.govt.nz/-/media/project/ir/home/documents/forms-and-guides/ir300---ir399/ir375/ir375.pdf",
      "checked": "2026-10-05"
    },
    {
      "label": "Inland Revenue - GST guide IR375: registration at NZ$60,000 turnover",
      "url": "https://www.ird.govt.nz/-/media/project/ir/home/documents/forms-and-guides/ir300---ir399/ir375/ir375.pdf",
      "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": "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": "$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 NZD net at 15%",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 15,
        "grossAmount": 115,
        "netAmount": 100
      }
    },
    {
      "description": "S2 115.00 NZD gross back to net (IR375 worked example)",
      "given": {
        "amount": 115,
        "direction": "remove",
        "reverseCharge": false,
        "annualTurnover": 0
      },
      "expect": {
        "netAmount": 100,
        "vatAmount": 15
      }
    },
    {
      "description": "S3 reverse charge: the supplier charges no GST",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": true,
        "annualTurnover": 0
      },
      "expect": {
        "vatAmount": 0,
        "grossAmount": 100
      }
    },
    {
      "description": "S4 turnover over 60 000 NZD: registration required",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": false,
        "annualTurnover": 70000
      },
      "expect": {
        "mustRegister": true
      }
    },
    {
      "description": "S5 turnover under the threshold: voluntary only",
      "given": {
        "amount": 100,
        "direction": "add",
        "reverseCharge": false,
        "annualTurnover": 50000
      },
      "expect": {
        "mustRegister": false
      }
    }
  ],
  "spec": {
    "id": "vat-new-zealand",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "amount": {
          "type": "number",
          "minimum": 0
        },
        "direction": {
          "type": "string",
          "enum": [
            "add",
            "remove"
          ]
        },
        "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.15,
      "registrationThreshold": 60000
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ 'amount': 100, 'direction': 'add', 'reverseCharge': false, 'annualTurnover': 0 }"
      }
    ],
    "derivations": [
      {
        "path": "$.rate",
        "expr": "$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": "New Zealand has a single GST rate, so there is no category to choose. Inland Revenue hedges it as \"usually 15%\" because some supplies are zero-rated or exempt - exports most of all - but zero-rating is a different mechanism from a reduced rate and is not offered here as a band. The registration test is a ROLLING twelve months with a forecast arm: you must register if turnover was over 60 000 NZD in the last 12 months OR is expected to exceed it in the next 12, so the obligation can arise from a budget rather than from an outturn, and in any month rather than at a year end."
            },
            {
              "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": "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": "A rolling window, not a calendar year — the test can trip in any month."
                }
              ]
            },
            {
              "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",
                  "value": "$.rate"
                },
                {
                  "label": "VAT registration required",
                  "value": "$.mustRegister"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "layers": 2,
              "items": [
                {
                  "label": "Inland Revenue - GST guide IR375 (15%)",
                  "url": "https://www.ird.govt.nz/-/media/project/ir/home/documents/forms-and-guides/ir300---ir399/ir375/ir375.pdf",
                  "date": "2026-10-05",
                  "covers": [
                    "standardRate"
                  ]
                },
                {
                  "label": "Inland Revenue - GST guide IR375: registration at NZ$60,000 turnover",
                  "url": "https://www.ird.govt.nz/-/media/project/ir/home/documents/forms-and-guides/ir300---ir399/ir375/ir375.pdf",
                  "date": "2026-10-05",
                  "covers": [
                    "registrationThreshold"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "S1 100.00 NZD net at 15%",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 15,
          "$.grossAmount": 115,
          "$.netAmount": 100
        }
      },
      {
        "description": "S2 115.00 NZD gross back to net (IR375 worked example)",
        "given": {
          "$.amount": 115,
          "$.direction": "remove",
          "$.reverseCharge": false,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.netAmount": 100,
          "$.vatAmount": 15
        }
      },
      {
        "description": "S3 reverse charge: the supplier charges no GST",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": true,
          "$.annualTurnover": 0
        },
        "expect": {
          "$.vatAmount": 0,
          "$.grossAmount": 100
        }
      },
      {
        "description": "S4 turnover over 60 000 NZD: registration required",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": false,
          "$.annualTurnover": 70000
        },
        "expect": {
          "$.mustRegister": true
        }
      },
      {
        "description": "S5 turnover under the threshold: voluntary only",
        "given": {
          "$.amount": 100,
          "$.direction": "add",
          "$.reverseCharge": false,
          "$.annualTurnover": 50000
        },
        "expect": {
          "$.mustRegister": false
        }
      }
    ]
  }
}
