schedule2

T2 Corporation Income Tax Return

Kind
batch
Supported tax years
2023 and later
Strict profile
s2_2025_single_charitable_gift_target_value_v1
Payload schema version
0.9.0
Dependencies (run automatically)
schedule1, schedule17, schedule3, schedule43, schedule6, schedule8

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": [
    "schedule2"
  ],
  "inputs": {
    "taxYear": 2025,
    "fiscalStart": "2025-01-01",
    "fiscalEnd": "2025-12-31",
    "claimMaximumDonations": true,
    "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": [
      {
        "id": "wp-donation-target",
        "templateId": "donations",
        "linkedAccountIds": [],
        "customName": "Cedar Ridge 2025 donations",
        "rows": [
          {
            "charityName": "Ontario Community Foundation",
            "qualifiedDoneeClass": "crown-canada-or-province",
            "receiptNumber": "RCPT-2025-0001",
            "donationDate": "2025-06-01",
            "amountCY": 10000,
            "eligibleAmount": 10000,
            "advantage": 0,
            "donationType": "charitable",
            "nonQualifyingSecurity": "No"
          }
        ],
        "sectionRows": {},
        "assumption": "Caller-stated donee class, receipt, eligible amount and advantage; no independent verification"
      }
    ],
    "isCCPC": true,
    "daysInYear": 365,
    "t2Jacket": {
      "filingStatus": {
        "firstYearAfterIncorporation": false,
        "firstYearAfterAmalgamation": false,
        "subsidiaryWindupS88": false
      }
    }
  }
}

