schedule8

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2025 and later
Strict profile
s8_2025_class8_continuing_year_worked_example_target_value_v1
Payload schema version
0.12.0
Dependencies (run automatically)
schedule23, schedule24, 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": [
    "schedule8"
  ],
  "inputs": {
    "taxYear": 2025,
    "fiscalStart": "2025-01-01",
    "fiscalEnd": "2025-12-31",
    "isCCPC": true,
    "daysInYear": 365,
    "pyUCCPools": [
      {
        "ccaClass": "8",
        "closingUCC": 0
      }
    ],
    "assetData": [],
    "dispositions": [],
    "schedule8AdjustmentCoverage": {
      "schemaVersion": 2,
      "reviewed": true,
      "reviewedAt": "2026-07-19T12:00:00Z",
      "column205AdjustmentsApplicable": false,
      "column221AssistanceAfterDispositionApplicable": false,
      "column222RepaymentsAfterDispositionApplicable": false,
      "rentalPropertySeparateClassApplicable": false,
      "purposeBuiltRentalPropertyRulesApplicable": false,
      "rentalIncomeCcaLimitApplicable": false,
      "leasingPropertyRulesApplicable": false,
      "specifiedLeasingPropertyRulesApplicable": false,
      "affiliatedPersonStopLossApplicable": false,
      "reg1101_5qElectionApplies": false,
      "multipleClass10_1VehiclesPresent": false,
      "otherPrescribedSeparateClassRuleApplies": false,
      "specialDispositionRolloverOrDeferralApplies": false,
      "class14_1TransitionalOpeningBalanceApplicable": false,
      "specifiedEnergyPropertyRulesApplicable": false,
      "class1NrbAdditionalAllowanceEligible": false,
      "class1UnmodelledAdditionalAllowanceApplies": false,
      "class12ParagraphHalfYearExclusionApplies": false,
      "diepEligibilityAndAllocationConfirmed": false,
      "capitalGainRoutingComplete": false
    },
    "t2Jacket": {
      "filingStatus": {
        "firstYearAfterIncorporation": false,
        "firstYearAfterAmalgamation": false,
        "subsidiaryWindupS88": false
      }
    }
  }
}

