schedule23

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2019 and later
Strict profile
s23_2025_two_code1_cad_v1
Payload schema version
0.6.0
Dependencies (run automatically)
schedule28

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": [
    "schedule23"
  ],
  "inputs": {
    "taxYear": 2025,
    "schedule23": {
      "calendarYear": 2025,
      "isAmendedAgreement": false,
      "rows": [
        {
          "name": "Cedar Ridge Manufacturing Inc.",
          "businessNumber": "123456782RC0001",
          "associationCode": 1,
          "businessLimitBeforeAllocation": 500000,
          "percentageOfBusinessLimit": 60,
          "businessLimitAllocated": 300000
        },
        {
          "name": "Birchline Tools Ltd.",
          "businessNumber": "222222226RC0001",
          "associationCode": 1,
          "businessLimitBeforeAllocation": 500000,
          "percentageOfBusinessLimit": 40,
          "businessLimitAllocated": 200000
        }
      ]
    }
  }
}

Input cells (17)

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 schedule23
CellTypesRequired
schedule23.calendarYearBox 050, the calendar year the agreement applies to. The engine's own sanity range; it must also equal the calendar year in which the return's tax year ends, which the engine reconciles rather than the boundary.null | numberstrict
schedule23.isAmendedAgreementBox 075. Either answer is admitted. True asserts only the submitted JSON value; it is not evidence that an original agreement exists, was filed, or was accepted.boolean | nullstrict
schedule23.rowsRows of associated corporations in the group. Practitioner adds one row per corporation (including the filing corp itself). Empty rows are elided by the backend.array
schedule23.rows[].associationCodeColumn 3, box 300. Codes 1 (associated for the allocation), 3 (non-CCPC third corporation) and 4 (associated non-CCPC). Codes 2 and 5 are excluded: both are defined by a third corporation having FILED the Schedule 28 election under ITA subparagraph 256(2)(b)(ii), this payload has no field able to evidence that filing, and the engine therefore fails them closed unconditionally. Codes 3 and 4 require column 4 to be 0 and take no percentage.integer | null | objectstrict
schedule23.rows[].businessLimitAllocatedColumn 6, box 400. Optional: supply the explicit amount, or omit the key (or send null) to take the engine's computed column 4 x column 5 / 100 substitution, which raises the advisory box_400_blank_uses_computed_value warning on a code-1 row. A supplied value that disagrees with the computation is admitted and answered by box_400_equals_column_4_times_column_5.null | number
schedule23.rows[].businessLimitBeforeAllocationColumn 4, Filemark-synthetic box 320. Nonnegative amount capped at the ITA s.125(2) federal business-limit baseline. Code 1 must equal that pre-allocation baseline (box_320_code_1_equals_federal_baseline); amounts above it fire box_320_business_limit_at_most_federal_limit. Must be 0 for codes 2, 3, and 4 per the printed column instruction.null | numberstrict
schedule23.rows[].businessNumberColumn 2, box 200. Either the CRA 15-character program account (9 digits + 2 uppercase letters + 4 digits) or the 'NR' sentinel for an unregistered corporation. Syntactic only: no checksum, registration, identity, CCPC-status, or association claim. Repeating a registered number across rows is admitted and answered by the engine's duplicate_registered_business_number gate.null | stringstrict
schedule23.rows[].nameColumn 1, box 100. Free corporation label; not a legal-name or identity assertion and not verified against any registry.null | stringstrict
schedule23.rows[].percentageOfBusinessLimitColumn 5, box 350, in percent units. Only code-1 rows may carry a non-zero percentage, and the column-5 total across rows must not exceed 100; both are engine gates rather than boundary rejections.null | numberstrict
schedule23.rows[].thirdCorporationBusinessNumberFilemark evidence for a code-5 row using the automatic s.256(2)(b)(i) branch: the code-3 non-CCPC third corporation that is common to the filer and this row. Not a printed Schedule 23 column.null | string
schedule23.thirdCorporationSchedule28ElectionsITA 256(2)(b)(ii) evidence for association codes 2/5. OPTIONAL: blobs persisted before this capture surface existed do not carry the key, and an absent key is not an empty answer — the S23 code-2/5 gate keeps blocking until evidence is entered.array
schedule23.thirdCorporationSchedule28Elections[].businessNumberThe ELECTING third corporation's business number — nine-digit root or the full 15-character program account. "NR" is not accepted: it cannot identify which corporation elected.null | string
schedule23.thirdCorporationSchedule28Elections[].coveredCorporationBusinessNumbersBusiness numbers of the corporations enumerated on that filed Schedule 28. At least two distinct registered BN roots are required; the electing third corporation itself is not one of them. An empty list is unanswered and contributes no evidence.array
schedule23.thirdCorporationSchedule28Elections[].electionTaxYearEndThe taxation year end the third corporation's Schedule 28 election was filed for (ISO YYYY-MM-DD). ITA 256(2)(b)(ii) requires the election to be made "in its taxation year that includes the particular time", so this is bound to the filer's period by the backend.null | string
schedule23.thirdCorporationSchedule28Elections[].electionTaxYearStartStart of the third corporation's election taxation year (ISO YYYY-MM-DD). Together with the end, this proves actual period overlap.null | string
schedule23.thirdCorporationSchedule28Elections[].filedSchedule28ConfirmedExplicit confirmation that the election was FILED. null = unanswered. Anything other than true contributes no evidence — never a silent affirmative.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 | stringalways
Strict profile accepted values (8 of 17 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 schedule23
CellAccepted values
schedule23.calendarYear2019 to 2099
schedule23.rows[].associationCodeone of 1, 3, 4
schedule23.rows[].businessLimitAllocated0 to 500000
schedule23.rows[].businessLimitBeforeAllocation0 to 500000
schedule23.rows[].businessNumbermatches ^(NR|[0-9]{9}[A-Z]{2}[0-9]{4})$; 0 to 20000 characters
schedule23.rows[].name1 to 2000 characters
schedule23.rows[].percentageOfBusinessLimit0 to 100
taxYearmatches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027

Output cells (32)

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

Output cells for schedule23
CellTypes
calendar_yearinteger | null
is_amended_agreementboolean | null
rows[].associationCodeinteger | null
rows[].businessLimitAllocatednumber
rows[].businessLimitBeforeAllocationnumber
rows[].businessNumbernull | string
rows[].namenull | string
rows[].percentageOfBusinessLimitnumber
rows[].thirdCorporationBusinessNumberarray | boolean | null | number | object | string
total_allocatedLine A, returned as a decimal string.string
total_percentageReturned as a decimal string.string
warnings[].boxstring
warnings[].citation.applies_to_boxes[]string
warnings[].citation.cra_text_verbatimstring
warnings[].citation.form_idstring
warnings[].citation.form_revisionstring
warnings[].citation.gate_idstring
warnings[].citation.rulestring
warnings[].citation.sourcestring
warnings[].citation.source_urlstring
warnings[].citation.verified_atstring
warnings[].gate_idstring
warnings[].messagestring
warnings[].severitystring
warnings[].codestring
warnings[].notesstring
warnings[].sectionstring
warnings[].taxYearinteger
fired_gatesobject
provisionalboolean
readyboolean
section125NotAssociatedBnRootsarray
Filemark | schedule23 cells