schedule25
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- 1998 and later
- Strict profile
- s25_versioned_profile_target_value_v1
- Payload schema version
- 0.10.0
- Dependencies (run automatically)
- foreign_affiliate_analysis
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": [
"schedule25"
],
"inputs": {
"taxYear": 2025,
"t2Jacket": {
"identification": {
"isResidentOfCanada": true
}
},
"schedule25": {
"hasForeignAffiliates": true,
"isNonResidentOwnedInvestmentCorp": false,
"section212_3ForeignAffiliateInvestmentMade": false,
"affiliateRows": [
{
"affiliateName": "Cedar Ridge USA Holdings Inc.",
"equityPercentHeld": 10,
"controlStatus": 2
}
]
}
}
}Input cells (11)
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 |
|---|---|---|
| schedule25.affiliateRows | array | |
| schedule25.affiliateRows[].affiliateNameA single-line name with at least one character and no leading or trailing whitespace. The 10,000-character ceiling is a Filemark limit, not a CRA field limit, a legal-name check, or proof of foreign-affiliate status. | null | string | strict |
| schedule25.affiliateRows[].controlStatusExact submitted printed option 2 for this branch. It is not a legal determination that the entity is an 'other' rather than controlled foreign affiliate. | null | number | strict |
| schedule25.affiliateRows[].equityPercentHeldThe equity percentage, pinned to one exact value by this profile. The form prints 'Equity % held' without stating which statutory measurement applies, so the value you send does not establish that measurement or its accuracy. | null | number | strict |
| schedule25.affiliateRows[].relatedPersonsAggregateEquityPercentPractitioner-stated total of the equity percentages in this affiliate held by the corporation plus each related person — limb (b) of the s.95(1) "foreign affiliate" definition, which requires that total to be not less than 10%. Not a printed CRA column. Only consulted when `equityPercentHeld` is at least 1% and below 10%, the band where classification turns entirely on related persons; at 10% or more the corporation's own holding satisfies limb (b) by itself. In that band an unanswered or below-10% total draws a review warning, never a block. | null | number | |
| schedule25.hasForeignAffiliatesSubmitted true branch flag only; it does not establish that the named entity satisfies the Income Tax Act foreign-affiliate definition. | boolean | null | strict |
| schedule25.isNonResidentOwnedInvestmentCorpThis candidate excludes the non-resident-owned investment corporation branch and requires the submitted value false; it does not independently determine that status. | boolean | null | strict |
| schedule25.section212_3ForeignAffiliateInvestmentMadeExplicit false answer to the ITA 212.3 foreign-affiliate-investment question required when the affiliate roster is open. The engine keeps omission fail-closed. | boolean | null | |
| schedule25.section212_3NonResidentControlAtInvestmentITA 212.3(1)(b): was the investing Canadian corporation, or the relevant other Canadian corporation, under non-resident control? | boolean | null | |
| t2Jacket.identification.isResidentOfCanadaT2 box 080: the corporation was resident in Canada in the taxation year. A no answer requires the box 081 country of residence. | boolean | 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 (4 of 11 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 |
|---|---|
| schedule25.affiliateRows[].affiliateName | matches ^\S(?:[^\r\n\u000b\u000c\u0085\u2028\u2029]*\S)?$; 1 to 10000 characters |
| schedule25.affiliateRows[].controlStatus | -1000000000000000 to 1000000000000000 |
| schedule25.affiliateRows[].equityPercentHeld | -1000000000000000 to 1000000000000000 |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
Output cells (145)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| line_100The single-line name you submitted, echoed back. It is not a legal-name check or proof of foreign-affiliate status. | null | string |
| line_200Exact current projection of the admitted submitted numeric value; it is not proof of the statutory measurement or accuracy of box 200. | null | number |
| line_300Exact current projection of submitted printed option 2; it is not a legal classification determination. | integer | null |
| affiliateRows[].affiliateIdPer-affiliate reconciliation key. Taken from the row's persisted key when the Schedule 25 blob carries one, and otherwise from the whitespace-collapsed upper-cased submitted name. It is a positional identity for the Schedule 1 ITA 91(1) reconciliation, not legal-name validation and not proof of foreign-affiliate status. | null | string |
| affiliateRows[].affiliateNameThe single-line name you submitted, echoed back. It is not a legal-name check or proof of foreign-affiliate status. | null | string |
| affiliateRows[].equityPercentHeld | null | number |
| affiliateRows[].controlStatus | integer | null |
| affiliate_count | integer |
| controlledAffiliatesThe CONTROLLED subset of the roster, published so Schedule 1 can reconcile its ITA 91(1) inclusion rows affiliate by affiliate instead of comparing two counts. Empty on this branch, whose single row is controlStatus 2 ("Other"). Emission does not classify any affiliate as controlled and is not proof of positive FAPI or a participating percentage. | array |
| box_300_code_1_countMechanical count of submitted box-300 code 1 selections on the roster. It is a projection of the submitted printed option, not a Filemark determination of either s.95(1) control arm. Zero on this branch, whose single row is controlStatus 2 ("Other"). | integer |
| controlled_affiliate_countLegacy wire alias of box_300_code_1_count, retained additively for existing integrations. | integer |
| other_affiliate_count | integer |
| filingPropositions[].schemaVersion | integer |
| filingPropositions[].propositionId | string |
| filingPropositions[].state | string |
| filingPropositions[].filingDisposition | string |
| filingPropositions[].targets[] | string |
| filingPropositions[].evidence[] | string |
| warningsThe findings for this branch: a non-blocking T1134 review note, an error-severity T2 box 169 reconciliation (a populated roster and a box 169 answer that is not Yes cannot both be right), and a non-blocking T2 box 271 reconciliation warning. No entry establishes T1134 completeness, relief, deadline or penalty treatment, and none answers a jacket box on the filer's behalf. | array |
| fired_gatesExact current metadata emitted by the five gates fired for this narrow branch. Emission records branch execution and source context; it does not prove the submitted legal facts or filing completeness. | object |
| provisionalThe branch carries an error-severity finding (the T2 box 169 reconciliation), which the current engine reports as provisional. Provisional records that a blocking finding is open, not that any submitted fact was disproved. | boolean |
| readyFalse on this branch. The request answers no T2 jacket applicability box, so box 169 is unanswered while the roster is populated, and the engine blocks on that contradiction. True would mean only that this branch produced no blocking result for the values sent. | boolean |
| missing_required | array |
| coverageStatus | string |
| coverageReason | string |
| formId | string |
| formRevision | string |
| taxYear | integer |
| warnings[].code | string |
| warnings[].severity | string |
| warnings[].message | string |
| warnings[].notes | string |
| warnings[].section | string |
| warnings[].taxYear | integer |
| warnings[] | object |
| controlledAffiliates[].affiliateId | null | string |
| controlledAffiliates[].affiliateName | null | string |
| controlledAffiliates[].equityPercentHeld | null | number |
| controlledAffiliates[].controlStatus | integer | null |
| warnings[].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 |
| warnings[].anchor_rowThe per-row navigation anchor the affiliate-roster findings carry, `s25-affiliate-<row index>`. | string |
| warnings[].citation.display | string |
| warnings[].citation.kind | string |
| warnings[].citation.section | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.applies_to_boxes[] | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.cra_text_verbatim | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.form_id | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.form_revision | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.gate_id | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.rule | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.source | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.source_url | string |
| fired_gates.filing_trigger_owns_foreign_affiliate.verified_at | string |
| fired_gates.nroic_exemption_regime_repealed.applies_to_boxes[] | string |
| fired_gates.nroic_exemption_regime_repealed.cra_text_verbatim | string |
| fired_gates.nroic_exemption_regime_repealed.form_id | string |
| fired_gates.nroic_exemption_regime_repealed.form_revision | string |
| fired_gates.nroic_exemption_regime_repealed.gate_id | string |
| fired_gates.nroic_exemption_regime_repealed.rule | string |
| fired_gates.nroic_exemption_regime_repealed.source | string |
| fired_gates.nroic_exemption_regime_repealed.source_url | string |
| fired_gates.nroic_exemption_regime_repealed.verified_at | string |
| fired_gates.box_100_affiliate_name_required.applies_to_boxes[] | string |
| fired_gates.box_100_affiliate_name_required.cra_text_verbatim | string |
| fired_gates.box_100_affiliate_name_required.form_id | string |
| fired_gates.box_100_affiliate_name_required.form_revision | string |
| fired_gates.box_100_affiliate_name_required.gate_id | string |
| fired_gates.box_100_affiliate_name_required.rule | string |
| fired_gates.box_100_affiliate_name_required.source | string |
| fired_gates.box_100_affiliate_name_required.source_url | string |
| fired_gates.box_100_affiliate_name_required.verified_at | string |
| fired_gates.box_200_equity_percentage_definition.applies_to_boxes[] | string |
| fired_gates.box_200_equity_percentage_definition.cra_text_verbatim | string |
| fired_gates.box_200_equity_percentage_definition.form_id | string |
| fired_gates.box_200_equity_percentage_definition.form_revision | string |
| fired_gates.box_200_equity_percentage_definition.gate_id | string |
| fired_gates.box_200_equity_percentage_definition.rule | string |
| fired_gates.box_200_equity_percentage_definition.source | string |
| fired_gates.box_200_equity_percentage_definition.source_url | string |
| fired_gates.box_200_equity_percentage_definition.verified_at | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.applies_to_boxes[] | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.cra_text_verbatim | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.form_id | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.form_revision | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.gate_id | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.rule | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.source | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.source_url | string |
| fired_gates.box_300_controlled_means_s95_1_cfa.verified_at | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.applies_to_boxes[] | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.cra_text_verbatim | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.form_id | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.form_revision | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.gate_id | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.rule | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.source | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.source_url | string |
| fired_gates.cross_link_s91_1_fapi_inclusion.verified_at | string |
| fired_gates.cross_link_t1134_filing_required.applies_to_boxes[] | string |
| fired_gates.cross_link_t1134_filing_required.cra_text_verbatim | string |
| fired_gates.cross_link_t1134_filing_required.form_id | string |
| fired_gates.cross_link_t1134_filing_required.form_revision | string |
| fired_gates.cross_link_t1134_filing_required.gate_id | string |
| fired_gates.cross_link_t1134_filing_required.rule | string |
| fired_gates.cross_link_t1134_filing_required.source | string |
| fired_gates.cross_link_t1134_filing_required.source_url | string |
| fired_gates.cross_link_t1134_filing_required.verified_at | string |
| fired_gates.cross_link_s130_part2m_cfa_table.applies_to_boxes[] | string |
| fired_gates.cross_link_s130_part2m_cfa_table.cra_text_verbatim | string |
| fired_gates.cross_link_s130_part2m_cfa_table.form_id | string |
| fired_gates.cross_link_s130_part2m_cfa_table.form_revision | string |
| fired_gates.cross_link_s130_part2m_cfa_table.gate_id | string |
| fired_gates.cross_link_s130_part2m_cfa_table.rule | string |
| fired_gates.cross_link_s130_part2m_cfa_table.source | string |
| fired_gates.cross_link_s130_part2m_cfa_table.source_url | string |
| fired_gates.cross_link_s130_part2m_cfa_table.verified_at | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.applies_to_boxes[] | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.cra_text_verbatim | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.form_id | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.form_revision | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.gate_id | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.rule | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.source | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.source_url | string |
| fired_gates.form_capacity_21_rows_supplementary_attach.verified_at | string |
| fired_gates.consistency_has_affiliates_implies_rows.applies_to_boxes[] | string |
| fired_gates.consistency_has_affiliates_implies_rows.cra_text_verbatim | string |
| fired_gates.consistency_has_affiliates_implies_rows.form_id | string |
| fired_gates.consistency_has_affiliates_implies_rows.form_revision | string |
| fired_gates.consistency_has_affiliates_implies_rows.gate_id | string |
| fired_gates.consistency_has_affiliates_implies_rows.rule | string |
| fired_gates.consistency_has_affiliates_implies_rows.source | string |
| fired_gates.consistency_has_affiliates_implies_rows.source_url | string |
| fired_gates.consistency_has_affiliates_implies_rows.verified_at | string |
| missing_required[] | string |