butterfly
Filemark T2 rollover and reorganization preview
- Kind
- rollover
- Supported tax years
- —
- Strict profile
- rollover_preview_exact_v1
- Payload schema version
- 6.0.0
Example request
Send this body to POST /api/v1/computations/rollovers/butterfly. It satisfies the strict profile, so it works with or without the payloadContract selector.
{
"inputs": {
"share": {
"classLabel": "Cedar Ridge Manufacturing common",
"dividendAmount": 120000,
"inherentGain": 200000,
"inherentGainDetermined": true,
"isStockDividend": false,
"stockDividendPucIncrease": null,
"stockDividendFmv": null,
"subsection55_2_3Applies": null
},
"safe_income": {
"postFilingRetainedEarningsAttributable": 0,
"s55_5_b_adjustments": 0,
"s55_5_c_adjustments": 0,
"statutoryPeriods": [
{
"status": "private",
"periodStart": "2019-01-01",
"periodEnd": "2025-06-30",
"incomeEarnedOrRealized": 110000,
"taxFreeSurplusBalance": null,
"sharesFairMarketValue": null
}
],
"safeIncomeOnHandGrinds": 5000,
"safeIncomeDeterminationTime": "2025-06-30"
},
"butterfly_checklist": {
"distributionType": "single-wing",
"proRataEachPropertyType": true,
"anyDisqualifyingEvent_55_3_1": false,
"relatedPartyException_55_3_a": false,
"distributingCorporationWoundUp": false,
"allTransfereeSharesRedeemedOrCancelled": true,
"redemptionWasExchange_51_85_86": false,
"permittedRedemptionOrWindingUp": true
},
"dividend_recipient": {
"residentCorporationInCanada": true,
"deductibleUnder112Or138_6": true,
"purposeOrResultTestMet": "not_determined",
"s55PartIVTaxPayableForDividend": null,
"s55PartIVTaxRefundedInSeries": null,
"s55UnrefundedPartIVProtectedExcessPortion": null,
"s55PartIVEvidenceReference": null
}
}
}Input cells (34)
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 |
|---|---|---|
| butterfly_checklist.allTransfereeSharesRedeemedOrCancelled | boolean | null | strict |
| butterfly_checklist.anyDisqualifyingEvent_55_3_1Whether any s.55(3.1) disqualifying event occurred; s.55(3.1) overrides the s.55(3)(b) exception outright, and an unanswered question leaves the exception not established. | boolean | null | strict |
| butterfly_checklist.distributingCorporationWoundUp | boolean | null | strict |
| butterfly_checklist.distributionType | string | strict |
| butterfly_checklist.permittedRedemptionOrWindingUp | boolean | null | strict |
| butterfly_checklist.proRataEachPropertyTypes.55(3)(b) pro-rata test: each of cash, business and investment property was distributed in proportion to each transferee's interest. | boolean | strict |
| butterfly_checklist.redemptionWasExchange_51_85_86 | boolean | null | strict |
| butterfly_checklist.relatedPartyException_55_3_aWhether the s.55(3)(a) related-party exception is relied on; absence does not establish the relieving exception. | boolean | strict |
| dividend_recipient.deductibleUnder112Or138_6 | boolean | null | strict |
| dividend_recipient.purposeOrResultTestMet | null | string | strict |
| dividend_recipient.residentCorporationInCanada | boolean | null | strict |
| dividend_recipient.s55PartIVEvidenceReferencePayer-return and series workpaper reference supporting the Part IV payable, refunded, and protected-excess amounts; required for a non-zero packet. | null | string | strict |
| dividend_recipient.s55PartIVTaxPayableForDividendPart IV tax payable on this dividend before any refund caused by a dividend paid as part of the series. Required with a positive protected excess portion; enter 0 only when reviewed nil. | null | number | strict |
| dividend_recipient.s55PartIVTaxRefundedInSeriesPart IV tax refunded as a consequence of a dividend paid as part of the subsection 55(2.1) series. It cannot exceed the Part IV tax payable above. | null | number | strict |
| dividend_recipient.s55UnrefundedPartIVProtectedExcessPortionThe protected portion of the paragraph 55(5)(f)(ii) excess dividend whose Part IV tax remains unrefunded. This is a DIVIDEND amount, not the tax liability, and cannot exceed the computed excess. Enter 0 when the reviewed protected portion is nil. | null | number | strict |
| safe_income.postFilingRetainedEarningsAttributableLegacy three-number fallback component; must be zero when statutoryPeriods supplies the paragraph 55(5)(b)/(c)/(d) income build. | number | strict |
| safe_income.s55_5_b_adjustmentsLegacy three-number fallback component; must be zero when statutoryPeriods supplies the paragraph 55(5)(b)/(c)/(d) income build. | number | strict |
| safe_income.s55_5_c_adjustmentsLegacy three-number fallback component; must be zero when statutoryPeriods supplies the paragraph 55(5)(b)/(c)/(d) income build. | number | strict |
| safe_income.safeIncomeDeterminationTimeRequired when statutoryPeriods is non-empty because s.55(2.1)(c) counts income only after 1971 and before the safe-income determination time. | null | string | strict |
| safe_income.safeIncomeOnHandGrindsRequired when statutoryPeriods is non-empty; enter an explicit 0 when the reviewed on-hand grind is nil. | null | number | strict |
| safe_income.statutoryPeriods[].incomeEarnedOrRealized | null | number | strict |
| safe_income.statutoryPeriods[].periodEndRequired period end. A row that straddles the safe-income determination time must be split so the pre-time income is authenticated separately. | string | strict |
| safe_income.statutoryPeriods[].periodStartRequired period start, on or after 1972-01-01; split a period that crosses the after-1971 boundary. | string | strict |
| safe_income.statutoryPeriods[].sharesFairMarketValue | null | number | strict |
| safe_income.statutoryPeriods[].statusGoverning paragraph 55(5) status: (b)/(c) tests status throughout the period, while (d) tests foreign-affiliate status at period end. | string | strict |
| safe_income.statutoryPeriods[].taxFreeSurplusBalance | null | number | strict |
| share.classLabel | string | strict |
| share.dividendAmount | number | strict |
| share.inherentGain | number | strict |
| share.inherentGainDetermined | boolean | null | strict |
| share.isStockDividend | boolean | null | strict |
| share.stockDividendFmv | null | number | strict |
| share.stockDividendPucIncrease | null | number | strict |
| share.subsection55_2_3AppliesComplete conclusion after applying subsections 55(2.3) and (2.4), including whether subsection 55(2) would apply if paragraph 55(2.1)(c) were omitted. Required when this is a stock dividend and issued-share FMV exceeds the dividend-related PUC increase; null holds the ordinary paragraph 55(5)(f) and Part-IV outputs. | boolean | null | strict |
Strict profile accepted values (22 of 34 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 |
|---|---|
| butterfly_checklist.distributionType | one of "none", "single-wing", "split-up" |
| dividend_recipient.purposeOrResultTestMet | one of "yes", "no", "not_determined", null |
| dividend_recipient.s55PartIVEvidenceReference | 1 to 2000 characters |
| dividend_recipient.s55PartIVTaxPayableForDividend | 0 to 600000000000 |
| dividend_recipient.s55PartIVTaxRefundedInSeries | 0 to 600000000000 |
| dividend_recipient.s55UnrefundedPartIVProtectedExcessPortion | 0 to 600000000000 |
| safe_income.postFilingRetainedEarningsAttributable | 0 to 600000000000 |
| safe_income.s55_5_b_adjustments | 0 to 600000000000 |
| safe_income.s55_5_c_adjustments | 0 to 600000000000 |
| safe_income.safeIncomeDeterminationTime | date (YYYY-MM-DD); at most 10 characters |
| safe_income.safeIncomeOnHandGrinds | 0 to 600000000000 |
| safe_income.statutoryPeriods[].incomeEarnedOrRealized | 0 to 600000000000 |
| safe_income.statutoryPeriods[].periodEnd | date (YYYY-MM-DD); 1 to 2000 characters |
| safe_income.statutoryPeriods[].periodStart | date (YYYY-MM-DD); 1 to 2000 characters |
| safe_income.statutoryPeriods[].sharesFairMarketValue | 0 to 600000000000 |
| safe_income.statutoryPeriods[].status | one of "resident_non_private", "private", "foreign_affiliate" |
| safe_income.statutoryPeriods[].taxFreeSurplusBalance | 0 to 600000000000 |
| share.classLabel | 1 to 2000 characters |
| share.dividendAmount | 0 to 600000000000 |
| share.inherentGain | 0 to 600000000000 |
| share.stockDividendFmv | 0 to 600000000000 |
| share.stockDividendPucIncrease | 0 to 600000000000 |
Output cells (60)
Paths are relative to this target’s result object in the response.
| Cell | Types |
|---|---|
| share.classLabel | string |
| share.dividendAmount | number |
| share.inherentGain | number |
| safeIncomeOnHand | number |
| safeIncomeComponents.postFilingRetainedEarningsAttributable | number |
| safeIncomeComponents.s55_5_b_adjustments | number |
| safeIncomeComponents.s55_5_c_adjustments | number |
| safeIncomeComponents.statutoryPeriodTotal | null | number |
| safeIncomeComponents.safeIncomeOnHandGrinds | null | number |
| safeIncomeBasis | string |
| safeIncomeDeterminationTime | null | string |
| dividendAmount | number |
| amountTestedUnder55_2_1_c | null | number |
| shelteringSafeIncome | number |
| shelterCeilingStatus | string |
| subsection55_2_3Status | string |
| cushion | null | number |
| excessOverSafeIncome | null | number |
| partIVTaxPayableForDividend | null | number |
| partIVTaxRefundedInSeries | null | number |
| nonRefundedPartIVProtectedExcessPortion | null | number |
| partIVEvidenceReference | null | string |
| excessAfterNonRefundedPartIVParagraph 55(5)(f)(ii) excess remaining after the authenticated protected DIVIDEND portion is excluded under subsection 55(2); null when that portion is unanswered or when subsection 55(2.3) applies or is unresolved. | null | number |
| dividendExceedsSafeIncome | boolean | null |
| s55_2_1Conditions.preambleResidentCorporationInCanada | string |
| s55_2_1Conditions.paragraphA | string |
| s55_2_1Conditions.paragraphB | string |
| s55_2_1Conditions.paragraphC | string |
| checklist.distributionType | string |
| checklist.isButterfly | boolean |
| checklist.proRataEachPropertyType | boolean |
| checklist.anyDisqualifyingEvent_55_3_1 | boolean | null |
| checklist.relatedPartyException_55_3_a | boolean |
| checklist.distributingCorporationWoundUp | boolean | null |
| checklist.allTransfereeSharesRedeemedOrCancelled | boolean | null |
| checklist.redemptionWasExchange_51_85_86 | boolean | null |
| checklist.permittedRedemptionOrWindingUp | boolean | null |
| checklist.butterflyExceptionStatus | string |
| checklist.butterflyExceptionAvailable | boolean |
| traps[].findingCode | string |
| traps[].filingDisposition | string |
| traps[].citationKey | string |
| traps[].severity | string |
| traps[].title | string |
| traps[].body | string |
| warnings[] | string |
| warnings[].code | string |
| warnings[].findingCode | string |
| warnings[].filingDisposition | string |
| warnings[].message | string |
| warnings[].severity | string |
| blocking | boolean |
| ready | boolean |
| provisional | boolean |
| citationsApplied[] | string |
| citations[].key | string |
| citations[].section | string |
| citations[].description | string |
| citations[].source_url | string |
| citations[].verified_at | string |