{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://taxnotes.ca/data/v1/schema.json",
  "title": "TaxNotes.ca tax data for one year",
  "description": "Every rate, bracket, credit amount and limit for one tax year, as published at /data/v1/<year>.json. Money is in Canadian dollars; rates are decimals (0.145 = 14.5%); {\"todo\": \"…\"} marks a figure not yet published. Each section’s meta.sources lists the official pages its figures come from.",
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "federal": {
      "$ref": "#/$defs/Federal"
    },
    "payroll": {
      "$ref": "#/$defs/Payroll"
    },
    "provinces": {
      "type": "object",
      "properties": {
        "AB": {
          "$ref": "#/$defs/Province"
        },
        "BC": {
          "$ref": "#/$defs/Province"
        },
        "MB": {
          "$ref": "#/$defs/Province"
        },
        "NB": {
          "$ref": "#/$defs/Province"
        },
        "NL": {
          "$ref": "#/$defs/Province"
        },
        "NS": {
          "$ref": "#/$defs/Province"
        },
        "NT": {
          "$ref": "#/$defs/Province"
        },
        "NU": {
          "$ref": "#/$defs/Province"
        },
        "ON": {
          "$ref": "#/$defs/Province"
        },
        "PE": {
          "$ref": "#/$defs/Province"
        },
        "SK": {
          "$ref": "#/$defs/Province"
        },
        "YT": {
          "$ref": "#/$defs/Province"
        }
      },
      "required": [
        "AB",
        "BC",
        "MB",
        "NB",
        "NL",
        "NS",
        "NT",
        "NU",
        "ON",
        "PE",
        "SK",
        "YT"
      ],
      "additionalProperties": false
    },
    "quebec": {
      "$ref": "#/$defs/Quebec"
    },
    "limits": {
      "$ref": "#/$defs/Limits"
    },
    "salesTax": {
      "$ref": "#/$defs/SalesTax"
    },
    "corporate": {
      "$ref": "#/$defs/Corporate"
    },
    "interest": {
      "$ref": "#/$defs/Interest"
    }
  },
  "required": [
    "year",
    "federal",
    "payroll",
    "provinces",
    "quebec",
    "limits",
    "salesTax",
    "corporate",
    "interest"
  ],
  "additionalProperties": false,
  "$defs": {
    "Federal": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "brackets": {
          "$ref": "#/$defs/Brackets"
        },
        "creditRate": {
          "$ref": "#/$defs/Rate"
        },
        "basicPersonal": {
          "type": "object",
          "properties": {
            "max": {
              "$ref": "#/$defs/Amount"
            },
            "phaseOut": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "start": {
                      "$ref": "#/$defs/Amount"
                    },
                    "end": {
                      "$ref": "#/$defs/Amount"
                    },
                    "min": {
                      "$ref": "#/$defs/Amount"
                    }
                  },
                  "required": [
                    "start",
                    "end",
                    "min"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "max",
            "phaseOut"
          ],
          "additionalProperties": false
        },
        "age": {
          "type": "object",
          "properties": {
            "max": {
              "$ref": "#/$defs/Amount"
            },
            "threshold": {
              "$ref": "#/$defs/Amount"
            },
            "reductionRate": {
              "$ref": "#/$defs/Rate"
            },
            "supplement": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Amount"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "max",
            "threshold",
            "reductionRate"
          ],
          "additionalProperties": false
        },
        "pensionMax": {
          "$ref": "#/$defs/Amount"
        },
        "canadaEmploymentMax": {
          "$ref": "#/$defs/Amount"
        },
        "homeBuyersMax": {
          "$ref": "#/$defs/Amount"
        },
        "homeAccessibilityMax": {
          "$ref": "#/$defs/Amount"
        },
        "multigenerationalRenovationMax": {
          "$ref": "#/$defs/Amount"
        },
        "tuition": {
          "type": "object",
          "properties": {
            "minimumFees": {
              "$ref": "#/$defs/Amount"
            },
            "transferMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "minimumFees",
            "transferMax"
          ],
          "additionalProperties": false
        },
        "scholarshipExemption": {
          "$ref": "#/$defs/Amount"
        },
        "canadaTrainingCredit": {
          "type": "object",
          "properties": {
            "annualAccumulation": {
              "$ref": "#/$defs/Amount"
            },
            "lifetimeMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "annualAccumulation",
            "lifetimeMax"
          ],
          "additionalProperties": false
        },
        "medical": {
          "type": "object",
          "properties": {
            "thresholdRate": {
              "$ref": "#/$defs/Rate"
            },
            "thresholdMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "thresholdRate",
            "thresholdMax"
          ],
          "additionalProperties": false
        },
        "donations": {
          "type": "object",
          "properties": {
            "firstTier": {
              "$ref": "#/$defs/Amount"
            },
            "firstTierRate": {
              "$ref": "#/$defs/Rate"
            },
            "aboveRate": {
              "$ref": "#/$defs/Rate"
            },
            "topRate": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Rate"
                },
                {
                  "type": "null"
                }
              ]
            },
            "topRateThreshold": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Amount"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "firstTier",
            "firstTierRate",
            "aboveRate",
            "topRate",
            "topRateThreshold"
          ],
          "additionalProperties": false
        },
        "dividends": {
          "type": "object",
          "properties": {
            "eligibleGrossUp": {
              "$ref": "#/$defs/Rate"
            },
            "nonEligibleGrossUp": {
              "$ref": "#/$defs/Rate"
            },
            "credit": {
              "type": "object",
              "properties": {
                "eligible": {
                  "$ref": "#/$defs/Rate"
                },
                "nonEligible": {
                  "$ref": "#/$defs/Rate"
                }
              },
              "required": [
                "eligible",
                "nonEligible"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "eligibleGrossUp",
            "nonEligibleGrossUp",
            "credit"
          ],
          "additionalProperties": false
        },
        "capitalGainsInclusion": {
          "$ref": "#/$defs/Rate"
        },
        "quebecAbatement": {
          "$ref": "#/$defs/Rate"
        },
        "topUpCredit": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "rate": {
                  "$ref": "#/$defs/Rate"
                },
                "threshold": {
                  "$ref": "#/$defs/Amount"
                },
                "description": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "rate",
                "threshold",
                "description"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "indexation": {
          "$ref": "#/$defs/Indexation"
        }
      },
      "required": [
        "meta",
        "brackets",
        "creditRate",
        "basicPersonal",
        "age",
        "pensionMax",
        "canadaEmploymentMax",
        "homeBuyersMax",
        "homeAccessibilityMax",
        "multigenerationalRenovationMax",
        "tuition",
        "scholarshipExemption",
        "canadaTrainingCredit",
        "medical",
        "donations",
        "dividends",
        "capitalGainsInclusion",
        "quebecAbatement",
        "topUpCredit",
        "indexation"
      ],
      "additionalProperties": false,
      "title": "Federal personal income tax",
      "description": "CRA figures for the federal return, including credit maximums and caps (home buyers’ amount, home accessibility, multigenerational renovation, tuition, Canada training credit)."
    },
    "Meta": {
      "type": "object",
      "properties": {
        "sources": {
          "minItems": 1,
          "type": "array",
          "items": {
            "$ref": "#/$defs/Source"
          }
        },
        "notes": {
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "unsupported": {
          "default": [],
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "sources",
        "notes",
        "unsupported"
      ],
      "additionalProperties": false,
      "description": "Where a section’s figures come from (`sources`), anything a reader should know (`notes`), and real rules the data does not model (`unsupported`)."
    },
    "Source": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "format": "uri"
        },
        "title": {
          "type": "string",
          "minLength": 1
        },
        "checked": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "url",
        "title",
        "checked"
      ],
      "additionalProperties": false,
      "description": "An official page the figures were taken from, and the date (YYYY-MM-DD) they were checked against it."
    },
    "Brackets": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "from": {
            "$ref": "#/$defs/Amount"
          },
          "rate": {
            "$ref": "#/$defs/Rate"
          }
        },
        "required": [
          "from",
          "rate"
        ],
        "additionalProperties": false
      },
      "description": "Tax brackets: each band’s lower bound (`from`, starting at 0) and its rate."
    },
    "Amount": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "$ref": "#/$defs/Todo"
        }
      ],
      "description": "Canadian dollars, or a Todo."
    },
    "Todo": {
      "type": "object",
      "properties": {
        "todo": {
          "type": "string",
          "minLength": 1
        }
      },
      "required": [
        "todo"
      ],
      "additionalProperties": false,
      "description": "A figure the CRA (or Revenu Québec) has not published yet; `todo` says what is missing."
    },
    "Rate": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 1
        },
        {
          "$ref": "#/$defs/Todo"
        }
      ],
      "description": "A decimal rate (0.145 = 14.5%), or a Todo."
    },
    "Indexation": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "rate": {
          "$ref": "#/$defs/Rate"
        }
      },
      "required": [
        "meta",
        "rate"
      ],
      "additionalProperties": false,
      "title": "Indexation",
      "description": "CRA’s yearly indexation increase for personal income tax and benefit amounts (federal), with its source."
    },
    "Payroll": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "cpp": {
          "type": "object",
          "properties": {
            "basicExemption": {
              "$ref": "#/$defs/Amount"
            },
            "ympe": {
              "$ref": "#/$defs/Amount"
            },
            "yampe": {
              "$ref": "#/$defs/Amount"
            },
            "employeeRate": {
              "$ref": "#/$defs/Rate"
            },
            "baseRate": {
              "$ref": "#/$defs/Rate"
            },
            "secondRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "basicExemption",
            "ympe",
            "yampe",
            "employeeRate",
            "baseRate",
            "secondRate"
          ],
          "additionalProperties": false
        },
        "qpp": {
          "type": "object",
          "properties": {
            "basicExemption": {
              "$ref": "#/$defs/Amount"
            },
            "ympe": {
              "$ref": "#/$defs/Amount"
            },
            "yampe": {
              "$ref": "#/$defs/Amount"
            },
            "employeeRate": {
              "$ref": "#/$defs/Rate"
            },
            "baseRate": {
              "$ref": "#/$defs/Rate"
            },
            "secondRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "basicExemption",
            "ympe",
            "yampe",
            "employeeRate",
            "baseRate",
            "secondRate"
          ],
          "additionalProperties": false
        },
        "ei": {
          "type": "object",
          "properties": {
            "maxInsurable": {
              "$ref": "#/$defs/Amount"
            },
            "rate": {
              "$ref": "#/$defs/Rate"
            },
            "quebecRate": {
              "$ref": "#/$defs/Rate"
            },
            "refundThreshold": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "maxInsurable",
            "rate",
            "quebecRate",
            "refundThreshold"
          ],
          "additionalProperties": false
        },
        "qpip": {
          "type": "object",
          "properties": {
            "maxInsurable": {
              "$ref": "#/$defs/Amount"
            },
            "employeeRate": {
              "$ref": "#/$defs/Rate"
            },
            "selfEmployedRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "maxInsurable",
            "employeeRate",
            "selfEmployedRate"
          ],
          "additionalProperties": false
        },
        "bonusFlatWithholding": {
          "type": "object",
          "properties": {
            "threshold": {
              "$ref": "#/$defs/Amount"
            },
            "rate": {
              "$ref": "#/$defs/Rate"
            },
            "rateQuebec": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "threshold",
            "rate",
            "rateQuebec"
          ],
          "additionalProperties": false
        },
        "newEmployerQuarterlyMwa": {
          "$ref": "#/$defs/Amount"
        }
      },
      "required": [
        "meta",
        "cpp",
        "qpp",
        "ei",
        "qpip",
        "bonusFlatWithholding",
        "newEmployerQuarterlyMwa"
      ],
      "additionalProperties": false,
      "title": "CPP, QPP, EI and QPIP",
      "description": "Employee contribution rates and earnings ceilings, plus two payroll thresholds: flat-rate withholding on bonuses and quarterly remitting for new employers."
    },
    "Province": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "code": {
          "type": "string",
          "enum": [
            "AB",
            "BC",
            "MB",
            "NB",
            "NL",
            "NS",
            "NT",
            "NU",
            "ON",
            "PE",
            "SK",
            "YT"
          ]
        },
        "brackets": {
          "$ref": "#/$defs/Brackets"
        },
        "creditRate": {
          "$ref": "#/$defs/Rate"
        },
        "basicPersonal": {
          "type": "object",
          "properties": {
            "max": {
              "$ref": "#/$defs/Amount"
            },
            "phaseOut": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "start": {
                      "$ref": "#/$defs/Amount"
                    },
                    "end": {
                      "$ref": "#/$defs/Amount"
                    },
                    "min": {
                      "$ref": "#/$defs/Amount"
                    }
                  },
                  "required": [
                    "start",
                    "end",
                    "min"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "max",
            "phaseOut"
          ],
          "additionalProperties": false
        },
        "age": {
          "type": "object",
          "properties": {
            "max": {
              "$ref": "#/$defs/Amount"
            },
            "threshold": {
              "$ref": "#/$defs/Amount"
            },
            "reductionRate": {
              "$ref": "#/$defs/Rate"
            },
            "supplement": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Amount"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "max",
            "threshold",
            "reductionRate"
          ],
          "additionalProperties": false
        },
        "pensionMax": {
          "$ref": "#/$defs/Amount"
        },
        "canadaEmploymentMax": {
          "anyOf": [
            {
              "$ref": "#/$defs/Amount"
            },
            {
              "type": "null"
            }
          ]
        },
        "medical": {
          "type": "object",
          "properties": {
            "thresholdRate": {
              "$ref": "#/$defs/Rate"
            },
            "thresholdMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "thresholdRate",
            "thresholdMax"
          ],
          "additionalProperties": false
        },
        "donations": {
          "type": "object",
          "properties": {
            "firstTier": {
              "$ref": "#/$defs/Amount"
            },
            "firstTierRate": {
              "$ref": "#/$defs/Rate"
            },
            "aboveRate": {
              "$ref": "#/$defs/Rate"
            },
            "topRate": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Rate"
                },
                {
                  "type": "null"
                }
              ]
            },
            "topRateThreshold": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Amount"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "firstTier",
            "firstTierRate",
            "aboveRate",
            "topRate",
            "topRateThreshold"
          ],
          "additionalProperties": false
        },
        "tuitionCredit": {
          "type": "boolean"
        },
        "dividendCredit": {
          "type": "object",
          "properties": {
            "eligible": {
              "$ref": "#/$defs/Rate"
            },
            "nonEligible": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "eligible",
            "nonEligible"
          ],
          "additionalProperties": false
        },
        "surtax": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "threshold": {
                    "$ref": "#/$defs/Amount"
                  },
                  "rate": {
                    "$ref": "#/$defs/Rate"
                  }
                },
                "required": [
                  "threshold",
                  "rate"
                ],
                "additionalProperties": false
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "healthPremium": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "from": {
                    "$ref": "#/$defs/Amount"
                  },
                  "base": {
                    "$ref": "#/$defs/Amount"
                  },
                  "rate": {
                    "$ref": "#/$defs/Rate"
                  },
                  "max": {
                    "$ref": "#/$defs/Amount"
                  }
                },
                "required": [
                  "from",
                  "base",
                  "rate",
                  "max"
                ],
                "additionalProperties": false
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "lowIncomeReduction": {
          "anyOf": [
            {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "linear"
                    },
                    "max": {
                      "$ref": "#/$defs/Amount"
                    },
                    "threshold": {
                      "$ref": "#/$defs/Amount"
                    },
                    "rate": {
                      "$ref": "#/$defs/Rate"
                    },
                    "basis": {
                      "type": "string",
                      "enum": [
                        "net",
                        "taxable"
                      ]
                    },
                    "ageAddOn": {
                      "$ref": "#/$defs/Amount"
                    }
                  },
                  "required": [
                    "kind",
                    "max",
                    "threshold",
                    "rate",
                    "basis"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "ontario"
                    },
                    "basicAmount": {
                      "$ref": "#/$defs/Amount"
                    }
                  },
                  "required": [
                    "kind",
                    "basicAmount"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "kind": {
                      "type": "string",
                      "const": "creditAmount"
                    },
                    "basic": {
                      "$ref": "#/$defs/Amount"
                    },
                    "ageAddOn": {
                      "$ref": "#/$defs/Amount"
                    },
                    "rate": {
                      "$ref": "#/$defs/Rate"
                    }
                  },
                  "required": [
                    "kind",
                    "basic",
                    "ageAddOn",
                    "rate"
                  ],
                  "additionalProperties": false
                }
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "supplementalCredit": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "baseAmount": {
                  "$ref": "#/$defs/Amount"
                },
                "rate": {
                  "$ref": "#/$defs/Rate"
                },
                "description": {
                  "type": "string",
                  "minLength": 1
                }
              },
              "required": [
                "baseAmount",
                "rate",
                "description"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "lowIncomeEmploymentCredit": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "rate": {
                  "$ref": "#/$defs/Rate"
                },
                "max": {
                  "$ref": "#/$defs/Amount"
                },
                "reductionRate": {
                  "$ref": "#/$defs/Rate"
                },
                "threshold": {
                  "$ref": "#/$defs/Amount"
                }
              },
              "required": [
                "rate",
                "max",
                "reductionRate",
                "threshold"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "childCareAmount": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "$ref": "#/$defs/Todo"
            }
          ]
        },
        "seniorTaxCredit": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "amount": {
                  "$ref": "#/$defs/Amount"
                },
                "incomeLimit": {
                  "$ref": "#/$defs/Amount"
                }
              },
              "required": [
                "amount",
                "incomeLimit"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "meta",
        "code",
        "brackets",
        "creditRate",
        "basicPersonal",
        "age",
        "pensionMax",
        "canadaEmploymentMax",
        "medical",
        "donations",
        "tuitionCredit",
        "dividendCredit",
        "surtax",
        "healthPremium",
        "lowIncomeReduction"
      ],
      "additionalProperties": false,
      "title": "Provincial or territorial income tax",
      "description": "CRA figures for one province or territory’s form 428 (all but Quebec)."
    },
    "Quebec": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "brackets": {
          "$ref": "#/$defs/Brackets"
        },
        "creditRate": {
          "$ref": "#/$defs/Rate"
        },
        "basicPersonal": {
          "$ref": "#/$defs/Amount"
        },
        "workerDeduction": {
          "type": "object",
          "properties": {
            "rate": {
              "$ref": "#/$defs/Rate"
            },
            "max": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "rate",
            "max"
          ],
          "additionalProperties": false
        },
        "scheduleB": {
          "type": "object",
          "properties": {
            "seniorAge": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "age": {
              "$ref": "#/$defs/Amount"
            },
            "livingAlone": {
              "$ref": "#/$defs/Amount"
            },
            "retirementIncomeFactor": {
              "anyOf": [
                {
                  "type": "number",
                  "minimum": 0
                },
                {
                  "$ref": "#/$defs/Todo"
                }
              ]
            },
            "retirementIncomeMax": {
              "$ref": "#/$defs/Amount"
            },
            "familyIncomeThreshold": {
              "$ref": "#/$defs/Amount"
            },
            "reductionRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "seniorAge",
            "age",
            "livingAlone",
            "retirementIncomeFactor",
            "retirementIncomeMax",
            "familyIncomeThreshold",
            "reductionRate"
          ],
          "additionalProperties": false
        },
        "medical": {
          "type": "object",
          "properties": {
            "thresholdRate": {
              "$ref": "#/$defs/Rate"
            },
            "creditRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "thresholdRate",
            "creditRate"
          ],
          "additionalProperties": false
        },
        "careerExtension": {
          "type": "object",
          "properties": {
            "minAge": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "exclusion": {
              "$ref": "#/$defs/Amount"
            },
            "maxEligible": {
              "$ref": "#/$defs/Amount"
            },
            "creditRate": {
              "$ref": "#/$defs/Rate"
            },
            "reductionThreshold": {
              "$ref": "#/$defs/Amount"
            },
            "reductionRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "minAge",
            "exclusion",
            "maxEligible",
            "creditRate",
            "reductionThreshold",
            "reductionRate"
          ],
          "additionalProperties": false
        },
        "donations": {
          "type": "object",
          "properties": {
            "firstTier": {
              "$ref": "#/$defs/Amount"
            },
            "firstTierRate": {
              "$ref": "#/$defs/Rate"
            },
            "aboveRate": {
              "$ref": "#/$defs/Rate"
            },
            "topRate": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Rate"
                },
                {
                  "type": "null"
                }
              ]
            },
            "topRateThreshold": {
              "anyOf": [
                {
                  "$ref": "#/$defs/Amount"
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "firstTier",
            "firstTierRate",
            "aboveRate",
            "topRate",
            "topRateThreshold"
          ],
          "additionalProperties": false
        },
        "unionDuesRate": {
          "$ref": "#/$defs/Rate"
        },
        "tuition": {
          "type": "object",
          "properties": {
            "rate": {
              "$ref": "#/$defs/Rate"
            },
            "minimum": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "rate",
            "minimum"
          ],
          "additionalProperties": false
        },
        "dividends": {
          "type": "object",
          "properties": {
            "eligibleGrossUp": {
              "$ref": "#/$defs/Rate"
            },
            "nonEligibleGrossUp": {
              "$ref": "#/$defs/Rate"
            },
            "creditOnActual": {
              "type": "object",
              "properties": {
                "eligible": {
                  "$ref": "#/$defs/Rate"
                },
                "nonEligible": {
                  "$ref": "#/$defs/Rate"
                }
              },
              "required": [
                "eligible",
                "nonEligible"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "eligibleGrossUp",
            "nonEligibleGrossUp",
            "creditOnActual"
          ],
          "additionalProperties": false
        },
        "capitalGainsInclusion": {
          "$ref": "#/$defs/Rate"
        },
        "qpipSelfEmployedDeduction": {
          "$ref": "#/$defs/Rate"
        },
        "healthServicesFund": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "from": {
                "$ref": "#/$defs/Amount"
              },
              "base": {
                "$ref": "#/$defs/Amount"
              },
              "rate": {
                "$ref": "#/$defs/Rate"
              },
              "max": {
                "$ref": "#/$defs/Amount"
              }
            },
            "required": [
              "from",
              "base",
              "rate",
              "max"
            ],
            "additionalProperties": false
          }
        },
        "instalmentThreshold": {
          "$ref": "#/$defs/Amount"
        },
        "homeBuyersMax": {
          "$ref": "#/$defs/Amount"
        },
        "accessToHomeownershipMax": {
          "anyOf": [
            {
              "$ref": "#/$defs/Amount"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "required": [
        "meta",
        "brackets",
        "creditRate",
        "basicPersonal",
        "workerDeduction",
        "scheduleB",
        "medical",
        "careerExtension",
        "donations",
        "unionDuesRate",
        "tuition",
        "dividends",
        "capitalGainsInclusion",
        "qpipSelfEmployedDeduction",
        "healthServicesFund",
        "instalmentThreshold",
        "homeBuyersMax",
        "accessToHomeownershipMax"
      ],
      "additionalProperties": false,
      "title": "Quebec income tax",
      "description": "Revenu Québec figures for the TP-1 return."
    },
    "Limits": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "rrsp": {
          "type": "object",
          "properties": {
            "dollarLimit": {
              "$ref": "#/$defs/Amount"
            },
            "earnedIncomeRate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "dollarLimit",
            "earnedIncomeRate"
          ],
          "additionalProperties": false
        },
        "tfsa": {
          "type": "object",
          "properties": {
            "annualLimit": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "annualLimit"
          ],
          "additionalProperties": false
        },
        "fhsa": {
          "type": "object",
          "properties": {
            "annualLimit": {
              "$ref": "#/$defs/Amount"
            },
            "lifetimeLimit": {
              "$ref": "#/$defs/Amount"
            },
            "carryForwardMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "annualLimit",
            "lifetimeLimit",
            "carryForwardMax"
          ],
          "additionalProperties": false
        },
        "oasRecovery": {
          "type": "object",
          "properties": {
            "threshold": {
              "$ref": "#/$defs/Amount"
            },
            "rate": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "threshold",
            "rate"
          ],
          "additionalProperties": false
        },
        "gstSmallSupplierThreshold": {
          "$ref": "#/$defs/Amount"
        },
        "capitalGainsExemption": {
          "$ref": "#/$defs/Amount"
        },
        "instalments": {
          "type": "object",
          "properties": {
            "threshold": {
              "$ref": "#/$defs/Amount"
            },
            "thresholdQuebec": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "threshold",
            "thresholdQuebec"
          ],
          "additionalProperties": false
        },
        "restrictedFarmLoss": {
          "type": "object",
          "properties": {
            "fullyDeductible": {
              "$ref": "#/$defs/Amount"
            },
            "maxDeduction": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "fullyDeductible",
            "maxDeduction"
          ],
          "additionalProperties": false
        },
        "securityOptions": {
          "type": "object",
          "properties": {
            "vestingLimit": {
              "$ref": "#/$defs/Amount"
            },
            "employerRevenueThreshold": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "vestingLimit",
            "employerRevenueThreshold"
          ],
          "additionalProperties": false
        },
        "foreignProperty": {
          "type": "object",
          "properties": {
            "t1135Threshold": {
              "$ref": "#/$defs/Amount"
            },
            "t1135SimplifiedMax": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "t1135Threshold",
            "t1135SimplifiedMax"
          ],
          "additionalProperties": false
        },
        "emigrantPropertyThreshold": {
          "$ref": "#/$defs/Amount"
        },
        "personalUsePropertyMinimum": {
          "$ref": "#/$defs/Amount"
        },
        "deathBenefitExemption": {
          "$ref": "#/$defs/Amount"
        },
        "cppLumpSumPriorYears": {
          "$ref": "#/$defs/Amount"
        },
        "tradespersonToolsMax": {
          "$ref": "#/$defs/Amount"
        },
        "employeeGifts": {
          "type": "object",
          "properties": {
            "nonCashAnnual": {
              "$ref": "#/$defs/Amount"
            },
            "longService": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "nonCashAnnual",
            "longService"
          ],
          "additionalProperties": false
        },
        "retiringAllowance": {
          "type": "object",
          "properties": {
            "perYearBefore1996": {
              "$ref": "#/$defs/Amount"
            },
            "extraPerYearBefore1989": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "perYearBefore1996",
            "extraPerYearBefore1989"
          ],
          "additionalProperties": false
        },
        "movingVacantHomeMax": {
          "$ref": "#/$defs/Amount"
        },
        "automobile": {
          "type": "object",
          "properties": {
            "ccaCeiling": {
              "$ref": "#/$defs/Amount"
            },
            "zevCcaCeiling": {
              "$ref": "#/$defs/Amount"
            },
            "interestPerMonth": {
              "$ref": "#/$defs/Amount"
            },
            "leasePerMonth": {
              "$ref": "#/$defs/Amount"
            },
            "allowanceFirst5000Km": {
              "$ref": "#/$defs/Amount"
            },
            "allowanceAfter5000Km": {
              "$ref": "#/$defs/Amount"
            },
            "allowanceTerritoriesFirst5000Km": {
              "$ref": "#/$defs/Amount"
            },
            "allowanceTerritoriesAfter5000Km": {
              "$ref": "#/$defs/Amount"
            },
            "operatingCostBenefit": {
              "$ref": "#/$defs/Amount"
            },
            "operatingCostBenefitSales": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "ccaCeiling",
            "zevCcaCeiling",
            "interestPerMonth",
            "leasePerMonth",
            "allowanceFirst5000Km",
            "allowanceAfter5000Km",
            "allowanceTerritoriesFirst5000Km",
            "allowanceTerritoriesAfter5000Km",
            "operatingCostBenefit",
            "operatingCostBenefitSales"
          ],
          "additionalProperties": false
        },
        "rrifMinimum": {
          "type": "object",
          "properties": {
            "meta": {
              "$ref": "#/$defs/Meta"
            },
            "formulaAge": {
              "type": "integer",
              "minimum": 1,
              "maximum": 9007199254740991
            },
            "factors": {
              "minItems": 1,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "age": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "qualifying": {
                    "$ref": "#/$defs/Rate"
                  },
                  "other": {
                    "$ref": "#/$defs/Rate"
                  }
                },
                "required": [
                  "age",
                  "qualifying",
                  "other"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "meta",
            "formulaAge",
            "factors"
          ],
          "additionalProperties": false
        },
        "withholding": {
          "type": "object",
          "properties": {
            "meta": {
              "$ref": "#/$defs/Meta"
            },
            "lumpSum": {
              "minItems": 1,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "upTo": {
                    "anyOf": [
                      {
                        "$ref": "#/$defs/Amount"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "rate": {
                    "$ref": "#/$defs/Rate"
                  }
                },
                "required": [
                  "upTo",
                  "rate"
                ],
                "additionalProperties": false
              }
            },
            "lumpSumQuebec": {
              "minItems": 1,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "upTo": {
                    "anyOf": [
                      {
                        "$ref": "#/$defs/Amount"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "rate": {
                    "$ref": "#/$defs/Rate"
                  }
                },
                "required": [
                  "upTo",
                  "rate"
                ],
                "additionalProperties": false
              }
            },
            "quebecSinglePayment": {
              "$ref": "#/$defs/Rate"
            }
          },
          "required": [
            "meta",
            "lumpSum",
            "lumpSumQuebec",
            "quebecSinglePayment"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "meta",
        "rrsp",
        "tfsa",
        "fhsa",
        "oasRecovery",
        "gstSmallSupplierThreshold",
        "capitalGainsExemption",
        "instalments",
        "restrictedFarmLoss",
        "securityOptions",
        "foreignProperty",
        "emigrantPropertyThreshold",
        "personalUsePropertyMinimum",
        "deathBenefitExemption",
        "cppLumpSumPriorYears",
        "tradespersonToolsMax",
        "employeeGifts",
        "retiringAllowance",
        "movingVacantHomeMax",
        "automobile",
        "rrifMinimum",
        "withholding"
      ],
      "additionalProperties": false,
      "title": "Registered plans and other limits",
      "description": "RRSP, TFSA and FHSA limits, the OAS recovery threshold, the GST/HST small supplier threshold, the lifetime capital gains exemption, the RRIF minimum amount factors, the tax withheld on RRSP withdrawals and RRIF amounts above the minimum, and other limits and thresholds (instalments, automobile expenses and allowances, foreign property reporting, stock options and more)."
    },
    "SalesTax": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "gst": {
          "$ref": "#/$defs/Rate"
        },
        "provinces": {
          "minItems": 13,
          "maxItems": 13,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "AB",
                  "BC",
                  "MB",
                  "NB",
                  "NL",
                  "NS",
                  "NT",
                  "NU",
                  "ON",
                  "PE",
                  "SK",
                  "YT",
                  "QC"
                ]
              },
              "hst": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Rate"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pst": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Rate"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "pstName": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "code",
              "hst",
              "pst",
              "pstName"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "meta",
        "gst",
        "provinces"
      ],
      "additionalProperties": false,
      "title": "Sales tax",
      "description": "GST, and HST or PST/RST/QST by province."
    },
    "Corporate": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "federal": {
          "type": "object",
          "properties": {
            "smallBusinessRate": {
              "$ref": "#/$defs/Rate"
            },
            "generalRate": {
              "$ref": "#/$defs/Rate"
            },
            "smallBusinessLimit": {
              "$ref": "#/$defs/Amount"
            }
          },
          "required": [
            "smallBusinessRate",
            "generalRate",
            "smallBusinessLimit"
          ],
          "additionalProperties": false
        },
        "provinces": {
          "minItems": 13,
          "maxItems": 13,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "smallBusinessRate": {
                "$ref": "#/$defs/Rate"
              },
              "generalRate": {
                "$ref": "#/$defs/Rate"
              },
              "smallBusinessLimit": {
                "$ref": "#/$defs/Amount"
              },
              "code": {
                "type": "string",
                "enum": [
                  "AB",
                  "BC",
                  "MB",
                  "NB",
                  "NL",
                  "NS",
                  "NT",
                  "NU",
                  "ON",
                  "PE",
                  "SK",
                  "YT",
                  "QC"
                ]
              }
            },
            "required": [
              "smallBusinessRate",
              "generalRate",
              "smallBusinessLimit",
              "code"
            ],
            "additionalProperties": false
          }
        },
        "instalmentThreshold": {
          "$ref": "#/$defs/Amount"
        }
      },
      "required": [
        "meta",
        "federal",
        "provinces",
        "instalmentThreshold"
      ],
      "additionalProperties": false,
      "title": "Corporate income tax",
      "description": "Net small business and general rates, business limits, and the instalment threshold."
    },
    "Interest": {
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/$defs/Meta"
        },
        "quarters": {
          "minItems": 4,
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "quarter": {
                "type": "integer",
                "minimum": 1,
                "maximum": 4
              },
              "overdue": {
                "$ref": "#/$defs/Rate"
              },
              "corporateOverpayment": {
                "$ref": "#/$defs/Rate"
              },
              "nonCorporateOverpayment": {
                "$ref": "#/$defs/Rate"
              },
              "taxableBenefit": {
                "$ref": "#/$defs/Rate"
              },
              "pertinentLoan": {
                "$ref": "#/$defs/Rate"
              }
            },
            "required": [
              "quarter",
              "overdue",
              "corporateOverpayment",
              "nonCorporateOverpayment",
              "taxableBenefit",
              "pertinentLoan"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "meta",
        "quarters"
      ],
      "additionalProperties": false,
      "title": "CRA prescribed interest rates",
      "description": "Annual rates for each calendar quarter: on overdue taxes, on corporate and non-corporate overpayments, for taxable benefits from interest-free and low-interest loans, and for corporate pertinent loans."
    }
  }
}
