{
  "$comment": "Machine-readable companion to https://valem.run/calculators/mexico/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/mexico/self-employed",
  "dataUrl": "https://valem.run/calculators/mexico/self-employed.json",
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "attribution": "Mexico resico model by Valem (https://valem.run/calculators/mexico/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/mexico/self-employed/verify",
  "country": "mexico",
  "countryName": "Mexico",
  "formula": "self-employed",
  "formulaName": "RESICO",
  "title": "RESICO — Mexico Freelancer Tax",
  "answer": "Your net income under Mexico’s RESICO is income collected minus ISR at a rate between 1% and 2.5% set by your monthly income — charged on the gross, with no expenses deducted and the monthly payment final.",
  "lang": "en",
  "currency": "MXN",
  "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": "SAT — Régimen Simplificado de Confianza para personas físicas",
      "url": "https://www.sat.gob.mx/personas/regimenes",
      "checked": "2026-08-22"
    },
    {
      "label": "Tabla ISR RESICO 2026 — tasas del 1% al 2.5% por ingreso mensual",
      "url": "https://cotizadorhipotecario.mx/referencia/tabla-isr-resico/",
      "checked": "2026-08-22"
    }
  ],
  "terminalOutput": "netIncome",
  "inputs": [
    {
      "name": "annualIncome",
      "type": "number",
      "label": "Annual income collected (MXN)",
      "minimum": 0
    }
  ],
  "outputs": [
    {
      "name": "monthlyIncome",
      "type": "number",
      "formula": "$round(annualIncome / 12, 2)"
    },
    {
      "name": "isrRatePercent",
      "type": "number",
      "label": "ISR rate (%)",
      "format": "number",
      "formula": "$round((monthlyIncome <= $const.m1 ? $const.r1 : (monthlyIncome <= $const.m2 ? $const.r2 : (monthlyIncome <= $const.m3 ? $const.r3 : (monthlyIncome <= $const.m4 ? $const.r4 : $const.r5)))) * 100, 3)"
    },
    {
      "name": "isr",
      "type": "number",
      "label": "ISR / year",
      "format": "number",
      "formula": "$round(annualIncome * isrRatePercent / 100, 2)"
    },
    {
      "name": "netIncome",
      "type": "number",
      "label": "Net income / year",
      "format": "number",
      "formula": "$round($max([0, annualIncome - isr]), 2)"
    }
  ],
  "testCases": [
    {
      "description": "600,000 MXN collected — a typical full-time freelancer",
      "given": {
        "annualIncome": 600000
      },
      "expect": {
        "monthlyIncome": 50000,
        "isrRatePercent": 1.1,
        "isr": 6600,
        "netIncome": 593400
      }
    },
    {
      "description": "240,000 MXN — the lowest 1% band",
      "given": {
        "annualIncome": 240000
      },
      "expect": {
        "monthlyIncome": 20000,
        "isrRatePercent": 1,
        "isr": 2400,
        "netIncome": 237600
      }
    },
    {
      "description": "3,000,000 MXN — near the ceiling of the regime",
      "given": {
        "annualIncome": 3000000
      },
      "expect": {
        "monthlyIncome": 250000,
        "isrRatePercent": 2.5,
        "isr": 75000,
        "netIncome": 2925000
      }
    }
  ],
  "spec": {
    "id": "self-employed-mexico",
    "version": "1.0.0",
    "schema": {
      "type": "object",
      "properties": {
        "annualIncome": {
          "type": "number",
          "minimum": 0
        },
        "monthlyIncome": {
          "type": "number",
          "readOnly": true
        },
        "isrRatePercent": {
          "type": "number",
          "readOnly": true
        },
        "isr": {
          "type": "number",
          "readOnly": true
        },
        "netIncome": {
          "type": "number",
          "readOnly": true
        }
      },
      "required": [
        "annualIncome"
      ]
    },
    "constants": {
      "m1": 25000,
      "m2": 50000,
      "m3": 83333,
      "m4": 208333,
      "m5": 291667,
      "r1": 0.01,
      "r2": 0.011,
      "r3": 0.015,
      "r4": 0.02,
      "r5": 0.025,
      "annualCap": 3500000
    },
    "defaultValues": [
      {
        "path": "$",
        "expr": "{ \"annualIncome\": 600000 }"
      }
    ],
    "derivations": [
      {
        "path": "$.monthlyIncome",
        "expr": "$round(annualIncome / 12, 2)"
      },
      {
        "path": "$.isrRatePercent",
        "expr": "$round((monthlyIncome <= $const.m1 ? $const.r1 : (monthlyIncome <= $const.m2 ? $const.r2 : (monthlyIncome <= $const.m3 ? $const.r3 : (monthlyIncome <= $const.m4 ? $const.r4 : $const.r5)))) * 100, 3)"
      },
      {
        "path": "$.isr",
        "expr": "$round(annualIncome * isrRatePercent / 100, 2)"
      },
      {
        "path": "$.netIncome",
        "expr": "$round($max([0, annualIncome - isr]), 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": "'RESICO is the lowest-rate regime in this catalog by a wide margin, and the reason is that it taxes gross collected income with no deductions at all — the rate is low because nothing comes off first. The rate band is set by MONTHLY income and the monthly payment is definitive, not an advance. This model spreads annual income evenly across twelve months to pick the band; an uneven year is charged month by month and will differ. IVA, IMSS contributions and the requirement to keep e-invoicing current are separate. Exceeding 3,500,000 MXN a year removes you from the regime. Not tax advice.'"
            },
            {
              "id": "inputField",
              "type": "numericField",
              "label": "Annual income collected (MXN)",
              "bind": "$.annualIncome",
              "placeholder": "600000"
            },
            {
              "id": "tiles",
              "type": "group",
              "layout": "horizontal",
              "components": [
                {
                  "id": "netIncomeTile",
                  "type": "statTile",
                  "label": "Net income / year",
                  "bind": "$.netIncome",
                  "format": "number"
                },
                {
                  "id": "isrRatePercentTile",
                  "type": "statTile",
                  "label": "ISR rate (%)",
                  "bind": "$.isrRatePercent",
                  "format": "number"
                },
                {
                  "id": "isrTile",
                  "type": "statTile",
                  "label": "ISR / year",
                  "bind": "$.isr",
                  "format": "number"
                }
              ]
            },
            {
              "id": "sources",
              "type": "sourceList",
              "label": "Sources",
              "items": [
                {
                  "label": "SAT — Régimen Simplificado de Confianza para personas físicas",
                  "url": "https://www.sat.gob.mx/personas/regimenes",
                  "date": "2026-08-22"
                },
                {
                  "label": "Tabla ISR RESICO 2026 — tasas del 1% al 2.5% por ingreso mensual",
                  "url": "https://cotizadorhipotecario.mx/referencia/tabla-isr-resico/",
                  "date": "2026-08-22"
                }
              ]
            }
          ]
        }
      ]
    },
    "tests": [
      {
        "description": "600,000 MXN collected — a typical full-time freelancer",
        "given": {
          "$.annualIncome": 600000
        },
        "expect": {
          "$.monthlyIncome": 50000,
          "$.isrRatePercent": 1.1,
          "$.isr": 6600,
          "$.netIncome": 593400
        }
      },
      {
        "description": "240,000 MXN — the lowest 1% band",
        "given": {
          "$.annualIncome": 240000
        },
        "expect": {
          "$.monthlyIncome": 20000,
          "$.isrRatePercent": 1,
          "$.isr": 2400,
          "$.netIncome": 237600
        }
      },
      {
        "description": "3,000,000 MXN — near the ceiling of the regime",
        "given": {
          "$.annualIncome": 3000000
        },
        "expect": {
          "$.monthlyIncome": 250000,
          "$.isrRatePercent": 2.5,
          "$.isr": 75000,
          "$.netIncome": 2925000
        }
      }
    ]
  }
}
