schedule20
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- 2017 and later
- Strict profile
- s20_exact_single_request_target_value_v1
- Payload schema version
- 0.7.0
- Dependencies (run automatically)
- division_c, part_i_tax, schedule31, schedule38, schedule5
Example request
Send this body to POST /api/v1/computations/batch. It satisfies the strict profile, so it works with or without the payloadContract selector.
{
"compute": [
"schedule20"
],
"inputs": {
"taxYear": 2025,
"fiscalStart": "2025-01-01",
"fiscalEnd": "2025-12-31",
"daysInYear": 365,
"schedule20": {
"amountA": 100000,
"line_510": 0,
"line_500": 0,
"isFirstTimeFiler": false
},
"isCCPC": true
}
}Input cells (90)
Paths are relative to the request’s inputs object; [] marks an array element.
Required says when a cell must be present. Always means every request needs it: the default boundary rejects the call when the cell is omitted or null. Strict means only a request that sends this target’s payloadContract selector needs it. See Run computations for the default boundary.
These cells are everything this target accepts. A member that is not published here, or is sent with the wrong JSON type, fails the call with a 400 naming each failing cell.
| Cell | Types | Required |
|---|---|---|
| daysInYearDays in the taxation year, tied to the inclusive fiscalStart-to-fiscalEnd span. 2024 is a leap year, so the exact witness period is 366 days. | integer | strict |
| fiscalEndLast day of the taxation year. ITA s.249(1)(a) makes the taxation year the fiscal period, and the Part I rates and limits this request's dependency closure computes are day-weighted, so the engine requires the stated period instead of assuming a calendar year. | string | strict |
| fiscalStartFirst day of the taxation year, stated for the same reason as fiscalEnd. | string | strict |
| isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year. | boolean | |
| schedule20.amountAAmount A — Taxable income earned in Canada (brought in from T2 line 360 / amount Z). | null | number | string | strict |
| schedule20.amount_b_total_tax_payableAmount B, line 114 plus line 115, total federal plus provincial and territorial income tax payable, which the branch-tax calculation pro-rates at line 116. The engine computes it from lines 114 and 115. | null | number | string | |
| schedule20.carryingOnBusinessInCanadaAtYearEndITA 219(1)(j): whether the corporation carried on business in Canada at the end of the taxation year. This is narrower than jacket box 220, which establishes the Schedule 20 attachment branch without stating the year-end test. Optional so legacy persisted blobs hydrate unanswered. | boolean | null | |
| schedule20.ceasedAllOrSubstantiallyAllInsuranceBusinessInCanadaIndependent s.219(5.1) fact for a non-resident insurer. False is required before the s.219(4) no-tax route is available. True means the separate ceasing-business tax must be completed outside the current engine; null or absent is unanswered and blocks. | boolean | null | |
| schedule20.exemptCorpTypeWhen set, the corp is exempt from Part XIV under s.219(2) and no other field is required. Mutually exclusive with all other fields. | null | string | |
| schedule20.isAuthorizedForeignBankTrue when the corp is an authorized foreign bank (ITA s.218.2) — routes computation to Part 6 instead of Part 5. | boolean | |
| schedule20.isFirstTimeFilerThe filer's statement that this is the first taxation year subject to Part XIV branch tax. On its own it does not waive the prior-year line 510 and 112 openings: only a confirmed schedule20.treatyContext.firstTimePartXivFilerConfirmed selects the opening treatment, and an unconfirmed true raises s20_first_time_status_unproven. | boolean | null | strict |
| schedule20.line_099 | null | string | |
| schedule20.line_100 | null | string | |
| schedule20.line_101 | null | string | |
| schedule20.line_103 | null | string | |
| schedule20.line_104 | null | string | |
| schedule20.line_105 | null | string | |
| schedule20.line_106 | null | string | |
| schedule20.line_107 | null | string | |
| schedule20.line_108 | null | string | |
| schedule20.line_109 | null | string | |
| schedule20.line_110 | null | string | |
| schedule20.line_111 | null | string | |
| schedule20.line_112 | null | string | |
| schedule20.line_113 | null | string | |
| schedule20.line_114 | null | string | |
| schedule20.line_115 | null | string | |
| schedule20.line_116 | null | string | |
| schedule20.line_117 | null | string | |
| schedule20.line_118 | null | string | |
| schedule20.line_120 | null | string | |
| schedule20.line_121 | null | string | |
| schedule20.line_122 | null | string | |
| schedule20.line_123 | null | string | |
| schedule20.line_124 | null | string | |
| schedule20.line_125 | null | string | |
| schedule20.line_126 | null | string | |
| schedule20.line_500 | null | number | string | strict |
| schedule20.line_510 | null | number | string | strict |
| schedule20.line_520 | null | string | |
| schedule20.line_650650 — Average of column K across periods. Computed. | null | string | |
| schedule20.line_655655 — Total Reg 808(8)(b) liabilities (excluding liabilities already in last-period col E). | null | string | |
| schedule20.line_660660 — Qualified AFB investments = max(0, 650 − 655). Computed. | null | string | |
| schedule20.line_665665 - Elective AFB allowance claim from nil through the computed ceiling; flows to line 118. | null | string | |
| schedule20.part5 | null | object | |
| schedule20.part5.line_200200 — Cost of land in Canada (excluding excluded land). | null | string | |
| schedule20.part5.line_201201 — Cost of depreciable property in Canada. | null | string | |
| schedule20.part5.line_203203 — Non-principal-business corp undeducted CEE. | null | string | |
| schedule20.part5.line_204204 — Cumulative CDE at YE less s.66.2(2) deduction. | null | string | |
| schedule20.part5.line_205205 — Cumulative COGPE at YE less s.66.4(2) deduction. | null | string | |
| schedule20.part5.line_206206 — Cost of debts receivable on lines 200/201 dispositions. | null | string | |
| schedule20.part5.line_207207 — Cost of inventory property (non-Canadian-resource). | null | string | |
| schedule20.part5.line_208208 — Cost of debts receivable / loans in lending business. | null | string | |
| schedule20.part5.line_210210 — Cash + short-term Canadian-arm's-length cost amounts. | null | string | |
| schedule20.part5.line_211211 — 4/3 × average monthly cost of line-210 property. | null | string | |
| schedule20.part5.line_212212 — Allowable liquid assets = min(210, 211). Computed. | null | string | |
| schedule20.part5.line_213213 — Subtotal of lines 200-212. Computed. | null | string | |
| schedule20.part5.line_214214 — Doubtful debts / guarantees / unpaid amounts reserve. | null | string | |
| schedule20.part5.line_215215 — Reserves for capital gains on line-206 debt. | null | string | |
| schedule20.part5.line_216216 — Amounts owing re acquisitions / expenses. | null | string | |
| schedule20.part5.line_217217 — Proportion of interest-bearing obligation × deductible-interest ratio. | null | string | |
| schedule20.part5.line_218218 — Unpaid federal Part I tax. | null | string | |
| schedule20.part5.line_219219 — Unpaid provincial / territorial income tax. | null | string | |
| schedule20.part5.line_221221 — Subtotal of lines 214-219. Computed. | null | string | |
| schedule20.part5.line_222222 — Qualified investments = max(0, 213 − 221). Computed. | null | string | |
| schedule20.part5.line_223223 - Elective allowance claim from nil through the computed ceiling; flows to line 118. | null | string | |
| schedule20.part6PeriodSeriesConfirmedITA 20.2(1): confirmation that Part 6 contains the complete calculation- period designation for the year and satisfies the prior-year consistency condition or a written Ministerial agreement. null = unanswered. | boolean | null | |
| schedule20.part6Periods | array | |
| schedule20.part6Periods[].col_a_period_endColumn A — Period end date (yyyy-mm-dd). | null | string | |
| schedule20.part6Periods[].col_b_bank_assetsColumn B — Bank's assets at end of period. | null | string | |
| schedule20.part6Periods[].col_d_cost_amountColumn D — Cost amount at end of period. | null | string | |
| schedule20.part6Periods[].col_e_liabilitiesColumn E — Liabilities to other persons / partnerships at end. | null | string | |
| schedule20.part6Periods[].col_f_branch_advancesColumn F — Branch advances at end. | null | string | |
| schedule20.part6Periods[].col_h_amount_claimed_s_20_2Column H — Amount claimed under s.20.2(3)(b)(ii)(A) (≤ B − (C + G)). | null | string | |
| schedule20.principalBusinessThroughoutYearThe ITA 219(2)(b) principal-business finding, throughout the year. Not a CRA box, and not a mirror of `exemptCorpType`: subsection 219(2) exempts only a corporation whose principal business was, throughout the year, transportation, communications or mining iron ore in Canada, and the `exemptCorpType` dropdown is a routing label that proves neither the finding nor its persistence. null is unanswered and leaves Part XIV computed on the ordinary basis; it is never read as agreement with `exemptCorpType`. | null | string | |
| schedule20.treatyContextNRES-A — the trusted evidence proving the line 500 claim and the rate G reduction. Not a CRA box: it is the practitioner's record of the treaty text and findings the engine gates on. null = no evidence, which keeps the 25% statutory rate and neutralizes a line 500 claim. | null | object | |
| schedule20.treatyContext.accumulatedEarningsExemptionConfirmedDirect-treaty track only — the agreement grants an accumulated-earnings exemption (Canada-US Article X(6)(d)). | boolean | null | |
| schedule20.treatyContext.agreementAppliesOnTaxYearEndRelief is year-specific: the agreement must apply "on the last day of that year" (ITA 219.2). | boolean | null | |
| schedule20.treatyContext.agreementHasForceOfLawInCanadaITA 219.2's opening words require an agreement "that has the force of law in Canada"; the direct-treaty track needs the same. | boolean | null | |
| schedule20.treatyContext.countryThe other Contracting State. | null | string | |
| schedule20.treatyContext.firstTimePartXivFilerConfirmedExplicit filing-history attestation. False is an answered "No"; null is unanswered and cannot open the first-year allowance. | boolean | null | |
| schedule20.treatyContext.legalBasisWhich of the two mutually exclusive tracks the relief rests on. | null | string | |
| schedule20.treatyContext.paragraph219_2aSatisfiedITA 219.2(a) — the agreement "does not limit the rate of tax under this Part on corporations resident in that other country". | boolean | null | |
| schedule20.treatyContext.paragraph219_2bSatisfiedITA 219.2(b) — the agreement "provides that, where a dividend is paid by a corporation resident in Canada to a corporation resident in that other country that owns all of the shares of the capital stock of the corporation resident in Canada, the rate of tax imposed on the dividend shall not exceed a specified rate". | boolean | null | |
| schedule20.treatyContext.provisionThe operative provision, protocols included. | null | string | |
| schedule20.treatyContext.treatyEntitlementConfirmedThis corporation is entitled to the relief under that agreement. | boolean | null | |
| schedule20.treatyContext.verifiedAccumulatedEarningsExemptionLimitThe verified remaining exemption. Article X(6)(d) states "$500,000 ... less any amounts deducted by the company, or by an associated company with respect to the same or a similar business, under this subparagraph (d)" — a cumulative drawdown shared across associated companies, not a fresh annual amount, so this is a ceiling on the line 500 claim. | null | string | |
| schedule20.treatyContext.verifiedBranchTaxRatePctThe verified branch-tax rate as a decimal percent in [0, 25]. Governs; a disagreeing raw rate G blocks (`s20_treaty_rate_context_mismatch`). | null | string | |
| schedule20.treatyRatePctAmount G — Treaty rate as decimal percent in [0, 25]. Default 25 (s.219(1)); override per s.219.2 treaty mechanism. COMPARISON-ONLY: `treatyContext.verifiedBranchTaxRatePct` governs, and a disagreement between the two blocks filing. | null | string | |
| taxYearFour-digit taxation year accepted by the batch reader. Historical applicability is decided by the requested form; years after 2027 fail at the shared verified-rate horizon. | integer | string | always |
Strict profile accepted values (10 of 90 cells)
These values apply only when the request sends this target’s payloadContract selector. A cell marked pinned must equal the value shown to satisfy the strict profile. On the default boundary the same cell accepts any value of its published type.
| Cell | Accepted values |
|---|---|
| daysInYear | 1 to 1000000000000000 |
| fiscalEnd | date (YYYY-MM-DD); 10 to 10 characters |
| fiscalStart | date (YYYY-MM-DD); 10 to 10 characters |
| schedule20.amountA | -1000000000000000 to 1000000000000000; 0 to 20000 characters |
| schedule20.exemptCorpType | one of "transportation", "communications", "iron_ore_mining", "s149_exempt", "insurance_not_electing" |
| schedule20.line_500 | -1000000000000000 to 1000000000000000; 0 to 20000 characters |
| schedule20.line_510 | -1000000000000000 to 1000000000000000; 0 to 20000 characters |
| schedule20.principalBusinessThroughoutYear | one of "transportation", "communications", "iron_ore_mining", "other" |
| schedule20.treatyContext.legalBasis | one of "direct_treaty", "section_219_2" |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
Output cells (97)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| amount_a_taxable_income_earned_in_canada | string |
| amount_b_total_tax_payable | string |
| amount_c_purchaser_consideration_sum | string |
| amount_d_base_amount_with_additions | string |
| amount_e_deductions | string |
| amount_f_taxable_base | string |
| amount_g_tax_rate_decimal | string |
| amount_g_tax_rate_pct | string |
| amount_h_exemption_claimed | string |
| amount_l_part_6_column_k_total | string |
| exempt_corp_type | array | boolean | null | number | object | string |
| fired_gates | object |
| flows_to_t2_jacket_line_728 | string |
| is_authorized_foreign_bank | boolean |
| line_099 | string |
| line_100 | string |
| line_101 | string |
| line_103 | string |
| line_104 | string |
| line_105 | string |
| line_106 | string |
| line_107 | string |
| line_108 | string |
| line_109 | string |
| line_110 | string |
| line_111 | string |
| line_112 | string |
| line_113 | string |
| line_114 | string |
| line_115 | string |
| line_116 | string |
| line_117 | string |
| line_118 | string |
| line_120 | string |
| line_121 | string |
| line_122 | string |
| line_123 | string |
| line_124 | string |
| line_125 | string |
| line_126 | string |
| line_223 | string |
| line_500 | string |
| line_510 | string |
| line_520 | string |
| line_665 | string |
| part5_projection.line_200 | string |
| part5_projection.line_201 | string |
| part5_projection.line_203 | string |
| part5_projection.line_204 | string |
| part5_projection.line_205 | string |
| part5_projection.line_206 | string |
| part5_projection.line_207 | string |
| part5_projection.line_208 | string |
| part5_projection.line_210 | string |
| part5_projection.line_211 | string |
| part5_projection.line_212 | string |
| part5_projection.line_213 | string |
| part5_projection.line_214 | string |
| part5_projection.line_215 | string |
| part5_projection.line_216 | string |
| part5_projection.line_217 | string |
| part5_projection.line_218 | string |
| part5_projection.line_219 | string |
| part5_projection.line_221 | string |
| part5_projection.line_222 | string |
| part5_projection.line_223 | string |
| part6_projection.amount_l_part_6_column_k_total | string |
| part6_projection.line_650 | string |
| part6_projection.line_655 | string |
| part6_projection.line_660 | string |
| part6_projection.line_665 | string |
| part6_projection.periods | array |
| part_xiv_tax_payable | string |
| provisional | boolean |
| ready | boolean |
| warnings[].boxThe printed line the reconciliation is about. | string |
| warnings[].citation.displayThe citation as it is shown to a preparer. | string |
| warnings[].citation.kindThe authority family the section belongs to. | string |
| warnings[].citation.sectionThe cited provision. | string |
| warnings[].codeWhich continuity obligation this row is about. | string |
| warnings[].gate_idAlways null: the obligation is cited to its authority, not to a registered form gate. | array | boolean | null | number | object | string |
| warnings[].messageThe preparer-facing statement of the break. | string |
| warnings[].severityAlways an error: a divergent or unprovable opening blocks the return. | string |
| warnings[].citation.applies_to_boxes[] | string |
| warnings[].citation.cra_text_verbatim | string |
| warnings[].citation.form_id | string |
| warnings[].citation.form_revision | string |
| warnings[].citation.gate_id | string |
| warnings[].citation.rule | string |
| warnings[].citation.source | string |
| warnings[].citation.source_url | string |
| warnings[].citation.verified_at | string |
| warnings[].actualThe opening amount this return states. | number |
| warnings[].expectedThe closing amount the authenticated prior filed return proves, or null when no filed projection exists to reconcile against. | null | number |
| warnings[].keyThe reconciled balance, named for a preparer. | string |
| warnings[].kindAlways the validation family. | string |
| warnings[].reasonWhat broke and what to do about it. | string |