schedule39
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- 2019 and later
- Strict profile
- s39_exact_single_request_target_value_v1
- Payload schema version
- 0.6.0
- Dependencies (run automatically)
- none
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": [
"schedule39"
],
"inputs": {
"taxYear": 2025,
"schedule39": {
"calendarYear": 2025,
"isAmendedAgreement": false,
"rows": [
{
"memberName": "Northstar Financial Holdings Inc.",
"memberBN": "111222337RC0001",
"allocationAmount": 600000000
},
{
"memberName": "Harbourlight Life Insurance Company",
"memberBN": "444555668RC0001",
"allocationAmount": 400000000
}
]
}
}
}Input cells (13)
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 |
|---|---|---|
| schedule39.calendarYearBox 030 — Four-digit calendar year the agreement applies to. Sanity-clamped to [2019, 2099]; per s.190.15(5) the deduction is calendar-year scoped — a member with multiple TY ending in the same calendar year files ONE S39 per calendar year. | null | number | strict |
| schedule39.dateFiledBox 010 — Date the agreement was filed. Carried as internal metadata with no validation gate: T2 SCH 39 E (19) prints no "do not use this area" annotation on this field (unlike S23/S28/S49), so it is a preparer field, but ITA s.190.15 attaches no consequence to the date beyond the s.190.15(3) Minister's 30-day demand. null = not stated, and nothing is invented. | null | string | |
| schedule39.isAmendedAgreementT2 SCH 39 box 020: this is an amended related-group agreement allocating the s.190.15(2) $1B Part VI capital deduction. | boolean | null | strict |
| schedule39.otherAgreementsFiledForCalendarYearITA 190.15(4) takes "the least amount allocated for a taxation year to each member of a related group UNDER AN AGREEMENT described in subsection 190.15(2)". Two members of one related group can each file a conflicting agreement, and nothing in this return can see the other copy, so the corporation states whether another agreement exists for the calendar year. null = unanswered, which withholds the capital deduction rather than assuming this copy stands alone. | boolean | null | |
| schedule39.otherFiledAgreementsOne row per OTHER filed s.190.15(2) agreement, stating the amount it allocates to THIS corporation. Required when otherAgreementsFiledForCalendarYear is true; an explicit 0 is a binding nil. | array | |
| schedule39.otherFiledAgreements[].agreementDateFiledDate that agreement was filed, for the practitioner's own trail. | null | string | |
| schedule39.otherFiledAgreements[].allocationAuthorityAllocation source. | string | |
| schedule39.otherFiledAgreements[].allocationToFilingCorporationCapital deduction that agreement allocates to the filing corporation. | null | number | |
| schedule39.rowsRows of related FI members in the group. Practitioner adds one row per related FI (including the filing FI itself). Empty rows are elided by the backend. Single-row agreements are structurally invalid — for standalone FIs claim the $1B deduction directly on S38 line 250 under s.190.15(1). | array | |
| schedule39.rows[].allocationAmountBox 450 — Column 3: amount of capital deduction allocated to this member $. Non-negative, must be ≤ $1B per row, sum across all rows must be ≤ $1B per s.190.15(2). | null | number | string | strict |
| schedule39.rows[].memberBNBox 300 — Column 2: business number (CRA 15-character format '123456789RC0001' or 'NR' for unregistered corps). | null | string | strict |
| schedule39.rows[].memberNameBox 200 — Column 1: legal name of the related FI member. | null | string | strict |
| 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 (6 of 13 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 |
|---|---|
| schedule39.calendarYear | -1000000000000000 to 1000000000000000 |
| schedule39.otherFiledAgreements[].allocationAuthority | one of "agreement", "minister" |
| schedule39.rows[].allocationAmount | -1000000000000000 to 1000000000000000; 0 to 20000 characters |
| schedule39.rows[].memberBN | 0 to 20000 characters |
| schedule39.rows[].memberName | 0 to 20000 characters |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
Output cells (40)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| date_filed | array | boolean | null | number | object | string |
| calendar_year | integer | null |
| capital_deduction_cap_applied | string |
| fired_gates | object |
| is_amended_agreement | boolean | null |
| provisional | boolean |
| ready | boolean |
| residual_to_1b_cap | string |
| rows[].allocationAmount | null | number |
| rows[].memberBN | null | string |
| rows[].memberName | null | string |
| total_allocated | string |
| warnings[].box | null | string |
| warnings[].severityAlways an error: a divergent or unprovable opening blocks the return. | string |
| warnings[].message | string |
| warnings[].gate_id | null | string |
| warnings[].citation.gate_id | string |
| warnings[].citation.form_id | string |
| warnings[].citation.rule | string |
| warnings[].citation.cra_text_verbatim | string |
| warnings[].citation.source | string |
| warnings[].citation.source_url | string |
| warnings[].citation.form_revision | string |
| warnings[].citation.applies_to_boxes[] | string |
| warnings[].citation.verified_at | string |
| warnings[].codeStable machine identity of the disclosure, independent of its prose. | null | string |
| warnings[].citation.kindThe authority family the section belongs to. | string |
| warnings[].citation.sectionThe cited provision. | string |
| warnings[].citation.displayThe citation as it is shown to a preparer. | string |
| warnings[].notesWhat the rate manifest records against the year, including what is still outstanding before the year can be verified. | string |
| warnings[].sectionThe module that emitted the disclosure. | string |
| warnings[].sources[] | string |
| warnings[].taxYearThe taxation year whose rate tables are unverified. | integer |
| warnings[].taxYears[] | integer |
| 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 |
| capital_deduction_cap_conversion_receipt.reportingCurrency | string |