# shareholder_loan

Shareholder loans

- Kind: batch
- Program: T2 Corporation Income Tax Return
- Supported tax years: 2011–2027
- Strict profile: shareholder_loan_v1
- Payload schema version: 0.2.0
- Dependencies (run automatically): none

## Example request

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

```json
{
  "compute": [
    "shareholder_loan"
  ],
  "inputs": {
    "taxYear": 2025,
    "fiscalStart": "2025-01-01",
    "fiscalEnd": "2025-12-31",
    "shareholderLoan": {
      "analysisDate": "2026-09-08",
      "rows": []
    }
  }
}
```

## 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 |
| --- | --- | --- | --- |
| `fiscalEnd` | string | strict | The 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. |
| `fiscalStart` | string | strict | The 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. |
| `shareholderLoan.analysisDate` | string |  | Date on which the loan analysis is prepared. |
| `shareholderLoan.interestPaidByRow` | object |  | Interest paid, keyed by loan row identifier. |
| `shareholderLoan.prescribedRateOverride.effectiveFrom` | string |  |  |
| `shareholderLoan.prescribedRateOverride.effectiveTo` | string |  |  |
| `shareholderLoan.prescribedRateOverride.rate` | number |  |  |
| `shareholderLoan.prescribedRateOverride.source` | string |  |  |
| `shareholderLoan.priorYearEnds[]` | string |  | One actual prior taxation-period end date. |
| `shareholderLoan.rows[].actualInterestRate` | null \| number |  |  |
| `shareholderLoan.rows[].amountCY` | null \| number |  |  |
| `shareholderLoan.rows[].amountPY` | null \| number |  |  |
| `shareholderLoan.rows[].backToBackAttestation` | null \| string |  |  |
| `shareholderLoan.rows[].borrowerType` | null \| string |  |  |
| `shareholderLoan.rows[].capacity` | null \| string |  |  |
| `shareholderLoan.rows[].dateAdvanced` | null \| string |  |  |
| `shareholderLoan.rows[].description` | null \| string |  |  |
| `shareholderLoan.rows[].employmentBenefitIndividualName` | null \| string |  |  |
| `shareholderLoan.rows[].exception` | null \| string |  |  |
| `shareholderLoan.rows[].exceptionConditions` | null \| string |  |  |
| `shareholderLoan.rows[].homePurchaseLoan` | null \| string |  |  |
| `shareholderLoan.rows[].interestPaid` | null \| number |  |  |
| `shareholderLoan.rows[].interestPaidDate` | null \| string |  |  |
| `shareholderLoan.rows[].loanIdentifier` | null \| string |  |  |
| `shareholderLoan.rows[].originalPrincipal` | null \| number |  |  |
| `shareholderLoan.rows[].personalServicesBusinessServices` | null \| string |  |  |
| `shareholderLoan.rows[].repaidStatus` | null \| string |  |  |
| `shareholderLoan.rows[].seriesTest` | null \| string |  |  |
| `shareholderLoan.rows[].transactions[].amount` | number |  |  |
| `shareholderLoan.rows[].transactions[].date` | string |  |  |
| `shareholderLoan.rows[].transactions[].type` | string |  |  |
| `taxYear` | integer \| string | always |  |

