foreign_affiliate_analysis
T2 Corporation Income Tax Return
- Kind
- batch
- Supported tax years
- —
- Strict profile
- foreign_affiliate_analysis_v1
- Payload schema version
- 0.1.0
- Dependencies (run automatically)
- none
Example request
Send this body to POST /api/v1/computations/batch. This example works with or without payloadContract.
{
"compute": [
"foreign_affiliate_analysis"
],
"inputs": {
"taxYear": 2025,
"fiscalStart": "2025-01-01",
"fiscalEnd": "2025-12-31",
"workpapers": [
{
"templateId": "foreign-affiliate-ledger",
"rows": []
}
],
"isCCPC": true
}
}Input cells (23)
Paths are relative to the request's inputs object. [] marks an array element.
Cells marked always require a non-null value in every request. Cells marked strict are required when you supply this target's payloadContract. See Run computations.
Unknown cells and JSON type mismatches return 400 with the affected cells in the error details.
| Cell | Types | Required |
|---|---|---|
| corpType | null | number | |
| corpTypeChangeEffectiveDate | null | string | |
| daysInYear | integer | |
| 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 | string | strict |
| 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 | string | strict |
| isCCPC | boolean | |
| schedule25Schedule 25 Investment in Foreign Affiliates input object, including hasForeignAffiliates and affiliateRows. It supplies the affiliate roster used by foreign-affiliate analysis and related schedules. Omission adds no input roster; a computed Schedule 25 may supply one, otherwise affiliate presence remains unknown rather than an answered no. | null | object | |
| schedule25.section212_3ForeignAffiliateInvestmentMadeWhether the corporation made an investment in a foreign affiliate, one of the two charging facts in ITA s.212.3(1). Answer it true or false whenever an affiliate roster is open: absence cannot default to No, so the request is rejected rather than computed. | boolean | |
| substantiveCCPCAnytimeWhether the corporation was a substantive CCPC at any time in the taxation year, used for dividend-pool status and refundable-tax treatment. The answer must reconcile with the T2 additional-information field. Omission falls back to that canonical answer; if neither is answered, substantive-CCPC status remains unknown. | boolean | null | |
| t2Jacket | object | |
| 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 |
| workpapers | object | |
| workpapers[].adjustmentAmount | number | |
| workpapers[].adjustmentType | string | |
| workpapers[].assumption | string | |
| workpapers[].customName | string | |
| workpapers[].expectedTotal | number | |
| workpapers[].id | string | |
| workpapers[].linkedAccountIds[] | string | |
| workpapers[].linkedAccountsMetadata | object | |
| workpapers[].rows[] | object | strict |
| workpapers[].sectionRows | object | |
| workpapers[].templateId | string | strict |
Strict profile accepted values (14 of 23 cells)
These constraints apply when you supply this target's payloadContract. Cells marked pinned must equal the listed value.
| Cell | Accepted values |
|---|---|
| corpType | -1000000000000000 to 1000000000000000 |
| corpTypeChangeEffectiveDate | 0 to 20000 characters |
| daysInYear | 1 to 1000000000000000 |
| fiscalEnd | date (YYYY-MM-DD); 10 to 10 characters |
| fiscalStart | date (YYYY-MM-DD); 10 to 10 characters |
| taxYear | matches ^\s*(?:1[0-9]{3}|2(?:0(?:[0-1][0-9]{1}|2[0-7])))\s*$; 1000 to 2027 |
| workpapers[].adjustmentAmount | -1000000000000000 to 1000000000000000 |
| workpapers[].adjustmentType | 0 to 20000 characters |
| workpapers[].assumption | 0 to 20000 characters |
| workpapers[].customName | 0 to 20000 characters |
| workpapers[].expectedTotal | -1000000000000000 to 1000000000000000 |
| workpapers[].id | 0 to 20000 characters |
| workpapers[].linkedAccountIds[] | 0 to 20000 characters |
| workpapers[].templateId | 0 to 20000 characters |
Output cells (275)
Paths are relative to this target's result object in the response.
| Cell | Types |
|---|---|
| present | boolean |
| ready | boolean |
| ledger.present | boolean |
| ledger.ready | boolean |
| ledger.errors[] | string |
| ledger.affiliates[].affiliateId | string |
| ledger.affiliates[].affiliateName | string |
| ledger.affiliates[].affiliateTaxationYearStart | string |
| ledger.affiliates[].affiliateTaxationYearEnd | string |
| ledger.affiliates[].residenceCountryCurrency | string |
| ledger.affiliates[].calculatingCurrency | string |
| ledger.affiliates[].taxReportingCurrency | string |
| ledger.affiliates[].openingBalances.exemptSurplus | number |
| ledger.affiliates[].openingBalances.exemptDeficit | number |
| ledger.affiliates[].openingBalances.hybridSurplus | number |
| ledger.affiliates[].openingBalances.hybridDeficit | number |
| ledger.affiliates[].openingBalances.taxableSurplus | number |
| ledger.affiliates[].openingBalances.taxableDeficit | number |
| ledger.affiliates[].openingBalances.preAcquisitionSurplus | number |
| ledger.affiliates[].openingBalances.preAcquisitionDeficit | number |
| ledger.affiliates[].openingBalances.hybridUnderlyingTax | number |
| ledger.affiliates[].openingBalances.underlyingForeignTax | number |
| ledger.affiliates[].annualMovementLedger[].eventId | string |
| ledger.affiliates[].annualMovementLedger[].affiliateTaxationYearEnd | string |
| ledger.affiliates[].annualMovementLedger[].movementType | string |
| ledger.affiliates[].annualMovementLedger[].earningsCountry | string |
| ledger.affiliates[].annualMovementLedger[].activeBusinessId | string |
| ledger.affiliates[].annualMovementLedger[].earningsAmount | number |
| ledger.affiliates[].annualMovementLedger[].netEarningsAmount | number |
| ledger.affiliates[].annualMovementLedger[].lossAmount | number |
| ledger.affiliates[].annualMovementLedger[].netLossAmount | number |
| ledger.affiliates[].annualMovementLedger[].postings.exemptAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.exemptDeduction | number |
| ledger.affiliates[].annualMovementLedger[].postings.hybridAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.hybridDeduction | number |
| ledger.affiliates[].annualMovementLedger[].postings.taxableAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.taxableDeduction | number |
| ledger.affiliates[].annualMovementLedger[].postings.preAcquisitionAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.preAcquisitionDeduction | number |
| ledger.affiliates[].annualMovementLedger[].postings.hybridUnderlyingTaxAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.hybridUnderlyingTaxDeduction | number |
| ledger.affiliates[].annualMovementLedger[].postings.underlyingForeignTaxAddition | number |
| ledger.affiliates[].annualMovementLedger[].postings.underlyingForeignTaxDeduction | number |
| ledger.affiliates[].yearClosings[].exemptSurplus | number |
| ledger.affiliates[].yearClosings[].exemptDeficit | number |
| ledger.affiliates[].yearClosings[].hybridSurplus | number |
| ledger.affiliates[].yearClosings[].hybridDeficit | number |
| ledger.affiliates[].yearClosings[].taxableSurplus | number |
| ledger.affiliates[].yearClosings[].taxableDeficit | number |
| ledger.affiliates[].yearClosings[].preAcquisitionSurplus | number |
| ledger.affiliates[].yearClosings[].preAcquisitionDeficit | number |
| ledger.affiliates[].yearClosings[].hybridUnderlyingTax | number |
| ledger.affiliates[].yearClosings[].underlyingForeignTax | number |
| ledger.affiliates[].yearClosings[].affiliateTaxationYearEnd | string |
| ledger.affiliates[].yearClosings[].calculatingCurrency | string |
| ledger.affiliates[].yearClosings[].netSurplus | number |
| ledger.dividendDerivations[].affiliateId | string |
| ledger.dividendDerivations[].affiliateName | string |
| ledger.dividendDerivations[].dividendId | string |
| ledger.dividendDerivations[].sourceDividendKey | string |
| ledger.dividendDerivations[].date | string |
| ledger.dividendDerivations[].calculatingCurrency | string |
| ledger.dividendDerivations[].taxReportingCurrency | string |
| ledger.dividendDerivations[].taxReportingCurrencyPerCalculatingCurrencyUnit | number |
| ledger.dividendDerivations[].wholeDividendAmountCalculatingCurrency | number |
| ledger.dividendDerivations[].receivedAmountCalculatingCurrency | number |
| ledger.dividendDerivations[].wholeDividendAmount | number |
| ledger.dividendDerivations[].receivedAmount | number |
| ledger.dividendDerivations[].exemptSurplusPortion | number |
| ledger.dividendDerivations[].hybridSurplusPortion | number |
| ledger.dividendDerivations[].taxableSurplusPortion | number |
| ledger.dividendDerivations[].preAcquisitionSurplusPortion | number |
| ledger.dividendDerivations[].hybridForeignTaxPrescribed | number |
| ledger.dividendDerivations[].taxableForeignTaxPrescribed | number |
| ledger.dividendDerivations[].hybridNonBusinessIncomeTax | number |
| ledger.dividendDerivations[].taxableNonBusinessIncomeTax | number |
| ledger.dividendDerivations[].section91_5Deduction | number |
| ledger.dividendDerivations[].section113_2HistoricCapacity | number |
| ledger.dividendDerivations[].section113_2Deduction | number |
| ledger.dividendDerivations[].section113_2HistoricShareId | null | string |
| ledger.dividendDerivations[].reg5901_1_1ElectionApplied | boolean |
| ledger.dividendDerivations[].reg5901_2_aYearEndReallocationApplied | boolean |
| ledger.dividendDerivations[].reg5901_2_bElectionApplied | boolean |
| ledger.dividendDerivations[].section93_1.partnershipId | string |
| ledger.dividendDerivations[].section93_1.partnershipDividend | number |
| ledger.dividendDerivations[].section93_1.memberFmvProportion | number |
| ledger.dividendDerivations[].section93_1.deemedReceived | number |
| ledger.dividendDerivations[].section93_1.authority | string |
| ledger.dividendDerivations[].section93_1 | null |
| ledger.dividendDerivations[].authorities[] | string |
| ledger.historicShareClosings[].affiliateId | string |
| ledger.historicShareClosings[].shareId | string |
| ledger.historicShareClosings[].authority | string |
| ledger.historicShareClosings[].adjustedCostBaseAtEndOf1975TaxationYear | number |
| ledger.historicShareClosings[].closingSection113_1_dDeductions | number |
| ledger.historicShareClosings[].closingPucReductionsBefore2011_08_20 | number |
| ledger.historicShareClosings[].closingQualifyingReturnsAfter2011_08_19 | number |
| ledger.historicShareClosings[].closingSection113_2Deductions | number |
| ledger.historicShareClosings[].remainingSection113_2Capacity | number |
| ledger.ownershipSnapshots[].date | string |
| ledger.ownershipSnapshots[].affiliateId | string |
| ledger.ownershipSnapshots[].surplusEntitlementBasis | string |
| ledger.ownershipSnapshots[].authority | string |
| ledger.ownershipSnapshots[].directEquityPercent | number |
| ledger.ownershipSnapshots[].equityPercent | number |
| ledger.ownershipSnapshots[].surplusEntitlementPercent | number |
| ledger.ownershipSnapshots[].chainProducts[].chain[] | string |
| ledger.ownershipSnapshots[].chainProducts[].productPercent | number |
| ledger.ownershipSnapshots[].surplusEntitlementChainProducts[].chain[] | string |
| ledger.ownershipSnapshots[].surplusEntitlementChainProducts[].productPercent | number |
| ledger.reg5902Elections[].affiliateId | string |
| ledger.reg5902Elections[].electionId | string |
| ledger.reg5902Elections[].dividendTime | string |
| ledger.reg5902Elections[].calculatingCurrency | string |
| ledger.reg5902Elections[].taxReportingCurrency | string |
| ledger.reg5902Elections[].authority | string |
| ledger.reg5902Elections[].electionFiledDate | null | string |
| ledger.reg5902Elections[].section93_1_11DeemedElection | boolean |
| ledger.reg5902Elections[].capitalGainOtherwiseDetermined | null | number |
| ledger.reg5902Elections[].electedDividendAmount | number |
| ledger.reg5902Elections[].capitalGainOtherwiseDeterminedTaxReportingCurrency | number |
| ledger.reg5902Elections[].electedDividendAmountTaxReportingCurrency | number |
| ledger.reg5902Elections[].downstreamNetSurplus | number |
| ledger.reg5902Elections[].deemedWholeDividend | number |
| ledger.reg5902Elections[].wholeDividendMultiplier | number |
| ledger.reg5902Elections[].reg5902DenominatorD | number |
| ledger.reg5902Elections[].specifiedAdjustmentFactor | number |
| ledger.reg5902Elections[].preAcquisitionPortionNoAccountAdjustment | number |
| ledger.reg5902Elections[].hybridUnderlyingTaxAdjustment | number |
| ledger.reg5902Elections[].underlyingForeignTaxAdjustment | number |
| ledger.reg5902Elections[].accountAdjustments.exempt | number |
| ledger.reg5902Elections[].accountAdjustments.hybrid | number |
| ledger.reg5902Elections[].accountAdjustments.taxable | number |
| ledger.currencyTranslationReceipts[].date | string |
| ledger.currencyTranslationReceipts[].fromCurrency | string |
| ledger.currencyTranslationReceipts[].toCurrency | string |
| ledger.currencyTranslationReceipts[].use | string |
| ledger.currencyTranslationReceipts[].rate | number |
| ledger.currencyTranslationReceipts[].rateIds[] | string |
| ledger.schedule25EquityReconciliation[].affiliateId | string |
| ledger.schedule25EquityReconciliation[].date | string |
| ledger.schedule25EquityReconciliation[].equityPercent | number |
| ledger.schedule25EquityReconciliation[].foreignAffiliateOwnLimbMet | boolean |
| upstreamLoans.ready | boolean |
| upstreamLoans.rows[].loanId | string |
| upstreamLoans.rows[].date | string |
| upstreamLoans.rows[].taxReportingCurrency | string |
| upstreamLoans.rows[].loanAmount | number |
| upstreamLoans.rows[].creditorPercentage | number |
| upstreamLoans.rows[].debtorPercentage | number |
| upstreamLoans.rows[].specifiedAmount | number |
| upstreamLoans.rows[].section90_6Inclusion | number |
| upstreamLoans.rows[].section90_9Deduction | number |
| upstreamLoans.rows[].section90_12Addback | number |
| upstreamLoans.rows[].section90_14RepaymentDeduction | number |
| upstreamLoans.rows[].closingOutstandingLoan | number |
| upstreamLoans.rows[].closingSection90_6Inclusion | number |
| upstreamLoans.rows[].closingPriorYearSection90_9Deduction | number |
| upstreamLoans.rows[].closingSection90_14DeductionsForSamePortion | number |
| upstreamLoans.rows[].closingRepayments | number |
| upstreamLoans.rows[].section90_6Applies | boolean |
| upstreamLoans.rows[].section90_9Components.exempt | number |
| upstreamLoans.rows[].section90_9Components.hybrid | number |
| upstreamLoans.rows[].section90_9Components.taxable | number |
| upstreamLoans.rows[].section90_9Components.section91_5 | number |
| upstreamLoans.rows[].section90_9Components.preAcquisition | number |
| upstreamLoans.rows[].section90_9Components.total | number |
| upstreamLoans.rows[].section90_8Exception | null | string |
| upstreamLoans.rows[].authorities[] | string |
| upstreamLoans.incomeAdditions | number |
| upstreamLoans.incomeDeductions | number |
| upstreamLoans.affiliateSection90_6Status | object |
| section212_3.applies | boolean |
| section212_3.ready | boolean |
| section212_3.rows[].investmentId | string |
| section212_3.rows[].subjectCorporationId | string |
| section212_3.rows[].investmentTime | string |
| section212_3.rows[].dividendTime | string |
| section212_3.rows[].paragraph10Type | string |
| section212_3.rows[].authority | string |
| section212_3.rows[].applicationTests.subjectCorporationForeignAffiliate | boolean |
| section212_3.rows[].applicationTests.section15ControlRulesReviewed | boolean |
| section212_3.rows[].applicationTests.paragraph1_b_iThresholdMet | boolean |
| section212_3.rows[].applicationTests.paragraph1_b_iiPreferredShareCondition | boolean |
| section212_3.rows[].applicationTests.paragraph1_b_iiiRiskArrangement | boolean |
| section212_3.rows[].applicationTests.testedCanadianCorporationId | string |
| section212_3.rows[].applicationTests.testedCanadianCorporationRole | string |
| section212_3.rows[].applicationTests.parentControlBasis | string |
| section212_3.rows[].applicationTests.authority | string |
| section212_3.rows[].applicationTests.parentTests[].parentId | string |
| section212_3.rows[].applicationTests.parentTests[].votePercent | number |
| section212_3.rows[].applicationTests.parentTests[].issuedShareFmvPercent | number |
| section212_3.rows[].applicationTests.parentTests[].paragraph1_b_iThresholdMet | boolean |
| section212_3.rows[].baseComponents.propertyTransferredFmv | number |
| section212_3.rows[].baseComponents.obligationAssumedOrIncurred | number |
| section212_3.rows[].baseComponents.benefitOtherwiseConferred | number |
| section212_3.rows[].baseComponents.propertyReceivedReducingCrICDebt | number |
| section212_3.rows[].subsection5_1Reduction | number |
| section212_3.rows[].baseAmountA | number |
| section212_3.rows[].subsection7Reduction | number |
| section212_3.rows[].deemedDividend | number |
| section212_3.rows[].lateFormDeemedDividend | number |
| section212_3.rows[].lateSubstitutionElectionPenaltyRequired | number |
| section212_3.rows[].exception | null | string |
| section212_3.rows[].exceptionDetail.businessException16 | boolean |
| section212_3.rows[].exceptionDetail.reorganizationException18 | null | string |
| section212_3.rows[].exceptionDetail.subsection18_1Override | boolean |
| section212_3.rows[].exceptionDetail.subsection19PreferredShareRule | boolean |
| section212_3.rows[].exceptionDetail.subsection20Amount | number |
| section212_3.rows[].subsection7_1ElectionApplied | boolean |
| section212_3.rows[].dividendSubstitutionElectionApplied | boolean |
| section212_3.rows[].parentDividends[].parentId | string |
| section212_3.rows[].parentDividends[].payorId | string |
| section212_3.rows[].parentDividends[].recipientId | string |
| section212_3.rows[].parentDividends[].allocationPercent | number |
| section212_3.rows[].parentDividends[].deemedDividend | number |
| section212_3.rows[].parentDividends[].lateFormDeemedDividend | number |
| section212_3.rows[].parentDividends[].lateSubstitutionElectionPenaltyRequired | number |
| section212_3.rows[].parentDividends[].dividendSubstitutionElectionApplied | boolean |
| section212_3.rows[].pucClasses[].corporationId | string |
| section212_3.rows[].pucClasses[].shareClassId | string |
| section212_3.rows[].pucClasses[].paragraph7Branch | string |
| section212_3.rows[].pucClasses[].openingPuc | number |
| section212_3.rows[].pucClasses[].paragraph2bDeduction | number |
| section212_3.rows[].pucClasses[].paragraph7aDeduction | number |
| section212_3.rows[].pucClasses[].paragraph7bcDeduction | number |
| section212_3.rows[].pucClasses[].subsection8Adjustment | number |
| section212_3.rows[].pucClasses[].subsection9Reinstatement | number |
| section212_3.rows[].pucClasses[].subsection9OutstandingClassAmount | number |
| section212_3.rows[].pucClasses[].subsection9AllClassDenominator | number |
| section212_3.rows[].pucClasses[].closingPuc | number |
| section212_3.rows[].pucClasses[].subsection6AntiAvoidanceApplied | boolean |
| section212_3.rows[].pucClasses[].subsection7_1ElectionApplied | boolean |
| section212_3.rows[].authorities[] | string |
| section212_3.deemedDividend | number |
| section212_3.lateFormDeemedDividend | number |
| section212_3.pucDeductions | number |
| section212_3.pucAdditions | number |
| section212_3.nonResidentControlAtInvestment | boolean | null |
| offshoreInvestmentFundProperty.present | boolean |
| offshoreInvestmentFundProperty.ready | boolean |
| offshoreInvestmentFundProperty.rows[].propertyId | string |
| offshoreInvestmentFundProperty.rows[].propertyName | string |
| offshoreInvestmentFundProperty.rows[].nonResidentEntityId | string |
| offshoreInvestmentFundProperty.rows[].nonResidentEntityType | string |
| offshoreInvestmentFundProperty.rows[].propertyType | string |
| offshoreInvestmentFundProperty.rows[].portfolioInvestmentCategory | string |
| offshoreInvestmentFundProperty.rows[].prescribedOffshoreInvestmentFundProperty | boolean |
| offshoreInvestmentFundProperty.rows[].section94_1_3LegacyYear | integer | null |
| offshoreInvestmentFundProperty.rows[].componentD | number |
| offshoreInvestmentFundProperty.rows[].grossPrescribedReturn | number |
| offshoreInvestmentFundProperty.rows[].nonCapitalIncome | number |
| offshoreInvestmentFundProperty.rows[].incomeInclusion | number |
| offshoreInvestmentFundProperty.rows[].acbAddition | number |
| offshoreInvestmentFundProperty.rows[].monthlyAmounts[].monthEnd | string |
| offshoreInvestmentFundProperty.rows[].monthlyAmounts[].designatedCost | number |
| offshoreInvestmentFundProperty.rows[].monthlyAmounts[].prescribedRate | number |
| offshoreInvestmentFundProperty.rows[].monthlyAmounts[].ratePlusTwoPercent | number |
| offshoreInvestmentFundProperty.rows[].monthlyAmounts[].imputedAmount | number |
| offshoreInvestmentFundProperty.rows[].authorities[] | string |
| offshoreInvestmentFundProperty.incomeInclusion | number |
| offshoreInvestmentFundProperty.acbAddition | number |
| offshoreInvestmentFundProperty.acbAdjustments[].propertyId | string |
| offshoreInvestmentFundProperty.acbAdjustments[].taxationYearEnd | string |
| offshoreInvestmentFundProperty.acbAdjustments[].addition | number |
| offshoreInvestmentFundProperty.acbAdjustments[].authority | string |
| offshoreInvestmentFundProperty.errors[] | string |
| errors[] | string |
| warnings[].code | string |
| warnings[].severity | string |
| warnings[].message | string |
| warnings[].row | integer |
| warnings[].rowIndex | integer |
| warnings[].templateId | string |
| warnings[].column | string |