@classytic/ca-tax 0.0.1 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +155 -0
- package/dist/forms/index.d.mts +2 -2
- package/dist/forms/index.mjs +2 -2
- package/dist/forms.mjs +497 -20
- package/dist/index.d.mts +9 -4
- package/dist/index.mjs +3 -3
- package/dist/index3.d.mts +721 -96
- package/dist/index4.d.mts +3 -3
- package/dist/t2/index.d.mts +3 -3
- package/dist/t2/index.mjs +3 -3
- package/dist/t2.mjs +620 -66
- package/package.json +4 -2
package/dist/index3.d.mts
CHANGED
|
@@ -347,6 +347,122 @@ interface LossContinuityResult {
|
|
|
347
347
|
}
|
|
348
348
|
declare function computeLossContinuity(input: LossContinuityInput): LossContinuityResult;
|
|
349
349
|
//#endregion
|
|
350
|
+
//#region src/t2/at1/schedules/at4970-ieg-projects.d.ts
|
|
351
|
+
/**
|
|
352
|
+
* AT4970 — Listing of Innovation Employment Grant Projects Carried Out in
|
|
353
|
+
* Alberta. A separate attachment, not part of Schedule 29 itself (AuraTax's
|
|
354
|
+
* own schedule-manager lists it as attachment `4970`, distinct from `029`) —
|
|
355
|
+
* required whenever the IEG is claimed, and never built or even known about
|
|
356
|
+
* before this: the first pass at Schedule 29 skipped page 1 of the live
|
|
357
|
+
* form entirely, so nothing referenced this attachment at all. See
|
|
358
|
+
* `research/knowledge-base/at1-schedule-29-ieg-mechanics.md`.
|
|
359
|
+
*
|
|
360
|
+
* ── What it is ───────────────────────────────────────────────────────────
|
|
361
|
+
*
|
|
362
|
+
* One row per Alberta SR&ED project:
|
|
363
|
+
*
|
|
364
|
+
* 101 project title (same as federal T661 Part 2 line 200)
|
|
365
|
+
* 103 project code (federal T661 line 206)
|
|
366
|
+
* 105 portion of federal T661 line 559/557 incurred in Alberta for this
|
|
367
|
+
* project, BEFORE IEG, for the taxation year
|
|
368
|
+
* 107 portion of federal T661 line 559/557 NOT carried out in Alberta,
|
|
369
|
+
* for this project
|
|
370
|
+
* 109 total salaries and wages paid re SR&ED carried out in Alberta for
|
|
371
|
+
* this project (excluding bonuses, remuneration based on profits,
|
|
372
|
+
* and taxable benefits)
|
|
373
|
+
* 111 total prescribed proxy amount included in the Alberta portion of
|
|
374
|
+
* federal line 559/557, for this project (if claimed federally)
|
|
375
|
+
* 113 Alberta proxy amount for this project (if 111 applies)
|
|
376
|
+
*
|
|
377
|
+
* plus a TOTAL row, and a jurisdiction breakdown (135–161, one line per
|
|
378
|
+
* province/territory, "Other" at 161) with a grand total at 170.
|
|
379
|
+
*
|
|
380
|
+
* ── How it feeds Schedule 29 page 1 ─────────────────────────────────────
|
|
381
|
+
*
|
|
382
|
+
* The TOTAL row's 105/111/113 are what a preparer transcribes onto Schedule
|
|
383
|
+
* 29 page 1's own 005/007/009 (verified exactly against TRA's Example 3:
|
|
384
|
+
* AT4970 total 105=400,000 → Sch29 005=400,000; 111=55,000 → Sch29 007=
|
|
385
|
+
* 55,000; 113=55,000 → Sch29 009=55,000). `totals` below is that transcribed
|
|
386
|
+
* row; feed `totals.albertaPortion` / `totals.federalProxyAmount` /
|
|
387
|
+
* `totals.albertaProxyAmount` straight into
|
|
388
|
+
* `schedule29-eligible-expenditures.ts`'s `IegEligibleExpendituresInput` as
|
|
389
|
+
* `albertaPortion` / `federalProxyAmount` / `albertaProxyAmount`.
|
|
390
|
+
*
|
|
391
|
+
* ── The jurisdiction table is a DIFFERENT figure from the project rows ──────
|
|
392
|
+
*
|
|
393
|
+
* TRA's own Example 3 shows the jurisdiction table's Alberta line (368,750)
|
|
394
|
+
* NOT equal to the project rows' own Alberta total (400,000) — the
|
|
395
|
+
* difference (31,250) is exactly that example's own computed IEG. The
|
|
396
|
+
* jurisdiction table appears to report the FINAL, post-513-netting federal
|
|
397
|
+
* figures (reconciling against the corporation's actually-filed T661), not
|
|
398
|
+
* the pre-deduction figures the project rows and Schedule 29 page 1 use.
|
|
399
|
+
* Reproducing that netting here would require the same Step 1 → Step 2
|
|
400
|
+
* circularity Schedule 29 page 1 already resolves by using pre-deduction
|
|
401
|
+
* figures throughout (see `schedule29-eligible-expenditures.ts`) — and none
|
|
402
|
+
* of TRA's Fall 2026 test cases give a jurisdiction breakdown to reconcile
|
|
403
|
+
* against. So the jurisdiction table here is a plain, direct-entry total:
|
|
404
|
+
* informational, filed as given, and NOT used to derive `totals` or
|
|
405
|
+
* validated against it. If a real filing needs that reconciliation, it is a
|
|
406
|
+
* gap to close with a real fact pattern in hand, not guessed at here.
|
|
407
|
+
*
|
|
408
|
+
* Whole dollars, pure.
|
|
409
|
+
*/
|
|
410
|
+
interface At4970ProjectRow {
|
|
411
|
+
/** Line 101 — project title (same as federal T661 Part 2 line 200). */
|
|
412
|
+
title: string;
|
|
413
|
+
/** Line 103 — project code (federal T661 line 206). */
|
|
414
|
+
projectCode?: string;
|
|
415
|
+
/** Line 105 — portion of federal T661 559/557 incurred in Alberta, this project, before IEG. */
|
|
416
|
+
albertaPortion: number;
|
|
417
|
+
/** Line 107 — portion of federal T661 559/557 NOT carried out in Alberta, this project. */
|
|
418
|
+
otherPortion: number;
|
|
419
|
+
/** Line 109 — salaries and wages re SR&ED carried out in Alberta, this project. */
|
|
420
|
+
salariesAndWages?: number;
|
|
421
|
+
/** Line 111 — federal prescribed proxy amount included in the Alberta portion, this project. */
|
|
422
|
+
federalProxyAmount?: number;
|
|
423
|
+
/** Line 113 — Alberta proxy amount for this project. */
|
|
424
|
+
albertaProxyAmount?: number;
|
|
425
|
+
}
|
|
426
|
+
/** One row of the jurisdiction-breakdown table (135–161). Direct entry — see the module note above. */
|
|
427
|
+
interface At4970JurisdictionAmount {
|
|
428
|
+
/** One of the 13 named provinces/territories, or `'other'`. */
|
|
429
|
+
jurisdiction: string;
|
|
430
|
+
amountIncurred: number;
|
|
431
|
+
}
|
|
432
|
+
interface At4970Input {
|
|
433
|
+
/** One row per Alberta SR&ED project. An empty list is a corporation with no Alberta SR&ED to list. */
|
|
434
|
+
projects: readonly At4970ProjectRow[];
|
|
435
|
+
/** The jurisdiction-breakdown table. See the module note on why this is entered directly, not derived. */
|
|
436
|
+
jurisdictions?: readonly At4970JurisdictionAmount[];
|
|
437
|
+
}
|
|
438
|
+
interface At4970ProjectRowResult extends At4970ProjectRow {
|
|
439
|
+
otherPortion: number;
|
|
440
|
+
salariesAndWages: number;
|
|
441
|
+
federalProxyAmount: number;
|
|
442
|
+
albertaProxyAmount: number;
|
|
443
|
+
}
|
|
444
|
+
interface At4970Totals {
|
|
445
|
+
/** Line 105 total — feeds Schedule 29 page 1 line 005. */
|
|
446
|
+
albertaPortion: number;
|
|
447
|
+
/** Line 107 total. */
|
|
448
|
+
otherPortion: number;
|
|
449
|
+
/** Line 109 total. */
|
|
450
|
+
salariesAndWages: number;
|
|
451
|
+
/** Line 111 total — feeds Schedule 29 page 1 line 007. */
|
|
452
|
+
federalProxyAmount: number;
|
|
453
|
+
/** Line 113 total — feeds Schedule 29 page 1 line 009. */
|
|
454
|
+
albertaProxyAmount: number;
|
|
455
|
+
}
|
|
456
|
+
interface At4970Result {
|
|
457
|
+
projects: At4970ProjectRowResult[];
|
|
458
|
+
/** The TOTAL row (101-113 columns) — what transcribes onto Schedule 29 page 1. */
|
|
459
|
+
totals: At4970Totals;
|
|
460
|
+
jurisdictions: At4970JurisdictionAmount[];
|
|
461
|
+
/** Line 170 — Σ every jurisdiction amount. Informational; see the module note. */
|
|
462
|
+
jurisdictionTotal: number;
|
|
463
|
+
}
|
|
464
|
+
declare function computeAt4970(input: At4970Input): At4970Result;
|
|
465
|
+
//#endregion
|
|
350
466
|
//#region src/t2/rates/cca-rates.d.ts
|
|
351
467
|
type CcaRateTable = Readonly<Record<string, number>>;
|
|
352
468
|
declare const CCA_DECLINING_BALANCE_RATES_2024: CcaRateTable;
|
|
@@ -657,7 +773,7 @@ interface CcaClassResult {
|
|
|
657
773
|
}
|
|
658
774
|
declare class UnsupportedCcaClassError extends Error {
|
|
659
775
|
readonly ccaClass: string;
|
|
660
|
-
constructor(ccaClass: string);
|
|
776
|
+
constructor(ccaClass: string, reason?: string);
|
|
661
777
|
}
|
|
662
778
|
declare function computeCcaClass(input: CcaClassInput, rates?: CcaRateTable,
|
|
663
779
|
/**
|
|
@@ -1417,36 +1533,194 @@ interface DonationMaximumResult {
|
|
|
1417
1533
|
}
|
|
1418
1534
|
declare function computeDonationMaximum(input: DonationMaximumInput): DonationMaximumResult;
|
|
1419
1535
|
//#endregion
|
|
1536
|
+
//#region src/t2/at1/schedules/schedule29-eligible-expenditures.d.ts
|
|
1537
|
+
/**
|
|
1538
|
+
* AT1 Schedule 29 page 1 — Eligible Expenditures for IEG Purposes (lines
|
|
1539
|
+
* 001–040). AT29's own worksheet for deriving the "eligible expenditures"
|
|
1540
|
+
* figure (line 031) that everything else on this schedule — the base amount,
|
|
1541
|
+
* the increment, the Agreement's per-member 245/250/260 — is built from.
|
|
1542
|
+
*
|
|
1543
|
+
* ── Why this module exists separately from `schedule29-ieg.ts` ─────────────
|
|
1544
|
+
*
|
|
1545
|
+
* `computeIeg` took `eligibleExpenditures` as a bare number input. It is not
|
|
1546
|
+
* one — it is DERIVED, by a six-line formula off federal T661, and a prior
|
|
1547
|
+
* version of this package never modelled that derivation at all: it skipped
|
|
1548
|
+
* page 1 of the live form entirely (only pages 2 and 3 were ever rendered),
|
|
1549
|
+
* so every caller had to compute line 031 by hand outside the engine, with
|
|
1550
|
+
* nothing here to check the arithmetic. Confirmed missing by rendering the
|
|
1551
|
+
* live, TRA-certified form (`research/sources/tra-forms/pdf/AT1SCH29-*.pdf`,
|
|
1552
|
+
* page 1) and independently re-verified against two of TRA's own published
|
|
1553
|
+
* worked examples (`research/sources/tra-guides/tra-guide-claiming-the-
|
|
1554
|
+
* innovation-employment-grant.pdf`, Examples 3 and 4) — see
|
|
1555
|
+
* `research/knowledge-base/at1-schedule-29-ieg-mechanics.md`.
|
|
1556
|
+
*
|
|
1557
|
+
* ── The formula ──────────────────────────────────────────────────────────
|
|
1558
|
+
*
|
|
1559
|
+
* 003 federal amount of qualified/current SR&ED expenditures, T661 line
|
|
1560
|
+
* 559 or 557 (see below)
|
|
1561
|
+
* 005 portion of 003 carried out in Alberta — normally the sum of every
|
|
1562
|
+
* AT4970 project row's own 105 column (`at4970-ieg-projects.ts`)
|
|
1563
|
+
* 007 deduct: federal prescribed proxy amount included in the Alberta
|
|
1564
|
+
* portion of 003 — normally Σ AT4970's 111 column
|
|
1565
|
+
* 009 add: Alberta proxy amount — normally Σ AT4970's 113 column
|
|
1566
|
+
* 011 add: IEG that reduced the federal expenditure IN THE TAXATION YEAR
|
|
1567
|
+
* — zero for a first-time current-year claim reported on the
|
|
1568
|
+
* pre-deduction federal figures (see the Step 1 / Step 2 note below)
|
|
1569
|
+
* 025 add: the Alberta portion of a repayment of government assistance
|
|
1570
|
+
* (other than an IEG) OR A CONTRACT PAYMENT, relating to amounts in
|
|
1571
|
+
* 005 from the current year or ANY PRECEDING taxation year — two
|
|
1572
|
+
* independent triggers, not one
|
|
1573
|
+
* 031 TOTAL = 005 − 007 + 009 + 011 + 025
|
|
1574
|
+
*
|
|
1575
|
+
* 031 is what `computeIeg` calls `eligibleExpenditures` and what an
|
|
1576
|
+
* Agreement member's own `currentYearExpenditures` (line 245) is — the same
|
|
1577
|
+
* formula, computed once per corporation per year, whether or not that
|
|
1578
|
+
* corporation is associated.
|
|
1579
|
+
*
|
|
1580
|
+
* ── The federal T661 line 557 vs 559 split (Fall 2026 re-certification) ────
|
|
1581
|
+
*
|
|
1582
|
+
* TRA's own certification correspondence and the live form agree: for a
|
|
1583
|
+
* taxation year ending ON OR BEFORE 2024-12-15, line 003 comes from federal
|
|
1584
|
+
* T661 line 559 (qualified SR&ED expenditures); for a taxation year ending
|
|
1585
|
+
* ON OR AFTER 2024-12-16, it comes from T661 line 557 (CURRENT SR&ED
|
|
1586
|
+
* expenditures) instead — a different federal figure, not a renumbering.
|
|
1587
|
+
* `iegT661SourceLine` below is purely informational (which federal line a
|
|
1588
|
+
* preparer should be told to copy from); it does not change the Alberta
|
|
1589
|
+
* arithmetic itself, which is identical either way.
|
|
1590
|
+
*
|
|
1591
|
+
* ── The "Step 1 / Step 2" columns in TRA's Guide are not two form fields ────
|
|
1592
|
+
*
|
|
1593
|
+
* The Guide illustrates every page-1 line twice — once using the federal
|
|
1594
|
+
* figures BEFORE the current year's own IEG is netted against them as
|
|
1595
|
+
* government assistance (T661 line 513), once AFTER, with line 011 adding
|
|
1596
|
+
* the IEG back. Both worked examples land on the IDENTICAL line 031 either
|
|
1597
|
+
* way (011 exists specifically to undo the 513 netting for ALBERTA's own
|
|
1598
|
+
* base, so it cannot shrink itself). Only ONE set of figures is filed. Every
|
|
1599
|
+
* TRA test case gives the pre-deduction ("Step 1") federal figures — use
|
|
1600
|
+
* those directly, with 011 = 0 for a first-time current-year claim. Do not
|
|
1601
|
+
* build a literal two-pass loop; there is nothing for it to converge on that
|
|
1602
|
+
* isn't already true of the Step 1 figures alone.
|
|
1603
|
+
*
|
|
1604
|
+
* Whole dollars, pure.
|
|
1605
|
+
*/
|
|
1606
|
+
/** Which federal T661 line line 003 sources from, given a taxation year end. */
|
|
1607
|
+
declare function iegT661SourceLine(taxationYearEnd: string): '557' | '559';
|
|
1608
|
+
interface IegEligibleExpendituresInput {
|
|
1609
|
+
/** Line 003 — federal qualified/current SR&ED expenditures (T661 line 559 or 557). */
|
|
1610
|
+
federalAmount: number;
|
|
1611
|
+
/** Line 005 — the portion of 003 carried out in Alberta. */
|
|
1612
|
+
albertaPortion: number;
|
|
1613
|
+
/** Line 007 — federal prescribed proxy amount included in the Alberta portion of 003. */
|
|
1614
|
+
federalProxyAmount?: number;
|
|
1615
|
+
/** Line 009 — Alberta proxy amount. */
|
|
1616
|
+
albertaProxyAmount?: number;
|
|
1617
|
+
/**
|
|
1618
|
+
* Line 011 — IEG that reduced the federal expenditure at 003 IN THE
|
|
1619
|
+
* TAXATION YEAR. Zero for a first-time current-year claim reported on the
|
|
1620
|
+
* pre-deduction federal figures (see the Step 1 / Step 2 note above) —
|
|
1621
|
+
* only non-zero when the federal figure supplied at 003 was ALREADY net
|
|
1622
|
+
* of this year's own IEG.
|
|
1623
|
+
*/
|
|
1624
|
+
iegReducingFederalExpenditure?: number;
|
|
1625
|
+
/**
|
|
1626
|
+
* Line 025 — the Alberta portion of a repayment of government assistance
|
|
1627
|
+
* (other than an IEG) OR a contract payment, relating to amounts in 005
|
|
1628
|
+
* from the current year or any preceding taxation year. Two independent
|
|
1629
|
+
* triggers, both rolled into one line by the form itself.
|
|
1630
|
+
*/
|
|
1631
|
+
repaymentOrContractPayment?: number;
|
|
1632
|
+
}
|
|
1633
|
+
interface IegEligibleExpendituresResult {
|
|
1634
|
+
federalAmount: number;
|
|
1635
|
+
albertaPortion: number;
|
|
1636
|
+
federalProxyAmount: number;
|
|
1637
|
+
albertaProxyAmount: number;
|
|
1638
|
+
iegReducingFederalExpenditure: number;
|
|
1639
|
+
repaymentOrContractPayment: number;
|
|
1640
|
+
/** Line 031 — TOTAL: Eligible Expenditures for Alberta Purposes. */
|
|
1641
|
+
totalEligibleExpenditures: number;
|
|
1642
|
+
}
|
|
1643
|
+
/** Line 031 = 005 − 007 + 009 + 011 + 025. Every term but 005 defaults to nil. */
|
|
1644
|
+
declare function computeIegEligibleExpenditures(input: IegEligibleExpendituresInput): IegEligibleExpendituresResult;
|
|
1645
|
+
//#endregion
|
|
1420
1646
|
//#region src/t2/at1/schedules/schedule29-ieg.d.ts
|
|
1421
1647
|
/**
|
|
1422
1648
|
* AT1 Schedule 29 — Alberta Innovation Employment Grant (IEG). AT1 line 129.
|
|
1423
1649
|
*
|
|
1424
1650
|
* A refundable grant on eligible R&D (SR&ED) carried out in Alberta:
|
|
1425
|
-
* - 8%
|
|
1426
|
-
*
|
|
1427
|
-
*
|
|
1428
|
-
*
|
|
1429
|
-
*
|
|
1430
|
-
*
|
|
1431
|
-
*
|
|
1432
|
-
*
|
|
1433
|
-
*
|
|
1434
|
-
*
|
|
1435
|
-
*
|
|
1436
|
-
*
|
|
1437
|
-
*
|
|
1438
|
-
*
|
|
1651
|
+
* - line 110: 8% of the CAPPED eligible expenditures (the full amount, not
|
|
1652
|
+
* just the portion below base)
|
|
1653
|
+
* - line 112 (non-associated): 12% of the increment ABOVE the base level of
|
|
1654
|
+
* spending — base level = average of the prior two years'
|
|
1655
|
+
* eligible Alberta expenditures (associated group aggregated —
|
|
1656
|
+
* pass all members' figures)
|
|
1657
|
+
* - line 125 (associated, via a filed agreement): 12% of the LESSER of the
|
|
1658
|
+
* expenditure limit and the agreement's allocated allowed
|
|
1659
|
+
* amount — see `computeIegAgreement` in `schedule29-ieg-group.ts`.
|
|
1660
|
+
* A genuinely different formula, not a variant of 112's — it does
|
|
1661
|
+
* not reference actual spending at all once the agreement exists.
|
|
1662
|
+
*
|
|
1663
|
+
* Eligible expenditures are capped at a $4,000,000 annual limit (shared across an
|
|
1664
|
+
* associated group; NOT reduced by taxable capital — see below). Pure, integer
|
|
1665
|
+
* whole dollars.
|
|
1666
|
+
*
|
|
1667
|
+
* ── The taxable-capital grind applies to the CREDIT, not the limit ──────────
|
|
1668
|
+
*
|
|
1669
|
+
* A prior version of this module reduced the $4,000,000 expenditure limit itself
|
|
1670
|
+
* on a straight-line taxable-capital grind ($10M → $50M) — modelled on the
|
|
1671
|
+
* federal SBD grind's shape, but wrong for this form. Rendering the live,
|
|
1672
|
+
* TRA-certified Schedule 29 (`research/sources/tra-forms/pdf/AT1SCH29-*.pdf`,
|
|
1673
|
+
* Rev. 2026-06 — cross-checked against AuraTax's live rendering of the same
|
|
1674
|
+
* schedule, `research/validation/auratax/2026-08-25-at1-schedule1-royalty/`)
|
|
1675
|
+
* shows the grind lives at **line 128**, a REDUCTION FACTOR from 0 to 1:
|
|
1676
|
+
*
|
|
1677
|
+
* line 128 = (($40,000,000 − (line 126 − $10,000,000)) / $40,000,000)
|
|
1678
|
+
* (enter 1 if taxable capital ≤ $10,000,000)
|
|
1679
|
+
* line 130 = (line 110 + (line 112 or line 125)) × line 128
|
|
1680
|
+
*
|
|
1681
|
+
* i.e. the credit is computed in FULL against the unreduced $4M limit, and ONLY
|
|
1682
|
+
* THEN scaled by the taxable-capital factor — not the limit ground down first
|
|
1683
|
+
* and the credit computed against the smaller number. The two are NOT
|
|
1684
|
+
* equivalent except at the band's endpoints (TC ≤ $10M ⇒ both give the full
|
|
1685
|
+
* credit; TC ≥ $50M ⇒ both give nil).
|
|
1686
|
+
*
|
|
1687
|
+
* ── One thing not yet resolved, and worth raising with TRA directly ─────────
|
|
1688
|
+
*
|
|
1689
|
+
* The AT1 jacket's OWN business-rule table (`research/sources/tra-spec/
|
|
1690
|
+
* AT1-Chapter3-2025.2-full.txt`, version 2025.2 / August 2025 — ten months
|
|
1691
|
+
* OLDER than the Schedule 29 PDF above) states jacket line 129 as
|
|
1692
|
+
* `(029110 + 029112 X 029128) minus 029132` — multiplying ONLY line 112 by the
|
|
1693
|
+
* factor, not the sum of 110 and 112. That contradicts Schedule 29's own
|
|
1694
|
+
* printed caption, which the certified oracle (AuraTax) also renders as
|
|
1695
|
+
* "sum then multiply". This module follows the newer, doubly-corroborated
|
|
1696
|
+
* Schedule 29 form. Confirm with TRA before relying on this for an associated
|
|
1697
|
+
* corporation with taxable capital between $10M and $50M — the disagreement
|
|
1698
|
+
* changes the filed dollar figure.
|
|
1699
|
+
*
|
|
1700
|
+
* ── The formal Agreement (line 125) ──────────────────────────────────────────
|
|
1701
|
+
*
|
|
1702
|
+
* TRA's Test Case 3 (four associated corporations, `research/sources/
|
|
1703
|
+
* tra-test-cases/Alberta Test Case 3 - Fall 2025.txt`) is the associated path:
|
|
1704
|
+
* pass `associatedAllowedAmount` (line 325 of `computeIegAgreement`'s result)
|
|
1705
|
+
* and this function uses line 125's formula instead of line 112's. Day-of-year
|
|
1706
|
+
* proration of the $4M pool for a short or long taxation year (lines 104/108/
|
|
1707
|
+
* 206/208) is modelled in `computeIegAgreement`, not here — this function
|
|
1708
|
+
* takes the already-allocated `expenditureLimit` as an input.
|
|
1439
1709
|
*/
|
|
1440
1710
|
declare const IEG_2024: Readonly<{
|
|
1441
1711
|
BASE_RATE: 0.08;
|
|
1442
|
-
ENHANCED_RATE: 0.
|
|
1712
|
+
ENHANCED_RATE: 0.12;
|
|
1443
1713
|
MAX_EXPENDITURE: 4000000;
|
|
1444
1714
|
TC_GRIND_LOWER: 10000000;
|
|
1445
1715
|
TC_GRIND_UPPER: 50000000;
|
|
1446
1716
|
PRIOR_YEARS: 2;
|
|
1447
1717
|
}>;
|
|
1448
|
-
/**
|
|
1449
|
-
|
|
1718
|
+
/**
|
|
1719
|
+
* The line-128 reduction factor: 1 at or below $10M taxable capital, straight-
|
|
1720
|
+
* line down to 0 at $50M. Multiplies the COMBINED base + enhanced credit at
|
|
1721
|
+
* line 130 — it does not touch the $4,000,000 expenditure limit.
|
|
1722
|
+
*/
|
|
1723
|
+
declare function computeIegReductionFactor(taxableCapital: number, lower?: 10000000, upper?: 50000000): number;
|
|
1450
1724
|
/**
|
|
1451
1725
|
* Base level of spending = average of the prior years' eligible Alberta
|
|
1452
1726
|
* expenditures. Pass every associated-group member's prior-year figures; the
|
|
@@ -1458,20 +1732,305 @@ interface IegInput {
|
|
|
1458
1732
|
eligibleExpenditures: number;
|
|
1459
1733
|
/** Base level of spending (average of prior two years, group-aggregated). */
|
|
1460
1734
|
baseAmount: number;
|
|
1461
|
-
/** Allocated eligible-expenditure limit (default $4M; pass the
|
|
1735
|
+
/** Allocated eligible-expenditure limit (default $4M; pass the allocated share). */
|
|
1462
1736
|
expenditureLimit?: number;
|
|
1737
|
+
/**
|
|
1738
|
+
* Line 126 — taxable capital employed in Canada (this corporation's alone if
|
|
1739
|
+
* not associated with anyone for IEG purposes; the associated GROUP's total
|
|
1740
|
+
* otherwise). Drives the line-128 reduction factor. Defaults to 0 — i.e. no
|
|
1741
|
+
* grind — which is correct for a corporation that has no associated group and
|
|
1742
|
+
* omits this only because it genuinely has none, not as a shortcut.
|
|
1743
|
+
*/
|
|
1744
|
+
taxableCapital?: number;
|
|
1745
|
+
/**
|
|
1746
|
+
* Line 132 — recapture where IEG-funded property was sold or converted to
|
|
1747
|
+
* commercial use in the year. Omitted (not defaulted to 0 in the type) so a
|
|
1748
|
+
* caller who has not computed a recapture figure cannot mistake "omitted" for
|
|
1749
|
+
* "confirmed nil".
|
|
1750
|
+
*/
|
|
1751
|
+
recapture?: number;
|
|
1752
|
+
/**
|
|
1753
|
+
* Line 325 — this corporation's allocated allowed amount from a filed
|
|
1754
|
+
* Agreement Among Associated Corporations (`computeIegAgreement`). Presence,
|
|
1755
|
+
* not truthiness, selects the formula: supplying it (even as 0) switches
|
|
1756
|
+
* line 112's "capped spending less base" to line 125's "lesser of the limit
|
|
1757
|
+
* and this figure" — the ASSOCIATED path. Omit entirely for a corporation
|
|
1758
|
+
* with no such agreement.
|
|
1759
|
+
*/
|
|
1760
|
+
associatedAllowedAmount?: number;
|
|
1463
1761
|
}
|
|
1464
1762
|
interface IegResult {
|
|
1465
1763
|
cappedExpenditures: number;
|
|
1466
1764
|
baseAmount: number;
|
|
1467
1765
|
incrementalExpenditures: number;
|
|
1766
|
+
/** Line 110 — 8% of the capped expenditures. */
|
|
1468
1767
|
creditAtBaseRate: number;
|
|
1768
|
+
/** Line 112 (non-associated) or line 125 (associated) — 12% either way. */
|
|
1469
1769
|
creditAtEnhancedRate: number;
|
|
1470
|
-
/**
|
|
1770
|
+
/** Which formula produced `creditAtEnhancedRate` — for the schedule and the audit trail. */
|
|
1771
|
+
enhancedRateBasis: 'non-associated' | 'associated';
|
|
1772
|
+
/** Line 126, as supplied. */
|
|
1773
|
+
taxableCapital: number;
|
|
1774
|
+
/** Line 128 — the taxable-capital reduction factor, 0 to 1. */
|
|
1775
|
+
reductionFactor: number;
|
|
1776
|
+
/** Line 130 — (110 + 112) × line 128, before recapture. */
|
|
1777
|
+
grossIeg: number;
|
|
1778
|
+
/** Line 132, as supplied (0 when omitted). */
|
|
1779
|
+
recapture: number;
|
|
1780
|
+
/** Line 134 — NET IEG. Carried to AT1 page 2, line 129. */
|
|
1471
1781
|
ieg: number;
|
|
1472
1782
|
}
|
|
1473
1783
|
declare function computeIeg(input: IegInput): IegResult;
|
|
1474
1784
|
//#endregion
|
|
1785
|
+
//#region src/t2/at1/schedules/schedule29-ieg-group.d.ts
|
|
1786
|
+
/** One associated corporation's contribution to the group figures. */
|
|
1787
|
+
interface IegGroupMember {
|
|
1788
|
+
/** Corporation name or identifier, for the allocation schedule. */
|
|
1789
|
+
name: string;
|
|
1790
|
+
/**
|
|
1791
|
+
* Taxable capital employed in Canada for the member's **last taxation year
|
|
1792
|
+
* ending in the preceding calendar year** (federal Schedule 33 line 690).
|
|
1793
|
+
*/
|
|
1794
|
+
taxableCapital?: number;
|
|
1795
|
+
/**
|
|
1796
|
+
* Eligible Alberta SR&ED expenditures for each of the member's prior two
|
|
1797
|
+
* taxation years. A member with none contributes an empty array, and still
|
|
1798
|
+
* contributes its taxable capital above.
|
|
1799
|
+
*/
|
|
1800
|
+
priorYearAlbertaExpenditures?: readonly number[];
|
|
1801
|
+
}
|
|
1802
|
+
interface IegGroupResult {
|
|
1803
|
+
/** Σ each member's taxable capital — pass to `computeIeg` as `taxableCapital`. */
|
|
1804
|
+
groupTaxableCapital: number;
|
|
1805
|
+
/** The flat $4,000,000 pool shared by the group (not taxable-capital-ground). */
|
|
1806
|
+
groupExpenditureLimit: number;
|
|
1807
|
+
/** Σ every member's prior-year Alberta expenditures. */
|
|
1808
|
+
totalPriorYearExpenditures: number;
|
|
1809
|
+
/** The base level of spending: the total ÷ the number of prior years (2). */
|
|
1810
|
+
groupBaseAmount: number;
|
|
1811
|
+
/** Per-member detail, for the schedule and the audit trail. */
|
|
1812
|
+
members: {
|
|
1813
|
+
name: string;
|
|
1814
|
+
taxableCapital: number;
|
|
1815
|
+
priorYearAlbertaExpenditures: number[];
|
|
1816
|
+
priorYearTotal: number;
|
|
1817
|
+
}[];
|
|
1818
|
+
issues: string[];
|
|
1819
|
+
}
|
|
1820
|
+
/**
|
|
1821
|
+
* The group's taxable capital and base level of spending, from every associated
|
|
1822
|
+
* member's own figures.
|
|
1823
|
+
*
|
|
1824
|
+
* Pass the CLAIMANT as a member too — it is part of its own associated group and
|
|
1825
|
+
* omitting it understates both figures.
|
|
1826
|
+
*/
|
|
1827
|
+
declare function computeIegGroupFigures(members: readonly IegGroupMember[], priorYears?: 2): IegGroupResult;
|
|
1828
|
+
/** One member's share of the ground-down expenditure limit. */
|
|
1829
|
+
interface IegLimitAllocation {
|
|
1830
|
+
name: string;
|
|
1831
|
+
/** The share agreed for this member. */
|
|
1832
|
+
allocated: number;
|
|
1833
|
+
}
|
|
1834
|
+
interface IegAllocationResult {
|
|
1835
|
+
/** The group limit being shared. */
|
|
1836
|
+
groupExpenditureLimit: number;
|
|
1837
|
+
allocations: IegLimitAllocation[];
|
|
1838
|
+
totalAllocated: number;
|
|
1839
|
+
/** Limit not allocated to any member — available but unclaimed. */
|
|
1840
|
+
unallocated: number;
|
|
1841
|
+
issues: string[];
|
|
1842
|
+
}
|
|
1843
|
+
/**
|
|
1844
|
+
* Allocate the ground-down expenditure limit among the associated members.
|
|
1845
|
+
*
|
|
1846
|
+
* The group may allocate as it chooses, but the total cannot exceed the limit.
|
|
1847
|
+
* An over-allocation is **not** silently scaled back — that would quietly change
|
|
1848
|
+
* an agreed split — it is reported as an issue and each member is capped at what
|
|
1849
|
+
* remains, in the order given.
|
|
1850
|
+
*/
|
|
1851
|
+
declare function allocateIegExpenditureLimit(groupExpenditureLimit: number, requested: readonly IegLimitAllocation[]): IegAllocationResult;
|
|
1852
|
+
/** Split the limit evenly, for a group with no agreed allocation. */
|
|
1853
|
+
declare function allocateIegEvenly(groupExpenditureLimit: number, names: readonly string[]): IegAllocationResult;
|
|
1854
|
+
/**
|
|
1855
|
+
* Everything above allocates the $4M pool and computes a group base level
|
|
1856
|
+
* informally. TRA requires more than that when the group is genuinely
|
|
1857
|
+
* associated: a filed AGREEMENT (Schedule 29 page 3) naming every member,
|
|
1858
|
+
* each one's own allocated share, and a group-level "Allowed Amount" that
|
|
1859
|
+
* gates the 12% enhanced rate for the associated path (line 125) — a
|
|
1860
|
+
* DIFFERENT formula from the non-associated one (line 112), not a variant of
|
|
1861
|
+
* it. Read off the live, TRA-certified form
|
|
1862
|
+
* (`research/sources/tra-forms/pdf/AT1SCH29-innovation-employment-grant-TRA14637.pdf`,
|
|
1863
|
+
* Rev. 2026-06, page 3), which prints its own formulas in a Notes block —
|
|
1864
|
+
* this module transcribes them exactly rather than paraphrasing.
|
|
1865
|
+
*
|
|
1866
|
+
* ── Line 125 vs line 112 — a genuinely different formula ────────────────────
|
|
1867
|
+
*
|
|
1868
|
+
* Non-associated (line 112): `(Lesser of 031 and 108) − Base Amount`, then ×12%
|
|
1869
|
+
* — spending capped at the limit, less the base.
|
|
1870
|
+
*
|
|
1871
|
+
* Associated (line 125): `Lesser of 108 or the allocated allowed amount (325)`,
|
|
1872
|
+
* then ×12% — no reference to actual spending at all. The "allowed amount" from
|
|
1873
|
+
* this agreement stands in for it. `computeIeg` in `schedule29-ieg.ts` branches
|
|
1874
|
+
* on whether an agreement result is supplied.
|
|
1875
|
+
*
|
|
1876
|
+
* ── One member's allocated allowed amount (line 268) ────────────────────────
|
|
1877
|
+
*
|
|
1878
|
+
* The form states it as "the least of: line 240, line 267, and the lesser of
|
|
1879
|
+
* [(4,000,000 × days in tax year/365 or 366) or line 031] less base amount" —
|
|
1880
|
+
* three independent caps, taken literally, THEN floored at nil:
|
|
1881
|
+
*
|
|
1882
|
+
* (240) this member's own agreed share of the expenditure limit
|
|
1883
|
+
* (267) this member's own current-year expenditures less its own base
|
|
1884
|
+
* (average of its prior two years) — NOT floored itself; the live
|
|
1885
|
+
* form prints a negative 267 as-is (e.g. "(50,000)", confirmed
|
|
1886
|
+
* against TRA's own Example 4). Only the outer 268 is floored, per
|
|
1887
|
+
* the form's own note ("if a calculated amount is negative, that
|
|
1888
|
+
* particular corporation will have a nil allowed amount on 268").
|
|
1889
|
+
* An earlier version of this module floored 267 itself — wrong: a
|
|
1890
|
+
* floored 267 and a floored 268 give the same answer only when 267
|
|
1891
|
+
* is the binding constraint, which is not guaranteed.
|
|
1892
|
+
* (C) this member's own day-prorated $4M share (up to 366 days — NOT
|
|
1893
|
+
* capped at 365 the way Schedule 13's proration is; this form's own
|
|
1894
|
+
* note says so explicitly), capped by this member's own current-year
|
|
1895
|
+
* expenditures, less this member's own base
|
|
1896
|
+
*
|
|
1897
|
+
* A FOURTH condition gates all of the above: a member with no permanent
|
|
1898
|
+
* establishment in Alberta gets 268 = 0 outright, regardless of what the
|
|
1899
|
+
* three-way least-of would otherwise give — confirmed against TRA's own
|
|
1900
|
+
* Example 4, where a member with a POSITIVE 267 (60,000) still receives
|
|
1901
|
+
* 268 = 0 because it lacks an Alberta PE. See `IegAgreementMember.
|
|
1902
|
+
* hasAlbertaPermanentEstablishment`. That member's raw 245/250/260/265
|
|
1903
|
+
* still flow into the group totals below — only its OWN 268 is zeroed.
|
|
1904
|
+
*
|
|
1905
|
+
* ── The group Allowed Amount (line 310) ──────────────────────────────────────
|
|
1906
|
+
*
|
|
1907
|
+
* X (275) = Σ every member's current-year eligible expenditures (245)
|
|
1908
|
+
* Y (280) = Σ every member's first-preceding-year expenditures (250)
|
|
1909
|
+
* Z (290) = Σ every member's second-preceding-year expenditures (260)
|
|
1910
|
+
* 310 = X − (Y + Z) / 2
|
|
1911
|
+
*
|
|
1912
|
+
* Two cross-checks the form states as notes, surfaced here as issues rather
|
|
1913
|
+
* than silently enforced: total allocated limit (270) must not exceed the
|
|
1914
|
+
* group's day-prorated maximum (208); total allocated allowed amount (320)
|
|
1915
|
+
* must not exceed the group Allowed Amount (310).
|
|
1916
|
+
*
|
|
1917
|
+
* Whole dollars, pure.
|
|
1918
|
+
*/
|
|
1919
|
+
/** One row of the page-3 allocation table. "Use the first line for the claiming corporation." */
|
|
1920
|
+
interface IegAgreementMember {
|
|
1921
|
+
name: string;
|
|
1922
|
+
federalBusinessNumber?: string;
|
|
1923
|
+
/** 230 — Alberta Corporate Account Number. */
|
|
1924
|
+
albertaCan?: string;
|
|
1925
|
+
/** 235 — this member's own current taxation year end, ISO `YYYY-MM-DD`. */
|
|
1926
|
+
currentTaxationYearEnd?: string;
|
|
1927
|
+
/** 240 — this member's own agreed share of the expenditure limit. */
|
|
1928
|
+
allocatedExpenditureLimit: number;
|
|
1929
|
+
/** 245 — this member's own current-year eligible Alberta expenditures. */
|
|
1930
|
+
currentYearExpenditures: number;
|
|
1931
|
+
/** 250 — this member's own first-preceding-year expenditures. */
|
|
1932
|
+
priorYear1: number;
|
|
1933
|
+
/** 260 — this member's own second-preceding-year expenditures. */
|
|
1934
|
+
priorYear2: number;
|
|
1935
|
+
/** 265 — this member's own taxable capital for the first preceding year. */
|
|
1936
|
+
taxableCapitalPriorYear?: number;
|
|
1937
|
+
/**
|
|
1938
|
+
* Days in THIS member's own current taxation year — feeds the day-prorated
|
|
1939
|
+
* cap in line 268's third component. Defaults to 365 (a full year) when
|
|
1940
|
+
* omitted, matching every other day-proration default in this package.
|
|
1941
|
+
*/
|
|
1942
|
+
daysInTaxYear?: number;
|
|
1943
|
+
/**
|
|
1944
|
+
* Whether this member has a permanent establishment in Alberta. A member
|
|
1945
|
+
* WITHOUT one is categorically ineligible for the IEG — line 268 is 0
|
|
1946
|
+
* regardless of what the formula alone would give, even when 267 is
|
|
1947
|
+
* positive — but its raw 245/250/260/265 STILL count toward the group
|
|
1948
|
+
* totals (270/275/280/290/300/310). Confirmed against TRA's own published
|
|
1949
|
+
* Example 4: a member with 267 = 60,000 gets 268 = 0 solely because it has
|
|
1950
|
+
* no Alberta PE ("Allocated amount ... is 0 as corporation does not have a
|
|
1951
|
+
* permanent establishment in Alberta and is therefore not eligible for the
|
|
1952
|
+
* IEG. However, ... its eligible expenditures are still included in the
|
|
1953
|
+
* calculation of line 310."). The claimant (row 1) defaults to `true` — it
|
|
1954
|
+
* is filing an Alberta return claiming an Alberta grant, so it has Alberta
|
|
1955
|
+
* nexus by construction. Every OTHER member defaults to `false` (fail
|
|
1956
|
+
* closed: the worst a missing answer can do is UNDERSTATE the grant, not
|
|
1957
|
+
* overstate it) and raises an issue so the omission is visible rather than
|
|
1958
|
+
* silently assumed either way.
|
|
1959
|
+
*/
|
|
1960
|
+
hasAlbertaPermanentEstablishment?: boolean;
|
|
1961
|
+
}
|
|
1962
|
+
interface IegAgreementMemberResult {
|
|
1963
|
+
name: string;
|
|
1964
|
+
federalBusinessNumber?: string;
|
|
1965
|
+
albertaCan?: string;
|
|
1966
|
+
currentTaxationYearEnd?: string;
|
|
1967
|
+
allocatedExpenditureLimit: number;
|
|
1968
|
+
currentYearExpenditures: number;
|
|
1969
|
+
priorYear1: number;
|
|
1970
|
+
priorYear2: number;
|
|
1971
|
+
taxableCapitalPriorYear: number;
|
|
1972
|
+
hasAlbertaPermanentEstablishment: boolean;
|
|
1973
|
+
/**
|
|
1974
|
+
* 267 — line 245 − [(line 250 + line 260) / 2]. NOT floored — the live
|
|
1975
|
+
* form prints this negative (e.g. "(50,000)") when spending fell below
|
|
1976
|
+
* the average of the prior two years. Only 268 is floored at nil.
|
|
1977
|
+
*/
|
|
1978
|
+
individualMaximumAllowedAmount: number;
|
|
1979
|
+
/**
|
|
1980
|
+
* 268 — least of 240, 267, and the day-prorated-and-capped-less-base
|
|
1981
|
+
* figure, floored at nil, AND forced to nil for a member with no Alberta
|
|
1982
|
+
* permanent establishment regardless of what that least-of would give.
|
|
1983
|
+
*/
|
|
1984
|
+
allocatedAllowedAmount: number;
|
|
1985
|
+
}
|
|
1986
|
+
interface IegAgreementInput {
|
|
1987
|
+
/** 200 — CAN of the associated corporation with the LONGEST taxation year. */
|
|
1988
|
+
longestYearCan: string;
|
|
1989
|
+
/** 202 / 204 — that corporation's own tax year, ISO `YYYY-MM-DD`. */
|
|
1990
|
+
longestYearBegin: string;
|
|
1991
|
+
longestYearEnd: string;
|
|
1992
|
+
/** 206 — days in that longest year. Up to 366 — this form does not cap at 365. */
|
|
1993
|
+
daysInLongestYear: number;
|
|
1994
|
+
/** The full member table. Put the claiming corporation first. */
|
|
1995
|
+
members: readonly IegAgreementMember[];
|
|
1996
|
+
}
|
|
1997
|
+
interface IegAgreementResult {
|
|
1998
|
+
longestYearCan: string;
|
|
1999
|
+
/** 202 / 204, echoed through from the input for filing. */
|
|
2000
|
+
longestYearBegin: string;
|
|
2001
|
+
longestYearEnd: string;
|
|
2002
|
+
daysInLongestYear: number;
|
|
2003
|
+
/** 208 — $4,000,000 × (206 / 365). */
|
|
2004
|
+
maximumExpenditureLimit: number;
|
|
2005
|
+
members: IegAgreementMemberResult[];
|
|
2006
|
+
/** 270 — Σ 240. Should not exceed 208. */
|
|
2007
|
+
totalAllocatedLimit: number;
|
|
2008
|
+
/** 275 — Σ 245 ("X" in the form's own notation). */
|
|
2009
|
+
totalCurrentYearExpenditures: number;
|
|
2010
|
+
/** 280 — Σ 250 ("Y"). */
|
|
2011
|
+
totalPriorYear1: number;
|
|
2012
|
+
/** 290 — Σ 260 ("Z"). */
|
|
2013
|
+
totalPriorYear2: number;
|
|
2014
|
+
/** 300 — Σ 265. */
|
|
2015
|
+
totalTaxableCapitalPriorYear: number;
|
|
2016
|
+
/** 310 — 275 − (280 + 290) / 2. The GROUP Allowed Amount. */
|
|
2017
|
+
groupAllowedAmount: number;
|
|
2018
|
+
/** 320 — Σ 268. Should not exceed 310. */
|
|
2019
|
+
totalAllocatedAllowedAmount: number;
|
|
2020
|
+
/**
|
|
2021
|
+
* 325 — the CLAIMING corporation's own line 268 (first row of `members`).
|
|
2022
|
+
* Feeds `computeIeg`'s `associatedAllowedAmount` for line 125.
|
|
2023
|
+
*/
|
|
2024
|
+
claimantAllocatedAllowedAmount: number;
|
|
2025
|
+
issues: string[];
|
|
2026
|
+
}
|
|
2027
|
+
/**
|
|
2028
|
+
* The formal Agreement Among Associated Corporations. The FIRST entry in
|
|
2029
|
+
* `input.members` must be the claiming corporation — its own line 268 becomes
|
|
2030
|
+
* line 325, which is what actually reaches `computeIeg`.
|
|
2031
|
+
*/
|
|
2032
|
+
declare function computeIegAgreement(input: IegAgreementInput): IegAgreementResult;
|
|
2033
|
+
//#endregion
|
|
1475
2034
|
//#region src/t2/at1/filing/at1-schedule-line-items.d.ts
|
|
1476
2035
|
/** One `Value` element: the nine-digit line item id and its value. */
|
|
1477
2036
|
interface At1ScheduleValue {
|
|
@@ -1521,7 +2080,79 @@ declare function schedule13Values(result: AlbertaSchedule13Result): At1ScheduleD
|
|
|
1521
2080
|
*/
|
|
1522
2081
|
declare function schedule17Values(result: AlbertaSchedule17Result): At1ScheduleData;
|
|
1523
2082
|
declare function schedule18Values(result: AlbertaSchedule18Result): At1ScheduleData;
|
|
1524
|
-
|
|
2083
|
+
/**
|
|
2084
|
+
* Field ids read off the live, TRA-certified form
|
|
2085
|
+
* (`research/sources/tra-forms/pdf/AT1SCH29-*.pdf`, Rev. 2026-06):
|
|
2086
|
+
*
|
|
2087
|
+
* Page 1 — Eligible Expenditures, filed only when the caller supplies
|
|
2088
|
+
* `eligible` (from `computeIegEligibleExpenditures` in
|
|
2089
|
+
* `schedule29-eligible-expenditures.ts`):
|
|
2090
|
+
* 003 federal amount of qualified/current SR&ED expenditures (T661 line
|
|
2091
|
+
* 559 or 557 — see `iegT661SourceLine`)
|
|
2092
|
+
* 005/007/009/011/025 the five adjustments; 031 = 005 − 007 + 009 + 011 + 025
|
|
2093
|
+
* 040 primary field of science or technology (1–4), when the caller
|
|
2094
|
+
* supplies `primaryFieldCode`
|
|
2095
|
+
*
|
|
2096
|
+
* Page 1/2 — the grant itself:
|
|
2097
|
+
* 110 8% of the capped expenditures
|
|
2098
|
+
* 112 12% of the increment above base — the non-associated path. Filed
|
|
2099
|
+
* INSTEAD of 125, never alongside it.
|
|
2100
|
+
* 125 12% of the associated path's allocated allowed amount — filed
|
|
2101
|
+
* instead of 112 when `result.enhancedRateBasis === 'associated'`.
|
|
2102
|
+
* 126 taxable capital the line-128 factor was computed from
|
|
2103
|
+
* 128 the taxable-capital reduction factor, 0 to 1
|
|
2104
|
+
* 130 (110 + 112-or-125) × 128 — the credit before recapture
|
|
2105
|
+
* 132 recapture, only where the caller supplied one
|
|
2106
|
+
* 134 NET IEG — the figure AT1 page 2, line 129 carries forward
|
|
2107
|
+
*
|
|
2108
|
+
* Page 3 — the Agreement Among Associated Corporations, filed only when the
|
|
2109
|
+
* group agreed one (`agreement`, from `computeIegAgreement` in
|
|
2110
|
+
* `schedule29-ieg-group.ts`); omitted entirely for a non-associated claim:
|
|
2111
|
+
* 200/202/204/206/208 the longest-year member's CAN, that member's own
|
|
2112
|
+
* tax year begin/end, days in that year, and the resulting $4M-pool
|
|
2113
|
+
* maximum for the group
|
|
2114
|
+
* Per member, occurrence incrementing in the order given (claimant first):
|
|
2115
|
+
* 220 Federal Business Number, 230 Alberta CAN, 235 current taxation
|
|
2116
|
+
* year end, 240 allocated expenditure limit, 245 current-year
|
|
2117
|
+
* expenditures, 250 prior year 1, 260 prior year 2, 265 taxable capital
|
|
2118
|
+
* (prior year), 267 individual maximum allowed amount, 268 allocated
|
|
2119
|
+
* allowed amount. The form has NO line for the member's NAME — 220 is
|
|
2120
|
+
* the Federal Business Number, confirmed by re-rendering page 3 of the
|
|
2121
|
+
* live form (a prior version of this function filed `name` at 220,
|
|
2122
|
+
* which put free text in a box the form defines as a 9-10 digit account
|
|
2123
|
+
* number; `name` is not transmitted at all, matching the form).
|
|
2124
|
+
* 270/275/280/290/300 Σ 240/245/250/260/265 across every member
|
|
2125
|
+
* 310 the group Allowed Amount — 275 − (280 + 290) / 2
|
|
2126
|
+
* 320 Σ 268
|
|
2127
|
+
* 325 the claiming corporation's own 268 — this is what feeds line 125
|
|
2128
|
+
* above (`associatedAllowedAmount` in `computeIeg`'s input)
|
|
2129
|
+
*
|
|
2130
|
+
* 128 is a RATIO, not a dollar figure — formatted to 6 decimal places, the
|
|
2131
|
+
* same precision `schedule2.ts`'s Reg 402 allocation factor uses. That
|
|
2132
|
+
* precision is this codebase's own convention, not something confirmed
|
|
2133
|
+
* against TRA's certification validator for THIS field; verify before relying
|
|
2134
|
+
* on it for a corporation whose taxable capital sits inside the $10M–$50M
|
|
2135
|
+
* band. See `schedule29-ieg.ts` for why 128 exists and the one unresolved
|
|
2136
|
+
* discrepancy in how 130 is meant to be computed.
|
|
2137
|
+
*/
|
|
2138
|
+
declare function schedule29Values(result: IegResult, agreement?: IegAgreementResult, eligible?: IegEligibleExpendituresResult, primaryFieldCode?: 1 | 2 | 3 | 4): At1ScheduleData;
|
|
2139
|
+
/**
|
|
2140
|
+
* A separate attachment from Schedule 29 itself, one occurrence per Alberta
|
|
2141
|
+
* SR&ED project (101/103/105/107/109/111/113), a TOTAL row (repeats the same
|
|
2142
|
+
* field ids at a fixed trailing occurrence — see below), and the jurisdiction
|
|
2143
|
+
* table (135–170, occurrence 1, no per-jurisdiction row structure since each
|
|
2144
|
+
* jurisdiction has its own field id already).
|
|
2145
|
+
*
|
|
2146
|
+
* ⚠ The schedule id (`'4970'`) and line-item id scheme used here are a
|
|
2147
|
+
* PLACEHOLDER — TRA's own published Guide confirms the field NUMBERS
|
|
2148
|
+
* (verified twice, independently) but not the NetFile wire-format encoding
|
|
2149
|
+
* for this attachment. See `at4970-ieg-projects.ts` and `forms/at4970.ts`
|
|
2150
|
+
* for the same caveat. Verify before relying on this for live filing.
|
|
2151
|
+
*
|
|
2152
|
+
* The TOTAL row is filed at occurrence `projects.length + 1` — one past the
|
|
2153
|
+
* last project row — so a real project can never collide with it.
|
|
2154
|
+
*/
|
|
2155
|
+
declare function schedule4970Values(result: At4970Result): At1ScheduleData;
|
|
1525
2156
|
/**
|
|
1526
2157
|
* Schedule 12 takes **both** figures side by side, not a difference.
|
|
1527
2158
|
*
|
|
@@ -1788,76 +2419,6 @@ interface AllocationFactorInput {
|
|
|
1788
2419
|
declare const SINGLE_JURISDICTION_ALBERTA_FACTOR = 1;
|
|
1789
2420
|
declare function computeAllocationFactor(input: AllocationFactorInput): number;
|
|
1790
2421
|
//#endregion
|
|
1791
|
-
//#region src/t2/at1/schedules/schedule29-ieg-group.d.ts
|
|
1792
|
-
/** One associated corporation's contribution to the group figures. */
|
|
1793
|
-
interface IegGroupMember {
|
|
1794
|
-
/** Corporation name or identifier, for the allocation schedule. */
|
|
1795
|
-
name: string;
|
|
1796
|
-
/**
|
|
1797
|
-
* Taxable capital employed in Canada for the member's **last taxation year
|
|
1798
|
-
* ending in the preceding calendar year** (federal Schedule 33 line 690).
|
|
1799
|
-
*/
|
|
1800
|
-
taxableCapital?: number;
|
|
1801
|
-
/**
|
|
1802
|
-
* Eligible Alberta SR&ED expenditures for each of the member's prior two
|
|
1803
|
-
* taxation years. A member with none contributes an empty array, and still
|
|
1804
|
-
* contributes its taxable capital above.
|
|
1805
|
-
*/
|
|
1806
|
-
priorYearAlbertaExpenditures?: readonly number[];
|
|
1807
|
-
}
|
|
1808
|
-
interface IegGroupResult {
|
|
1809
|
-
/** Σ each member's taxable capital, driving the grind. */
|
|
1810
|
-
groupTaxableCapital: number;
|
|
1811
|
-
/** The $4,000,000 limit after the taxable-capital grind — shared by the group. */
|
|
1812
|
-
groupExpenditureLimit: number;
|
|
1813
|
-
/** Σ every member's prior-year Alberta expenditures. */
|
|
1814
|
-
totalPriorYearExpenditures: number;
|
|
1815
|
-
/** The base level of spending: the total ÷ the number of prior years (2). */
|
|
1816
|
-
groupBaseAmount: number;
|
|
1817
|
-
/** Per-member detail, for the schedule and the audit trail. */
|
|
1818
|
-
members: {
|
|
1819
|
-
name: string;
|
|
1820
|
-
taxableCapital: number;
|
|
1821
|
-
priorYearAlbertaExpenditures: number[];
|
|
1822
|
-
priorYearTotal: number;
|
|
1823
|
-
}[];
|
|
1824
|
-
issues: string[];
|
|
1825
|
-
}
|
|
1826
|
-
/**
|
|
1827
|
-
* The group's taxable capital and base level of spending, from every associated
|
|
1828
|
-
* member's own figures.
|
|
1829
|
-
*
|
|
1830
|
-
* Pass the CLAIMANT as a member too — it is part of its own associated group and
|
|
1831
|
-
* omitting it understates both figures.
|
|
1832
|
-
*/
|
|
1833
|
-
declare function computeIegGroupFigures(members: readonly IegGroupMember[], priorYears?: 2): IegGroupResult;
|
|
1834
|
-
/** One member's share of the ground-down expenditure limit. */
|
|
1835
|
-
interface IegLimitAllocation {
|
|
1836
|
-
name: string;
|
|
1837
|
-
/** The share agreed for this member. */
|
|
1838
|
-
allocated: number;
|
|
1839
|
-
}
|
|
1840
|
-
interface IegAllocationResult {
|
|
1841
|
-
/** The group limit being shared. */
|
|
1842
|
-
groupExpenditureLimit: number;
|
|
1843
|
-
allocations: IegLimitAllocation[];
|
|
1844
|
-
totalAllocated: number;
|
|
1845
|
-
/** Limit not allocated to any member — available but unclaimed. */
|
|
1846
|
-
unallocated: number;
|
|
1847
|
-
issues: string[];
|
|
1848
|
-
}
|
|
1849
|
-
/**
|
|
1850
|
-
* Allocate the ground-down expenditure limit among the associated members.
|
|
1851
|
-
*
|
|
1852
|
-
* The group may allocate as it chooses, but the total cannot exceed the limit.
|
|
1853
|
-
* An over-allocation is **not** silently scaled back — that would quietly change
|
|
1854
|
-
* an agreed split — it is reported as an issue and each member is capped at what
|
|
1855
|
-
* remains, in the order given.
|
|
1856
|
-
*/
|
|
1857
|
-
declare function allocateIegExpenditureLimit(groupExpenditureLimit: number, requested: readonly IegLimitAllocation[]): IegAllocationResult;
|
|
1858
|
-
/** Split the limit evenly, for a group with no agreed allocation. */
|
|
1859
|
-
declare function allocateIegEvenly(groupExpenditureLimit: number, names: readonly string[]): IegAllocationResult;
|
|
1860
|
-
//#endregion
|
|
1861
2422
|
//#region src/t2/at1/engine/alberta-return.d.ts
|
|
1862
2423
|
interface AlbertaReturnInput {
|
|
1863
2424
|
/** Federal taxable income (from the T2). */
|
|
@@ -1901,7 +2462,38 @@ interface AlbertaReturnInput {
|
|
|
1901
2462
|
* is claimed, which is right for the great majority of returns.
|
|
1902
2463
|
*/
|
|
1903
2464
|
ieg?: {
|
|
1904
|
-
/**
|
|
2465
|
+
/**
|
|
2466
|
+
* This corporation's current-year eligible SR&ED carried out IN ALBERTA
|
|
2467
|
+
* (Schedule 29 line 031). Either supply this directly, or supply
|
|
2468
|
+
* `eligible` (and optionally `at4970`) and let the pipeline derive it —
|
|
2469
|
+
* the way the live form actually works. Deriving it here is not
|
|
2470
|
+
* optional decoration: line 031 is `eligible.albertaPortion −
|
|
2471
|
+
* federalProxyAmount + albertaProxyAmount + iegReducingFederalExpenditure
|
|
2472
|
+
* + repaymentOrContractPayment`, not a preparer-typed number. Ignored
|
|
2473
|
+
* when `eligible` is supplied.
|
|
2474
|
+
*/
|
|
2475
|
+
eligibleExpenditures?: number;
|
|
2476
|
+
/**
|
|
2477
|
+
* Schedule 29 page 1 — derives line 031 from federal T661. When
|
|
2478
|
+
* `albertaPortion` / `federalProxyAmount` / `albertaProxyAmount` are
|
|
2479
|
+
* omitted here AND `at4970` is supplied, they default to the AT4970
|
|
2480
|
+
* attachment's own totals (105/111/113) — the transcription the live
|
|
2481
|
+
* form itself requires. Supplying them here overrides that default.
|
|
2482
|
+
*/
|
|
2483
|
+
eligible?: {
|
|
2484
|
+
/** Line 003 — federal qualified/current SR&ED expenditures (T661 line 559 or 557). */federalAmount: number; /** Line 005 — portion of 003 carried out in Alberta. Defaults from `at4970`'s totals. */
|
|
2485
|
+
albertaPortion?: number; /** Line 007. Defaults from `at4970`'s totals. */
|
|
2486
|
+
federalProxyAmount?: number; /** Line 009. Defaults from `at4970`'s totals. */
|
|
2487
|
+
albertaProxyAmount?: number; /** Line 011 — see `schedule29-eligible-expenditures.ts`'s Step 1 / Step 2 note. */
|
|
2488
|
+
iegReducingFederalExpenditure?: number; /** Line 025 — repayment of government assistance or a contract payment. */
|
|
2489
|
+
repaymentOrContractPayment?: number;
|
|
2490
|
+
};
|
|
2491
|
+
/**
|
|
2492
|
+
* AT4970 — Listing of Innovation Employment Grant Projects, filed as its
|
|
2493
|
+
* own attachment. Also feeds `eligible`'s defaults — see above.
|
|
2494
|
+
*/
|
|
2495
|
+
at4970?: At4970Input; /** Line 040 — primary field of science or technology, 1 to 4. */
|
|
2496
|
+
primaryFieldCode?: 1 | 2 | 3 | 4;
|
|
1905
2497
|
/**
|
|
1906
2498
|
* Every member of the associated group, INCLUDING this corporation. A group
|
|
1907
2499
|
* of one is simply a group of one — pass it anyway, so the same path computes
|
|
@@ -1909,11 +2501,27 @@ interface AlbertaReturnInput {
|
|
|
1909
2501
|
*/
|
|
1910
2502
|
group: readonly IegGroupMember[];
|
|
1911
2503
|
/**
|
|
1912
|
-
* This corporation's agreed share of the group's
|
|
1913
|
-
*
|
|
1914
|
-
*
|
|
2504
|
+
* This corporation's agreed share of the group's expenditure limit. Omit it
|
|
2505
|
+
* and the whole limit is allocated here, which is correct only when no other
|
|
2506
|
+
* member is claiming.
|
|
1915
2507
|
*/
|
|
1916
2508
|
allocatedLimit?: number;
|
|
2509
|
+
/**
|
|
2510
|
+
* Line 132 — recapture where property funded by an earlier IEG was sold or
|
|
2511
|
+
* converted to commercial use in the year. Omitted when there is none to
|
|
2512
|
+
* report, not defaulted to 0 — see `IegInput.recapture`.
|
|
2513
|
+
*/
|
|
2514
|
+
recapture?: number;
|
|
2515
|
+
/**
|
|
2516
|
+
* The formal Agreement Among Associated Corporations (Schedule 29 page 3).
|
|
2517
|
+
* Supplying it switches the grant to the ASSOCIATED formula (line 125): the
|
|
2518
|
+
* enhanced-rate credit is 12% of the agreement's allocated allowed amount
|
|
2519
|
+
* instead of 12% of spending above base (line 112). Omit it for a
|
|
2520
|
+
* non-associated claim, or for an associated group that has chosen not to
|
|
2521
|
+
* file the agreement (line 112 still applies, just without an allocated
|
|
2522
|
+
* limit shared by agreement).
|
|
2523
|
+
*/
|
|
2524
|
+
agreement?: IegAgreementInput;
|
|
1917
2525
|
};
|
|
1918
2526
|
}
|
|
1919
2527
|
interface AlbertaReturnResult {
|
|
@@ -1923,6 +2531,10 @@ interface AlbertaReturnResult {
|
|
|
1923
2531
|
albertaTaxPayable: number;
|
|
1924
2532
|
/** The associated-group figures the grant was computed from. */
|
|
1925
2533
|
iegGroup?: IegGroupResult;
|
|
2534
|
+
/** The formal Agreement Among Associated Corporations, when one was filed. */
|
|
2535
|
+
iegAgreement?: IegAgreementResult;
|
|
2536
|
+
/** Schedule 29 page 1 — the eligible-expenditures derivation, when `ieg.eligible` was supplied. */
|
|
2537
|
+
iegEligibleExpenditures?: IegEligibleExpendituresResult;
|
|
1926
2538
|
/** Schedule 29 detail. */
|
|
1927
2539
|
ieg?: IegResult;
|
|
1928
2540
|
/**
|
|
@@ -1978,6 +2590,19 @@ interface At1TransmitterInfo {
|
|
|
1978
2590
|
phone: string;
|
|
1979
2591
|
email: string;
|
|
1980
2592
|
};
|
|
2593
|
+
/**
|
|
2594
|
+
* EDI071001 — amended return indicator. §3.3.6.1: optional, "1" = Yes; there
|
|
2595
|
+
* is no "2"/No value defined — the field is either "1" or OMITTED, never a
|
|
2596
|
+
* negative answer, unlike the jacket's 1/2 yes-no fields (`at1YesNo`).
|
|
2597
|
+
*/
|
|
2598
|
+
isAmended?: boolean;
|
|
2599
|
+
/**
|
|
2600
|
+
* EDI073001 — description of changes, 1-100 chars. Mandatory when
|
|
2601
|
+
* `isAmended` is true; the specification requires the line be OMITTED
|
|
2602
|
+
* entirely (not blank) when the return is not amended — enforced by
|
|
2603
|
+
* `assertAt1MandatoryComplete` and the line-item's own `get`.
|
|
2604
|
+
*/
|
|
2605
|
+
amendmentDescription?: string;
|
|
1981
2606
|
}
|
|
1982
2607
|
interface At1FilingData {
|
|
1983
2608
|
softwareCertCode: string;
|
|
@@ -5600,4 +6225,4 @@ interface MpDeductionResult {
|
|
|
5600
6225
|
}
|
|
5601
6226
|
declare function computeMpDeduction(input: MpDeductionInput, rates?: MpDeductionRates): MpDeductionResult;
|
|
5602
6227
|
//#endregion
|
|
5603
|
-
export { QuebecTaxResult as $, AT1_RESERVE_TOTAL_LINES as $a, computeIegGroupFigures as $i, mealsAndEntertainmentAddBack as $n, LossCarrybackInput as $o, Schedule12Adjustment as $r, ItcRecaptureItem as $t, T2CifGifi as A, computeIegBaseAmount as Aa, At1CriticalFieldMissingError as Ai, Schedule4Input as An, Class141AdditionalAllowanceInput as Ao, PartITaxResult as Ar, computeSchedule55 as At, Co17Certification as B, computeSchedule20 as Ba, at1YesNo as Bi, computeSchedule2 as Bn, computeClass13 as Bo, CORP_TAX_RATE_BOOK as Br, computeGrip as Bt, FOREIGN_TAX_CREDIT_GROSS_UP as C, schedule21Values as Ca, formatRsiDate as Ci, Schedule5Result as Cn, computeCcaClass as Co, computeTaxableIncome as Cr, latestRateYear as Cs, computeSchedule101 as Ct, computeT2Settlement as D, IegInput as Da, renderRsiLineItem as Di, ProvincialAllocationInput as Dn, CLASS_14_1_TRANSITIONAL_RATE as Do, CcpcActiveBusinessTaxInput as Dr, normalizeSchedule88 as Dt, T2SettlementResult as E, IEG_2024 as Ea, renderRsiHeader as Ei, PermanentEstablishment as En, CLASS_14_1_MINIMUM_DEDUCTION as Eo, nonCapitalLossApplied as Er, Schedule88Result as Et, T2GifiLine as F, DonationMaximumResult as Fa, albertaBalanceUnpaid as Fi, Part4RdtohResult as Fn, Class14Result as Fo, SbdInput as Fr, Schedule54Input as Ft, co17Engine as G, At1AbilResult as Ga, AlbertaReturnResult as Gi, Schedule1Result as Gn, CCA_RATE_BOOK as Go, computeLossSchedule as Gr, LARGE_CORPORATION_THRESHOLD as Gt, Co17ReturnData as H, AlbertaSchedule18Input as Ha, At1ReturnInput as Hi, Schedule1Line as Hn, computeClass141AdditionalAllowance as Ho, resolveCorpTaxRates as Hr, Schedule43Rates as Ht, renderT2DraftReturn as I, computeDonationMaximum as Ia, assertAt1MandatoryComplete as Ii, REFUNDABLE_PART_I_RATE as In, LeaseholdLayer as Io, SbdResult as Ir, Schedule54Result as It, computeQuebecReturn as J, At1DispositionCategory as Ja, IegGroupMember as Ji, ccaDeduction as Jn, resolveCcaRates as Jo, CEC_DEDUCTION_RATE as Jr, computeTaxableCapital as Jt, QuebecReturnInput as K, At1CategoryResult as Ka, computeAlbertaReturn as Ki, amortizationAddBack as Kn, CcaRateTable as Ko, AlbertaSchedule14Input as Kr, TaxableCapitalInput as Kt, T2ReturnInput as L, AlbertaGiftCarryforward as La, assertAt1TaxPayableReconciles as Li, computePart4Rdtoh as Ln, LeaseholdLayerResult as Lo, computeBusinessLimit as Lr, computeSchedule54 as Lt, T2CifQuestionnaire as M, AT1_DONATION_GAIN_RATE as Ma, At1MandatoryFieldMissingError as Mi, computeSchedule4Losses as Mn, Class14Input as Mo, computePartITax as Mr, LRIP_INVESTMENT_INCOME_FACTOR as Mt, T2CifSettlement as N, AT1_DONATION_INCOME_RATE as Na, At1TaxPayableMismatchError as Ni, PART_IV_RATE as Nn, Class14Property as No, BusinessLimitInput as Nr, LripDividendEvent as Nt, T2CifAddress as O, IegResult as Oa, renderAt1NetFile as Oi, ProvincialAllocationResult as On, Class13Input as Oo, CcpcActiveBusinessTaxResult as Or, Schedule55Input as Ot, T2CifShareholder as P, DonationMaximumInput as Pa, At1TransmitterInfo as Pi, Part4RdtohInput as Pn, Class14PropertyResult as Po, BusinessLimitResult as Pr, LripEventResult as Pt, QuebecTaxInput as Q, AT1_RESERVE_LINES as Qa, allocateIegExpenditureLimit as Qi, incomeTaxProvisionAddBack as Qn, LossCarrybackError as Qo, computeAlbertaSchedule14 as Qr, ITC_RECAPTURE_PERIOD_YEARS as Qt, t2Engine as R, Schedule20Input as Ra, assertCriticalFields as Ri, Schedule2Input as Rn, MAX_LEASEHOLD_PERIODS as Ro, computeSBD as Rr, GripInput as Rt, AdjustedTaxableIncomeResult as S, schedule20Values as Sa, formatRsiAmount as Si, Schedule5Input as Sn, UnsupportedCcaClassError as So, charitableDonationsDeduction as Sr, hasExactRateYear as Ss, Schedule101Result as St, T2SettlementInput as T, schedule2Values as Ta, renderAt1Rsi as Ti, AllocatedProvince as Tn, computeSchedule8 as To, netCapitalLossApplied as Tr, Schedule88Input as Tt, renderCo17DraftReturn as U, AlbertaSchedule18Result as Ua, at1Engine as Ui, Schedule1LineDefect as Un, leaseholdPeriods as Uo, LossScheduleInput as Ur, Schedule43Result as Ut, Co17Identity as V, AT1_DISPOSITION_CATEGORIES as Va, xmlEscape as Vi, Schedule1Input as Vn, computeClass14 as Vo, CorpTaxRates as Vr, Schedule43Input as Vt, Co17ReturnInput as W, At1AbilEntry as Wa, AlbertaReturnInput as Wi, Schedule1NotFileableError as Wn, CCA_DECLINING_BALANCE_RATES_2024 as Wo, LossScheduleResult as Wr, computeSchedule43 as Wt, QuebecEstablishment as X, computeAlbertaSchedule18 as Xa, IegLimitAllocation as Xi, deferredIncomeTaxProvisionAddBack as Xn, LossContinuityResult as Xo, CecIncomeInclusionDetail as Xr, Schedule31Result as Xt, QuebecAllocationResult as Y, SECTION_34_2_GROSS_UP as Ya, IegGroupResult as Yi, computeSchedule1 as Yn, LossContinuityInput as Yo, CEC_INCLUSION_RATE as Yr, Schedule31Input as Yt, computeQuebecAllocationFactor as Z, AT1_RESERVE_KINDS as Za, allocateIegEvenly as Zi, findSchedule1LineDefects as Zn, computeLossContinuity as Zo, cecScheduleAppliesToTaxYear as Zr, computeSchedule31 as Zt, EifelLimitationInput as _, schedule13Values as _a, RSI_WORD_GAP as _i, computeSchedule13 as _n, CcaClassInput as _o, isSchedule5Province as _r, resolveAlbertaTaxRates as _s, FederalT2Input as _t, MpDeductionRates as a, At1ScheduleData as aa, albertaCcaDifference as ai, computeZetm as an, At1ReserveTable as ao, EifelResult as ar, computeAlbertaTax as as, T2_CERTIFICATION_FIXTURES as at, ratioOfPermissibleExpenses as b, schedule18Values as ba, RsiLineItemError as bi, Schedule6Result as bn, Schedule8Entry as bo, TaxableIncomeLine as br, earliestRateYear as bs, FirstReturnEvent as bt, PART_VI_1_DEDUCTION_BANDS as c, Schedule12FilingInput as ca, albertaDispositionAdjustments as ci, BusinessLimitAllocationInput as cn, AlbertaSchedule16Result as co, ProvincialRateChange as cr, AlbertaSbdResult as cs, ConformanceSummary as ct, computePartVI1Deduction as d, Schedule21FilingInput as da, albertaTerminalLossDifference as di, computeBusinessLimitAllocation as dn, AlbertaCcaOverride as do, dayWeightedRate as dr, DayWeightedRateResult as ds, T2LineKey as dt, AllocationFactorInput as ea, Schedule12Input as ei, ItcRecaptureItemResult as en, AlbertaSchedule17Input as eo, recaptureAddBack as er, LossCarrybackResult as es, computeQuebecTax as et, partVI1DeductionMultiple as f, Schedule2FilingInput as fa, computeSchedule12 as fi, Schedule21Input as fn, AlbertaSchedule13ClassResult as fo, PROVINCE_RATES_2024 as fr, GeneralRateBand as fs, T2_LINE_META as ft, EIFEL_TRANSITIONAL_RATIO as g, schedule12Values as ga, RSI_NEGATIVE_PREFIX as gi, ReserveContinuityRow as gn, computeAlbertaSchedule13 as go, ProvincialRate as gr, AlbertaTaxRates as gs, runConformanceSuite as gt, EIFEL_STANDARD_RATIO_FROM as h, schedule12LossDeductions as ha, RSI_DELIMITER as hi, ReserveContinuityResult as hn, FederalCcaClass as ho, ProvinceRateTable as hr, AB_TAX_RATE_BOOK as hs, runConformance as ht, MpDeductionInput as i, AT1_SCHEDULES_WITH_BUILDERS as ia, albertaCapitalGainDifference as ii, ZetmResult as in, At1ReserveRowResult as io, EifelInput as ir, AlbertaTaxResult as is, resolveQuebecTaxRates as it, T2CifPartI as j, computeIegExpenditureLimit as ja, At1FilingData as ji, Schedule4Result as jn, Class141AdditionalAllowanceResult as jo, computeCcpcActiveBusinessTax as jr, LRIP_INVESTMENT_CORPORATION_MULTIPLE as jt, T2CifData as k, computeIeg as ka, AT1_CRITICAL_MANDATORY_FIELDS as ki, computeProvincialAllocation as kn, Class13Result as ko, PartITaxInput as kr, Schedule55Result as kt, PartVI1DeductionBand as l, Schedule1FilingInput as la, albertaRecaptureDifference as li, BusinessLimitAllocationResult as ln, assistanceFrom as lo, ProvincialRateChanges as lr, computeAlbertaSbd as ls, ExpectedSource as lt, EIFEL_STANDARD_RATIO as m, schedule10Values as ma, RSI_COLUMN_GAP as mi, computeSchedule21 as mn, AlbertaSchedule13Result as mo, ProvinceCode as mr, AB_TAX_2024 as ms, formatConformanceReport as mt, MP_GROSS_REVENUE_THRESHOLD as n, computeAllocationFactor as na, Schedule12Result as ni, computeItcRecapture as nn, At1ReserveBalances as no, EIFEL_EFFECTIVE_FROM as nr, computeLossCarryback as ns, QC_TAX_RATE_BOOK as nt, MpDeductionResult as o, At1ScheduleValue as oa, albertaCcaScheduleAdjustments as oi, AssociatedMemberInput as on, computeAlbertaSchedule17 as oo, EifelThresholds as or, AlbertaCorporationStatus as os, CertificationFixture as ot, EIFEL_FIRST_YEAR_START as p, at1LineItemId as pa, reconcileAlbertaNetIncome as pi, Schedule21Result as pn, AlbertaSchedule13Input as po, PROVINCE_RATE_BOOK as pr, computeDayWeightedGeneralTax as ps, foldT2Lines as pt, QuebecReturnResult as q, At1CategoryTotals as qa, IegAllocationResult as qi, assertSchedule1Fileable as qn, isDecliningBalanceClass as qo, AlbertaSchedule14Result as qr, TaxableCapitalResult as qt, MP_RATES_2024 as r, AT1_SCHEDULES_WITHOUT_BUILDERS as ra, albertaAbilDifference as ri, ZetmInput as rn, At1ReserveKind as ro, EifelExemption as rr, AlbertaTaxInput as rs, QuebecTaxRates as rt, computeMpDeduction as s, Schedule10FilingInput as sa, albertaCurrentYearLoss as si, AssociatedMemberResult as sn, AlbertaSchedule16Input as so, assessEifel as sr, AlbertaSbdInput as ss, ConformanceResult as st, MP_EXCLUDED_ACTIVITIES as t, SINGLE_JURISDICTION_ALBERTA_FACTOR as ta, Schedule12Line as ti, ItcRecaptureResult as tn, AlbertaSchedule17Result as to, terminalLossDeduction as tr, LossCarrybackYear as ts, QC_TAX_2024 as tt, PartVI1DeductionResult as u, Schedule20FilingInput as ua, albertaReserveDifference as ui, allocateEvenly as un, computeAlbertaSchedule16 as uo, blendProvinceRateTable as ur, AB_GENERAL_RATE_BANDS as us, LineCheck as ut, EifelLimitationResult as v, schedule16Values as va, RsiHeaderInput as vi, CapitalDisposition as vn, CcaClassResult as vo, resolveProvinceRates as vr, RateBook as vs, FederalT2Result as vt, computeAdjustedTaxableIncome as w, schedule29Values as wa, formatRsiText as wi, computeSchedule5 as wn, computeCcaSchedule as wo, dividendsDeductibleS112 as wr, resolveRates as ws, SCHEDULE_88_MAX_URLS as wt, AdjustedTaxableIncomeInput as x, schedule1Values as xa, RsiScheduleInput as xi, computeSchedule6 as xn, Schedule8Result as xo, TaxableIncomeResult as xr, extendRateBook as xs, Schedule101Input as xt, computeEifelLimitation as y, schedule17Values as ya, RsiLineItem as yi, DispositionResult as yn, CcaScheduleResult as yo, TaxableIncomeInput as yr, RateBookEntry as ys, computeFederalT2 as yt, Co17Address as z, Schedule20Result as za, at1TaxPayableDeductions as zi, Schedule2Result as zn, MIN_LEASEHOLD_PERIODS as zo, CORP_TAX_2024 as zr, GripResult as zt };
|
|
6228
|
+
export { QuebecTaxResult as $, AlbertaSchedule18Result as $a, At1ScheduleValue as $i, mealsAndEntertainmentAddBack as $n, leaseholdPeriods as $o, Schedule12Adjustment as $r, ItcRecaptureItem as $t, T2CifGifi as A, computeIegAgreement as Aa, At1CriticalFieldMissingError as Ai, Schedule4Input as An, Schedule8Entry as Ao, PartITaxResult as Ar, computeDayWeightedGeneralTax as As, computeSchedule55 as At, Co17Certification as B, computeIegEligibleExpenditures as Ba, at1YesNo as Bi, computeSchedule2 as Bn, Class141AdditionalAllowanceInput as Bo, CORP_TAX_RATE_BOOK as Br, latestRateYear as Bs, computeGrip as Bt, FOREIGN_TAX_CREDIT_GROSS_UP as C, IegAgreementResult as Ca, formatRsiDate as Ci, Schedule5Result as Cn, AlbertaSchedule13Input as Co, computeTaxableIncome as Cr, AlbertaCorporationStatus as Cs, computeSchedule101 as Ct, computeT2Settlement as D, IegLimitAllocation as Da, renderRsiLineItem as Di, ProvincialAllocationInput as Dn, CcaClassInput as Do, CcpcActiveBusinessTaxInput as Dr, AB_GENERAL_RATE_BANDS as Ds, normalizeSchedule88 as Dt, T2SettlementResult as E, IegGroupResult as Ea, renderRsiHeader as Ei, PermanentEstablishment as En, computeAlbertaSchedule13 as Eo, nonCapitalLossApplied as Er, computeAlbertaSbd as Es, Schedule88Result as Et, T2GifiLine as F, computeIeg as Fa, albertaBalanceUnpaid as Fi, Part4RdtohResult as Fn, computeSchedule8 as Fo, SbdInput as Fr, RateBook as Fs, Schedule54Input as Ft, co17Engine as G, DonationMaximumResult as Ga, AlbertaReturnResult as Gi, Schedule1Result as Gn, Class14Result as Go, computeLossSchedule as Gr, LARGE_CORPORATION_THRESHOLD as Gt, Co17ReturnData as H, AT1_DONATION_GAIN_RATE as Ha, At1ReturnInput as Hi, Schedule1Line as Hn, Class14Input as Ho, resolveCorpTaxRates as Hr, Schedule43Rates as Ht, renderT2DraftReturn as I, computeIegBaseAmount as Ia, assertAt1MandatoryComplete as Ii, REFUNDABLE_PART_I_RATE as In, CLASS_14_1_MINIMUM_DEDUCTION as Io, SbdResult as Ir, RateBookEntry as Is, Schedule54Result as It, computeQuebecReturn as J, Schedule20Input as Ja, SINGLE_JURISDICTION_ALBERTA_FACTOR as Ji, ccaDeduction as Jn, MAX_LEASEHOLD_PERIODS as Jo, CEC_DEDUCTION_RATE as Jr, computeTaxableCapital as Jt, QuebecReturnInput as K, computeDonationMaximum as Ka, computeAlbertaReturn as Ki, amortizationAddBack as Kn, LeaseholdLayer as Ko, AlbertaSchedule14Input as Kr, TaxableCapitalInput as Kt, T2ReturnInput as L, computeIegReductionFactor as La, assertAt1TaxPayableReconciles as Li, computePart4Rdtoh as Ln, CLASS_14_1_TRANSITIONAL_RATE as Lo, computeBusinessLimit as Lr, earliestRateYear as Ls, computeSchedule54 as Lt, T2CifQuestionnaire as M, IEG_2024 as Ma, At1MandatoryFieldMissingError as Mi, computeSchedule4Losses as Mn, UnsupportedCcaClassError as Mo, computePartITax as Mr, AB_TAX_RATE_BOOK as Ms, LRIP_INVESTMENT_INCOME_FACTOR as Mt, T2CifSettlement as N, IegInput as Na, At1TaxPayableMismatchError as Ni, PART_IV_RATE as Nn, computeCcaClass as No, BusinessLimitInput as Nr, AlbertaTaxRates as Ns, LripDividendEvent as Nt, T2CifAddress as O, allocateIegEvenly as Oa, renderAt1NetFile as Oi, ProvincialAllocationResult as On, CcaClassResult as Oo, CcpcActiveBusinessTaxResult as Or, DayWeightedRateResult as Os, Schedule55Input as Ot, T2CifShareholder as P, IegResult as Pa, At1TransmitterInfo as Pi, Part4RdtohInput as Pn, computeCcaSchedule as Po, BusinessLimitResult as Pr, resolveAlbertaTaxRates as Ps, LripEventResult as Pt, QuebecTaxInput as Q, AlbertaSchedule18Input as Qa, At1ScheduleData as Qi, incomeTaxProvisionAddBack as Qn, computeClass141AdditionalAllowance as Qo, computeAlbertaSchedule14 as Qr, ITC_RECAPTURE_PERIOD_YEARS as Qt, t2Engine as R, IegEligibleExpendituresInput as Ra, assertCriticalFields as Ri, Schedule2Input as Rn, Class13Input as Ro, computeSBD as Rr, extendRateBook as Rs, GripInput as Rt, AdjustedTaxableIncomeResult as S, IegAgreementMemberResult as Sa, formatRsiAmount as Si, Schedule5Input as Sn, AlbertaSchedule13ClassResult as So, charitableDonationsDeduction as Sr, computeAlbertaTax as Ss, Schedule101Result as St, T2SettlementInput as T, IegGroupMember as Ta, renderAt1Rsi as Ti, AllocatedProvince as Tn, FederalCcaClass as To, netCapitalLossApplied as Tr, AlbertaSbdResult as Ts, Schedule88Input as Tt, renderCo17DraftReturn as U, AT1_DONATION_INCOME_RATE as Ua, at1Engine as Ui, Schedule1LineDefect as Un, Class14Property as Uo, LossScheduleInput as Ur, Schedule43Result as Ut, Co17Identity as V, iegT661SourceLine as Va, xmlEscape as Vi, Schedule1Input as Vn, Class141AdditionalAllowanceResult as Vo, CorpTaxRates as Vr, resolveRates as Vs, Schedule43Input as Vt, Co17ReturnInput as W, DonationMaximumInput as Wa, AlbertaReturnInput as Wi, Schedule1NotFileableError as Wn, Class14PropertyResult as Wo, LossScheduleResult as Wr, computeSchedule43 as Wt, QuebecEstablishment as X, computeSchedule20 as Xa, AT1_SCHEDULES_WITHOUT_BUILDERS as Xi, deferredIncomeTaxProvisionAddBack as Xn, computeClass13 as Xo, CecIncomeInclusionDetail as Xr, Schedule31Result as Xt, QuebecAllocationResult as Y, Schedule20Result as Ya, computeAllocationFactor as Yi, computeSchedule1 as Yn, MIN_LEASEHOLD_PERIODS as Yo, CEC_INCLUSION_RATE as Yr, Schedule31Input as Yt, computeQuebecAllocationFactor as Z, AT1_DISPOSITION_CATEGORIES as Za, AT1_SCHEDULES_WITH_BUILDERS as Zi, findSchedule1LineDefects as Zn, computeClass14 as Zo, cecScheduleAppliesToTaxYear as Zr, computeSchedule31 as Zt, EifelLimitationInput as _, schedule29Values as _a, RSI_WORD_GAP as _i, computeSchedule13 as _n, AlbertaSchedule16Input as _o, isSchedule5Province as _r, LossCarrybackResult as _s, FederalT2Input as _t, MpDeductionRates as a, Schedule2FilingInput as aa, albertaCcaDifference as ai, computeZetm as an, SECTION_34_2_GROSS_UP as ao, EifelResult as ar, At4970Input as as, T2_CERTIFICATION_FIXTURES as at, ratioOfPermissibleExpenses as b, IegAgreementInput as ba, RsiLineItemError as bi, Schedule6Result as bn, computeAlbertaSchedule16 as bo, TaxableIncomeLine as br, AlbertaTaxInput as bs, FirstReturnEvent as bt, PART_VI_1_DEDUCTION_BANDS as c, schedule12LossDeductions as ca, albertaDispositionAdjustments as ci, BusinessLimitAllocationInput as cn, AT1_RESERVE_LINES as co, ProvincialRateChange as cr, At4970ProjectRowResult as cs, ConformanceSummary as ct, computePartVI1Deduction as d, schedule16Values as da, albertaTerminalLossDifference as di, computeBusinessLimitAllocation as dn, AlbertaSchedule17Result as do, dayWeightedRate as dr, computeAt4970 as ds, T2LineKey as dt, Schedule10FilingInput as ea, Schedule12Input as ei, ItcRecaptureItemResult as en, At1AbilEntry as eo, recaptureAddBack as er, CCA_DECLINING_BALANCE_RATES_2024 as es, computeQuebecTax as et, partVI1DeductionMultiple as f, schedule17Values as fa, computeSchedule12 as fi, Schedule21Input as fn, At1ReserveBalances as fo, PROVINCE_RATES_2024 as fr, LossContinuityInput as fs, T2_LINE_META as ft, EIFEL_TRANSITIONAL_RATIO as g, schedule21Values as ga, RSI_NEGATIVE_PREFIX as gi, ReserveContinuityRow as gn, computeAlbertaSchedule17 as go, ProvincialRate as gr, LossCarrybackInput as gs, runConformanceSuite as gt, EIFEL_STANDARD_RATIO_FROM as h, schedule20Values as ha, RSI_DELIMITER as hi, ReserveContinuityResult as hn, At1ReserveTable as ho, ProvinceRateTable as hr, LossCarrybackError as hs, runConformance as ht, MpDeductionInput as i, Schedule21FilingInput as ia, albertaCapitalGainDifference as ii, ZetmResult as in, At1DispositionCategory as io, EifelInput as ir, resolveCcaRates as is, resolveQuebecTaxRates as it, T2CifPartI as j, computeIegGroupFigures as ja, At1FilingData as ji, Schedule4Result as jn, Schedule8Result as jo, computeCcpcActiveBusinessTax as jr, AB_TAX_2024 as js, LRIP_INVESTMENT_CORPORATION_MULTIPLE as jt, T2CifData as k, allocateIegExpenditureLimit as ka, AT1_CRITICAL_MANDATORY_FIELDS as ki, computeProvincialAllocation as kn, CcaScheduleResult as ko, PartITaxInput as kr, GeneralRateBand as ks, Schedule55Result as kt, PartVI1DeductionBand as l, schedule12Values as la, albertaRecaptureDifference as li, BusinessLimitAllocationResult as ln, AT1_RESERVE_TOTAL_LINES as lo, ProvincialRateChanges as lr, At4970Result as ls, ExpectedSource as lt, EIFEL_STANDARD_RATIO as m, schedule1Values as ma, RSI_COLUMN_GAP as mi, computeSchedule21 as mn, At1ReserveRowResult as mo, ProvinceCode as mr, computeLossContinuity as ms, formatConformanceReport as mt, MP_GROSS_REVENUE_THRESHOLD as n, Schedule1FilingInput as na, Schedule12Result as ni, computeItcRecapture as nn, At1CategoryResult as no, EIFEL_EFFECTIVE_FROM as nr, CcaRateTable as ns, QC_TAX_RATE_BOOK as nt, MpDeductionResult as o, at1LineItemId as oa, albertaCcaScheduleAdjustments as oi, AssociatedMemberInput as on, computeAlbertaSchedule18 as oo, EifelThresholds as or, At4970JurisdictionAmount as os, CertificationFixture as ot, EIFEL_FIRST_YEAR_START as p, schedule18Values as pa, reconcileAlbertaNetIncome as pi, Schedule21Result as pn, At1ReserveKind as po, PROVINCE_RATE_BOOK as pr, LossContinuityResult as ps, foldT2Lines as pt, QuebecReturnResult as q, AlbertaGiftCarryforward as qa, AllocationFactorInput as qi, assertSchedule1Fileable as qn, LeaseholdLayerResult as qo, AlbertaSchedule14Result as qr, TaxableCapitalResult as qt, MP_RATES_2024 as r, Schedule20FilingInput as ra, albertaAbilDifference as ri, ZetmInput as rn, At1CategoryTotals as ro, EifelExemption as rr, isDecliningBalanceClass as rs, QuebecTaxRates as rt, computeMpDeduction as s, schedule10Values as sa, albertaCurrentYearLoss as si, AssociatedMemberResult as sn, AT1_RESERVE_KINDS as so, assessEifel as sr, At4970ProjectRow as ss, ConformanceResult as st, MP_EXCLUDED_ACTIVITIES as t, Schedule12FilingInput as ta, Schedule12Line as ti, ItcRecaptureResult as tn, At1AbilResult as to, terminalLossDeduction as tr, CCA_RATE_BOOK as ts, QC_TAX_2024 as tt, PartVI1DeductionResult as u, schedule13Values as ua, albertaReserveDifference as ui, allocateEvenly as un, AlbertaSchedule17Input as uo, blendProvinceRateTable as ur, At4970Totals as us, LineCheck as ut, EifelLimitationResult as v, schedule2Values as va, RsiHeaderInput as vi, CapitalDisposition as vn, AlbertaSchedule16Result as vo, resolveProvinceRates as vr, LossCarrybackYear as vs, FederalT2Result as vt, computeAdjustedTaxableIncome as w, IegAllocationResult as wa, formatRsiText as wi, computeSchedule5 as wn, AlbertaSchedule13Result as wo, dividendsDeductibleS112 as wr, AlbertaSbdInput as ws, SCHEDULE_88_MAX_URLS as wt, AdjustedTaxableIncomeInput as x, IegAgreementMember as xa, RsiScheduleInput as xi, computeSchedule6 as xn, AlbertaCcaOverride as xo, TaxableIncomeResult as xr, AlbertaTaxResult as xs, Schedule101Input as xt, computeEifelLimitation as y, schedule4970Values as ya, RsiLineItem as yi, DispositionResult as yn, assistanceFrom as yo, TaxableIncomeInput as yr, computeLossCarryback as ys, computeFederalT2 as yt, Co17Address as z, IegEligibleExpendituresResult as za, at1TaxPayableDeductions as zi, Schedule2Result as zn, Class13Result as zo, CORP_TAX_2024 as zr, hasExactRateYear as zs, GripResult as zt };
|