schedule49

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2024 and later
Strict profile
s49_two_ccpc_allocation_profile_target_value_v1
Payload schema version
0.7.0
Dependencies (run automatically)
schedule23

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": [
    "schedule49"
  ],
  "inputs": {
    "taxYear": 2025,
    "fiscalStart": "2025-01-01",
    "fiscalEnd": "2025-12-31",
    "priorTaxYearEnd": "2024-12-31",
    "isCCPC": true,
    "priorYearGroupTCEC": 30000000,
    "priorYearGroupTCECMeta": {
      "basis": "associated_group_preceding_calendar_year",
      "asOf": "2024-12-31",
      "source": "associated group filed returns",
      "confirmed": true
    },
    "schedule49": {
      "calendarYear": 2025,
      "isAmendedAgreement": false,
      "rows": [
        {
          "name": "Cedar Ridge Manufacturing Inc.",
          "businessNumber": "123456782RC0001",
          "typeOfCorporationCode": 1,
          "expenditureLimitAllocated": 900000
        },
        {
          "name": "Birchline Tools Ltd.",
          "businessNumber": "222222226RC0001",
          "typeOfCorporationCode": 1,
          "expenditureLimitAllocated": 100000
        }
      ],
      "rosterComplete": true,
      "expenditureLimit": null,
      "amountB": null,
      "sameCalendarYearAssociationTestComplete": true,
      "sameCalendarYearAllocationRuleApplies": null,
      "firstSameCalendarYearFilerAllocation": null
    }
  }
}

