schedule4

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2024 and later
Strict profile
s4_2025_single_non_capital_loss_application_target_value_v1
Payload schema version
0.9.0
Dependencies (run automatically)
schedule1, schedule130, schedule2, schedule24, schedule3, schedule43, schedule6

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": [
    "schedule4"
  ],
  "inputs": {
    "taxYear": 2025,
    "fiscalStart": "2025-01-01",
    "fiscalEnd": "2025-12-31",
    "accounts": [
      {
        "id": "acct-revenue-target",
        "accountCode": "8000",
        "accountName": "Cedar Ridge sales revenue",
        "currentYearBalance": -100000,
        "userStatus": "default",
        "reviewStatus": "default",
        "classification": {
          "schedule1Relevant": false,
          "treatment": "no_adjustment",
          "deductibility": "100%",
          "assumption": "Caller-supplied book-income fact"
        }
      },
      {
        "id": "acct-tax-penalty-target",
        "accountCode": "9000",
        "accountName": "Interest and penalties on taxes",
        "currentYearBalance": 1000,
        "userStatus": "default",
        "reviewStatus": "default",
        "classification": {
          "schedule1Relevant": true,
          "adjustmentType": "addition",
          "treatment": "full_addition",
          "deductibility": "0%",
          "assumption": "Caller-supplied line-103 classification; legal deductibility not verified",
          "s1Line": "103"
        }
      }
    ],
    "incomeStatementFlags": {
      "acct-revenue-target": true,
      "acct-tax-penalty-target": true
    },
    "workpapers": [],
    "pyLossPools": [
      {
        "type": "non_capital",
        "yearOfOrigin": 2022,
        "originalAmount": 50000,
        "remainingBalance": 50000,
        "applied": {}
      }
    ],
    "lossElections": [],
    "claimMaximumLosses": true,
    "isCCPC": true,
    "daysInYear": 365
  }
}

