{
  "$comment": "Machine-readable companion to https://valem.run/calculators/romania/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/romania/self-employed",
  "dataUrl": "https://valem.run/calculators/romania/self-employed.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Romania pfa model by Valem (https://valem.run/calculators/romania/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/romania/self-employed/verify",
  "country": "romania",
  "countryName": "Romania",
  "formula": "self-employed",
  "formulaName": "PFA",
  "title": "PFA Sistem Real — Romania Freelancer Tax",
  "answer": "Your net income as a Romanian PFA in the real system is net income minus CAS pension contributions charged on a fixed stepped base, CASS health contributions on income clamped between a floor and a ceiling, and 10% income tax on what is left.",
  "lang": "en",
  "currency": "RON",
  "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": "ANAF — Persoane fizice autorizate: obligații fiscale",
      "url": "https://static.anaf.ro/static/10/Anaf/Informatii_R/Persoane_fizice.htm",
      "checked": "2026-08-22"
    },
    {
      "label": "Taxe PFA 2026: CAS, CASS și impozit — plafoane raportate la salariul minim de 4.050 lei, plafon CASS 72 de salarii",
      "url": "https://contapp.ro/blog/taxe-pfa-2026/",
      "checked": "2026-08-22"
    }
  ],
  "terminalOutput": "netIncome",
  "inputs": [
    {
      "name": "annualNetIncome",
      "type": "number",
      "label": "Annual net income after expenses (RON)",
      "minimum": 0
    }
  ],
  "outputs": [
    {
      "name": "casBase",
      "type": "number",
      "formula": "annualNetIncome >= $const.casUpperStep ? $const.casUpperStep : (annualNetIncome >= $const.casFloor ? $const.casFloor : 0)"
    },
    {
      "name": "cas",
      "type": "number",
      "label": "CAS (pension)",
      "format": "number",
      "formula": "$round(casBase * $const.casRate, 2)"
    },
    {
      "name": "cassBase",
      "type": "number",
      "formula": "$round($min([$max([annualNetIncome, $const.cassFloor]), $const.cassCeiling]), 2)"
    },
    {
      "name": "cass",
      "type": "number",
      "label": "CASS (health)",
      "format": "number",
      "formula": "$round(cassBase * $const.cassRate, 2)"
    },
    {
      "name": "incomeTax",
      "type": "number",
      "label": "Income tax (10%)",
      "format": "number",
      "formula": "$round($const.incomeTaxRate * $max([0, annualNetIncome - cas - cass]), 2)"
    },
    {
      "name": "netIncome",
      "type": "number",
      "label": "Net income / year",
      "format": "number",
      "formula": "$round($max([0, annualNetIncome - cas - cass - incomeTax]), 2)"
    }
  ],
  "testCases": [
    {
      "description": "60,000 RON net income — above the CAS floor, below the upper step",
      "given": {
        "annualNetIncome": 60000
      },
      "expect": {
        "casBase": 48600,
        "cas": 12150,
        "cassBase": 60000,
        "cass": 6000,
        "incomeTax": 4185,
        "netIncome": 37665
      }
    },
    {
      "description": "30,000 RON net income — below the CAS floor, so no pension contribution at all",
      "given": {
        "annualNetIncome": 30000
      },
      "expect": {
        "casBase": 0,
        "cas": 0,
        "cassBase": 30000,
        "cass": 3000,
        "incomeTax": 2700,
        "netIncome": 24300
      }
    },
    {
      "description": "350,000 RON net income — CAS at its upper step, CASS at the 72-minimum-wage ceiling",
      "given": {
        "annualNetIncome": 350000
      },
      "expect": {
        "casBase": 97200,
        "cas": 24300,
        "cassBase": 291600,
        "cass": 29160,
        "incomeTax": 29654,
        "netIncome": 266886
      }
    }
  ],
  "spec": {
    "id": "self-employed-romania",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "annualNetIncome": {
          "type": "number",
          "minimum": 0
        },
        "casBase": {
          "type": "number",
          "readOnly": true
        },
        "cas": {
          "type": "number",
          "readOnly": true
        },
        "cassBase": {
          "type": "number",
          "readOnly": true
        },
        "cass": {
          "type": "number",
          "readOnly": true
        },
        "incomeTax": {
          "type": "number",
          "readOnly": true
        },
        "netIncome": {
          "type": "number",
          "readOnly": true
        }
      },
      "required": [
        "annualNetIncome"
      ]
    },
    "constants": {
      "casFloor": 48600,
      "casUpperStep": 97200,
      "cassFloor": 24300,
      "cassCeiling": 291600,
      "casRate": 0.25,
      "cassRate": 0.1,
      "incomeTaxRate": 0.1
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ \"annualNetIncome\": 60000 }"
      }
    ],
    "derivations": [
      {
        "path": "$.casBase",
        "expr": "annualNetIncome >= $const.casUpperStep ? $const.casUpperStep : (annualNetIncome >= $const.casFloor ? $const.casFloor : 0)"
      },
      {
        "path": "$.cas",
        "expr": "$round(casBase * $const.casRate, 2)"
      },
      {
        "path": "$.cassBase",
        "expr": "$round($min([$max([annualNetIncome, $const.cassFloor]), $const.cassCeiling]), 2)"
      },
      {
        "path": "$.cass",
        "expr": "$round(cassBase * $const.cassRate, 2)"
      },
      {
        "path": "$.incomeTax",
        "expr": "$round($const.incomeTaxRate * $max([0, annualNetIncome - cas - cass]), 2)"
      },
      {
        "path": "$.netIncome",
        "expr": "$round($max([0, annualNetIncome - cas - cass - 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": "'The 2026 thresholds are the official ones, derived from the 4,050 RON minimum wage in force on 1 January 2026 — the reference date that fixes them for the whole year, so July 2026 raising the minimum wage to 4,325 RON does not move them. Note the CASS ceiling rose from 60 to 72 minimum wages for 2026. What the model assumes is a PFA with no other income: someone who is also employed or a pensioner is subject to different CASS rules. Enter net income (revenue minus deductible expenses), not turnover. The norma de venit alternative, which taxes a fixed statutory amount per activity instead, is not modelled. Not tax advice.'"
            },
            {
              "id": "incomeField",
              "type": "numericField",
              "label": "Annual net income after expenses (RON)",
              "bind": "$.annualNetIncome",
              "placeholder": "60000"
            },
            {
              "id": "tiles",
              "type": "group",
              "layout": "horizontal",
              "components": [
                {
                  "id": "netTile",
                  "type": "statTile",
                  "label": "Net income / year",
                  "bind": "$.netIncome",
                  "format": "number"
                },
                {
                  "id": "casTile",
                  "type": "statTile",
                  "label": "CAS (pension)",
                  "bind": "$.cas",
                  "format": "number"
                },
                {
                  "id": "cassTile",
                  "type": "statTile",
                  "label": "CASS (health)",
                  "bind": "$.cass",
                  "format": "number"
                },
                {
                  "id": "taxTile",
                  "type": "statTile",
                  "label": "Income tax (10%)",
                  "bind": "$.incomeTax",
                  "format": "number"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "items": [
                {
                  "label": "ANAF — Persoane fizice autorizate: obligații fiscale",
                  "url": "https://static.anaf.ro/static/10/Anaf/Informatii_R/Persoane_fizice.htm",
                  "date": "2026-08-22"
                },
                {
                  "label": "Taxe PFA 2026: CAS, CASS și impozit — plafoane raportate la salariul minim de 4.050 lei, plafon CASS 72 de salarii",
                  "url": "https://contapp.ro/blog/taxe-pfa-2026/",
                  "date": "2026-08-22"
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "60,000 RON net income — above the CAS floor, below the upper step",
        "given": {
          "$.annualNetIncome": 60000
        },
        "expect": {
          "$.casBase": 48600,
          "$.cas": 12150,
          "$.cassBase": 60000,
          "$.cass": 6000,
          "$.incomeTax": 4185,
          "$.netIncome": 37665
        }
      },
      {
        "description": "30,000 RON net income — below the CAS floor, so no pension contribution at all",
        "given": {
          "$.annualNetIncome": 30000
        },
        "expect": {
          "$.casBase": 0,
          "$.cas": 0,
          "$.cassBase": 30000,
          "$.cass": 3000,
          "$.incomeTax": 2700,
          "$.netIncome": 24300
        }
      },
      {
        "description": "350,000 RON net income — CAS at its upper step, CASS at the 72-minimum-wage ceiling",
        "given": {
          "$.annualNetIncome": 350000
        },
        "expect": {
          "$.casBase": 97200,
          "$.cas": 24300,
          "$.cassBase": 291600,
          "$.cass": 29160,
          "$.incomeTax": 29654,
          "$.netIncome": 266886
        }
      }
    ]
  }
}
