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.
| Cell | Types | Required |
|---|---|---|
| filingCorpBn | string | strict |
| fiscalEnd | string | strict |
| fiscalStart | string | strict |
| isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year. | boolean | strict |
| priorTaxYearEnd | string | strict |
| priorYearGroupTCEC | integer | strict |
| priorYearGroupTCECMeta.asOf | string | strict |
| priorYearGroupTCECMeta.basis | string | strict |
| 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. | boolean | strict |
| priorYearGroupTCECMeta.source | string | strict |
| 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 | number | strict |
| 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 | null | strict |
| 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 | null | strict |
| 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 | string | strict |
| 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 | number | strict |
| schedule49.rows[].nameBox 100 — Column 1: legal name of the associated corporation. | null | string | strict |
| schedule49.rows[].typeOfCorporationCodeBox 300 — Column 3: corporation-type code (1 = CCPC, 2 = non-CCPC). | null | number | object | strict |
| 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 | null | 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 |
| wasAssociatedInPrecedingYearThe corporation was associated with at least one other corporation in the preceding taxation year; prior-year continuity fact for association-driven limits. | boolean | strict |
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.
| Cell | Accepted values |
|---|---|
| filingCorpBn | 0 to 20000 characters |
| fiscalEnd | date (YYYY-MM-DD); 10 to 10 characters |
| fiscalStart | date (YYYY-MM-DD); 10 to 10 characters |
| priorTaxYearEnd | 0 to 20000 characters |
| priorYearGroupTCEC | -1000000000000000 to 1000000000000000 |
| priorYearGroupTCECMeta.asOf | 0 to 20000 characters |
| priorYearGroupTCECMeta.basis | 0 to 20000 characters |
| priorYearGroupTCECMeta.source | 0 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[].businessNumber | 0 to 20000 characters |
| schedule49.rows[].expenditureLimitAllocated | -1000000000000000 to 1000000000000000 |
| schedule49.rows[].name | 0 to 20000 characters |
| schedule49.rows[].typeOfCorporationCode | -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 (38)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| amount_b | array | boolean | null | number | object | string |
| calendar_year | integer |
| expenditure_limit | string |
| fired_gates | object |
| first_same_calendar_year_filer_allocation | null | string |
| formRevision | string |
| is_amended_agreement | boolean |
| provisional | boolean |
| ready | boolean |
| reported_amount_b | array | boolean | null | number | object | string |
| reported_expenditure_limit | array | boolean | null | number | object | string |
| rows[].businessNumber | string |
| rows[].expenditureLimitAllocated | number |
| rows[].expenditureLimitAllocatedValid | boolean |
| rows[].name | string |
| rows[].typeOfCorporationCode | integer |
| same_calendar_year_allocation_rule_applies | boolean | null |
| same_calendar_year_later_return | boolean |
| tcec_authoritative_input_provided | boolean |
| tcec_input_metadata | array | boolean | null | number | object | string |
| tcec_input_source | string |
| total_allocated | string |
| warnings[].box | string |
| warnings[].message | string |
| warnings[].severity | 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[].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[].code | string |
| filer_allocation | array | boolean | null | number | object | string |