Input cells (92)

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 schedule4
CellTypesRequired
accounts[].accountCodestringstrict
accounts[].accountNamestringstrict
accounts[].classification.adjustmentTypenull | string
accounts[].classification.assumptionstringstrict
accounts[].classification.deductibilitystringstrict
accounts[].classification.deductibilityPercentagenull | number | string
accounts[].classification.deductibilityRulestring
accounts[].classification.ruleIdnull | string
accounts[].classification.s1Linestringstrict
accounts[].classification.schedule1RelevantMarks the account's concept as one to review for Schedule 1. It does not decide the posting; the classification's line and treatment do.booleanstrict
accounts[].classification.templateIdnull | string
accounts[].classification.treatmentstringstrict
accounts[].currentYearBalanceintegerstrict
accounts[].idstringstrict
accounts[].reviewStatusstringstrict
accounts[].userStatusstringstrict
businessCarriedOnThroughoutByBusinessITA 111(5)(a)(i) conclusion for each named pre-event business. False is a completed No answer; omit an unanswered business.object
claimMaximumLossesITA s.111(1) deducts "such portion as the taxpayer may claim", so the claim is an answer and not a default. True asks for every deductible pool in full, up to the income limits, and is the alternative to stating lossElections rows. The two answers are mutually exclusive: this witness states the maximum instruction and carries no election rows.booleanstrict
daysInYearInclusive day count for the canonical fiscalStart/fiscalEnd period required by the settled Part I dependency closure.integerstrict
fiscalEndstringstrict
fiscalStartstringstrict
incomeStatementFlags.acct-revenue-targetTrue when the trial-balance account with this id is an income-statement account; flagged balances form net income per financial statements, Schedule 1 amount A.booleanstrict
incomeStatementFlags.acct-tax-penalty-targetTrue when the trial-balance account with this id is an income-statement account; flagged balances form net income per financial statements, Schedule 1 amount A.booleanstrict
isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year.boolean
limitedPartnershipClaimDeniedUnder18_2_2Portion of the current-year limited-partnership loss claim denied under ITA 18.2(2). Omit while unanswered; 0 confirms that no claimed amount was denied. The full claim still reduces the loss balance under s.111(3)(a).number
lossElections[].requestedAmountThe portion claimed against that pool, in dollars. This witness claims $20,000 of the $50,000 pool and preserves the $30,000 balance; 0 is a lawful nil claim that preserves the whole pool. The engine applies the stated amount subject to the s.111(1) income limits and never more.integerstrict
lossElections[].typeLoss pool class the claim is made against. It must match a pyLossPools row: the election names the pool s.111(1) deducts from.stringstrict
lossElections[].yearOfOriginTaxation year the loss arose in, identifying the pool the claim consumes for the s.111(3) continuity.integerstrict
pyLossPools[].appliedobjectstrict
pyLossPools[].originalAmountintegerstrict
pyLossPools[].remainingBalanceintegerstrict
pyLossPools[].typestringstrict
pyLossPools[].yearOfOriginintegerstrict
sameOrSimilarBusinessIncomeByBusinessITA 111(5)(a)(ii) income ceiling for each named pre-event business. Keys match `businessId` on Schedule 4 loss pools; omit an unanswered business, while 0 confirms a nil ceiling.object
schedule4.currentYearNonCapitalLossCurrent-year non-capital loss created per s.111(8) (also present as a current-year pool in newPools / poolContinuity).number
schedule4.expiredPoolsarray
schedule4.formPresent when the engine attached the form projection (the batch path).object
schedule4.form.formWarningsarray
schedule4.form.part6Tablearray
schedule4.form.part6Table[].farmnumber
schedule4.form.part6Table[].lppnumber
schedule4.form.part6Table[].nonCapitalnumber
schedule4.form.part6Table[].restrictedFarmnumber
schedule4.form.part6Table[].yearYear of origin (column 1) — a string identifier, never thousands-separated.string
schedule4.form.part7Table1array
schedule4.form.part7Table1[].accountFirst9string
schedule4.form.part7Table1[].accountLast4string
schedule4.form.part7Table1[].atRiskAmountnumber
schedule4.form.part7Table1[].atRiskReducersnumber
schedule4.form.part7Table1[].atRiskRoomnumber
schedule4.form.part7Table1[].currentYearLPLossnumber
schedule4.form.part7Table1[].fiscalYearEndstring
schedule4.form.part7Table1[].shareOfLossnumber
schedule4.form.part7Table2array
schedule4.form.part7Table2[].accountFirst9string
schedule4.form.part7Table2[].accountLast4string
schedule4.form.part7Table2[].applicableMaxnumber
schedule4.form.part7Table2[].atRiskAmountnumber
schedule4.form.part7Table2[].atRiskReducersnumber
schedule4.form.part7Table2[].atRiskRoomnumber
schedule4.form.part7Table2[].availablePriorLossnumber
schedule4.form.part7Table2[].fiscalYearEndstring
schedule4.form.part7Table3array
schedule4.form.part7Table3[].accountFirst9string
schedule4.form.part7Table3[].accountLast4string
schedule4.form.part7Table3[].appliednumber
schedule4.form.part7Table3[].closingnumber
schedule4.form.part7Table3[].currentYearLPLossnumber
schedule4.form.part7Table3[].openingnumber
schedule4.form.part7Table3[].transferrednumber
schedule4.incomeLimitsobject
schedule4.lossesAppliednumber
schedule4.newPoolsarray
schedule4.poolContinuityarray
schedule4.poolContinuity[].appliedobject
schedule4.poolContinuity[].expiredboolean
schedule4.poolContinuity[].expiryClockstring
schedule4.poolContinuity[].expiryYearnull | number
schedule4.poolContinuity[].lossYearEndstring
schedule4.poolContinuity[].lossYearStartThe loss YEAR's own bounds (ISO). s.111(1.1)(a)(ii) variable C is the s.38 fraction "for the loss year", which S.C. 2001, c. 17, s. 22(5) selects from these dates — `yearOfOrigin` is a calendar label and cannot recover it for a year that straddles a transition.string
schedule4.poolContinuity[].originalAmountnumber
schedule4.poolContinuity[].originalInclusionRateScale: 0–1 fraction. Same scale as Schedule6Data.inclusionRate.number
schedule4.poolContinuity[].partIVAppliedSeparate s.186(1)(c)/(d) debit ledger; never merged into the Part I `applied` amounts that print on Schedule 4 lines 130/330.object
schedule4.poolContinuity[].preAoCboolean
schedule4.poolContinuity[].remainingBalancenumber
schedule4.poolContinuity[].taxationYearsElapsedHow many TAXATION years have elapsed since the loss year, and which clock produced that count. s.111(1)(a) gives a non-capital loss "the 20 taxation years immediately preceding and the 3 taxation years immediately following the year"; `expiryYear` above is a calendar LABEL (the printed form has no other column), so without these a reader cannot tell a taxation-year expiry from a calendar one. Absent when the corporation's period sequence could not be proven.number
schedule4.poolContinuity[].typestring
schedule4.poolContinuity[].yearOfOriginnumber
schedule4.provisionalboolean
schedule4.warningsarray
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
workpapersarraystrict
Strict profile accepted values (29 of 92 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 schedule4
CellAccepted values
accounts[].accountCode0 to 20000 characters
accounts[].accountName0 to 20000 characters
accounts[].classification.adjustmentType0 to 20000 characters
accounts[].classification.assumption0 to 20000 characters
accounts[].classification.deductibility0 to 20000 characters
accounts[].classification.deductibilityPercentage-1000000000000000 to 1000000000000000; 0 to 20000 characters
accounts[].classification.deductibilityRule0 to 20000 characters
accounts[].classification.ruleId0 to 20000 characters
accounts[].classification.s1Line0 to 20000 characters
accounts[].classification.templateId0 to 20000 characters
accounts[].classification.treatment0 to 20000 characters
accounts[].currentYearBalance-1000000000000000 to 1000000000000000
accounts[].id0 to 20000 characters
accounts[].reviewStatus0 to 20000 characters
accounts[].userStatus0 to 20000 characters
daysInYear1 to 1000000000000000
fiscalEnddate (YYYY-MM-DD); 10 to 10 characters
fiscalStartdate (YYYY-MM-DD); 10 to 10 characters
lossElections[].requestedAmount-1000000000000000 to 1000000000000000
lossElections[].type0 to 20000 characters
lossElections[].yearOfOrigin-1000000000000000 to 1000000000000000
pyLossPools[].originalAmount-1000000000000000 to 1000000000000000
pyLossPools[].remainingBalance-1000000000000000 to 1000000000000000
pyLossPools[].type0 to 20000 characters
pyLossPools[].yearOfOrigin-1000000000000000 to 1000000000000000
schedule4.poolContinuity[].expiryClockone of "taxation_years", "calendar_years"
schedule4.poolContinuity[].typeone of "non_capital", "net_capital", "restricted_farm", "farm", "limited_partnership"
taxYearmatches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027; 0 to 20000 characters
workpapersexactly []pinned

Output cells (247)

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

Output cells for schedule4
CellTypes
applicationDetails[].adjustmentFactornumber
applicationDetails[].amountAppliednumber
applicationDetails[].poolIdstring
applicationDetails[].typestring
applicationDetails[].yearOfOrigininteger
applicationDetails[].applicationPeriodKeystring
carrybackRequestsarray
currentYearFarmLossnumber
currentYearNonCapitalLossnumber
expiredPoolsarray
form.amount_1Nnumber
form.amount_1Onumber
form.amount_1Pnumber
form.amount_1Qnumber
form.amount_1Rnumber
form.amount_1Snumber
form.amount_2Anumber
form.amount_2Bnumber
form.amount_2Cnumber
form.amount_2Dnumber
form.amount_2Enumber
form.amount_2Fnumber
form.amount_2Gnumber
form.amount_2Hnumber
form.amount_3Anumber
form.amount_3Bnumber
form.amount_3Cnumber
form.amount_3Dnumber
form.amount_3Enumber
form.amount_3Fnumber
form.amount_4Fnumber
form.amount_4Gnumber
form.amount_4Hnumber
form.amount_4Inumber
form.amount_4Jnumber
form.amount_4Knumber
form.amount_5Anumber
form.amount_5Bnumber
form.amount_5Cnumber
form.amount_5Dnumber
form.amount_5Enumber
form.amount_8Anumber
form.formWarningsarray
form.line_100number
form.line_102number
form.line_105number
form.line_110number
form.line_130number
form.line_140number
form.line_150number
form.line_180number
form.line_190integer
form.line_200number
form.line_205number
form.line_210number
form.line_215number
form.line_220number
form.line_225number
form.line_240number
form.line_250number
form.line_280number
form.line_300number
form.line_302number
form.line_305number
form.line_310number
form.line_330number
form.line_340number
form.line_350number
form.line_380number
form.line_400number
form.line_402number
form.line_405number
form.line_410number
form.line_430number
form.line_440number
form.line_450number
form.line_480number
form.line_500number
form.line_502number
form.line_510number
form.line_530number
form.line_550number
form.line_580number
form.line_675number
form.line_700number
form.line_705number
form.line_710number
form.line_730number
form.line_750number
form.line_780number
form.line_901number
form.line_902number
form.line_903number
form.line_911number
form.line_912number
form.line_913number
form.line_921number
form.line_922number
form.line_923number
form.line_931number
form.line_932number
form.line_933number
form.line_941number
form.line_942number
form.line_943number
form.line_951number
form.line_952number
form.line_953number
form.line_961number
form.line_962number
form.line_963number
form.part6Table[].farmnumber
form.part6Table[].lppnumber
form.part6Table[].nonCapitalnumber
form.part6Table[].restrictedFarmnumber
form.part6Table[].yearstring
form.part7Table1array
form.part7Table2array
form.part7Table3array
form.amount_4Anumber
form.amount_4Bnumber
form.amount_4Cnumber
form.amount_4Dnumber
form.amount_4Enumber
form.line_485number
form.line_135number
form.line_335number
incomeLimits.farmnumber
incomeLimits.limited_partnershipnumber
incomeLimits.net_capitalnumber
incomeLimits.non_capitalnumber
incomeLimits.restricted_farmnumber
limitedPartnership.accountsarray
limitedPartnership.totalAppliednumber
limitedPartnership.totalClosingnumber
limitedPartnership.totalCurrentLossnumber
limitedPartnership.warningsarray
limitedPartnershipClaimedBeforeEifelnumber
limitedPartnershipDeniedUnder_18_2_2number
lossesAppliednumber
netCapitalCaptures.abilExpiredAsNclnumber
netCapitalCaptures.unusedNclEleventhYearnumber
newPoolsarray
part1BuildupWorksheet.printedAmount1Anumber
part1BuildupWorksheet.printedAmount1Bnumber
part1BuildupWorksheet.printedAmount1Cnumber
part1BuildupWorksheet.printedAmount1Dnumber
part1BuildupWorksheet.printedAmount1Enumber
part1BuildupWorksheet.printedAmount1Fnumber
part1BuildupWorksheet.printedAmount1Gnumber
part1BuildupWorksheet.printedAmount1Hnumber
part1BuildupWorksheet.printedAmount1Inumber
part1BuildupWorksheet.printedAmount1Jnumber
part1BuildupWorksheet.printedAmount1Knumber
part1BuildupWorksheet.printedAmount1Lnumber
part1BuildupWorksheet.printedAmount1Mnumber
poolContinuity[].applied.tax-year-end:2025-12-31number
poolContinuity[].expiredboolean
poolContinuity[].expiryYearinteger
poolContinuity[].originalAmountnumber
poolContinuity[].remainingBalancenumber
poolContinuity[].typestring
poolContinuity[].yearOfOrigininteger
poolContinuity[].expiryClockstring
poolContinuity[].taxationYearsElapsedinteger
poolContinuity[].poolIdstring
provisionalboolean
s88_1_1_f_electionboolean
s88_1_1_f_yearShiftsarray
warnings[].actualnumber
warnings[].citation.displaystring
warnings[].citation.kindstring
warnings[].citation.sectionstring
warnings[].codestring
warnings[].expectedarray | boolean | null | number | object | string
warnings[].keystring
warnings[].kindstring
warnings[].reasonstring
warnings[].severitystring
warnings[].messagestring
warnings[].sectionstring
warnings[].taxYearinteger
warnings[].fieldstring
warnings[].amountnull | number
warnings[].typestring
warnings[].yearOfOrigininteger | null | string
warnings[]A Schedule 4 loss-continuity finding that cites the governing statute directly rather than a registered form gate, with the pool, claim or row operands the refusal is about.object
warnings[].acceptedByClaimobject
warnings[].requestedByClaimobject
warnings[].unappliedByClaimobject
warnings[].businessIdstring
warnings[].originPools[].amountnumber
warnings[].originPools[].typestring
warnings[].originPools[].yearOfOrigininteger
warnings[].claims[].amountAcceptednull | number
warnings[].claims[].amountRequestednull | number
warnings[].claims[].lossTypenull | string
warnings[].claims[].reasonnull | string
warnings[].claims[].targetYearinteger | null
warnings[].claims[].yearOfOrigininteger | null
warnings[].fields[]string
warnings[].higherPriorityTypes[]string
warnings[].poolIdnull | string
warnings[].poolIds[]string
warnings[].rowIndexinteger
warnings[].subsidiaryLossYearEndnull | string
warnings[].subsidiaryYearOfOrigininteger
warnings[].taxationYearsElapsedinteger
warnings[].accountNumberstring
warnings[].pool.remainingBalancenumber
warnings[].pool.typestring
warnings[].pool.yearOfOrigininteger
warnings[].olderYears[]integer | null | string
warnings[].targetYearinteger | null
warnings[].yearOfOriginBeforeElectioninteger | null
limitedPartnershipApplied_line_335Part 7 limited-partnership deduction included in lossesApplied (T2 line 335).number
restrictedInterestApplied_line_336Part 8 RIFE deduction included in lossesApplied (T2 line 336).number
currentYearRestrictedFarmLossnumber
part4RestrictedFarmWorksheet.amount_4Aarray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.amount_4Barray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.amount_4Carray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.amount_4Darray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.amount_4Earray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.appliesarray | boolean | null | number | object | string
part4RestrictedFarmWorksheet.blockedboolean
part4RestrictedFarmWorksheet.chiefSourceStatusstring
part4RestrictedFarmWorksheet.line_485array | boolean | null | number | object | string
currentTaxationYearEndstring
partIVLossClaimContinuity.acceptedByClaim.currentYearFarmnumber
partIVLossClaimContinuity.acceptedByClaim.currentYearNonCapitalnumber
partIVLossClaimContinuity.acceptedByClaim.priorYearFarmnumber
partIVLossClaimContinuity.acceptedByClaim.priorYearNonCapitalnumber
partIVLossClaimContinuity.applicationsarray
partIVLossClaimContinuity.fullyReconciledboolean
partIVLossClaimContinuity.requestedByClaim.currentYearFarmnumber
partIVLossClaimContinuity.requestedByClaim.currentYearNonCapitalnumber
partIVLossClaimContinuity.requestedByClaim.priorYearFarmnumber
partIVLossClaimContinuity.requestedByClaim.priorYearNonCapitalnumber
partIVLossClaimContinuity.unappliedByClaim.currentYearFarmnumber
partIVLossClaimContinuity.unappliedByClaim.currentYearNonCapitalnumber
partIVLossClaimContinuity.unappliedByClaim.priorYearFarmnumber
partIVLossClaimContinuity.unappliedByClaim.priorYearNonCapitalnumber
s88_1_1_g_electionboolean
s88_1_1_g_yearShiftsarray
s88_1_2_d_electionboolean
s88_1_2_d_yearShiftsarray
formRevisionstring
Filemark | schedule4 cells