{
  "$comment": "Machine-readable companion to https://valem.run/calculators/south-africa/self-employed. Formula, inputs, outputs, engine-verified test vectors, cited sources and the re-runnable Valem ModelSpec behind the page.",
  "url": "https://valem.run/calculators/south-africa/self-employed",
  "dataUrl": "https://valem.run/calculators/south-africa/self-employed.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "South Africa sole proprietor model by Valem (https://valem.run/calculators/south-africa/self-employed), 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/south-africa/self-employed/verify",
  "country": "south-africa",
  "countryName": "South Africa",
  "formula": "self-employed",
  "formulaName": "Sole proprietor",
  "title": "Sole Proprietor Tax Calculator South Africa",
  "answer": "Your net income as a South African sole proprietor is taxable profit minus income tax at the ordinary individual rates, reduced by the primary rebate — and paid twice a year as provisional tax rather than at year end.",
  "lang": "en",
  "currency": "ZAR",
  "taxYear": "2026",
  "verification": {
    "claim": "shape-only",
    "statement": "The rates in this model are illustrative. Its 3 self-test cases confirm the engine reproduces the shape of the charge, but the schedule is not the official one, so the amount will not match a real bill. The cited sources name the document that would replace it.",
    "selfTestCases": 3,
    "ratesAreIllustrative": true,
    "sourcesCheckedOn": "2026-08-22"
  },
  "sources": [
    {
      "label": "SARS — Provisional tax",
      "url": "https://www.sars.gov.za/types-of-tax/provisional-tax/",
      "checked": "2026-08-22"
    },
    {
      "label": "SARS tax tables 2026/2027 — individual brackets and rebates",
      "url": "https://accounter.co.za/news/sars-tax-tables-2026-2027",
      "checked": "2026-08-22"
    }
  ],
  "terminalOutput": "netIncome",
  "inputs": [
    {
      "name": "annualProfit",
      "type": "number",
      "label": "Annual taxable profit (ZAR)",
      "minimum": 0
    }
  ],
  "outputs": [
    {
      "name": "taxBeforeRebate",
      "type": "number",
      "label": "Tax before rebate",
      "format": "number",
      "formula": "($p := annualProfit; $round($const.r1 * $min([$p, $const.b1]) + $const.r2 * $max([0, $min([$p, $const.b2]) - $const.b1]) + $const.r3 * $max([0, $min([$p, $const.b3]) - $const.b2]) + $const.r4 * $max([0, $min([$p, $const.b4]) - $const.b3]) + $const.r5 * $max([0, $min([$p, $const.b5]) - $const.b4]) + $const.r6 * $max([0, $min([$p, $const.b6]) - $const.b5]) + $const.r7 * $max([0, $p - $const.b6]), 2))"
    },
    {
      "name": "incomeTax",
      "type": "number",
      "label": "Income tax after primary rebate",
      "format": "number",
      "formula": "$round($max([0, taxBeforeRebate - $const.primaryRebate]), 2)"
    },
    {
      "name": "netIncome",
      "type": "number",
      "label": "Net income / year",
      "format": "number",
      "formula": "$round($max([0, annualProfit - incomeTax]), 2)"
    }
  ],
  "testCases": [
    {
      "description": "600,000 ZAR taxable profit — a typical full-time consultant",
      "given": {
        "annualProfit": 600000
      },
      "expect": {
        "taxBeforeRebate": 150727,
        "incomeTax": 132907,
        "netIncome": 467093
      }
    },
    {
      "description": "150,000 ZAR — the rebate covers most of the tax",
      "given": {
        "annualProfit": 150000
      },
      "expect": {
        "taxBeforeRebate": 27000,
        "incomeTax": 9180,
        "netIncome": 140820
      }
    },
    {
      "description": "2,000,000 ZAR — into the top bracket",
      "given": {
        "annualProfit": 2000000
      },
      "expect": {
        "taxBeforeRebate": 720969,
        "incomeTax": 703149,
        "netIncome": 1296851
      }
    }
  ],
  "spec": {
    "id": "self-employed-south-africa",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "annualProfit": {
          "type": "number",
          "minimum": 0
        },
        "taxBeforeRebate": {
          "type": "number",
          "readOnly": true
        },
        "incomeTax": {
          "type": "number",
          "readOnly": true
        },
        "netIncome": {
          "type": "number",
          "readOnly": true
        }
      },
      "required": [
        "annualProfit"
      ]
    },
    "constants": {
      "primaryRebate": 17820,
      "b1": 245100,
      "b2": 383100,
      "b3": 530200,
      "b4": 695800,
      "b5": 887000,
      "b6": 1878600,
      "r1": 0.18,
      "r2": 0.26,
      "r3": 0.31,
      "r4": 0.36,
      "r5": 0.39,
      "r6": 0.41,
      "r7": 0.45
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ \"annualProfit\": 600000 }"
      }
    ],
    "derivations": [
      {
        "path": "$.taxBeforeRebate",
        "expr": "($p := annualProfit; $round($const.r1 * $min([$p, $const.b1]) + $const.r2 * $max([0, $min([$p, $const.b2]) - $const.b1]) + $const.r3 * $max([0, $min([$p, $const.b3]) - $const.b2]) + $const.r4 * $max([0, $min([$p, $const.b4]) - $const.b3]) + $const.r5 * $max([0, $min([$p, $const.b5]) - $const.b4]) + $const.r6 * $max([0, $min([$p, $const.b6]) - $const.b5]) + $const.r7 * $max([0, $p - $const.b6]), 2))"
      },
      {
        "path": "$.incomeTax",
        "expr": "$round($max([0, taxBeforeRebate - $const.primaryRebate]), 2)"
      },
      {
        "path": "$.netIncome",
        "expr": "$round($max([0, annualProfit - incomeTax]), 2)"
      }
    ],
    "constraints": [],
    "viewDefinition": {
      "renderer": "builtin",
      "defaultView": "main",
      "views": [
        {
          "id": "main",
          "label": "Self-employed net income",
          "layout": "vertical",
          "components": [
            {
              "id": "illustrativeNotice",
              "type": "alert",
              "variant": "warning",
              "label": "What this model leaves out",
              "text": "'A sole proprietor is not a separate taxpayer: business profit is simply added to your personal income and run through the ordinary individual table, which is what this model does. The primary rebate is a credit against the tax, not a deduction from income, and it is what creates the 99,000 ZAR tax threshold for someone under 65. Modelled for a taxpayer under 65 with no other income; the secondary and tertiary rebates for older taxpayers are not applied. There are no compulsory social contributions to deduct, but the tax must be paid as provisional tax in August and February rather than at year end. The turnover tax alternative for micro businesses is not modelled. Not tax advice.'"
            },
            {
              "id": "inputField",
              "type": "numericField",
              "label": "Annual taxable profit (ZAR)",
              "bind": "$.annualProfit",
              "placeholder": "600000"
            },
            {
              "id": "tiles",
              "type": "group",
              "layout": "horizontal",
              "components": [
                {
                  "id": "netIncomeTile",
                  "type": "statTile",
                  "label": "Net income / year",
                  "bind": "$.netIncome",
                  "format": "number"
                },
                {
                  "id": "taxBeforeRebateTile",
                  "type": "statTile",
                  "label": "Tax before rebate",
                  "bind": "$.taxBeforeRebate",
                  "format": "number"
                },
                {
                  "id": "incomeTaxTile",
                  "type": "statTile",
                  "label": "Income tax after primary rebate",
                  "bind": "$.incomeTax",
                  "format": "number"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "items": [
                {
                  "label": "SARS — Provisional tax",
                  "url": "https://www.sars.gov.za/types-of-tax/provisional-tax/",
                  "date": "2026-08-22"
                },
                {
                  "label": "SARS tax tables 2026/2027 — individual brackets and rebates",
                  "url": "https://accounter.co.za/news/sars-tax-tables-2026-2027",
                  "date": "2026-08-22"
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "600,000 ZAR taxable profit — a typical full-time consultant",
        "given": {
          "$.annualProfit": 600000
        },
        "expect": {
          "$.taxBeforeRebate": 150727,
          "$.incomeTax": 132907,
          "$.netIncome": 467093
        }
      },
      {
        "description": "150,000 ZAR — the rebate covers most of the tax",
        "given": {
          "$.annualProfit": 150000
        },
        "expect": {
          "$.taxBeforeRebate": 27000,
          "$.incomeTax": 9180,
          "$.netIncome": 140820
        }
      },
      {
        "description": "2,000,000 ZAR — into the top bracket",
        "given": {
          "$.annualProfit": 2000000
        },
        "expect": {
          "$.taxBeforeRebate": 720969,
          "$.incomeTax": 703149,
          "$.netIncome": 1296851
        }
      }
    ]
  }
}
