# butterfly

Butterfly reorganization

- Kind: rollover
- Program: Filemark T2 rollover and reorganization preview
- Supported tax years: —
- Strict profile: rollover_preview_exact_v1
- Payload schema version: 8.0.0

## Example request

Send this body to `POST /api/v1/computations/rollovers/butterfly`. This example works with or without `payloadContract`.

```json
{
  "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": {
      "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 (32)

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](https://docs.filemark.ca/run-computations).

Unknown cells and JSON type mismatches return `400` with the affected cells in the error details.

| Cell | Types | Required | Description |
| --- | --- | --- | --- |
| `butterfly_checklist.allTransfereeSharesRedeemedOrCancelled` | boolean \| null |  |  |
| `butterfly_checklist.anyDisqualifyingEvent_55_3_1` | boolean \| null |  |  |
| `butterfly_checklist.distributingCorporationWoundUp` | boolean \| null |  |  |
| `butterfly_checklist.distributionType` | array \| boolean \| null \| number \| object \| string |  |  |
| `butterfly_checklist.permittedRedemptionOrWindingUp` | boolean \| null |  |  |
| `butterfly_checklist.proRataEachPropertyType` | boolean \| null |  |  |
| `butterfly_checklist.redemptionWasExchange_51_85_86` | boolean \| null |  |  |
| `butterfly_checklist.relatedPartyException_55_3_a` | boolean \| null |  |  |
| `dividend_recipient.deductibleUnder112Or138_6` | boolean \| null |  |  |
| `dividend_recipient.purposeOrResultTestMet` | array \| boolean \| null \| number \| object \| string |  |  |
| `dividend_recipient.residentCorporationInCanada` | boolean \| null |  |  |
| `dividend_recipient.s55PartIVEvidenceReference` | null \| string |  |  |
| `dividend_recipient.s55PartIVTaxPayableForDividend` | null \| number \| string |  |  |
| `dividend_recipient.s55PartIVTaxRefundedInSeries` | null \| number \| string |  |  |
| `dividend_recipient.s55UnrefundedPartIVProtectedExcessPortion` | null \| number \| string |  |  |
| `safe_income.safeIncomeDeterminationTime` | null \| number \| string |  |  |
| `safe_income.safeIncomeOnHandGrinds` | null \| number \| string |  |  |
| `safe_income.statutoryPeriods` | array \| null |  |  |
| `safe_income.statutoryPeriods[].incomeEarnedOrRealized` | null \| number \| string |  |  |
| `safe_income.statutoryPeriods[].periodEnd` | null \| number \| string |  |  |
| `safe_income.statutoryPeriods[].periodStart` | null \| number \| string |  |  |
| `safe_income.statutoryPeriods[].sharesFairMarketValue` | null \| number \| string |  |  |
| `safe_income.statutoryPeriods[].status` | string |  |  |
| `safe_income.statutoryPeriods[].taxFreeSurplusBalance` | null \| number \| string |  |  |
| `share.classLabel` | array \| boolean \| null \| number \| object \| string |  |  |
| `share.dividendAmount` | null \| number \| string |  |  |
| `share.inherentGain` | null \| number \| string |  |  |
| `share.inherentGainDetermined` | boolean \| null |  |  |
| `share.isStockDividend` | boolean \| null |  |  |
| `share.stockDividendFmv` | null \| number \| string |  |  |
| `share.stockDividendPucIncrease` | null \| number \| string |  |  |
| `share.subsection55_2_3Applies` | boolean \| null |  |  |

### Strict profile accepted values (15 of 32 cells)

These constraints apply when you supply this target's `payloadContract`. Cells marked **pinned** must equal the listed value. A pinned cell that is not required may be left out.

| Cell | Accepted values |
| --- | --- |
| `dividend_recipient.s55PartIVTaxPayableForDividend` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `dividend_recipient.s55PartIVTaxRefundedInSeries` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `dividend_recipient.s55UnrefundedPartIVProtectedExcessPortion` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `safe_income.safeIncomeDeterminationTime` | `-1000000000000000 to 1000000000000000` |
| `safe_income.safeIncomeOnHandGrinds` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `safe_income.statutoryPeriods[].incomeEarnedOrRealized` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `safe_income.statutoryPeriods[].periodEnd` | `-1000000000000000 to 1000000000000000` |
| `safe_income.statutoryPeriods[].periodStart` | `-1000000000000000 to 1000000000000000` |
| `safe_income.statutoryPeriods[].sharesFairMarketValue` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `safe_income.statutoryPeriods[].status` | `one of "resident_non_private", "private", "foreign_affiliate"` |
| `safe_income.statutoryPeriods[].taxFreeSurplusBalance` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `share.dividendAmount` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `share.inherentGain` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `share.stockDividendFmv` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |
| `share.stockDividendPucIncrease` | `matches ^\s*[+-]?(?:[0-9]+(?:\.[0-9]*)?\|\.[0-9]+)(?:[eE][+-]?[0-9]+)?\s*$; 0 to 600000000000` |

## Output cells (57)

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

| Cell | Types | Description |
| --- | --- | --- |
| `amountTestedUnder55_2_1_c` | null \| number |  |
| `blocking` | boolean |  |
| `checklist.allTransfereeSharesRedeemedOrCancelled` | boolean \| null |  |
| `checklist.anyDisqualifyingEvent_55_3_1` | boolean \| null |  |
| `checklist.butterflyExceptionAvailable` | boolean |  |
| `checklist.butterflyExceptionStatus` | string |  |
| `checklist.distributingCorporationWoundUp` | boolean \| null |  |
| `checklist.distributionType` | array \| boolean \| null \| number \| object \| string |  |
| `checklist.isButterfly` | boolean |  |
| `checklist.permittedRedemptionOrWindingUp` | boolean \| null |  |
| `checklist.proRataEachPropertyType` | boolean |  |
| `checklist.redemptionWasExchange_51_85_86` | boolean \| null |  |
| `checklist.relatedPartyException_55_3_a` | boolean |  |
| `citations[].description` | string |  |
| `citations[].key` | string |  |
| `citations[].section` | string |  |
| `citations[].source_url` | string |  |
| `citations[].verified_at` | string |  |
| `citationsApplied[]` | string |  |
| `cushion` | null \| number |  |
| `dividendAmount` | null \| number |  |
| `dividendExceedsSafeIncome` | boolean \| null |  |
| `excessAfterNonRefundedPartIV` | null \| number |  |
| `excessOverSafeIncome` | null \| number |  |
| `nonRefundedPartIVProtectedExcessPortion` | null \| number |  |
| `partIVEvidenceReference` | null \| string |  |
| `partIVTaxPayableForDividend` | null \| number |  |
| `partIVTaxRefundedInSeries` | null \| number |  |
| `provisional` | boolean |  |
| `ready` | boolean |  |
| `s55_2_1Conditions.paragraphA` | string |  |
| `s55_2_1Conditions.paragraphB` | string |  |
| `s55_2_1Conditions.paragraphC` | string |  |
| `s55_2_1Conditions.preambleResidentCorporationInCanada` | string |  |
| `safeIncomeComponents.safeIncomeOnHandGrinds` | null \| number |  |
| `safeIncomeComponents.statutoryPeriodTotal` | null \| number |  |
| `safeIncomeDeterminationTime` | null \| string |  |
| `safeIncomeOnHand` | number |  |
| `share.classLabel` | array \| boolean \| null \| number \| object \| string |  |
| `share.dividendAmount` | null \| number |  |
| `share.inherentGain` | null \| number |  |
| `shelterCeilingStatus` | string |  |
| `shelteringSafeIncome` | number |  |
| `subsection55_2_3Status` | string |  |
| `traps[].body` | string |  |
| `traps[].citationKey` | string |  |
| `traps[].filingDisposition` | string |  |
| `traps[].findingCode` | string |  |
| `traps[].severity` | string |  |
| `traps[].title` | string |  |
| `warnings[]` | object |  |
| `warnings[].citationKey` | string |  |
| `warnings[].code` | string |  |
| `warnings[].message` | string |  |
| `warnings[].severity` | string |  |
| `warnings[].filingDisposition` | string |  |
| `warnings[].findingCode` | string |  |