Input cells (26)

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 schedule49
CellTypesRequired
filingCorpBnstringstrict
fiscalEndstringstrict
fiscalStartstringstrict
isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year.booleanstrict
priorTaxYearEndstringstrict
priorYearGroupTCECintegerstrict
priorYearGroupTCECMeta.asOfstringstrict
priorYearGroupTCECMeta.basisstringstrict
priorYearGroupTCECMeta.confirmedConfirms the associated group's prior-year taxable capital employed in Canada figure, the operand of the ITA s.125(5.1) business-limit reduction.booleanstrict
priorYearGroupTCECMeta.sourcestringstrict
schedule49.amountBOptional legacy/imported box 495 value used only for reconciliation. The box remains the form's TCEC Amount A. It is not repurposed as the s.127(10.6) revenue variable when Schedule 31 line 383 elects the revenue-based limit. The engine key stays `amountB` for compatibility.null | number
schedule49.calendarYearBox 050 — Four-digit calendar year. E (26) coverage starts in 2024.null | numberstrict
schedule49.expenditureLimitOptional legacy/imported box 410 value used only to reconcile against the backend's canonical, period-aware result. It is not a calculation input and may be cleared; under-allocation of column 4 is permitted.null | number
schedule49.firstSameCalendarYearFilerAllocationReviewed evidence for the filing corporation's Schedule 49 allocation in its first taxation year in which it was associated with the other CCPC in the current calendar year. Required only when `sameCalendarYearAllocationRuleApplies` is true; the backend matches it to the filing BN and enforces the s.127(10.5)(a) carry-through rule. This is evidence, not a derived box.null | number
schedule49.isAmendedAgreementT2 SCH 49 box 075: this is an amended s.127(10.3) expenditure-limit allocation agreement.boolean | nullstrict
schedule49.rosterCompletePreparer attestation that every associated CCPC required by s.127(10.3) is a party to the agreement; row count alone cannot prove group completeness.boolean | nullstrict
schedule49.rowsRows of associated corporations in the group (CCPCs + non-CCPCs).array
schedule49.rows[].businessNumberBox 200 — Column 2: business number (CRA 15-character format or "NR").null | stringstrict
schedule49.rows[].expenditureLimitAllocatedBox 400 — Column 4: expenditure limit allocated $. Must be 0 when typeOfCorporationCode is 2 — only associated CCPCs share the expenditure limit allocated under s.127(10.3). The group ceiling is ordinarily the s.127(10.2) TCEC amount, or the s.127(10.32)/(10.6) revenue amount when the associated CCPCs make the reform-year election.null | numberstrict
schedule49.rows[].nameBox 100 — Column 1: legal name of the associated corporation.null | stringstrict
schedule49.rows[].typeOfCorporationCodeBox 300 — Column 3: corporation-type code (1 = CCPC, 2 = non-CCPC).null | number | objectstrict
schedule49.s127_10_22ExclusionsBusiness numbers of corporations deemed not associated by ITA subsection 127(10.22) for the purpose of determining the expenditure limit, so they are lawfully omitted from the s.127(10.3) agreement while staying on the s.125(3) business-limit roster. Each entry is a registered nine-digit business-number root. The engine cannot derive the test, so the list is published exactly as the return states it; an absent key declares none, and an entry it cannot read holds Schedule 49 instead of shortening the roster into a false reconciliation.array | null
schedule49.sameCalendarYearAllocationRuleAppliesConfirms the full s.127(10.5)(a) relational condition: the filer had an earlier taxation year ending in the same calendar year in which it was associated with the same other CCPC.boolean | null
schedule49.sameCalendarYearAssociationTestCompleteAttestation that the s.127(10.5)(a) same-calendar-year association test was completed, including that any prior amount is from the first such associated taxation year.boolean | nullstrict
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
wasAssociatedInPrecedingYearThe corporation was associated with at least one other corporation in the preceding taxation year; prior-year continuity fact for association-driven limits.booleanstrict
Strict profile accepted values (17 of 26 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 schedule49
CellAccepted values
filingCorpBn0 to 20000 characters
fiscalEnddate (YYYY-MM-DD); 10 to 10 characters
fiscalStartdate (YYYY-MM-DD); 10 to 10 characters
priorTaxYearEnd0 to 20000 characters
priorYearGroupTCEC-1000000000000000 to 1000000000000000
priorYearGroupTCECMeta.asOf0 to 20000 characters
priorYearGroupTCECMeta.basis0 to 20000 characters
priorYearGroupTCECMeta.source0 to 20000 characters
schedule49.amountB-1000000000000000 to 1000000000000000
schedule49.calendarYear-1000000000000000 to 1000000000000000
schedule49.expenditureLimit-1000000000000000 to 1000000000000000
schedule49.firstSameCalendarYearFilerAllocation-1000000000000000 to 1000000000000000
schedule49.rows[].businessNumber0 to 20000 characters
schedule49.rows[].expenditureLimitAllocated-1000000000000000 to 1000000000000000
schedule49.rows[].name0 to 20000 characters
schedule49.rows[].typeOfCorporationCode-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 (38)

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

Output cells for schedule49
CellTypes
amount_barray | boolean | null | number | object | string
calendar_yearinteger
expenditure_limitstring
fired_gatesobject
first_same_calendar_year_filer_allocationnull | string
formRevisionstring
is_amended_agreementboolean
provisionalboolean
readyboolean
reported_amount_barray | boolean | null | number | object | string
reported_expenditure_limitarray | boolean | null | number | object | string
rows[].businessNumberstring
rows[].expenditureLimitAllocatednumber
rows[].expenditureLimitAllocatedValidboolean
rows[].namestring
rows[].typeOfCorporationCodeinteger
same_calendar_year_allocation_rule_appliesboolean | null
same_calendar_year_later_returnboolean
tcec_authoritative_input_providedboolean
tcec_input_metadataarray | boolean | null | number | object | string
tcec_input_sourcestring
total_allocatedstring
warnings[].boxstring
warnings[].messagestring
warnings[].severitystring
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[].kindThe finding's classifier, on the notices that carry one alongside the box-scoped gate. Absent on the gate findings the reviewed witness raises.string
warnings[].codestring
filer_allocationarray | boolean | null | number | object | string
Filemark | schedule49 cells