Input cells (100)

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 schedule8
CellTypesRequired
accountsarray
assetDataarraystrict
daysInYearNumber of days in the taxation year, as a positive whole number, driving the ITA s.125(5)(b) short-year proration of the business limit. The third member of the canonical taxation-period trio with fiscalStart and fiscalEnd: all three are mandatory whenever the request reaches Part I through its dependency closure, which most targets do. A missing member is refused before any computation, and a day count that disagrees with the two dates is an error.null | numberstrict
dispositionsarraystrict
fiscalEndThe last day of the taxation year in ISO YYYY-MM-DD form, which bounds every disposition date. Send it with fiscalStart and daysInYear: the three are the canonical taxation-period trio, and all three are mandatory whenever the request reaches Part I through its dependency closure. Strict YYYY-MM-DD, and not before fiscalStart.null | stringstrict
fiscalStartThe first day of the taxation year (ISO YYYY-MM-DD). With fiscalEnd and daysInYear it is the canonical taxation-period trio, and all three are mandatory whenever the request reaches Part I through its dependency closure — the request is refused before any computation when one is missing. The bounds also drive Schedule 8's Reg 1100(3) short-year CCA proration and the Reg 1104(3.5)(b) immediate-expensing limit proration.null | stringstrict
functionalCurrencyContextThe functional-currency election sidecar for the taxation year, used to restate statutory dollar thresholds under ITA s.261(5)(b). Send it only for a functional-currency filer; it carries reportingCurrency, periodStart, a firstDayRate object with rate, spotRateSource and firstDayDate, and optional statutoryThresholdRoundingOverrides.null | object
isCCPCThe corporation was a Canadian-controlled private corporation (ITA s.125(7) definition) throughout the taxation year.booleanstrict
pyUCCPools[].ccaClassstringstrict
pyUCCPools[].closingUCCintegerstrict
schedule8.acquisitionOfControlDatenull | string
schedule8.classesarray
schedule8.classes[].additionsnumber
schedule8.classes[].aiipAdditionsnumber
schedule8.classes[].aiipFactorThe Reg 1100(2) "relevant factor" the engine ACTUALLY applied to this class this year: the incentive-base-weighted mean of the per-row element A / A.1 factors, equivalently `1 + aiipUccAdjustment / netIncentiveBase`. That is the same weighting Reg 1100(2.01)/(2.011) prescribes for a straddle year — "(A(B) + C(D))/(B + D)". null when no addition to the class carried an element A / A.1 factor this year, since there is then no relevant factor to report. Per-row factors still differ; this is their applied mean, not a lookup.null | number
schedule8.classes[].aiipUccAdjustmentnumber
schedule8.classes[].assetsRemainingnumber
schedule8.classes[].ccaAtMaxRatenumber
schedule8.classes[].ccaBasenumber
schedule8.classes[].ccaClaimednumber
schedule8.classes[].ccaClassstring
schedule8.classes[].ccaRateScale: 0–1 fraction. e.g. 0.20 = 20% Class 8. Display: multiply by 100.number
schedule8.classes[].class13ManualDeterminationRequiredboolean
schedule8.classes[].classNamestring
schedule8.classes[].closingUCCnumber
schedule8.classes[].diepAdditionsnumber
schedule8.classes[].diepUccnumber
schedule8.classes[].formClassNumberStatutory class printed/exported; internal 1-NRB projects as 1.string
schedule8.classes[].hadDiepboolean
schedule8.classes[].halfYearReductionnumber
schedule8.classes[].immediateExpensingImmediate expensing claimed for this class (Reg 1100(0.1)). Historical / pre-2025 computation only; the E (26) form has no DIEP column.number
schedule8.classes[].immediateExpensingDesignatedAmountPresent when the W08 agreement block supplies the taxpayer's explicit E (24) column-12 amount for this Reg 1101 pool.number
schedule8.classes[].isOverriddenboolean
schedule8.classes[].isStraightLineboolean
schedule8.classes[].manualClass13ContinuationDeterminationboolean
schedule8.classes[].manualClass14Determinationboolean
schedule8.classes[].netAiipAdditionsnumber
schedule8.classes[].normalCCAAfterProrationnumber
schedule8.classes[].normalCCABeforeProrationnumber
schedule8.classes[].openingUCCnumber
schedule8.classes[].proceedsReducingAiipnumber
schedule8.classes[].propertyIdThe Reg 1101 per-property identity that, with `ccaClass`, is this pool's whole key. Reg 1101(1af) prescribes a separate class for each Class 10.1 passenger vehicle and Reg 1101(5b.1) for each elected eligible non-residential building, so `classes` can hold several rows of one `ccaClass` and only the pair tells them apart. Empty string on every pooled class, where the class number IS the legal class.string
schedule8.classes[].recapturenumber
schedule8.classes[].remainderAdditionsnumber
schedule8.classes[].shortYearFactorScale: 0–1 fraction. Reg 1100(3) short-year proration (days/365).number
schedule8.classes[].terminalLossnumber
schedule8.classes[].uccBeforeCCAnumber
schedule8.classes[].uccColumn10Internal Schedule 8 class decomposition used to project the E (26) Part 2 columns.number
schedule8.classes[].uccReductionOnDispositionsnumber
schedule8.daysInYearnumber
schedule8.fiscalEndnull | string
schedule8.fiscalStartnull | string
schedule8.formTrue Form View projection — every printed T2 SCH 8 box, always present.object
schedule8.form.formWarningsTie-out mismatches (defensive — impossible by construction today) and the grid-overflow notice (the printed grid holds 8 class rows; bound column totals always include every class). The form view renders these — nothing is silently truncated.array
schedule8.form.line101ElectionReg 1101(5q) election (line 101), projected only from a complete W08 coverage review. Null leaves both Yes/No choices blank.boolean | null
schedule8.form.line105AgreementE (24) line 105. Absent on E (26); null when DIEP is material but the agreement authority is missing.boolean | null
schedule8.form.line125ImmediateExpensingLimitnull | number
schedule8.form.part1TotalPercentagenull | number
schedule8.form.part2Tablearray
schedule8.formRevisionPresent when an amendment's filed-render pin overrides ordinary year-based face resolution; otherwise lifecycle formRevisions supplies it.string
schedule8.immediateExpensingLimitInputnumber
schedule8.immediateExpensingLimitProratednumber
schedule8.immediateExpensingRemainingnumber
schedule8.immediateExpensingUsednumber
schedule8.isCCPCboolean
schedule8.missing_requiredarray
schedule8.provisionalboolean
schedule8.readyboolean
schedule8.shortYearFactorScale: 0–1 fraction. Reg 1100(3) short-year proration (days/365).number
schedule8.taxYearnumber
schedule8.totalCCAClaimednumber
schedule8.totalRecapturenumber
schedule8.totalTerminalLossnumber
schedule8AdjustmentCoverage.affiliatedPersonStopLossApplicableWhether the ITA s.13(21.2) affiliated-person depreciable-property stop-loss applies to a loss disposition; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.capitalGainRoutingCompleteConfirms the required Schedule 6 reconciliation for W08 depreciable-property dispositions above cost; the excess over capital cost is a capital gain, not recapture.booleanstrict
schedule8AdjustmentCoverage.class12ParagraphHalfYearExclusionAppliesA Class 12 Schedule II paragraph listed in Reg 1100(2) element F(b)(i) applies, which the generic class-number calculation cannot identify; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.class14_1TransitionalOpeningBalanceApplicableThe Class 14.1 opening balance derives from pre-2017 eligible capital property or Schedule 10 transitional amounts under Reg 1100(1)(c.1); true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.class1NrbAdditionalAllowanceEligibleClass-scope conclusion on the Reg 1104(2) prior-use exclusion, the Reg 1100(1)(a.1) and (a.2) floor-space use tests, and the Reg 1101(5b.1) separate-class election for Class 1 non-residential buildings.booleanstrict
schedule8AdjustmentCoverage.class1UnmodelledAdditionalAllowanceAppliesA Reg 1100(1)(a.1) or (a.2) additional building allowance applies that is not represented by a confirmed Class 1 NRB key; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.column205AdjustmentsApplicableWhether column 205 other UCC adjustments or transfers apply; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.column221AssistanceAfterDispositionApplicableWhether column 221 assistance received after disposition applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.column222RepaymentsAfterDispositionApplicableWhether column 222 repayments of assistance after disposition apply; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.diepEligibilityAndAllocationConfirmedConfirms the Reg 1100(0.1) to (0.3) and Reg 1104(3.1) to (3.3) DIEP eligibility, transfer restrictions, and allocated remaining limit for the immediate-expensing claim.booleanstrict
schedule8AdjustmentCoverage.leasingPropertyRulesApplicableWhether the Reg 1101(5c) separate-class or Reg 1100(15) aggregate CCA ceiling rules for leasing property apply; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.multipleClass10_1VehiclesPresentMore than one passenger vehicle must be tracked in separate Class 10.1 pools; true blocks because the engine keys pools by class number alone.booleanstrict
schedule8AdjustmentCoverage.otherPrescribedSeparateClassRuleAppliesAny other prescribed separate-class rule not represented by the class key applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.purposeBuiltRentalPropertyRulesApplicableWhether the separate class or additional allowance for new purpose-built residential rentals applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.reg1101_5qElectionAppliesWhether the Schedule 8 line 101 election under Reg 1101(5q) (separate Class 8 or 43 classes) applies; true sets line 101 and blocks the unmodelled split.booleanstrict
schedule8AdjustmentCoverage.rentalIncomeCcaLimitApplicableWhether the Reg 1100(11) rental-income CCA ceiling applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.rentalPropertySeparateClassApplicableWhether the Reg 1101(1ac) separate-class rule for rental property costing at least $50,000 applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.reviewedMaster flag of the reviewed W08 coverage packet: the preparer reviewed the unmodelled Schedule 8 adjustment rules below; false or missing fails closed.booleanstrict
schedule8AdjustmentCoverage.reviewedAtstringstrict
schedule8AdjustmentCoverage.schemaVersionintegerstrict
schedule8AdjustmentCoverage.specialDispositionRolloverOrDeferralAppliesA replacement-property or other special disposition rule, including an ITA s.13(4) or s.44 election or deferral, applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.specifiedEnergyPropertyRulesApplicableWhether the Reg 1100(24) income ceiling for specified energy property (Classes 34, 43.1, 43.2, 47 and 48) applies; true blocks the result as applicable but not modelled.booleanstrict
schedule8AdjustmentCoverage.specifiedLeasingPropertyRulesApplicableWhether the Reg 1101(5n) and Reg 1100(1.1) specified-leasing-property rules apply; true blocks the result as applicable but not modelled.booleanstrict
t2Jacket.filingStatus.firstYearAfterAmalgamationbooleanstrict
t2Jacket.filingStatus.firstYearAfterIncorporationbooleanstrict
t2Jacket.filingStatus.subsidiaryWindupS88booleanstrict
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 100 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 schedule8
CellAccepted values
assetDataexactly []pinned
daysInYear1 to 1000000000000000
dispositionsexactly []pinned
fiscalEnddate (YYYY-MM-DD); 10 to 10 characters
fiscalStartdate (YYYY-MM-DD); 10 to 10 characters
pyUCCPools[].ccaClass0 to 20000 characters
pyUCCPools[].closingUCC-1000000000000000 to 1000000000000000
schedule8AdjustmentCoverage.reviewedAt0 to 20000 characters
schedule8AdjustmentCoverage.schemaVersion-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 (166)

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

