schedule97
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- 2011 and later
- Strict profile
- s97_versioned_profile_target_value_v1
- Payload schema version
- 0.5.0
- Dependencies (run automatically)
- schedule20, schedule91, schedule92
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": [
"schedule97"
],
"inputs": {
"taxYear": 2025,
"fiscalStart": "2025-01-01",
"fiscalEnd": "2025-12-31",
"daysInYear": 365,
"schedule97": {
"incorporationCountry": "United States",
"nrCategoryCode": "10"
},
"isCCPC": false
}
}Input cells (10)
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. It must equal the inclusive fiscalStart-to-fiscalEnd span, counting both end days, so a leap year states 366. The 377-day upper bound admits the longest acquisition-of-control-elected year under ITA 249.1(1)(a) and 249(4)(b); the canonical batch seam still rejects a period that ITA 249(3) deems split. | integer | strict |
| fiscalEndLast day of the taxation year, as YYYY-MM-DD, on or after fiscalStart. Its calendar year must equal taxYear; the engine rejects any other combination before computing. | string | strict |
| fiscalStartFirst day of the taxation year, as YYYY-MM-DD. ITA s.249(1)(a) makes the taxation year the fiscal period, and the Part I rates and limits this candidate's dependency closure computes are day-weighted, so the engine requires the stated period instead of assuming a calendar year. It must fall in the taxYear stated above or the year before it. | string | strict |
| isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year. | boolean | |
| schedule97.certificateOfDiscontinuanceThis candidate excludes the Canada-incorporation branch, so box 210 must be explicit JSON null. | null | string | |
| schedule97.code08TreatyEligibleCode-08 sidecar: whether the entity claims Canada-U.S. Treaty benefits under Article IV(6). False requires Schedule 20 for Part XIV tax. | boolean | null | |
| schedule97.incorporationCountryA single line of country text with no leading or trailing whitespace. The 10,000-character ceiling is a Filemark limit, not a CRA field limit. Values whose first word is Canada, in any casing, are excluded. | null | string | strict |
| schedule97.nrCategoryCodeBranch-limited box 300 value: code 10 (life insurance business in Canada) or code 11 (insurance business in Canada other than life insurance). No implication about filing completeness or companion requirements is made. | null | string | strict |
| schedule97.section216_4UndertakingFiledSchedule-side persistence home for the non-resident's undertaking under ITA 216(4), commonly filed on Form NR6. This is not a printed S97 box. | boolean | null | |
| 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 (7 of 10 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 |
| schedule97.certificateOfDiscontinuance | one of "Y", "N", null |
| schedule97.incorporationCountry | matches ^\S(?:[^\r\n]*\S)?$; 1 to 10000 characters |
| schedule97.nrCategoryCode | one of "10", "11", "01", "02", "03", "04" |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
Output cells (39)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| incorporationCountryBox 200, the country of incorporation. Null when the request does not state it, which is itself one of the gated conditions. | null | string |
| incorporatedInCanadaWhether box 200 names Canada. Null when box 200 is unanswered. | boolean | null |
| certificateOfDiscontinuanceBox 210, echoed from the request. The form asks it only of a corporation incorporated in Canada, so answering it on this candidate's non-Canada branch raises a gate. | null | string |
| nrCategoryCodeBox 300, the non-resident category code. Null when the request does not state it, which is itself one of the gated conditions. | null | string |
| categoryImplications.requires_s91 | boolean |
| categoryImplications.requires_tcp_form | boolean |
| categoryImplications.requires_s20 | boolean |
| categoryImplications.requires_schedule_92 | boolean |
| categoryImplications.is_section_216_election | boolean |
| categoryImplications.is_actor_election | boolean |
| categoryImplications.is_emigrant | boolean |
| categoryImplications.is_llc_llp_lllp_treaty_hybrid | boolean |
| warnings | array |
| fired_gatesEvery registered gate this result raised, keyed by gate identifier. At least one member is what selects this branch. | object |
| provisional | boolean |
| ready | boolean |
| warnings[].code | string |
| warnings[].message | string |
| warnings[].notes | string |
| warnings[].section | string |
| warnings[].severity | string |
| warnings[].taxYear | integer |
| coverageStatus | string |
| coverageReason | string |
| formId | string |
| formRevision | string |
| taxYear | integer |
| missing_required | array |
| warnings[].boxThe form box the finding is about, or the em dash the engine prints when the gate is about the form rather than one box. | null | 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[].gate_id | string |