schedule28

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2016 and later
Strict profile
s28_2025_two_other_corps_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": [
    "schedule28"
  ],
  "inputs": {
    "taxYear": 2025,
    "schedule28": {
      "amendedElection": false,
      "thirdCorpName": "Cedar Ridge Holdings Inc.",
      "thirdCorpBn": "333333334RC0001",
      "thirdCorpTaxYearEnd": "2025-12-31",
      "otherCorps": [
        {
          "name": "Cedar Ridge Manufacturing Inc.",
          "businessNumber": "123456782RC0001"
        },
        {
          "name": "Birchline Tools Ltd.",
          "businessNumber": "222222226RC0001"
        }
      ]
    }
  }
}

Input cells (16)

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 schedule28
CellTypesRequired
fiscalEndThe return's tax year-end, pinned exactly. Sending it selects the branch that runs the box 050 equality check. The other current-year branch omits it, and the engine blocks on the missing year-end.stringstrict
fiscalStartThe return's fiscal-period start. Together with fiscalEnd it establishes the filer-owned taxation period; a lone year-end is not period evidence.stringstrict
isCCPCThe corporation-type fact at the request root, required on this branch. Schedule 28 reads its own schedule28.thirdCorpIsCcpc fact instead, so setting this one does not clear the unanswered-CCPC gate, and it does not establish legal status.booleanstrict
schedule28.amendedElectionPinned to false. That does not establish this is an original election or that an election exists.boolean | nullstrict
schedule28.dateFiledPinned to null: box 010 is outside this profile. Null does not establish whether or when anything was filed.null | string
schedule28.otherCorpsPer-row "other" corporation entries. Must contain at least 2 populated rows for local structural completeness, based on the form's description of two other corporations and its per-corporation table. This does not establish that an election is legally effective.array
schedule28.otherCorps[].businessNumberThe first box 200 row's business number, pinned to a distinct fixed synthetic value. It is not a real business number, and it does not establish identity, registration, or association.null | stringstrict
schedule28.otherCorps[].nameA 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 corporate identity or status.null | stringstrict
schedule28.othersAssociatedWithThirdCorpWhether the two other corporations were associated with the third corporation. Boolean is the canonical form. An absent answer leaves the ITA s.256(2)(b)(ii) election conclusion unanswered and the schedule fails closed.boolean | null | number | string
schedule28.othersNotOtherwiseAssociatedWhether the two other corporations would not otherwise be associated with each other. Boolean is the canonical form. An absent answer leaves the ITA s.256(2)(b)(ii) election conclusion unanswered.boolean | null | number | string
schedule28.supplementaryPagesAttachedTE-2026-08-27-062 — the printed grid holds 15 rows and the form says "If you need more space, attach additional schedules." The generated package prints only the 15, so a corporation in row 16 or beyond is covered by the election only if that attachment was really filed. s.256(2) deems non-association only for corporations the third corporation "elects in prescribed form" to cover, and Schedule 23 consumes that election into the business limit. Null is unanswered and holds; it is only asked when the grid overflows.boolean | null
schedule28.thirdCorpBnThe box 040 business number, pinned to one fixed synthetic value. It is not a real business number, and it does not establish that the number exists, belongs to the submitted name, or identifies a CCPC.null | stringstrict
schedule28.thirdCorpIsCcpcWhether the third corporation is a Canadian-controlled private corporation. Schedule 28 reads this fact rather than the request-root corporation type, so setting the root fact alone does not clear the unanswered-CCPC gate.boolean | null | number | string
schedule28.thirdCorpNameA 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 corporate identity or status.null | stringstrict
schedule28.thirdCorpTaxYearEndPinned to the same 2025 tax year the request states, so the schedule body's year cannot disagree with the return's year.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 (12 of 16 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 schedule28
CellAccepted values
fiscalEnddate (YYYY-MM-DD); 10 to 10 characters
fiscalStartdate (YYYY-MM-DD); 10 to 10 characters
schedule28.dateFiled0 to 20000 characters
schedule28.otherCorps[].businessNumber0 to 20000 characters
schedule28.otherCorps[].namematches ^\S(?:[^\r\n\u000b\u000c\u0085\u2028\u2029]*\S)?$; 1 to 10000 characters
schedule28.othersAssociatedWithThirdCorpone of true, false, 0, 1, "true", "false"
schedule28.othersNotOtherwiseAssociatedone of true, false, 0, 1, "true", "false"
schedule28.thirdCorpBn0 to 20000 characters
schedule28.thirdCorpIsCcpcone of true, false, 0, 1, "true", "false"
schedule28.thirdCorpNamematches ^\S(?:[^\r\n\u000b\u000c\u0085\u2028\u2029]*\S)?$; 1 to 10000 characters
schedule28.thirdCorpTaxYearEnddate (YYYY-MM-DD); 10 to 10 characters
taxYearmatches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027; 0 to 20000 characters

Output cells (215)

Paths are relative to this target’s result object in the response.

Output cells for schedule28
CellTypes
date_filednull
amended_electionBox 020, 'Is this an amended election?', answered Yes. The engine echoes the answer; no other published member moves with it.boolean | null
third_corp_namenull | string
third_corp_bnnull | string
third_corp_tax_year_endnull | string
third_corp_business_limit_deemed_nilThe engine emits no deemed-nil business limit for this branch because the election is not structurally complete.null
other_corps[].namenull | string
other_corps[].businessNumbernull | string
warnings[].boxstring
warnings[].severitystring
warnings[].messageExact current engine message. This contract records the string; it does not adopt it as a determination of the underlying statutory or association facts.string
warnings[].gate_idstring
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
fired_gates.box_040_matches_filing_corporation.gate_idstring
fired_gates.box_040_matches_filing_corporation.form_idstring
fired_gates.box_040_matches_filing_corporation.rulestring
fired_gates.box_040_matches_filing_corporation.cra_text_verbatimstring
fired_gates.box_040_matches_filing_corporation.sourcestring
fired_gates.box_040_matches_filing_corporation.source_urlstring
fired_gates.box_040_matches_filing_corporation.form_revisionstring
fired_gates.box_040_matches_filing_corporation.applies_to_boxes[]string
fired_gates.box_040_matches_filing_corporation.verified_atstring
fired_gates.box_050_within_return_tax_year.gate_idstring
fired_gates.box_050_within_return_tax_year.form_idstring
fired_gates.box_050_within_return_tax_year.rulestring
fired_gates.box_050_within_return_tax_year.cra_text_verbatimstring
fired_gates.box_050_within_return_tax_year.sourcestring
fired_gates.box_050_within_return_tax_year.source_urlstring
fired_gates.box_050_within_return_tax_year.form_revisionstring
fired_gates.box_050_within_return_tax_year.applies_to_boxes[]string
fired_gates.box_050_within_return_tax_year.verified_atstring
fired_gates.s256_2_a_conditions_answered.gate_idstring
fired_gates.s256_2_a_conditions_answered.form_idstring
fired_gates.s256_2_a_conditions_answered.rulestring
fired_gates.s256_2_a_conditions_answered.cra_text_verbatimstring
fired_gates.s256_2_a_conditions_answered.sourcestring
fired_gates.s256_2_a_conditions_answered.source_urlstring
fired_gates.s256_2_a_conditions_answered.form_revisionstring
fired_gates.s256_2_a_conditions_answered.applies_to_boxes[]string
fired_gates.s256_2_a_conditions_answered.verified_atstring
fired_gates.third_corp_must_be_ccpc.gate_idstring
fired_gates.third_corp_must_be_ccpc.form_idstring
fired_gates.third_corp_must_be_ccpc.rulestring
fired_gates.third_corp_must_be_ccpc.cra_text_verbatimstring
fired_gates.third_corp_must_be_ccpc.sourcestring
fired_gates.third_corp_must_be_ccpc.source_urlstring
fired_gates.third_corp_must_be_ccpc.form_revisionstring
fired_gates.third_corp_must_be_ccpc.applies_to_boxes[]string
fired_gates.third_corp_must_be_ccpc.verified_atstring
provisionalboolean
readyboolean
coverageStatusstring
coverageReasonstring
formIdstring
formRevisionstring
taxYearinteger
missing_requiredarray
warnings[].codeStable machine identity of the disclosure, independent of its prose.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[].taxYearThe taxation year whose rate tables are unverified.integer
warnings[].sources[]string
warnings[].taxYears[]integer
fired_gates.box_030_third_corp_name_required.gate_idstring
fired_gates.box_030_third_corp_name_required.form_idstring
fired_gates.box_030_third_corp_name_required.rulestring
fired_gates.box_030_third_corp_name_required.cra_text_verbatimstring
fired_gates.box_030_third_corp_name_required.sourcestring
fired_gates.box_030_third_corp_name_required.source_urlstring
fired_gates.box_030_third_corp_name_required.form_revisionstring
fired_gates.box_030_third_corp_name_required.applies_to_boxes[]string
fired_gates.box_030_third_corp_name_required.verified_atstring
fired_gates.box_040_third_corp_bn_required.gate_idstring
fired_gates.box_040_third_corp_bn_required.form_idstring
fired_gates.box_040_third_corp_bn_required.rulestring
fired_gates.box_040_third_corp_bn_required.cra_text_verbatimstring
fired_gates.box_040_third_corp_bn_required.sourcestring
fired_gates.box_040_third_corp_bn_required.source_urlstring
fired_gates.box_040_third_corp_bn_required.form_revisionstring
fired_gates.box_040_third_corp_bn_required.applies_to_boxes[]string
fired_gates.box_040_third_corp_bn_required.verified_atstring
fired_gates.box_040_third_corp_bn_format.gate_idstring
fired_gates.box_040_third_corp_bn_format.form_idstring
fired_gates.box_040_third_corp_bn_format.rulestring
fired_gates.box_040_third_corp_bn_format.cra_text_verbatimstring
fired_gates.box_040_third_corp_bn_format.sourcestring
fired_gates.box_040_third_corp_bn_format.source_urlstring
fired_gates.box_040_third_corp_bn_format.form_revisionstring
fired_gates.box_040_third_corp_bn_format.applies_to_boxes[]string
fired_gates.box_040_third_corp_bn_format.verified_atstring
fired_gates.box_050_tax_year_end_required.gate_idstring
fired_gates.box_050_tax_year_end_required.form_idstring
fired_gates.box_050_tax_year_end_required.rulestring
fired_gates.box_050_tax_year_end_required.cra_text_verbatimstring
fired_gates.box_050_tax_year_end_required.sourcestring
fired_gates.box_050_tax_year_end_required.source_urlstring
fired_gates.box_050_tax_year_end_required.form_revisionstring
fired_gates.box_050_tax_year_end_required.applies_to_boxes[]string
fired_gates.box_050_tax_year_end_required.verified_atstring
fired_gates.box_050_tax_year_end_iso_date_format.gate_idstring
fired_gates.box_050_tax_year_end_iso_date_format.form_idstring
fired_gates.box_050_tax_year_end_iso_date_format.rulestring
fired_gates.box_050_tax_year_end_iso_date_format.cra_text_verbatimstring
fired_gates.box_050_tax_year_end_iso_date_format.sourcestring
fired_gates.box_050_tax_year_end_iso_date_format.source_urlstring
fired_gates.box_050_tax_year_end_iso_date_format.form_revisionstring
fired_gates.box_050_tax_year_end_iso_date_format.applies_to_boxes[]string
fired_gates.box_050_tax_year_end_iso_date_format.verified_atstring
fired_gates.box_010_date_filed_iso_date_format.gate_idstring
fired_gates.box_010_date_filed_iso_date_format.form_idstring
fired_gates.box_010_date_filed_iso_date_format.rulestring
fired_gates.box_010_date_filed_iso_date_format.cra_text_verbatimstring
fired_gates.box_010_date_filed_iso_date_format.sourcestring
fired_gates.box_010_date_filed_iso_date_format.source_urlstring
fired_gates.box_010_date_filed_iso_date_format.form_revisionstring
fired_gates.box_010_date_filed_iso_date_format.applies_to_boxes[]string
fired_gates.box_010_date_filed_iso_date_format.verified_atstring
fired_gates.box_020_amended_election_required.gate_idstring
fired_gates.box_020_amended_election_required.form_idstring
fired_gates.box_020_amended_election_required.rulestring
fired_gates.box_020_amended_election_required.cra_text_verbatimstring
fired_gates.box_020_amended_election_required.sourcestring
fired_gates.box_020_amended_election_required.source_urlstring
fired_gates.box_020_amended_election_required.form_revisionstring
fired_gates.box_020_amended_election_required.applies_to_boxes[]string
fired_gates.box_020_amended_election_required.verified_atstring
fired_gates.minimum_two_other_corporations_required.gate_idstring
fired_gates.minimum_two_other_corporations_required.form_idstring
fired_gates.minimum_two_other_corporations_required.rulestring
fired_gates.minimum_two_other_corporations_required.cra_text_verbatimstring
fired_gates.minimum_two_other_corporations_required.sourcestring
fired_gates.minimum_two_other_corporations_required.source_urlstring
fired_gates.minimum_two_other_corporations_required.form_revisionstring
fired_gates.minimum_two_other_corporations_required.applies_to_boxes[]string
fired_gates.minimum_two_other_corporations_required.verified_atstring
fired_gates.box_100_other_corp_name_required.gate_idstring
fired_gates.box_100_other_corp_name_required.form_idstring
fired_gates.box_100_other_corp_name_required.rulestring
fired_gates.box_100_other_corp_name_required.cra_text_verbatimstring
fired_gates.box_100_other_corp_name_required.sourcestring
fired_gates.box_100_other_corp_name_required.source_urlstring
fired_gates.box_100_other_corp_name_required.form_revisionstring
fired_gates.box_100_other_corp_name_required.applies_to_boxes[]string
fired_gates.box_100_other_corp_name_required.verified_atstring
fired_gates.box_200_other_corp_bn_required.gate_idstring
fired_gates.box_200_other_corp_bn_required.form_idstring
fired_gates.box_200_other_corp_bn_required.rulestring
fired_gates.box_200_other_corp_bn_required.cra_text_verbatimstring
fired_gates.box_200_other_corp_bn_required.sourcestring
fired_gates.box_200_other_corp_bn_required.source_urlstring
fired_gates.box_200_other_corp_bn_required.form_revisionstring
fired_gates.box_200_other_corp_bn_required.applies_to_boxes[]string
fired_gates.box_200_other_corp_bn_required.verified_atstring
fired_gates.box_200_other_corp_bn_format.gate_idstring
fired_gates.box_200_other_corp_bn_format.form_idstring
fired_gates.box_200_other_corp_bn_format.rulestring
fired_gates.box_200_other_corp_bn_format.cra_text_verbatimstring
fired_gates.box_200_other_corp_bn_format.sourcestring
fired_gates.box_200_other_corp_bn_format.source_urlstring
fired_gates.box_200_other_corp_bn_format.form_revisionstring
fired_gates.box_200_other_corp_bn_format.applies_to_boxes[]string
fired_gates.box_200_other_corp_bn_format.verified_atstring
fired_gates.other_corp_bn_distinct_from_third_corp.gate_idstring
fired_gates.other_corp_bn_distinct_from_third_corp.form_idstring
fired_gates.other_corp_bn_distinct_from_third_corp.rulestring
fired_gates.other_corp_bn_distinct_from_third_corp.cra_text_verbatimstring
fired_gates.other_corp_bn_distinct_from_third_corp.sourcestring
fired_gates.other_corp_bn_distinct_from_third_corp.source_urlstring
fired_gates.other_corp_bn_distinct_from_third_corp.form_revisionstring
fired_gates.other_corp_bn_distinct_from_third_corp.applies_to_boxes[]string
fired_gates.other_corp_bn_distinct_from_third_corp.verified_atstring
fired_gates.other_corp_bn_unique_within_election.gate_idstring
fired_gates.other_corp_bn_unique_within_election.form_idstring
fired_gates.other_corp_bn_unique_within_election.rulestring
fired_gates.other_corp_bn_unique_within_election.cra_text_verbatimstring
fired_gates.other_corp_bn_unique_within_election.sourcestring
fired_gates.other_corp_bn_unique_within_election.source_urlstring
fired_gates.other_corp_bn_unique_within_election.form_revisionstring
fired_gates.other_corp_bn_unique_within_election.applies_to_boxes[]string
fired_gates.other_corp_bn_unique_within_election.verified_atstring
fired_gates.other_corp_nr_name_unique_within_election.gate_idstring
fired_gates.other_corp_nr_name_unique_within_election.form_idstring
fired_gates.other_corp_nr_name_unique_within_election.rulestring
fired_gates.other_corp_nr_name_unique_within_election.cra_text_verbatimstring
fired_gates.other_corp_nr_name_unique_within_election.sourcestring
fired_gates.other_corp_nr_name_unique_within_election.source_urlstring
fired_gates.other_corp_nr_name_unique_within_election.form_revisionstring
fired_gates.other_corp_nr_name_unique_within_election.applies_to_boxes[]string
fired_gates.other_corp_nr_name_unique_within_election.verified_atstring
fired_gates.other_corp_rows_overflow_supplementary.gate_idstring
fired_gates.other_corp_rows_overflow_supplementary.form_idstring
fired_gates.other_corp_rows_overflow_supplementary.rulestring
fired_gates.other_corp_rows_overflow_supplementary.cra_text_verbatimstring
fired_gates.other_corp_rows_overflow_supplementary.sourcestring
fired_gates.other_corp_rows_overflow_supplementary.source_urlstring
fired_gates.other_corp_rows_overflow_supplementary.form_revisionstring
fired_gates.other_corp_rows_overflow_supplementary.applies_to_boxes[]string
fired_gates.other_corp_rows_overflow_supplementary.verified_atstring
fired_gates.third_corp_business_limit_deemed_nil.gate_idstring
fired_gates.third_corp_business_limit_deemed_nil.form_idstring
fired_gates.third_corp_business_limit_deemed_nil.rulestring
fired_gates.third_corp_business_limit_deemed_nil.cra_text_verbatimstring
fired_gates.third_corp_business_limit_deemed_nil.sourcestring
fired_gates.third_corp_business_limit_deemed_nil.source_urlstring
fired_gates.third_corp_business_limit_deemed_nil.form_revisionstring
fired_gates.third_corp_business_limit_deemed_nil.applies_to_boxes[]string
fired_gates.third_corp_business_limit_deemed_nil.verified_atstring
Filemark | schedule28 cells