Output cells for schedule8
CellTypes
classes[].ccaClassstring
classes[].formClassNumberstring
classes[].classNamestring
classes[].openingUCCnumber
classes[].additionsnumber
classes[].uccBeforeCCAnumber
classes[].recapturenumber
classes[].terminalLossnumber
classes[].halfYearReductionnumber
classes[].aiipFactorarray | boolean | null | number | object | string
classes[].ccaBasenumber
classes[].ccaRatenumber
classes[].ccaAtMaxRatenumber
classes[].normalCCABeforeProrationnumber
classes[].normalCCAAfterProrationnumber
classes[].shortYearFactornumber
classes[].ccaClaimednumber
classes[].closingUCCnumber
classes[].assetsRemaininginteger
classes[].isOverriddenboolean
classes[].manualClass14Determinationboolean
classes[].manualClass13ContinuationDeterminationboolean
classes[].class13ManualDeterminationRequiredboolean
classes[].immediateExpensingnumber
classes[].uccColumn10number
classes[].aiipAdditionsnumber
classes[].riipAdditionsnumber
classes[].proceedsReducingIncentivenumber
classes[].netAiipAdditionsnumber
classes[].proceedsReducingRiipnumber
classes[].netRiipAdditionsnumber
classes[].aiipUccAdjustmentnumber
classes[].riipUccAdjustmentnumber
classes[].isStraightLineboolean
classes[].diepAdditionsnumber
classes[].diepProceedsnumber
classes[].diepUccnumber
classes[].hadDiepboolean
classes[].deniedTerminalLossnumber
classes[].recaptureSuppressed101boolean
classes[].propertyIdstring
classes[].resourceAllowanceMaximumarray | boolean | null | number | object | string
classes[].resourceQuantityClaimedarray | boolean | null | number | object | string
classes[].resourceRatePerUnitarray | boolean | null | number | object | string
classes[].resourceSchedulearray | boolean | null | number | object | string
classes[].uccReductionOnDispositionsnumber
classes[].eligibleLiquefactionActivitiesIncomeBeforeCcaarray | boolean | null | number | object | string
classes[].liquefactionAdditionalAllowanceAtMaxnumber
classes[].liquefactionAdditionalAllowanceAuthorityarray | boolean | null | number | object | string
classes[].liquefactionAdditionalAllowanceClaimednumber
classes[].liquefactionBasicAndImmediateExpensingAtMaxnumber
classes[].liquefactionFacilityIdarray | boolean | null | number | object | string
classes[].liquefactionReg1101SeparateClassarray | boolean | null | number | object | string
classes[].mineAdditionalAllowanceAtMaxnumber
classes[].mineAdditionalAllowanceAuthorityarray | boolean | null | number | object | string
classes[].mineIdarray | boolean | null | number | object | string
classes[].mineReg1101SeparateClassarray | boolean | null | number | object | string
classes[].railwayAdditionalAllowanceAtMaxnumber
classes[].railwayAdditionalAllowanceAuthorityarray | boolean | null | number | object | string
classes[].railwayReg1101SeparateClassarray | boolean | null | number | object | string
classes[].reg1101_2aCanadianVesselboolean
totalCCAClaimednumber
totalRecapturenumber
totalTerminalLossnumber
netSchedule8Adjustmentnumber
immediateExpensingUsednumber
immediateExpensingRemainingnumber
immediateExpensingLimitInputnumber
immediateExpensingLimitProratednumber
daysInYearinteger
shortYearFactornumber
fiscalStartnull | string
fiscalEndnull | string
acquisitionOfControlDatearray | boolean | null | number | object | string
aocarray | boolean | null | number | object | string
adjustmentCoverage.schemaVersioninteger
adjustmentCoverage.reviewedboolean
adjustmentCoverage.column205AdjustmentsApplicableboolean
adjustmentCoverage.column221AssistanceAfterDispositionApplicableboolean
adjustmentCoverage.column222RepaymentsAfterDispositionApplicableboolean
adjustmentCoverage.rentalPropertySeparateClassApplicableboolean
adjustmentCoverage.purposeBuiltRentalPropertyRulesApplicableboolean
adjustmentCoverage.rentalIncomeCcaLimitApplicableboolean
adjustmentCoverage.leasingPropertyRulesApplicableboolean
adjustmentCoverage.specifiedLeasingPropertyRulesApplicableboolean
adjustmentCoverage.affiliatedPersonStopLossApplicableboolean
adjustmentCoverage.reg1101_5qElectionAppliesboolean
adjustmentCoverage.multipleClass10_1VehiclesPresentboolean
adjustmentCoverage.otherPrescribedSeparateClassRuleAppliesboolean
adjustmentCoverage.specialDispositionRolloverOrDeferralAppliesboolean
adjustmentCoverage.class14_1TransitionalOpeningBalanceApplicableboolean
adjustmentCoverage.specifiedEnergyPropertyRulesApplicableboolean
adjustmentCoverage.class1NrbAdditionalAllowanceEligibleboolean
adjustmentCoverage.class1UnmodelledAdditionalAllowanceAppliesboolean
adjustmentCoverage.class12ParagraphHalfYearExclusionAppliesboolean
adjustmentCoverage.diepEligibilityAndAllocationConfirmedboolean
adjustmentCoverage.capitalGainRoutingCompleteboolean
adjustmentCoverage.detectedMultipleClass10_1Poolsarray
adjustmentCoverage.capitalGainRoutingRequiredboolean
adjustmentCoverage.schedule6EvidenceCompleteboolean
adjustmentCoverage.detectedCapitalGainClassesarray
adjustmentCoverage.class1NrbReviewRequiredboolean
adjustmentCoverage.class1BuildingReviewRequiredboolean
adjustmentCoverage.class12HalfYearReviewRequiredboolean
adjustmentCoverage.explicitDiepReviewRequiredboolean
adjustmentCoverage.immediateExpensingAllocationProvidedboolean
adjustmentCoverage.statusstring
adjustmentCoverage.affiliatedStopLossRowsEvidencedboolean
adjustmentCoverage.affiliatedStopLossRowsPresentboolean
adjustmentCoverage.rentalIncomeCeilingReviewRequiredboolean
adjustmentCoverage.specifiedEnergyCeilingReviewRequiredboolean
adjustmentCoverage.class14_1TransitionalReviewRequiredboolean
adjustmentCoverage.nonArmsLengthAcquisitionCapitalCostAdjustmentApplicableboolean
adjustmentCoverage.nonArmsLengthAcquisitionReviewRequiredboolean
adjustmentCoverage.leasingPropertyRulesReviewRequiredboolean
missing_required[]string
warnings[].codeWhich continuity obligation this row is about.string
warnings[].messagestring
warnings[].severityAlways an error: a divergent or unprovable opening blocks the return.string
warnings[].actualThe opening amount this return states.number
warnings[].citation.displayThe citation as it is shown to a preparer.string
warnings[].citation.kindThe authority family the section belongs to.string
warnings[].citation.sectionThe cited provision.string
warnings[].expectedThe closing amount the authenticated prior filed return proves, or null when no filed projection exists to reconcile against.null | number
warnings[].keyThe reconciled balance, named for a preparer.string
warnings[].kindAlways the validation family.string
warnings[].reasonWhat broke and what to do about it.string
taxYearinteger
isCCPCboolean
provisionalboolean
readyboolean
form.line101Electionboolean | null
form.part2Table[].classNumberstring
form.part2Table[].openingUccnumber
form.part2Table[].acquisitionsnumber
form.part2Table[].aiipAdditionsnumber
form.part2Table[].riipAdditionsnumber
form.part2Table[].adjustmentsnumber
form.part2Table[].assistanceAfterDispositionarray | boolean | null | number | object | string
form.part2Table[].repaidAfterDispositionarray | boolean | null | number | object | string
form.part2Table[].proceedsnumber
form.part2Table[].ucc10number
form.part2Table[].proceedsReducingIncentivenumber
form.part2Table[].netAiipAdditionsnumber
form.part2Table[].proceedsReducingRiipnumber
form.part2Table[].netRiipAdditionsnumber
form.part2Table[].aiipUccAdjustmentnumber
form.part2Table[].riipUccAdjustmentnumber
form.part2Table[].halfYearAdjustmentnumber
form.part2Table[].ccaRatePercentstring
form.part2Table[].recapturenumber
form.part2Table[].terminalLossnumber
form.part2Table[].ccanumber
form.part2Table[].closingUccnumber
form.formWarningsarray
recaptureOnGiftsOfDepreciableProperty.amountnumber
recaptureOnGiftsOfDepreciableProperty.citationstring
recaptureOnGiftsOfDepreciableProperty.disposingClassesAnsweredNotGiftinteger
recaptureOnGiftsOfDepreciableProperty.giftClassesarray
recaptureOnGiftsOfDepreciableProperty.unprovableReasonarray | boolean | null | number | object | string
formRevisionstring
resourceAllowanceGrossCostCoverage.scheduleIVClass15number
resourceAllowanceGrossCostCoverage.scheduleVITimberLimitsAndRightsnumber
resourceAllowanceGrossCostCoverage.scheduleVIndustrialMineralsnumber
totalResourceAllowanceClaimednumber
changeOfUseReceiversarray
Filemark | schedule8 cells