schedule58
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- 2023 and later
- Strict profile
- s58_single_employee_2024_profile_target_value_v1
- Payload schema version
- 0.7.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": [
"schedule58"
],
"inputs": {
"taxYear": 2025,
"schedule58": {
"isQjo": "Y",
"qjoPeriodFrom": "2025-01-01",
"qjoPeriodTo": "2025-12-31",
"qcjoDesignationNumber": "1234567",
"part3Rows": [
{
"employeeName": "Jane Smith",
"salaryOrWagesPayable": 50000
}
],
"line135AidToPublishers": 0
},
"fiscalStart": "2025-01-01",
"fiscalEnd": "2025-12-31"
}
}Input cells (31)
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 |
|---|---|---|
| fiscalEndThe filer-owned taxation-period end used to reconcile the Schedule 58 QJO period and taxYear. | string | strict |
| fiscalStartThe filer-owned taxation-period start used to reconcile the Schedule 58 QJO period. | string | strict |
| schedule58.businessNumberThe corporation's CRA business number used to identify the Schedule 58 instalment calculation. The value must agree with the return identity supplied elsewhere in the request. | null | string | |
| schedule58.corporationIdThe stable corporation identifier carried by the Schedule 58 instalment calculation. It identifies the filer and is not a substitute for the CRA business number. | null | string | |
| schedule58.holdsBroadcastingLicencePractitioner-asserted: corp holds a Broadcasting Act s.2(1) licence? When 'Y' AND isQjo='Y', engine errors per s.125.6(1). | null | string | |
| schedule58.isQjoBox 070 — Did you meet QJO conditions at any time in tax year? | null | string | strict |
| schedule58.line130PartnershipAllocatedCreditBox 130 — CJLT credit allocated from partnerships (T5013/letter). | null | number | |
| schedule58.line135AidToPublishersITA 125.6(2)(b) subtracts "the amount received by the taxpayer from the Aid to Publishers component of the Canada Periodical Fund in the year" from the credit. Box 135 is an ANSWER, not an optional field: an explicit 0 is the affirmative "no receipt" answer this profile pins, while a blank box blocks the schedule and withholds the T2 line 798 feed. The submitted 0 is not proof that no Aid to Publishers amount was in fact received. | null | number | strict |
| schedule58.part3Rows | array | |
| schedule58.part3Rows[].amountOfAssistanceBox 115 (col 4) — Assistance received/receivable (excludes Aid to Publishers + the s.125.6(2) credit itself + amounts repaid pre-year-end). | null | number | |
| schedule58.part3Rows[].atLeast75PctOriginalNewsContentTimeParagraph (d) — does the employee spend at least 75% of their time producing ORIGINAL WRITTEN NEWS CONTENT (including researching, collecting information, verifying facts, photographing, writing, editing, designing and otherwise preparing content)? | boolean | null | |
| schedule58.part3Rows[].averageWeeklyHoursParagraph (b) — average number of hours per week the employee works for the QJO. Must be at least 26 to qualify; the engine raises a separate error below that threshold. Blank is not zero. | null | number | |
| schedule58.part3Rows[].col10CurrentQLEBox 122 (col 10) — QLE = min(col 8, col 9). | null | number | |
| schedule58.part3Rows[].col11CreditAmountBox 125 (col 11) — col 7 × 0.25 + col 10 × 0.35. | null | number | |
| schedule58.part3Rows[].col5LowThresholdNetTimesADerived col 5 — (col 3 − col 4) × Amount A. | null | number | |
| schedule58.part3Rows[].col6LowThresholdCapDerived col 6 — $55,000 × (days_pre_2023_qjo / 365). | null | number | |
| schedule58.part3Rows[].col7LowThresholdQLEBox 120 (col 7) — Low-threshold QLE = min(col 5, col 6). | null | number | |
| schedule58.part3Rows[].col8CurrentNetTimesBDerived col 8 — (col 3 − col 4) × Amount B. | null | number | |
| schedule58.part3Rows[].col9CurrentCapDerived col 9 — $85,000 × (days_post_2022_qjo / 365). | null | number | |
| schedule58.part3Rows[].employeeNameBox 100 (col 1) — Name of eligible newsroom employee. | null | string | strict |
| schedule58.part3Rows[].fortyConsecutiveWeeksTestMetParagraph (c) — is the employee employed for a minimum of 40 CONSECUTIVE weeks in the tax year? | boolean | null | |
| schedule58.part3Rows[].salaryOrWagesPayableBox 110 (col 3) — Salary or wages payable in respect of QJO portion of the tax year. | null | number | string | strict |
| schedule58.part3Rows[].socialInsuranceNumberBox 105 (col 2) — Social insurance number. | null | string | |
| schedule58.partnershipFiscalPeriodEndEnd of the partnership's fiscal period (ISO YYYY-MM-DD). It must end IN the corporation's tax year; the engine range-checks it against the corporation's fiscal dates when both are known. | null | string | |
| schedule58.partnershipMemberNotSpecifiedMemberAttestedOpening words of s.125.6(2.1) — the corporation must NOT be a specified member of the partnership; a specified member is excluded outright. Confirm the corporation is not one. | boolean | null | |
| schedule58.partnershipPrescribedReturnFiledAttestedHas the partnership filed the prescribed return (information return) for the fiscal period? | boolean | null | |
| schedule58.partnershipWasQjoInFiscalPeriodAttestedWas the PARTNERSHIP a qualifying journalism organization throughout the fiscal period? | boolean | null | |
| schedule58.qcjoDesignationNumberBox 095 — seven designation digits; the form supplies the Q prefix. | null | string | strict |
| schedule58.qjoPeriodFromBox 050 — QJO period start (yyyy/mm/dd). | null | string | strict |
| schedule58.qjoPeriodToBox 060 — QJO period end (yyyy/mm/dd). | null | string | 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 |
Strict profile accepted values (11 of 31 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 |
|---|---|
| fiscalEnd | date (YYYY-MM-DD); 10 to 10 characters |
| fiscalStart | date (YYYY-MM-DD); 10 to 10 characters |
| schedule58.holdsBroadcastingLicence | one of "Y", "N" |
| schedule58.isQjo | one of "Y", "N", null |
| schedule58.line135AidToPublishers | -1000000000000000 to 1000000000000000 |
| schedule58.part3Rows[].employeeName | 0 to 20000 characters |
| schedule58.part3Rows[].salaryOrWagesPayable | -1000000000000000 to 1000000000000000; 0 to 20000 characters |
| schedule58.qcjoDesignationNumber | 0 to 20000 characters |
| schedule58.qjoPeriodFrom | 0 to 20000 characters |
| schedule58.qjoPeriodTo | 0 to 20000 characters |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
Output cells (56)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| amount_a_pre_2023_fraction | number |
| amount_b_post_2022_fraction | number |
| amount_c_total_col_11 | number |
| amount_d_subtotal | number |
| amount_e_cjlt_credit | number |
| days_post_2022_qjo | integer |
| days_pre_2023_qjo | integer |
| days_total_qjo | integer |
| fired_gates | object |
| line_050 | null | string |
| line_060 | null | string |
| line_070 | null | string |
| line_095 | null | string |
| line_100 | null | string |
| line_105 | array | boolean | null | number | object | string |
| line_110 | number |
| line_115 | number |
| line_120 | number |
| line_122 | number |
| line_125 | number |
| line_130 | number |
| line_135 | number |
| missing_required[] | string |
| part3Rows[].amountOfAssistance | number |
| part3Rows[].col10CurrentQLE | number |
| part3Rows[].col11CreditAmount | number |
| part3Rows[].col5LowThresholdNetTimesA | number |
| part3Rows[].col6LowThresholdCap | number |
| part3Rows[].col7LowThresholdQLE | number |
| part3Rows[].col8CurrentNetTimesB | number |
| part3Rows[].col9CurrentCap | number |
| part3Rows[].employeeName | null | string |
| part3Rows[].netSalaryOrWages | number |
| part3Rows[].salaryOrWagesPayable | number |
| part3Rows[].socialInsuranceNumber | array | boolean | null | number | object | string |
| provisional | boolean |
| ready | boolean |
| t2_line_798_feed_cjlt_credit | number |
| warnings[].box | 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[].message | string |
| warnings[].severity | string |
| warnings[].code | string |
| warnings[].notes | string |
| warnings[].section | string |
| warnings[].taxYear | integer |
| line_135_answered | boolean |