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.

Input cells for schedule39
CellTypesRequired
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 | numberstrict
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 | nullstrict
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 | stringstrict
schedule39.rows[].memberBNBox 300 — Column 2: business number (CRA 15-character format '123456789RC0001' or 'NR' for unregistered corps).null | stringstrict
schedule39.rows[].memberNameBox 200 — Column 1: legal name of the related FI member.null | stringstrict
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 | stringalways
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.

Strict profile accepted values for schedule39
CellAccepted values
schedule39.calendarYear-1000000000000000 to 1000000000000000
schedule39.otherFiledAgreements[].allocationAuthorityone of "agreement", "minister"
schedule39.rows[].allocationAmount-1000000000000000 to 1000000000000000; 0 to 20000 characters
schedule39.rows[].memberBN0 to 20000 characters
schedule39.rows[].memberName0 to 20000 characters
taxYearmatches ^\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.

Output cells for schedule39
CellTypes
date_filedarray | boolean | null | number | object | string
calendar_yearinteger | null
capital_deduction_cap_appliedstring
fired_gatesobject
is_amended_agreementboolean | null
provisionalboolean
readyboolean
residual_to_1b_capstring
rows[].allocationAmountnull | number
rows[].memberBNnull | string
rows[].memberNamenull | string
total_allocatedstring
warnings[].boxnull | string
warnings[].severityAlways an error: a divergent or unprovable opening blocks the return.string
warnings[].messagestring
warnings[].gate_idnull | string
warnings[].citation.gate_idstring
warnings[].citation.form_idstring
warnings[].citation.rulestring
warnings[].citation.cra_text_verbatimstring
warnings[].citation.sourcestring
warnings[].citation.source_urlstring
warnings[].citation.form_revisionstring
warnings[].citation.applies_to_boxes[]string
warnings[].citation.verified_atstring
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.reportingCurrencystring
Filemark | schedule39 cells