schedule9

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2011 and later
Strict profile
s9_versioned_profile_target_value_v1
Payload schema version
0.3.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": [
    "schedule9"
  ],
  "inputs": {
    "taxYear": 2025,
    "schedule9": {
      "rows": [
        {
          "name": "Birchline Tools Ltd.",
          "businessNumber": "222222226",
          "relationshipCode": 3,
          "commonShareCount": 100,
          "commonSharePercent": 25,
          "preferredShareCount": 0,
          "preferredSharePercent": 0,
          "bookValueCapitalStock": 125000
        }
      ]
    }
  }
}

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.

Input cells for schedule9
CellTypesRequired
schedule9.rowsThe printed form has 14 rows. Empty rows are no-ops. Filemark retains row 15+ and blocks its current export pending filing-method review; the current public form does not prescribe an overflow carrier.array
schedule9.rows[].bookValueCapitalStockBounded submitted JSON number whose sign is preserved. The symmetric range is the printed form's own capacity for box 700: the fillable Schedule 9 XFA binds that cell (AllocationTable Row*.Cell9) to CoreFunctions.validateKeystrokeNumeric(this, 12, false), a 12-digit keystroke validator whose false positiveOnly argument permits negatives, so the form carries at most 999,999,999,999 in either direction. Values outside that are unfileable and can only reach the unready branch this contract's output schema refuses. The bound is a form-capacity fact, not a tax-cost or impairment conclusion.null | numberstrict
schedule9.rows[].businessNumberA nine-digit submitted BN root. Schedule 9 Note 1 admits NR for a corporation with no business number; this branch states a number instead, and the engine checks it against the federal Modulus-10 rule before the row is filed, so a digit string that fails the check holds the schedule rather than filing an invented BN. Format and checksum conformance do not verify that the number exists or belongs to the named corporation.null | stringstrict
schedule9.rows[].commonShareCountPositive whole-number branch restriction under Filemark's mechanical policy. The upper bound is the printed form's own capacity for box 500: the fillable Schedule 9 XFA binds that cell (AllocationTable Row*.Cell5) to CoreFunctions.validateKeystrokeNumeric(this, 11, false), an 11-digit keystroke validator, so 99,999,999,999 is the largest value the CRA form can carry. Larger values are unfileable and can only reach the unready branch this contract's output schema refuses, so they are rejected before execution.null | numberstrict
schedule9.rows[].commonSharePercentPositive integer percent-unit branch restriction. The engine also supports up to two decimal places, but this candidate intentionally excludes that wider branch.null | numberstrict
schedule9.rows[].countryOfResidenceThis narrow branch leaves the printed other-than-Canada country field blank. Blank does not prove Canadian residence.null | string
schedule9.rows[].nameA single-line corporation 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 maximum.null | stringstrict
schedule9.rows[].preferredShareCountBox 600 — Number of preferred shares the filing corp owns. Filemark requires a non-negative integer.null | numberstrict
schedule9.rows[].preferredSharePercentBox 650 — % of preferred shares the filing corp owns. Same Filemark percent-unit and precision policy as box 550.null | numberstrict
schedule9.rows[].relationshipCodeLiteral Schedule 9 Note 2 value 3, Associated. This submitted code is corroborating disclosure only and is not an independent legal association determination.null | number | objectstrict
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 (10 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.

Strict profile accepted values for schedule9
CellAccepted values
schedule9.rows[].bookValueCapitalStock-999999999999 to 999999999999
schedule9.rows[].businessNumbermatches ^[0-9]{9}$; 0 to 9 characters
schedule9.rows[].commonShareCount1 to 99999999999
schedule9.rows[].commonSharePercent1 to 100
schedule9.rows[].countryOfResidence0 to 20000 characters
schedule9.rows[].namematches ^(?=\S)(?:[^\r\n]*\S)?$; 1 to 10000 characters
schedule9.rows[].preferredShareCount-1000000000000000 to 1000000000000000
schedule9.rows[].preferredSharePercent-1000000000000000 to 1000000000000000
schedule9.rows[].relationshipCode-1000000000000000 to 1000000000000000
taxYearmatches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027

Output cells (47)

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

Output cells for schedule9
CellTypes
rows_countinteger
rows[].row_labelinteger
rows[].namenull | string
rows[].countryOfResidencenull | string
rows[].businessNumbernull | string
rows[].relationshipCodeinteger | null
rows[].commonShareCountinteger | null
rows[].commonSharePercentnull | number
rows[].preferredShareCountinteger | null
rows[].preferredSharePercentnull | number
rows[].bookValueCapitalStocknull | number
relationship_breakdown.1integer
relationship_breakdown.2integer
relationship_breakdown.3integer
relationship_breakdown.4integer
has_code_3_rowsboolean
has_code_1_rowsboolean
has_associated_corpsTrue when ANY disclosed row carries Note 2 relationship code 1, 2 or 3. ITA 256(1)(a) is symmetric in the two corporations, so both printed control labels report an associated corporation whichever way the form means the direction of its Parent/Subsidiary labels, and code 4 (Related but not associated) is the form's only affirmative not-associated answer. It remains a disclosure projection off the printed relationship codes, not an independent legal association conclusion. This branch admits a code-3-only roster, so the projection is pinned true.boolean
has_subsidiary_corpsLegacy compatibility alias for the raw code-1 projection. It does not establish row direction or control.boolean
warningsarray
fired_gates.filing_required_when_related_or_associatedobject
provisionalboolean
readyboolean
warnings[].codestring
warnings[].messagestring
warnings[].notesstring
warnings[].sectionstring
warnings[].severitystring
warnings[].taxYearinteger
coverageStatusstring
coverageReasonstring
formIdstring
formRevisionstring
taxYearinteger
missing_requiredarray
warnings[].boxThe form box the finding is about, or null when the finding is about the return rather than a printed box.null | string
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
fired_gatesEvery registered gate this result raised, keyed by gate identifier.object
Filemark | schedule9 cells