Input cells (161)

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 schedule2
CellTypesRequired
accountsarray
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
claimMaximumDonationsExplicit instruction to claim the maximum Schedule 2 donation deduction supported by the admitted gift and income facts; silence is not an election.booleanstrict
daysInYearInclusive day count for the canonical fiscalStart/fiscalEnd period required by the settled Part I dependency closure.integerstrict
fiscalEndLast day of the taxation year, as YYYY-MM-DD, on or after fiscalStart. Its calendar year must equal taxYear. Required for the same reason as fiscalStart.stringstrict
fiscalStartFirst day of the taxation year, as YYYY-MM-DD. Required because this target's dependency closure reaches part_i_tax, whose rates and limits are day-weighted; ITA s.249(1)(a) makes the taxation year the fiscal period, and the engine will not invent calendar-year bounds.stringstrict
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
schedule2.amalgamationTransferEvidencearray
schedule2.amalgamationTransferEvidence[].enteredTotalnumber
schedule2.amalgamationTransferEvidence[].linkedboolean
schedule2.amalgamationTransferEvidence[].predecessorIdstring
schedule2.charitableCarryforwardYearsCharitable Part 1 opening pool as normalised by the engine.array
schedule2.charitableCarryforwardYears[].amountAvailablenumber
schedule2.charitableCarryforwardYears[].amountClaimednumber
schedule2.charitableCarryforwardYears[].originDateEnd of the taxation year of origin, YYYY-MM-DD (Part 6 column 1).string
schedule2.charitableCarryforwardYears[].yearnumber
schedule2.culturalDeductionnumber
schedule2.currentYearDonationsarray
schedule2.currentYearDonations[].advantagenumber
schedule2.currentYearDonations[].amountnumber
schedule2.currentYearDonations[].charityNamestring
schedule2.currentYearDonations[].donationDatenull | string
schedule2.currentYearDonations[].eligibleAmountnumber
schedule2.currentYearDonations[].isCrownTaggedboolean
schedule2.currentYearDonations[].registrationNumberstring
schedule2.currentYearDonations[].sourcestring
schedule2.currentYearDonations[].typestring
schedule2.currentYearDonations[].workpaperInstanceIdstring
schedule2.ecologicalLandDeductionnumber
schedule2.medicineDeductionnumber
schedule2.netIncomeForTaxnumber
schedule2.part1object
schedule2.part1.amalgamationTransfers_250number
schedule2.part1.aocAdjustment_255number
schedule2.part1.closingBalance_280number
schedule2.part1.currentYearCrownTaggedMemo: the Crown-tagged portion of line 210 (display/handoff detail — post-2014 Crown gifts sit inside the charitable pool).number
schedule2.part1.currentYear_210number
schedule2.part1.deduction_260number
schedule2.part1.expiredCarryforward_239number
schedule2.part1.openingBalance_1Anumber
schedule2.part1.openingNet_240number
schedule2.part1.subtotal_1Bnumber
schedule2.part1.subtotal_1Cnumber
schedule2.part1.totalAvailable_1Dnumber
schedule2.part2object
schedule2.part2.capGainsOnGifts_225number
schedule2.part2.capitalCost_2Cnumber
schedule2.part2.ccaRecapture_230number
schedule2.part2.lesser_230_235_2Dnumber
schedule2.part2.lesser_2B_2C_235number
schedule2.part2.maxAllowableDeduction_2Hnumber
schedule2.part2.netIncomeTimes75_2Anumber
schedule2.part2.nqsCapGain_227number
schedule2.part2.proceedsLessOutlays_2Bnumber
schedule2.part2.subtotal_2Enumber
schedule2.part2.subtotal_2Gnumber
schedule2.part2.uplift25pct_2Fnumber
schedule2.part3object
schedule2.part3.amalgamationTransfers_450number
schedule2.part3.aocAdjustment_455number
schedule2.part3.closingBalance_480number
schedule2.part3.currentYear_410number
schedule2.part3.deduction_460number
schedule2.part3.expiredCarryforward_439number
schedule2.part3.openingBalance_3Anumber
schedule2.part3.openingNet_440number
schedule2.part3.subtotal_3Bnumber
schedule2.part3.subtotal_3Cnumber
schedule2.part4object
schedule2.part4.amalgamationTransfers_550number
schedule2.part4.aocAdjustment_555number
schedule2.part4.closingBalance_580number
schedule2.part4.currentYear_520number
schedule2.part4.deduction_560number
schedule2.part4.expiredCarryforward_539number
schedule2.part4.openingBalance_4Anumber
schedule2.part4.openingNet_540number
schedule2.part4.subtotal_4Bnumber
schedule2.part4.subtotal_4Cnumber
schedule2.part5object
schedule2.part5.additionalDeduction_610number
schedule2.part5.amalgamationTransfers_650number
schedule2.part5.amount_5Cnumber
schedule2.part5.aocAdjustment_655number
schedule2.part5.closingBalance_680_NOT_CFnumber
schedule2.part5.cost_601number
schedule2.part5.deduction_660number
schedule2.part5.eligibleAmount_600number
schedule2.part5.expiredCarryforward_639number
schedule2.part5.formulaALine-610 printed working boxes a/b/c (a × b/c). Optional: emitted by the engine from 2026-06; bound on the form as curated codes 610A/610B/610C.number
schedule2.part5.formulaBnumber
schedule2.part5.formulaCnumber
schedule2.part5.openingBalance_5Anumber
schedule2.part5.openingNet_640number
schedule2.part5.proceeds_602number
schedule2.part5.subtotal_5Bnumber
schedule2.part5.subtotal_5Dnumber
schedule2.part5.subtotal_5Enumber
schedule2.provisionalTrue when any warning is `error` or `warning` severity — `info` traces never make the schedule provisional.boolean
schedule2.warningsarray
schedule2.warnings[].citationobject
schedule2.warnings[].codestring
schedule2.warnings[].fieldstring
schedule2.warnings[].kindstring
schedule2.warnings[].reasonstring
schedule2.warnings[].rowAmountnumber
schedule2.warnings[].rowIndexnumber
schedule2.warnings[].severitystring
schedule2.warnings[].templateIdstring
schedule2.warnings[].workpaperIdnull | string
schedule2.yearOfOriginCarryforwardarray
schedule2.yearOfOriginCarryforwardTotalsCanonical engine totals for the four printed Part 6 total-row cells.object
schedule2.yearOfOriginCarryforwardTotals.charitablenumber
schedule2.yearOfOriginCarryforwardTotals.culturalnumber
schedule2.yearOfOriginCarryforwardTotals.ecoLandPost2014number
schedule2.yearOfOriginCarryforwardTotals.ecoLandPre2014number
schedule2.yearOfOriginCarryforward[].charitablenumber
schedule2.yearOfOriginCarryforward[].culturalnumber
schedule2.yearOfOriginCarryforward[].ecoLandPost2014number
schedule2.yearOfOriginCarryforward[].ecoLandPre2014number
schedule2.yearOfOriginCarryforward[].originDateExact taxation-year end printed in Part 6; null holds filing.null | string
schedule2.yearOfOriginCarryforward[].totalnumber
schedule2.yearOfOriginCarryforward[].yearnumber
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
workpapers[].adjustmentAmountnull | number | string
workpapers[].assumptionstringstrict
workpapers[].customNamestringstrict
workpapers[].idstringstrict
workpapers[].linkedAccountIds[]boolean | null | number | stringstrict
workpapers[].rows[].advantageITA 248(32): the total value of any property, service, compensation, use or other benefit received, obtained or enjoyed in consideration for, in gratitude for, or otherwise related to the gift, plus any limited-recourse debt. Zero on this witness, stated rather than inferred from silence.integerstrict
workpapers[].rows[].amountCYGross outlay — the fair market value of the property that is the subject of the gift, before the ITA 248(31) reduction.integerstrict
workpapers[].rows[].charityNameFree-text donee name. This is the one donee fact the profile does NOT stand behind; the statutory condition is the qualified-donee class below.stringstrict
workpapers[].rows[].donationDatestringstrict
workpapers[].rows[].donationTypestringstrict
workpapers[].rows[].eligibleAmountITA 248(31): the amount by which the fair market value of the property that is the subject of the gift exceeds the amount of the advantage, if any. This is the deductible figure, not the gross outlay.integerstrict
workpapers[].rows[].nonQualifyingSecurityExplicit No answer to the ITA 118.1(13)/(19) non-qualifying-security question; silence cannot establish ordinary-gift treatment.stringstrict
workpapers[].rows[].qualifiedDoneeClassThe ITA 149.1(1) class that makes the recipient a qualified donee. ITA 110.1(1)(a) admits the eligible amount of a gift only where it is made 'to a qualified donee', so the class is a condition of the deduction rather than a label. The witness states 'crown-canada-or-province' (paragraph (d) of the definition), which is why the registration number below is empty: a Crown donee holds no charity registration number.stringstrict
workpapers[].rows[].receiptNumberITA 110.1(2)(a) receipt evidence. An eligible amount is not included in determining the subsection (1) deduction unless the making of the gift is evidenced by filing a receipt containing prescribed information, so the row carries the receipt identifier. The profile does not verify that the receipt contains the prescribed information.stringstrict
workpapers[].rows[].registrationNumberCRA charity registration number. The witness's donee is a Crown donee, which holds none, so the row OMITS the field: the engine reads an absent value and an empty string identically, and a required blank would be boilerplate rather than a stated fact. The qualified-donee class above is what carries the ITA 110.1(1)(a) condition.string
workpapers[].sectionRowsobjectstrict
workpapers[].templateIdstringstrict
Strict profile accepted values (38 of 161 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 schedule2
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
schedule2.currentYearDonations[].sourceone of "workpaper", "manual"
schedule2.currentYearDonations[].typeone of "charitable", "cultural", "ecoLand", "medicine"
schedule2.warnings[].severityone of "error", "warning", "info"
taxYearmatches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027
workpapers[].adjustmentAmount-1000000000000000 to 1000000000000000; 0 to 20000 characters
workpapers[].assumption0 to 20000 characters
workpapers[].customName0 to 20000 characters
workpapers[].id0 to 20000 characters
workpapers[].linkedAccountIds[]-1000000000000000 to 1000000000000000; 0 to 20000 characters
workpapers[].rows[].advantage-1000000000000000 to 1000000000000000
workpapers[].rows[].amountCY-1000000000000000 to 1000000000000000
workpapers[].rows[].charityName0 to 20000 characters
workpapers[].rows[].donationDate0 to 20000 characters
workpapers[].rows[].donationType0 to 20000 characters
workpapers[].rows[].eligibleAmount-1000000000000000 to 1000000000000000
workpapers[].rows[].nonQualifyingSecurity0 to 20000 characters
workpapers[].rows[].qualifiedDoneeClass0 to 20000 characters
workpapers[].rows[].receiptNumber0 to 20000 characters
workpapers[].rows[].registrationNumber0 to 20000 characters
workpapers[].templateId0 to 20000 characters

Output cells (154)

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

Output cells for schedule2
CellTypes
charitableCarryforwardYearsarray
culturalDeductionnumber
currentYearDonations[].advantagenumber
currentYearDonations[].amountnumber
currentYearDonations[].charityNamestring
currentYearDonations[].donationDatestring
currentYearDonations[].eligibleAmountnumber
currentYearDonations[].isCrownTaggedboolean
currentYearDonations[].registrationNumberstring
currentYearDonations[].sourcestring
currentYearDonations[].typestring
currentYearDonations[].workpaperInstanceIdstring
donationReconciliation.advantage.charitablenumber
donationReconciliation.advantage.culturalnumber
donationReconciliation.advantage.ecoLandnumber
donationReconciliation.advantage.totalnumber
donationReconciliation.currentYearEligible.charitablenumber
donationReconciliation.currentYearEligible.culturalnumber
donationReconciliation.currentYearEligible.ecoLandnumber
donationReconciliation.currentYearEligible.totalnumber
donationReconciliation.currentYearGross.charitablenumber
donationReconciliation.currentYearGross.culturalnumber
donationReconciliation.currentYearGross.ecoLandnumber
donationReconciliation.currentYearGross.totalnumber
ecologicalLandDeductionnumber
manualPoolDenialsobject
medicineDeductionnumber
netIncomeForTaxnumber
nonQualifyingSecurityDeferralsarray
part1.amalgamationTransfers_250number
part1.aocAdjustment_255number
part1.closingBalance_280number
part1.currentYearCrownTaggednumber
part1.currentYear_210number
part1.deduction_260number
part1.expiredCarryforward_239number
part1.openingBalance_1Anumber
part1.openingNet_240number
part1.subtotal_1Bnumber
part1.subtotal_1Cnumber
part1.totalAvailable_1Dnumber
part2.capGainsOnGifts_225number
part2.capitalCost_2Cnumber
part2.ccaRecapture_230number
part2.lesser_230_235_2Dnumber
part2.lesser_2B_2C_235number
part2.maxAllowableDeduction_2Hnumber
part2.netIncomeTimes75_2Anumber
part2.nqsCapGain_227number
part2.proceedsLessOutlays_2Bnumber
part2.subtotal_2Enumber
part2.subtotal_2Gnumber
part2.uplift25pct_2Fnumber
part3.amalgamationTransfers_450number
part3.aocAdjustment_455number
part3.closingBalance_480number
part3.currentYear_410number
part3.deduction_460number
part3.expiredCarryforward_439number
part3.openingBalance_3Anumber
part3.openingNet_440number
part3.subtotal_3Bnumber
part3.subtotal_3Cnumber
part3.subtotal_3Dnumber
part4.amalgamationTransfers_550number
part4.aocAdjustment_555number
part4.closingBalance_580number
part4.currentYear_520number
part4.deduction_560number
part4.expiredCarryforward_539number
part4.openingBalance_4Anumber
part4.openingNet_540number
part4.subPools.postFeb2014_10yrCF.currentYearnumber
part4.subPools.postFeb2014_10yrCF.expirednumber
part4.subPools.postFeb2014_10yrCF.openingnumber
part4.subPools.preFeb2014_5yrCF.currentYearnumber
part4.subPools.preFeb2014_5yrCF.expirednumber
part4.subPools.preFeb2014_5yrCF.openingnumber
part4.subtotal_4Bnumber
part4.subtotal_4Cnumber
part4.subtotal_4Dnumber
part5.additionalDeduction_610number
part5.amalgamationTransfers_650number
part5.amount_5Cnumber
part5.aocAdjustment_655number
part5.closingBalance_680_NOT_CFnumber
part5.cost_601number
part5.deduction_660number
part5.eligibleAmount_600number
part5.expiredCarryforward_639number
part5.formulaAnumber
part5.formulaBnumber
part5.formulaCnumber
part5.openingBalance_5Anumber
part5.openingNet_640number
part5.proceeds_602number
part5.subtotal_5Bnumber
part5.subtotal_5Dnumber
part5.subtotal_5Enumber
part5.subtotal_5Fnumber
provincialFarmerCredits.britishColumbia.citationstring
provincialFarmerCredits.britishColumbia.creditnumber
provincialFarmerCredits.britishColumbia.qualifyingAmount_265number
provincialFarmerCredits.britishColumbia.s5_linestring
provincialFarmerCredits.novaScotia.citationstring
provincialFarmerCredits.novaScotia.creditnumber
provincialFarmerCredits.novaScotia.qualifyingAmount_263number
provincialFarmerCredits.novaScotia.s5_linestring
provincialFarmerCredits.ontario.citationstring
provincialFarmerCredits.ontario.creditnumber
provincialFarmerCredits.ontario.qualifyingAmount_262number
provincialFarmerCredits.ontario.s5_linestring
provisionalboolean
readyboolean
schedule1Addback.line210_charitablenumber
schedule1Addback.line410_culturalnumber
schedule1Addback.line520_ecoLandnumber
schedule1Addback.totalnumber
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[].codeWhich continuity obligation this row is about.string
warnings[].kindAlways the validation family.string
warnings[].reasonWhat broke and what to do about it.string
warnings[].severityAlways an error: a divergent or unprovable opening blocks the return.string
warnings[].templateIdstring
warnings[].categorystring
warnings[].filingDispositionHow this finding routes the filing: block, disclose or info. The filing-disposition registry owns the value; the finding carries the resolved one.string
warnings[].maximumAllowablenumber
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
yearOfOriginCarryforward[].yearinteger
yearOfOriginCarryforward[].originDatestring
yearOfOriginCarryforward[].charitablenumber
yearOfOriginCarryforward[].culturalnumber
yearOfOriginCarryforward[].ecoLandPre2014number
yearOfOriginCarryforward[].ecoLandPost2014number
yearOfOriginCarryforward[].totalnumber
yearOfOriginCarryforwardTotals.charitablenumber
yearOfOriginCarryforwardTotals.culturalnumber
yearOfOriginCarryforwardTotals.ecoLandPost2014number
yearOfOriginCarryforwardTotals.ecoLandPre2014number
amalgamationTransferEvidencearray
controlArrangementGiftDenialsarray
Filemark | schedule2 cells