Deterministic Canadian CCPC rate stack: small business deduction and grinds, Part IV, RDTOH.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free diagnostic pass over the same input as ccpcrate_resolve: which layers run, the defaults the engine would apply, every warning with its meaning (grind binding, provincial asymmetries, missing inputs), the rule rows in force for the year with sources and verification status, the open verifications, and what the paid computation would return. Contains no computed amounts — the numbers are in ccpcrate_resolve.
Province of the permanent establishment (two-letter code)
Québec inputs (CO-771)
Capital dividend account opening balance (returns cda_closing)
Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters
Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it
Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation
Holdco: deductible property expenses of the year (total)
T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed
Holdco: net income per financial statements
Holdco: property income other than dividends and capital-gains dividends
Sch 6: taxable capital gains (the included half)
T2 line 400: income from an active business carried on in Canada
Sch 4 Part 6: opening balances by year of origin, e.g. {"2011": 263564}
Share of taxable income allocated to the province (Reg. 402). Default 1
Capital-gains dividends received (full amount; half to CDA)
Eligible dividends paid (designated) in the year
Sch 6: allowable capital losses of the year
Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero
T2 line 445: foreign investment income
Sch 4: non-capital loss pool at the start of the year
Non-eligible taxable dividends paid in the year
T2 line 636: foreign business income tax credit
T2 line 440: aggregate investment income (s.129(4))
Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund
T2 line 632: foreign non-business income tax credit
T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M
How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them
Eligible taxable dividends from non-connected payers (Part IV → ERDTOH)
Non-capital losses claimed against Part I income
Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount
Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH)
Free diagnostic pass over the same input as ccpcrate_resolve: which layers run, the defaults the engine would apply, every warning with its meaning (grind binding, provincial asymmetries, missing inputs), the rule rows in force for the year with sources and verification status, the open verifications, and what the paid computation would return. Contains no computed amounts — the numbers are in ccpcrate_resolve.
| Argument | Type | Description |
|---|---|---|
| qc | object | Québec inputs (CO-771) |
| taxYear* | object | |
| province* | string | Province of the permanent establishment (two-letter code) |
| cdaOpening | number | Capital dividend account opening balance (returns cda_closing) |
| rdtohOpening | object | Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters |
| taxableIncome | number | Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it |
| netIncomeForTax | number | Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation |
| propertyExpenses | number | Holdco: deductible property expenses of the year (total) |
| groupAaiiPriorYear | number | T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed |
| netIncomeAccounting | number | Holdco: net income per financial statements |
| otherPropertyIncome | number | Holdco: property income other than dividends and capital-gains dividends |
| taxableCapitalGains | number | Sch 6: taxable capital gains (the included half) |
| activeBusinessIncome | number | T2 line 400: income from an active business carried on in Canada |
| lossesByYearOfOrigin | object | Sch 4 Part 6: opening balances by year of origin, e.g. {"2011": 263564} |
| provincialProportion | number | Share of taxable income allocated to the province (Reg. 402). Default 1 |
| capitalGainsDividends | number | Capital-gains dividends received (full amount; half to CDA) |
| dividendsPaidEligible | number | Eligible dividends paid (designated) in the year |
| allowableCapitalLosses | number | Sch 6: allowable capital losses of the year |
| businessLimitAllocated | number | Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero |
| foreignInvestmentIncome | number | T2 line 445: foreign investment income |
| nonCapitalLossesOpening | number | Sch 4: non-capital loss pool at the start of the year |
| dividendsPaidNonEligible | number | Non-eligible taxable dividends paid in the year |
| foreignBusinessTaxCredit | number | T2 line 636: foreign business income tax credit |
| aggregateInvestmentIncome | number | T2 line 440: aggregate investment income (s.129(4)) |
| dividendsReceivedConnected | array | Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund |
| foreignNonBusinessTaxCredit | number | T2 line 632: foreign non-business income tax credit |
| taxableCapitalGroupPriorYear | number | T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M |
| dividendsPaidOfWhichConnected | number | How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them |
| dividendsReceivedPortfolioEligible | number | Eligible taxable dividends from non-connected payers (Part IV → ERDTOH) |
| nonCapitalLossesClaimedAgainstPartI | number | Non-capital losses claimed against Part I income |
| nonCapitalLossesClaimedAgainstPartIV | number | Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount |
| dividendsReceivedPortfolioNonEligible | number | Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taxYear",
"province"
],
"properties": {
"qc": {
"type": "object",
"properties": {
"instalmentsPaid": {
"type": "number",
"minimum": 0,
"description": "Acomptes provisionnels paid (CO-17 line 440) — enables the balance lines"
},
"taxableIncomeQc": {
"type": "number",
"description": "CO-17 taxable income when it differs from federal"
},
"hours07aCurrentYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07a: remunerated hours, current year (required with 07b for the CO-771 layer)"
},
"plafondGroupAllocated": {
"type": "number",
"minimum": 0,
"description": "CO-771 plafond allocated to this corporation (defaults to businessLimitAllocated)"
},
"hours07bGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07b: remunerated hours, associated group, prior year"
},
"capitalVerseGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "Capital versé of the associated group, prior year (CO-17 line 426a)"
}
},
"description": "Québec inputs (CO-771)"
},
"taxYear": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day of the taxation year"
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day of the taxation year"
}
}
},
"province": {
"enum": [
"AB",
"BC",
"MB",
"NB",
"NL",
"NS",
"NT",
"NU",
"ON",
"PE",
"QC",
"SK",
"YT"
],
"type": "string",
"description": "Province of the permanent establishment (two-letter code)"
},
"cdaOpening": {
"type": "number",
"minimum": 0,
"description": "Capital dividend account opening balance (returns cda_closing)"
},
"rdtohOpening": {
"type": "object",
"properties": {
"erdtohLine520": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing ERDTOH, T2 line 530 (printed before that year's refund)"
},
"nerdtohLine535": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing NERDTOH, T2 line 545"
},
"erdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of ERDTOH (line 570)"
},
"nerdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of NERDTOH (line 575)"
}
},
"description": "Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters"
},
"taxableIncome": {
"type": "number",
"description": "Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it"
},
"netIncomeForTax": {
"type": "number",
"description": "Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation"
},
"propertyExpenses": {
"type": "number",
"minimum": 0,
"description": "Holdco: deductible property expenses of the year (total)"
},
"groupAaiiPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed"
},
"netIncomeAccounting": {
"type": "number",
"description": "Holdco: net income per financial statements"
},
"otherPropertyIncome": {
"type": "number",
"minimum": 0,
"description": "Holdco: property income other than dividends and capital-gains dividends"
},
"taxableCapitalGains": {
"type": "number",
"minimum": 0,
"description": "Sch 6: taxable capital gains (the included half)"
},
"activeBusinessIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 400: income from an active business carried on in Canada"
},
"lossesByYearOfOrigin": {
"type": "object",
"description": "Sch 4 Part 6: opening balances by year of origin, e.g. {\"2011\": 263564}",
"propertyNames": {
"type": "string",
"pattern": "^\\d{4}$"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"provincialProportion": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of taxable income allocated to the province (Reg. 402). Default 1"
},
"capitalGainsDividends": {
"type": "number",
"minimum": 0,
"description": "Capital-gains dividends received (full amount; half to CDA)"
},
"dividendsPaidEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible dividends paid (designated) in the year"
},
"allowableCapitalLosses": {
"type": "number",
"minimum": 0,
"description": "Sch 6: allowable capital losses of the year"
},
"businessLimitAllocated": {
"type": "number",
"minimum": 0,
"description": "Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero"
},
"foreignInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 445: foreign investment income"
},
"nonCapitalLossesOpening": {
"type": "number",
"minimum": 0,
"description": "Sch 4: non-capital loss pool at the start of the year"
},
"dividendsPaidNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends paid in the year"
},
"foreignBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 636: foreign business income tax credit"
},
"aggregateInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 440: aggregate investment income (s.129(4))"
},
"dividendsReceivedConnected": {
"type": "array",
"items": {
"type": "object",
"required": [
"amount"
],
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"description": "Taxable dividend received from the connected corporation"
},
"payerId": {
"type": "string",
"minLength": 1,
"description": "Id of the paying corporation when it is a member of the same ccpcrate_group call: its refund and total dividends paid are then taken from its own computation"
},
"cascadeShare": {
"type": "number",
"minimum": 0,
"description": "Precomputed share of the payer's refund, when already known (overrides the two fields above)"
},
"payerDividendRefund": {
"type": "number",
"minimum": 0,
"description": "The payer's dividend refund for the year it paid the dividend (s.186(1)(b)); 0 = no refund → no cascade; omitted = unknown → cascade withheld with a warning"
},
"payerTotalDividendsPaid": {
"type": "number",
"description": "Total taxable dividends the payer paid that year (denominator of the recipient's share)",
"exclusiveMinimum": 0
}
}
},
"description": "Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund"
},
"foreignNonBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 632: foreign non-business income tax credit"
},
"taxableCapitalGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M"
},
"dividendsPaidOfWhichConnected": {
"type": "number",
"minimum": 0,
"description": "How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them"
},
"dividendsReceivedPortfolioEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible taxable dividends from non-connected payers (Part IV → ERDTOH)"
},
"nonCapitalLossesClaimedAgainstPartI": {
"type": "number",
"minimum": 0,
"description": "Non-capital losses claimed against Part I income"
},
"nonCapitalLossesClaimedAgainstPartIV": {
"type": "number",
"minimum": 0,
"description": "Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount"
},
"dividendsReceivedPortfolioNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH)"
}
}
}Compute a whole associated group (s.256) in one call: federal line 417 as the sum of the members' prior-year adjusted investment income, the Schedule 23 allocation of the business limit, and every member's return in payer-before-recipient order so that a connected dividend's Part IV under s.186(1)(b) is filled in from the payer's own refund instead of being asked for. Returns each member's lines plus what the grind costs the group and which member causes it — the case a single-corporation computation cannot show. 0.25 USDC covers the group and its first 2 computed members, then 0.05 per additional member, never more than 1. Members that only contribute line 417 are free.
| Argument | Type | Description |
|---|---|---|
| members* | array | The associated corporations (s.256). A member with no input still counts toward line 417. Order does not matter — the engine computes payers before recipients |
| taxYear | object | The group's taxation year, used to read the statutory business limit when no member computes |
| groupAaiiPriorYear | number | Federal line 417 for the group, when the per-member figures are not available. A member's own input.groupAaiiPriorYear still wins |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"members"
],
"properties": {
"members": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "Your label for this corporation (any string); connected dividends refer to it by this id"
},
"input": {
"type": "object",
"required": [
"taxYear",
"province"
],
"properties": {
"qc": {
"type": "object",
"properties": {
"instalmentsPaid": {
"type": "number",
"minimum": 0,
"description": "Acomptes provisionnels paid (CO-17 line 440) — enables the balance lines"
},
"taxableIncomeQc": {
"type": "number",
"description": "CO-17 taxable income when it differs from federal"
},
"hours07aCurrentYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07a: remunerated hours, current year (required with 07b for the CO-771 layer)"
},
"plafondGroupAllocated": {
"type": "number",
"minimum": 0,
"description": "CO-771 plafond allocated to this corporation (defaults to businessLimitAllocated)"
},
"hours07bGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07b: remunerated hours, associated group, prior year"
},
"capitalVerseGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "Capital versé of the associated group, prior year (CO-17 line 426a)"
}
},
"description": "Québec inputs (CO-771)"
},
"taxYear": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day of the taxation year"
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day of the taxation year"
}
}
},
"province": {
"enum": [
"AB",
"BC",
"MB",
"NB",
"NL",
"NS",
"NT",
"NU",
"ON",
"PE",
"QC",
"SK",
"YT"
],
"type": "string",
"description": "Province of the permanent establishment (two-letter code)"
},
"cdaOpening": {
"type": "number",
"minimum": 0,
"description": "Capital dividend account opening balance (returns cda_closing)"
},
"rdtohOpening": {
"type": "object",
"properties": {
"erdtohLine520": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing ERDTOH, T2 line 530 (printed before that year's refund)"
},
"nerdtohLine535": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing NERDTOH, T2 line 545"
},
"erdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of ERDTOH (line 570)"
},
"nerdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of NERDTOH (line 575)"
}
},
"description": "Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters"
},
"taxableIncome": {
"type": "number",
"description": "Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it"
},
"netIncomeForTax": {
"type": "number",
"description": "Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation"
},
"propertyExpenses": {
"type": "number",
"minimum": 0,
"description": "Holdco: deductible property expenses of the year (total)"
},
"groupAaiiPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed"
},
"netIncomeAccounting": {
"type": "number",
"description": "Holdco: net income per financial statements"
},
"otherPropertyIncome": {
"type": "number",
"minimum": 0,
"description": "Holdco: property income other than dividends and capital-gains dividends"
},
"taxableCapitalGains": {
"type": "number",
"minimum": 0,
"description": "Sch 6: taxable capital gains (the included half)"
},
"activeBusinessIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 400: income from an active business carried on in Canada"
},
"lossesByYearOfOrigin": {
"type": "object",
"description": "Sch 4 Part 6: opening balances by year of origin, e.g. {\"2011\": 263564}",
"propertyNames": {
"type": "string",
"pattern": "^\\d{4}$"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"provincialProportion": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of taxable income allocated to the province (Reg. 402). Default 1"
},
"capitalGainsDividends": {
"type": "number",
"minimum": 0,
"description": "Capital-gains dividends received (full amount; half to CDA)"
},
"dividendsPaidEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible dividends paid (designated) in the year"
},
"allowableCapitalLosses": {
"type": "number",
"minimum": 0,
"description": "Sch 6: allowable capital losses of the year"
},
"businessLimitAllocated": {
"type": "number",
"minimum": 0,
"description": "Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero"
},
"foreignInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 445: foreign investment income"
},
"nonCapitalLossesOpening": {
"type": "number",
"minimum": 0,
"description": "Sch 4: non-capital loss pool at the start of the year"
},
"dividendsPaidNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends paid in the year"
},
"foreignBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 636: foreign business income tax credit"
},
"aggregateInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 440: aggregate investment income (s.129(4))"
},
"dividendsReceivedConnected": {
"type": "array",
"items": {
"type": "object",
"required": [
"amount"
],
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"description": "Taxable dividend received from the connected corporation"
},
"payerId": {
"type": "string",
"minLength": 1,
"description": "Id of the paying corporation when it is a member of the same ccpcrate_group call: its refund and total dividends paid are then taken from its own computation"
},
"cascadeShare": {
"type": "number",
"minimum": 0,
"description": "Precomputed share of the payer's refund, when already known (overrides the two fields above)"
},
"payerDividendRefund": {
"type": "number",
"minimum": 0,
"description": "The payer's dividend refund for the year it paid the dividend (s.186(1)(b)); 0 = no refund → no cascade; omitted = unknown → cascade withheld with a warning"
},
"payerTotalDividendsPaid": {
"type": "number",
"description": "Total taxable dividends the payer paid that year (denominator of the recipient's share)",
"exclusiveMinimum": 0
}
}
},
"description": "Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund"
},
"foreignNonBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 632: foreign non-business income tax credit"
},
"taxableCapitalGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M"
},
"dividendsPaidOfWhichConnected": {
"type": "number",
"minimum": 0,
"description": "How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them"
},
"dividendsReceivedPortfolioEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible taxable dividends from non-connected payers (Part IV → ERDTOH)"
},
"nonCapitalLossesClaimedAgainstPartI": {
"type": "number",
"minimum": 0,
"description": "Non-capital losses claimed against Part I income"
},
"nonCapitalLossesClaimedAgainstPartIV": {
"type": "number",
"minimum": 0,
"description": "Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount"
},
"dividendsReceivedPortfolioNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH)"
}
},
"description": "This member's own taxation year. Omit for a member that only contributes to line 417"
},
"priorYearAaii": {
"type": "number",
"minimum": 0,
"description": "This member's adjusted aggregate investment income (Sch 7 line 745) for its taxation year ending in the preceding calendar year — its contribution to every member's line 417"
}
}
},
"examples": [
[
{
"id": "holdco",
"priorYearAaii": 75000
},
{
"id": "opco",
"input": {
"taxYear": {
"end": "2025-12-31",
"start": "2025-01-01"
},
"province": "ON",
"taxableIncome": 500000,
"activeBusinessIncome": 500000,
"businessLimitAllocated": 500000
},
"priorYearAaii": 0
}
],
[
{
"id": "opco",
"input": {
"taxYear": {
"end": "2025-12-31",
"start": "2025-01-01"
},
"province": "ON",
"taxableIncome": 400000,
"activeBusinessIncome": 340000,
"businessLimitAllocated": 400000,
"dividendsPaidNonEligible": 100000,
"aggregateInvestmentIncome": 60000,
"dividendsPaidOfWhichConnected": 60000
},
"priorYearAaii": 55000
},
{
"id": "holdco",
"input": {
"taxYear": {
"end": "2025-12-31",
"start": "2025-01-01"
},
"province": "ON",
"dividendsReceivedConnected": [
{
"amount": 60000,
"payerId": "opco"
}
]
},
"priorYearAaii": 20000
}
]
],
"minItems": 1,
"description": "The associated corporations (s.256). A member with no input still counts toward line 417. Order does not matter — the engine computes payers before recipients"
},
"taxYear": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day of the taxation year"
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day of the taxation year"
}
},
"description": "The group's taxation year, used to read the statutory business limit when no member computes"
},
"groupAaiiPriorYear": {
"type": "number",
"minimum": 0,
"description": "Federal line 417 for the group, when the per-member figures are not available. A member's own input.groupAaiiPriorYear still wins"
}
}
}Compute the federal Part I / Part IV / refundable / RDTOH / dividend-refund lines and the provincial layer for one CCPC and one taxation year. Returns a readable summary plus the structured result: lines (rounded, as printed), unrounded audit values, facts, warnings, layers, balances carried forward, the inputs still missing, engine and rules versions and a request hash. Deductions are negative, taxes positive. A missing required input is an error, not a default. Paid: 0.25 USD per call in USDC over x402 (Base); without a payment the call returns the x402 payment requirements.
| Argument | Type | Description |
|---|---|---|
| qc | object | Québec inputs (CO-771) |
| taxYear* | object | |
| province* | string | Province of the permanent establishment (two-letter code) |
| cdaOpening | number | Capital dividend account opening balance (returns cda_closing) |
| rdtohOpening | object | Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters |
| taxableIncome | number | Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it |
| netIncomeForTax |
The statutory rates and parameters the engine uses (14 jurisdictions, effective dates, application modes, sources, verification status), filterable by jurisdiction, key and date. Free.
| Argument | Type | Description |
|---|---|---|
| key | string | Row key (e.g. sbd_rate, business_limit, passive_income_grind); omit for all keys |
| date | string | Only the rows in force on this date (default: every row, all periods) |
| jurisdiction | string | Jurisdiction; omit for all |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"key": {
"type": "string",
"description": "Row key (e.g. sbd_rate, business_limit, passive_income_grind); omit for all keys"
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only the rows in force on this date (default: every row, all periods)"
},
"jurisdiction": {
"enum": [
"FED",
"AB",
"BC",
"MB",
"NB",
"NL",
"NS",
"NT",
"NU",
"ON",
"PE",
"QC",
"SK",
"YT"
],
"type": "string",
"description": "Jurisdiction; omit for all"
}
}
}| number |
| Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation |
| propertyExpenses | number | Holdco: deductible property expenses of the year (total) |
| groupAaiiPriorYear | number | T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed |
| netIncomeAccounting | number | Holdco: net income per financial statements |
| otherPropertyIncome | number | Holdco: property income other than dividends and capital-gains dividends |
| taxableCapitalGains | number | Sch 6: taxable capital gains (the included half) |
| activeBusinessIncome | number | T2 line 400: income from an active business carried on in Canada |
| lossesByYearOfOrigin | object | Sch 4 Part 6: opening balances by year of origin, e.g. {"2011": 263564} |
| provincialProportion | number | Share of taxable income allocated to the province (Reg. 402). Default 1 |
| capitalGainsDividends | number | Capital-gains dividends received (full amount; half to CDA) |
| dividendsPaidEligible | number | Eligible dividends paid (designated) in the year |
| allowableCapitalLosses | number | Sch 6: allowable capital losses of the year |
| businessLimitAllocated | number | Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero |
| foreignInvestmentIncome | number | T2 line 445: foreign investment income |
| nonCapitalLossesOpening | number | Sch 4: non-capital loss pool at the start of the year |
| dividendsPaidNonEligible | number | Non-eligible taxable dividends paid in the year |
| foreignBusinessTaxCredit | number | T2 line 636: foreign business income tax credit |
| aggregateInvestmentIncome | number | T2 line 440: aggregate investment income (s.129(4)) |
| dividendsReceivedConnected | array | Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund |
| foreignNonBusinessTaxCredit | number | T2 line 632: foreign non-business income tax credit |
| taxableCapitalGroupPriorYear | number | T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M |
| dividendsPaidOfWhichConnected | number | How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them |
| dividendsReceivedPortfolioEligible | number | Eligible taxable dividends from non-connected payers (Part IV → ERDTOH) |
| nonCapitalLossesClaimedAgainstPartI | number | Non-capital losses claimed against Part I income |
| nonCapitalLossesClaimedAgainstPartIV | number | Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount |
| dividendsReceivedPortfolioNonEligible | number | Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"taxYear",
"province"
],
"properties": {
"qc": {
"type": "object",
"properties": {
"instalmentsPaid": {
"type": "number",
"minimum": 0,
"description": "Acomptes provisionnels paid (CO-17 line 440) — enables the balance lines"
},
"taxableIncomeQc": {
"type": "number",
"description": "CO-17 taxable income when it differs from federal"
},
"hours07aCurrentYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07a: remunerated hours, current year (required with 07b for the CO-771 layer)"
},
"plafondGroupAllocated": {
"type": "number",
"minimum": 0,
"description": "CO-771 plafond allocated to this corporation (defaults to businessLimitAllocated)"
},
"hours07bGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "CO-771 line 07b: remunerated hours, associated group, prior year"
},
"capitalVerseGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "Capital versé of the associated group, prior year (CO-17 line 426a)"
}
},
"description": "Québec inputs (CO-771)"
},
"taxYear": {
"type": "object",
"required": [
"start",
"end"
],
"properties": {
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day of the taxation year"
},
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day of the taxation year"
}
}
},
"province": {
"enum": [
"AB",
"BC",
"MB",
"NB",
"NL",
"NS",
"NT",
"NU",
"ON",
"PE",
"QC",
"SK",
"YT"
],
"type": "string",
"description": "Province of the permanent establishment (two-letter code)"
},
"cdaOpening": {
"type": "number",
"minimum": 0,
"description": "Capital dividend account opening balance (returns cda_closing)"
},
"rdtohOpening": {
"type": "object",
"properties": {
"erdtohLine520": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing ERDTOH, T2 line 530 (printed before that year's refund)"
},
"nerdtohLine535": {
"type": "number",
"minimum": 0,
"description": "Prior year's closing NERDTOH, T2 line 545"
},
"erdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of ERDTOH (line 570)"
},
"nerdtohRefundPrev": {
"type": "number",
"minimum": 0,
"description": "Prior year's dividend refund out of NERDTOH (line 575)"
}
},
"description": "Opening ERDTOH / NERDTOH in T2 terms. Omitted = 0 with a warning when it matters"
},
"taxableIncome": {
"type": "number",
"description": "Part I taxable income (T2 line 360). Omit for a holdco and supply the income lines instead; the engine derives it"
},
"netIncomeForTax": {
"type": "number",
"description": "Holdco: net income for tax purposes (Sch 1 result) — overrides the derivation"
},
"propertyExpenses": {
"type": "number",
"minimum": 0,
"description": "Holdco: deductible property expenses of the year (total)"
},
"groupAaiiPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 417: Σ Sch 7 line 745 of the associated group for taxation years ending in the preceding calendar year. REQUIRED whenever a business limit is claimed"
},
"netIncomeAccounting": {
"type": "number",
"description": "Holdco: net income per financial statements"
},
"otherPropertyIncome": {
"type": "number",
"minimum": 0,
"description": "Holdco: property income other than dividends and capital-gains dividends"
},
"taxableCapitalGains": {
"type": "number",
"minimum": 0,
"description": "Sch 6: taxable capital gains (the included half)"
},
"activeBusinessIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 400: income from an active business carried on in Canada"
},
"lossesByYearOfOrigin": {
"type": "object",
"description": "Sch 4 Part 6: opening balances by year of origin, e.g. {\"2011\": 263564}",
"propertyNames": {
"type": "string",
"pattern": "^\\d{4}$"
},
"additionalProperties": {
"type": "number",
"minimum": 0
}
},
"provincialProportion": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Share of taxable income allocated to the province (Reg. 402). Default 1"
},
"capitalGainsDividends": {
"type": "number",
"minimum": 0,
"description": "Capital-gains dividends received (full amount; half to CDA)"
},
"dividendsPaidEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible dividends paid (designated) in the year"
},
"allowableCapitalLosses": {
"type": "number",
"minimum": 0,
"description": "Sch 6: allowable capital losses of the year"
},
"businessLimitAllocated": {
"type": "number",
"minimum": 0,
"description": "Business limit allocated to this corporation (Sch 23 line 410 if associated, else the statutory limit). 0 = allocation zero"
},
"foreignInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 445: foreign investment income"
},
"nonCapitalLossesOpening": {
"type": "number",
"minimum": 0,
"description": "Sch 4: non-capital loss pool at the start of the year"
},
"dividendsPaidNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends paid in the year"
},
"foreignBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 636: foreign business income tax credit"
},
"aggregateInvestmentIncome": {
"type": "number",
"minimum": 0,
"description": "T2 line 440: aggregate investment income (s.129(4))"
},
"dividendsReceivedConnected": {
"type": "array",
"items": {
"type": "object",
"required": [
"amount"
],
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"description": "Taxable dividend received from the connected corporation"
},
"payerId": {
"type": "string",
"minLength": 1,
"description": "Id of the paying corporation when it is a member of the same ccpcrate_group call: its refund and total dividends paid are then taken from its own computation"
},
"cascadeShare": {
"type": "number",
"minimum": 0,
"description": "Precomputed share of the payer's refund, when already known (overrides the two fields above)"
},
"payerDividendRefund": {
"type": "number",
"minimum": 0,
"description": "The payer's dividend refund for the year it paid the dividend (s.186(1)(b)); 0 = no refund → no cascade; omitted = unknown → cascade withheld with a warning"
},
"payerTotalDividendsPaid": {
"type": "number",
"description": "Total taxable dividends the payer paid that year (denominator of the recipient's share)",
"exclusiveMinimum": 0
}
}
},
"description": "Dividends from connected corporations (s.186(4)) — Part IV only through the payer's refund"
},
"foreignNonBusinessTaxCredit": {
"type": "number",
"minimum": 0,
"description": "T2 line 632: foreign non-business income tax credit"
},
"taxableCapitalGroupPriorYear": {
"type": "number",
"minimum": 0,
"description": "T2 line 415: taxable capital employed in Canada of the group, prior year. Omit when under 10 M"
},
"dividendsPaidOfWhichConnected": {
"type": "number",
"minimum": 0,
"description": "How much OF the dividends paid above went to connected corporations — a portion of dividendsPaidEligible + dividendsPaidNonEligible, never an amount on top of them. Raises the cascade warning on the payer side. In a ccpcrate_group call the recipients' own dividendsReceivedConnected amounts govern the 186(1)(b) share; this field is then cross-checked against them"
},
"dividendsReceivedPortfolioEligible": {
"type": "number",
"minimum": 0,
"description": "Eligible taxable dividends from non-connected payers (Part IV → ERDTOH)"
},
"nonCapitalLossesClaimedAgainstPartI": {
"type": "number",
"minimum": 0,
"description": "Non-capital losses claimed against Part I income"
},
"nonCapitalLossesClaimedAgainstPartIV": {
"type": "number",
"minimum": 0,
"description": "Non-capital / farm losses claimed against Part IV (s.186(1)(c),(d)) — the loss amount"
},
"dividendsReceivedPortfolioNonEligible": {
"type": "number",
"minimum": 0,
"description": "Non-eligible taxable dividends from non-connected payers (Part IV → NERDTOH)"
}
}
}