@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/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% base rate on eligible expenditures up to the base level of spending
1426
- * - 20% enhanced rate on the INCREMENT above the base level
1427
- * (equivalently: 8% on everything + an extra 12% on the increment)
1428
- * base level = average of the prior two years' eligible Alberta expenditures
1429
- * (associated group aggregated — pass all members' figures)
1430
- *
1431
- * Eligible expenditures are capped at a $4,000,000 annual limit, reduced on a
1432
- * straight-line taxable-capital grind ($10M $50M), shared across an associated
1433
- * group. Pure, integer whole dollars.
1434
- *
1435
- * NOT modelled here (a later associated-group layer): allocation of the shared
1436
- * $4M limit across associated corporations (Test Case 3's A/B/C/D grind). This
1437
- * computes one corporation's grant given its eligible expenditures, its (group)
1438
- * base amount, and its allocated expenditure limit.
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.2;
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
- /** The eligible-expenditure limit ($4M) reduced by the taxable-capital grind. */
1449
- declare function computeIegExpenditureLimit(taxableCapital: number, sharedLimit?: 4000000): number;
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 reduced limit). */
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
- /** The Innovation Employment GrantAT1 line 129. */
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
- declare function schedule29Values(result: IegResult): At1ScheduleData;
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
- /** This corporation's current-year eligible SR&ED carried out IN ALBERTA. */eligibleExpenditures: number;
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 ground-down expenditure
1913
- * limit. Omit it and the whole limit is allocated here, which is correct only
1914
- * when no other member is claiming.
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 };