### Strict profile accepted values (31 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 |
| --- | --- |
| `fiscalEnd` | `date (YYYY-MM-DD); 10 to 10 characters` |
| `fiscalStart` | `date (YYYY-MM-DD); 10 to 10 characters` |
| `shareholderLoan.analysisDate` | `0 to 20000 characters` |
| `shareholderLoan.prescribedRateOverride.effectiveFrom` | `0 to 20000 characters` |
| `shareholderLoan.prescribedRateOverride.effectiveTo` | `0 to 20000 characters` |
| `shareholderLoan.prescribedRateOverride.rate` | `-60600000000000 to 60600000000000` |
| `shareholderLoan.prescribedRateOverride.source` | `0 to 20000 characters` |
| `shareholderLoan.priorYearEnds[]` | `0 to 20000 characters` |
| `shareholderLoan.rows[].actualInterestRate` | `-1000000000000000 to 1000000000000000` |
| `shareholderLoan.rows[].amountCY` | `-1000000000000000 to 1000000000000000` |
| `shareholderLoan.rows[].amountPY` | `-1000000000000000 to 1000000000000000` |
| `shareholderLoan.rows[].backToBackAttestation` | `0 to 20000 characters` |
| `shareholderLoan.rows[].borrowerType` | `0 to 20000 characters` |
| `shareholderLoan.rows[].capacity` | `0 to 20000 characters` |
| `shareholderLoan.rows[].dateAdvanced` | `0 to 20000 characters` |
| `shareholderLoan.rows[].description` | `0 to 20000 characters` |
| `shareholderLoan.rows[].employmentBenefitIndividualName` | `0 to 20000 characters` |
| `shareholderLoan.rows[].exception` | `0 to 20000 characters` |
| `shareholderLoan.rows[].exceptionConditions` | `0 to 20000 characters` |
| `shareholderLoan.rows[].homePurchaseLoan` | `0 to 20000 characters` |
| `shareholderLoan.rows[].interestPaid` | `-1000000000000000 to 1000000000000000` |
| `shareholderLoan.rows[].interestPaidDate` | `0 to 20000 characters` |
| `shareholderLoan.rows[].loanIdentifier` | `0 to 20000 characters` |
| `shareholderLoan.rows[].originalPrincipal` | `-1000000000000000 to 1000000000000000` |
| `shareholderLoan.rows[].personalServicesBusinessServices` | `0 to 20000 characters` |
| `shareholderLoan.rows[].repaidStatus` | `0 to 20000 characters` |
| `shareholderLoan.rows[].seriesTest` | `0 to 20000 characters` |
| `shareholderLoan.rows[].transactions[].amount` | `-60600000000000 to 60600000000000` |
| `shareholderLoan.rows[].transactions[].date` | `0 to 20000 characters` |
| `shareholderLoan.rows[].transactions[].type` | `0 to 20000 characters` |
| `taxYear` | `matches ^\s*(?:1[0-9]{3}\|2(?:0(?:[0-1][0-9]{1}\|2[0-7])))\s*$; 1000 to 2027` |

## Output cells (47)

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

| Cell | Types | Description |
| --- | --- | --- |
| `deadlinePassedCount` | integer |  |
| `fiscalEnd` | string |  |
| `fiscalStart` | string |  |
| `perRow[].amountCY` | number |  |
| `perRow[].amountPY` | number |  |
| `perRow[].borrowerType` | null \| string |  |
| `perRow[].capacity` | null \| string |  |
| `perRow[].dateAdvanced` | null \| string |  |
| `perRow[].description` | string |  |
| `perRow[].employmentBenefitIndividualName` | null \| string |  |
| `perRow[].exception` | null \| string |  |
| `perRow[].loanIdentifier` | null \| string |  |
| `perRow[].repaidStatus` | null \| string |  |
| `perRow[].s15_2.chargingProvisionApplies` | boolean |  |
| `perRow[].s15_2.deadline` | null \| string |  |
| `perRow[].s15_2.deadlinePassed` | boolean |  |
| `perRow[].s15_2.determinationWithheld` | boolean |  |
| `perRow[].s15_2.inclusionByYear` | null \| object |  |
| `perRow[].s15_2.inclusionYear` | integer \| null |  |
| `perRow[].s15_2.originalPrincipal` | null \| number |  |
| `perRow[].s15_2.partXIII` | null \| object |  |
| `perRow[].s15_2.partXIII.deemedDividend` | number |  |
| `perRow[].s15_2.partXIII.statutoryRate` | number |  |
| `perRow[].s15_2.partXIII.statutoryWithholding` | number |  |
| `perRow[].s15_2.partXIII.treatyRateDeterminationRequired` | boolean |  |
| `perRow[].s15_2.potentialInclusion` | number |  |
| `perRow[].s15_2.principalBasis` | null \| string |  |
| `perRow[].s15_2.rationale` | string |  |
| `perRow[].s15_2.repaymentRequired` | boolean |  |
| `perRow[].s80_4.actualInterest` | number |  |
| `perRow[].s80_4.deemedInterest` | number |  |
| `perRow[].s80_4.imputedInterest` | number |  |
| `perRow[].s80_4.method` | string |  |
| `perRow[].s80_4.rationale` | string |  |
| `perRow[].s80_4.statedInterestPaid` | number |  |
| `perRow[].seriesTest` | null \| string |  |
| `prescribedRateUsed` | number |  |
| `provisional` | boolean |  |
| `today` | string |  |
| `totalActualInterestPaid` | number |  |
| `totalPartXIIIWithholding` | number |  |
| `totalS15Inclusion` | number |  |
| `totalS80_4DeemedInterest` | number |  |
| `totalS80_4Imputed` | number |  |
| `warnings[].code` | string |  |
| `warnings[].message` | string |  |
| `warnings[].severity` | string |  |
