@classytic/ca-tax 0.0.1 → 0.0.2

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
@@ -1422,31 +1422,79 @@ declare function computeDonationMaximum(input: DonationMaximumInput): DonationMa
1422
1422
  * AT1 Schedule 29 — Alberta Innovation Employment Grant (IEG). AT1 line 129.
1423
1423
  *
1424
1424
  * 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.
1425
+ * - line 110: 8% of the CAPPED eligible expenditures (the full amount, not
1426
+ * just the portion below base)
1427
+ * - line 112 (non-associated): 12% of the increment ABOVE the base level of
1428
+ * spending — base level = average of the prior two years'
1429
+ * eligible Alberta expenditures (associated group aggregated —
1430
+ * pass all members' figures)
1431
+ * - line 125 (associated, via a filed agreement): 12% of the LESSER of the
1432
+ * expenditure limit and the agreement's allocated allowed
1433
+ * amount see `computeIegAgreement` in `schedule29-ieg-group.ts`.
1434
+ * A genuinely different formula, not a variant of 112's — it does
1435
+ * not reference actual spending at all once the agreement exists.
1436
+ *
1437
+ * Eligible expenditures are capped at a $4,000,000 annual limit (shared across an
1438
+ * associated group; NOT reduced by taxable capital — see below). Pure, integer
1439
+ * whole dollars.
1440
+ *
1441
+ * ── The taxable-capital grind applies to the CREDIT, not the limit ──────────
1442
+ *
1443
+ * A prior version of this module reduced the $4,000,000 expenditure limit itself
1444
+ * on a straight-line taxable-capital grind ($10M → $50M) — modelled on the
1445
+ * federal SBD grind's shape, but wrong for this form. Rendering the live,
1446
+ * TRA-certified Schedule 29 (`research/sources/tra-forms/pdf/AT1SCH29-*.pdf`,
1447
+ * Rev. 2026-06 — cross-checked against AuraTax's live rendering of the same
1448
+ * schedule, `research/validation/auratax/2026-08-25-at1-schedule1-royalty/`)
1449
+ * shows the grind lives at **line 128**, a REDUCTION FACTOR from 0 to 1:
1450
+ *
1451
+ * line 128 = (($40,000,000 − (line 126 − $10,000,000)) / $40,000,000)
1452
+ * (enter 1 if taxable capital ≤ $10,000,000)
1453
+ * line 130 = (line 110 + (line 112 or line 125)) × line 128
1454
+ *
1455
+ * i.e. the credit is computed in FULL against the unreduced $4M limit, and ONLY
1456
+ * THEN scaled by the taxable-capital factor — not the limit ground down first
1457
+ * and the credit computed against the smaller number. The two are NOT
1458
+ * equivalent except at the band's endpoints (TC ≤ $10M ⇒ both give the full
1459
+ * credit; TC ≥ $50M ⇒ both give nil).
1460
+ *
1461
+ * ── One thing not yet resolved, and worth raising with TRA directly ─────────
1462
+ *
1463
+ * The AT1 jacket's OWN business-rule table (`research/sources/tra-spec/
1464
+ * AT1-Chapter3-2025.2-full.txt`, version 2025.2 / August 2025 — ten months
1465
+ * OLDER than the Schedule 29 PDF above) states jacket line 129 as
1466
+ * `(029110 + 029112 X 029128) minus 029132` — multiplying ONLY line 112 by the
1467
+ * factor, not the sum of 110 and 112. That contradicts Schedule 29's own
1468
+ * printed caption, which the certified oracle (AuraTax) also renders as
1469
+ * "sum then multiply". This module follows the newer, doubly-corroborated
1470
+ * Schedule 29 form. Confirm with TRA before relying on this for an associated
1471
+ * corporation with taxable capital between $10M and $50M — the disagreement
1472
+ * changes the filed dollar figure.
1473
+ *
1474
+ * ── The formal Agreement (line 125) ──────────────────────────────────────────
1475
+ *
1476
+ * TRA's Test Case 3 (four associated corporations, `research/sources/
1477
+ * tra-test-cases/Alberta Test Case 3 - Fall 2025.txt`) is the associated path:
1478
+ * pass `associatedAllowedAmount` (line 325 of `computeIegAgreement`'s result)
1479
+ * and this function uses line 125's formula instead of line 112's. Day-of-year
1480
+ * proration of the $4M pool for a short or long taxation year (lines 104/108/
1481
+ * 206/208) is modelled in `computeIegAgreement`, not here — this function
1482
+ * takes the already-allocated `expenditureLimit` as an input.
1439
1483
  */
1440
1484
  declare const IEG_2024: Readonly<{
1441
1485
  BASE_RATE: 0.08;
1442
- ENHANCED_RATE: 0.2;
1486
+ ENHANCED_RATE: 0.12;
1443
1487
  MAX_EXPENDITURE: 4000000;
1444
1488
  TC_GRIND_LOWER: 10000000;
1445
1489
  TC_GRIND_UPPER: 50000000;
1446
1490
  PRIOR_YEARS: 2;
1447
1491
  }>;
1448
- /** The eligible-expenditure limit ($4M) reduced by the taxable-capital grind. */
1449
- declare function computeIegExpenditureLimit(taxableCapital: number, sharedLimit?: 4000000): number;
1492
+ /**
1493
+ * The line-128 reduction factor: 1 at or below $10M taxable capital, straight-
1494
+ * line down to 0 at $50M. Multiplies the COMBINED base + enhanced credit at
1495
+ * line 130 — it does not touch the $4,000,000 expenditure limit.
1496
+ */
1497
+ declare function computeIegReductionFactor(taxableCapital: number, lower?: 10000000, upper?: 50000000): number;
1450
1498
  /**
1451
1499
  * Base level of spending = average of the prior years' eligible Alberta
1452
1500
  * expenditures. Pass every associated-group member's prior-year figures; the
@@ -1458,20 +1506,264 @@ interface IegInput {
1458
1506
  eligibleExpenditures: number;
1459
1507
  /** Base level of spending (average of prior two years, group-aggregated). */
1460
1508
  baseAmount: number;
1461
- /** Allocated eligible-expenditure limit (default $4M; pass the reduced limit). */
1509
+ /** Allocated eligible-expenditure limit (default $4M; pass the allocated share). */
1462
1510
  expenditureLimit?: number;
1511
+ /**
1512
+ * Line 126 — taxable capital employed in Canada (this corporation's alone if
1513
+ * not associated with anyone for IEG purposes; the associated GROUP's total
1514
+ * otherwise). Drives the line-128 reduction factor. Defaults to 0 — i.e. no
1515
+ * grind — which is correct for a corporation that has no associated group and
1516
+ * omits this only because it genuinely has none, not as a shortcut.
1517
+ */
1518
+ taxableCapital?: number;
1519
+ /**
1520
+ * Line 132 — recapture where IEG-funded property was sold or converted to
1521
+ * commercial use in the year. Omitted (not defaulted to 0 in the type) so a
1522
+ * caller who has not computed a recapture figure cannot mistake "omitted" for
1523
+ * "confirmed nil".
1524
+ */
1525
+ recapture?: number;
1526
+ /**
1527
+ * Line 325 — this corporation's allocated allowed amount from a filed
1528
+ * Agreement Among Associated Corporations (`computeIegAgreement`). Presence,
1529
+ * not truthiness, selects the formula: supplying it (even as 0) switches
1530
+ * line 112's "capped spending less base" to line 125's "lesser of the limit
1531
+ * and this figure" — the ASSOCIATED path. Omit entirely for a corporation
1532
+ * with no such agreement.
1533
+ */
1534
+ associatedAllowedAmount?: number;
1463
1535
  }
1464
1536
  interface IegResult {
1465
1537
  cappedExpenditures: number;
1466
1538
  baseAmount: number;
1467
1539
  incrementalExpenditures: number;
1540
+ /** Line 110 — 8% of the capped expenditures. */
1468
1541
  creditAtBaseRate: number;
1542
+ /** Line 112 (non-associated) or line 125 (associated) — 12% either way. */
1469
1543
  creditAtEnhancedRate: number;
1470
- /** The Innovation Employment GrantAT1 line 129. */
1544
+ /** Which formula produced `creditAtEnhancedRate`for the schedule and the audit trail. */
1545
+ enhancedRateBasis: 'non-associated' | 'associated';
1546
+ /** Line 126, as supplied. */
1547
+ taxableCapital: number;
1548
+ /** Line 128 — the taxable-capital reduction factor, 0 to 1. */
1549
+ reductionFactor: number;
1550
+ /** Line 130 — (110 + 112) × line 128, before recapture. */
1551
+ grossIeg: number;
1552
+ /** Line 132, as supplied (0 when omitted). */
1553
+ recapture: number;
1554
+ /** Line 134 — NET IEG. Carried to AT1 page 2, line 129. */
1471
1555
  ieg: number;
1472
1556
  }
1473
1557
  declare function computeIeg(input: IegInput): IegResult;
1474
1558
  //#endregion
1559
+ //#region src/t2/at1/schedules/schedule29-ieg-group.d.ts
1560
+ /** One associated corporation's contribution to the group figures. */
1561
+ interface IegGroupMember {
1562
+ /** Corporation name or identifier, for the allocation schedule. */
1563
+ name: string;
1564
+ /**
1565
+ * Taxable capital employed in Canada for the member's **last taxation year
1566
+ * ending in the preceding calendar year** (federal Schedule 33 line 690).
1567
+ */
1568
+ taxableCapital?: number;
1569
+ /**
1570
+ * Eligible Alberta SR&ED expenditures for each of the member's prior two
1571
+ * taxation years. A member with none contributes an empty array, and still
1572
+ * contributes its taxable capital above.
1573
+ */
1574
+ priorYearAlbertaExpenditures?: readonly number[];
1575
+ }
1576
+ interface IegGroupResult {
1577
+ /** Σ each member's taxable capital — pass to `computeIeg` as `taxableCapital`. */
1578
+ groupTaxableCapital: number;
1579
+ /** The flat $4,000,000 pool shared by the group (not taxable-capital-ground). */
1580
+ groupExpenditureLimit: number;
1581
+ /** Σ every member's prior-year Alberta expenditures. */
1582
+ totalPriorYearExpenditures: number;
1583
+ /** The base level of spending: the total ÷ the number of prior years (2). */
1584
+ groupBaseAmount: number;
1585
+ /** Per-member detail, for the schedule and the audit trail. */
1586
+ members: {
1587
+ name: string;
1588
+ taxableCapital: number;
1589
+ priorYearAlbertaExpenditures: number[];
1590
+ priorYearTotal: number;
1591
+ }[];
1592
+ issues: string[];
1593
+ }
1594
+ /**
1595
+ * The group's taxable capital and base level of spending, from every associated
1596
+ * member's own figures.
1597
+ *
1598
+ * Pass the CLAIMANT as a member too — it is part of its own associated group and
1599
+ * omitting it understates both figures.
1600
+ */
1601
+ declare function computeIegGroupFigures(members: readonly IegGroupMember[], priorYears?: 2): IegGroupResult;
1602
+ /** One member's share of the ground-down expenditure limit. */
1603
+ interface IegLimitAllocation {
1604
+ name: string;
1605
+ /** The share agreed for this member. */
1606
+ allocated: number;
1607
+ }
1608
+ interface IegAllocationResult {
1609
+ /** The group limit being shared. */
1610
+ groupExpenditureLimit: number;
1611
+ allocations: IegLimitAllocation[];
1612
+ totalAllocated: number;
1613
+ /** Limit not allocated to any member — available but unclaimed. */
1614
+ unallocated: number;
1615
+ issues: string[];
1616
+ }
1617
+ /**
1618
+ * Allocate the ground-down expenditure limit among the associated members.
1619
+ *
1620
+ * The group may allocate as it chooses, but the total cannot exceed the limit.
1621
+ * An over-allocation is **not** silently scaled back — that would quietly change
1622
+ * an agreed split — it is reported as an issue and each member is capped at what
1623
+ * remains, in the order given.
1624
+ */
1625
+ declare function allocateIegExpenditureLimit(groupExpenditureLimit: number, requested: readonly IegLimitAllocation[]): IegAllocationResult;
1626
+ /** Split the limit evenly, for a group with no agreed allocation. */
1627
+ declare function allocateIegEvenly(groupExpenditureLimit: number, names: readonly string[]): IegAllocationResult;
1628
+ /**
1629
+ * Everything above allocates the $4M pool and computes a group base level
1630
+ * informally. TRA requires more than that when the group is genuinely
1631
+ * associated: a filed AGREEMENT (Schedule 29 page 3) naming every member,
1632
+ * each one's own allocated share, and a group-level "Allowed Amount" that
1633
+ * gates the 12% enhanced rate for the associated path (line 125) — a
1634
+ * DIFFERENT formula from the non-associated one (line 112), not a variant of
1635
+ * it. Read off the live, TRA-certified form
1636
+ * (`research/sources/tra-forms/pdf/AT1SCH29-innovation-employment-grant-TRA14637.pdf`,
1637
+ * Rev. 2026-06, page 3), which prints its own formulas in a Notes block —
1638
+ * this module transcribes them exactly rather than paraphrasing.
1639
+ *
1640
+ * ── Line 125 vs line 112 — a genuinely different formula ────────────────────
1641
+ *
1642
+ * Non-associated (line 112): `(Lesser of 031 and 108) − Base Amount`, then ×12%
1643
+ * — spending capped at the limit, less the base.
1644
+ *
1645
+ * Associated (line 125): `Lesser of 108 or the allocated allowed amount (325)`,
1646
+ * then ×12% — no reference to actual spending at all. The "allowed amount" from
1647
+ * this agreement stands in for it. `computeIeg` in `schedule29-ieg.ts` branches
1648
+ * on whether an agreement result is supplied.
1649
+ *
1650
+ * ── One member's allocated allowed amount (line 268) ────────────────────────
1651
+ *
1652
+ * The form states it as "the least of: line 240, line 267, and the lesser of
1653
+ * [(4,000,000 × days in tax year/365 or 366) or line 031] less base amount" —
1654
+ * three independent caps, taken literally:
1655
+ *
1656
+ * (240) this member's own agreed share of the expenditure limit
1657
+ * (267) this member's own current-year expenditures less its own base
1658
+ * (average of its prior two years) — floored at nil per the form's
1659
+ * own note ("if a calculated amount is negative, ... nil ... on 268")
1660
+ * (C) this member's own day-prorated $4M share (up to 366 days — NOT
1661
+ * capped at 365 the way Schedule 13's proration is; this form's own
1662
+ * note says so explicitly), capped by this member's own current-year
1663
+ * expenditures, less this member's own base
1664
+ *
1665
+ * ── The group Allowed Amount (line 310) ──────────────────────────────────────
1666
+ *
1667
+ * X (275) = Σ every member's current-year eligible expenditures (245)
1668
+ * Y (280) = Σ every member's first-preceding-year expenditures (250)
1669
+ * Z (290) = Σ every member's second-preceding-year expenditures (260)
1670
+ * 310 = X − (Y + Z) / 2
1671
+ *
1672
+ * Two cross-checks the form states as notes, surfaced here as issues rather
1673
+ * than silently enforced: total allocated limit (270) must not exceed the
1674
+ * group's day-prorated maximum (208); total allocated allowed amount (320)
1675
+ * must not exceed the group Allowed Amount (310).
1676
+ *
1677
+ * Whole dollars, pure.
1678
+ */
1679
+ /** One row of the page-3 allocation table. "Use the first line for the claiming corporation." */
1680
+ interface IegAgreementMember {
1681
+ name: string;
1682
+ federalBusinessNumber?: string;
1683
+ /** 230 — Alberta Corporate Account Number. */
1684
+ albertaCan?: string;
1685
+ /** 235 — this member's own current taxation year end, ISO `YYYY-MM-DD`. */
1686
+ currentTaxationYearEnd?: string;
1687
+ /** 240 — this member's own agreed share of the expenditure limit. */
1688
+ allocatedExpenditureLimit: number;
1689
+ /** 245 — this member's own current-year eligible Alberta expenditures. */
1690
+ currentYearExpenditures: number;
1691
+ /** 250 — this member's own first-preceding-year expenditures. */
1692
+ priorYear1: number;
1693
+ /** 260 — this member's own second-preceding-year expenditures. */
1694
+ priorYear2: number;
1695
+ /** 265 — this member's own taxable capital for the first preceding year. */
1696
+ taxableCapitalPriorYear?: number;
1697
+ /**
1698
+ * Days in THIS member's own current taxation year — feeds the day-prorated
1699
+ * cap in line 268's third component. Defaults to 365 (a full year) when
1700
+ * omitted, matching every other day-proration default in this package.
1701
+ */
1702
+ daysInTaxYear?: number;
1703
+ }
1704
+ interface IegAgreementMemberResult {
1705
+ name: string;
1706
+ federalBusinessNumber?: string;
1707
+ albertaCan?: string;
1708
+ currentTaxationYearEnd?: string;
1709
+ allocatedExpenditureLimit: number;
1710
+ currentYearExpenditures: number;
1711
+ priorYear1: number;
1712
+ priorYear2: number;
1713
+ taxableCapitalPriorYear: number;
1714
+ /** 267 — line 245 − [(line 250 + line 260) / 2], floored at nil. */
1715
+ individualMaximumAllowedAmount: number;
1716
+ /** 268 — least of 240, 267, and the day-prorated-and-capped-less-base figure. */
1717
+ allocatedAllowedAmount: number;
1718
+ }
1719
+ interface IegAgreementInput {
1720
+ /** 200 — CAN of the associated corporation with the LONGEST taxation year. */
1721
+ longestYearCan: string;
1722
+ /** 202 / 204 — that corporation's own tax year, ISO `YYYY-MM-DD`. */
1723
+ longestYearBegin: string;
1724
+ longestYearEnd: string;
1725
+ /** 206 — days in that longest year. Up to 366 — this form does not cap at 365. */
1726
+ daysInLongestYear: number;
1727
+ /** The full member table. Put the claiming corporation first. */
1728
+ members: readonly IegAgreementMember[];
1729
+ }
1730
+ interface IegAgreementResult {
1731
+ longestYearCan: string;
1732
+ /** 202 / 204, echoed through from the input for filing. */
1733
+ longestYearBegin: string;
1734
+ longestYearEnd: string;
1735
+ daysInLongestYear: number;
1736
+ /** 208 — $4,000,000 × (206 / 365). */
1737
+ maximumExpenditureLimit: number;
1738
+ members: IegAgreementMemberResult[];
1739
+ /** 270 — Σ 240. Should not exceed 208. */
1740
+ totalAllocatedLimit: number;
1741
+ /** 275 — Σ 245 ("X" in the form's own notation). */
1742
+ totalCurrentYearExpenditures: number;
1743
+ /** 280 — Σ 250 ("Y"). */
1744
+ totalPriorYear1: number;
1745
+ /** 290 — Σ 260 ("Z"). */
1746
+ totalPriorYear2: number;
1747
+ /** 300 — Σ 265. */
1748
+ totalTaxableCapitalPriorYear: number;
1749
+ /** 310 — 275 − (280 + 290) / 2. The GROUP Allowed Amount. */
1750
+ groupAllowedAmount: number;
1751
+ /** 320 — Σ 268. Should not exceed 310. */
1752
+ totalAllocatedAllowedAmount: number;
1753
+ /**
1754
+ * 325 — the CLAIMING corporation's own line 268 (first row of `members`).
1755
+ * Feeds `computeIeg`'s `associatedAllowedAmount` for line 125.
1756
+ */
1757
+ claimantAllocatedAllowedAmount: number;
1758
+ issues: string[];
1759
+ }
1760
+ /**
1761
+ * The formal Agreement Among Associated Corporations. The FIRST entry in
1762
+ * `input.members` must be the claiming corporation — its own line 268 becomes
1763
+ * line 325, which is what actually reaches `computeIeg`.
1764
+ */
1765
+ declare function computeIegAgreement(input: IegAgreementInput): IegAgreementResult;
1766
+ //#endregion
1475
1767
  //#region src/t2/at1/filing/at1-schedule-line-items.d.ts
1476
1768
  /** One `Value` element: the nine-digit line item id and its value. */
1477
1769
  interface At1ScheduleValue {
@@ -1521,7 +1813,53 @@ declare function schedule13Values(result: AlbertaSchedule13Result): At1ScheduleD
1521
1813
  */
1522
1814
  declare function schedule17Values(result: AlbertaSchedule17Result): At1ScheduleData;
1523
1815
  declare function schedule18Values(result: AlbertaSchedule18Result): At1ScheduleData;
1524
- declare function schedule29Values(result: IegResult): At1ScheduleData;
1816
+ /**
1817
+ * Field ids read off the live, TRA-certified form
1818
+ * (`research/sources/tra-forms/pdf/AT1SCH29-*.pdf`, Rev. 2026-06):
1819
+ *
1820
+ * Page 1/2 — the grant itself:
1821
+ * 110 8% of the capped expenditures
1822
+ * 112 12% of the increment above base — the non-associated path. Filed
1823
+ * INSTEAD of 125, never alongside it.
1824
+ * 125 12% of the associated path's allocated allowed amount — filed
1825
+ * instead of 112 when `result.enhancedRateBasis === 'associated'`.
1826
+ * 126 taxable capital the line-128 factor was computed from
1827
+ * 128 the taxable-capital reduction factor, 0 to 1
1828
+ * 130 (110 + 112-or-125) × 128 — the credit before recapture
1829
+ * 132 recapture, only where the caller supplied one
1830
+ * 134 NET IEG — the figure AT1 page 2, line 129 carries forward
1831
+ *
1832
+ * Page 3 — the Agreement Among Associated Corporations, filed only when the
1833
+ * group agreed one (`agreement`, from `computeIegAgreement` in
1834
+ * `schedule29-ieg-group.ts`); omitted entirely for a non-associated claim:
1835
+ * 200/202/204/206/208 the longest-year member's CAN, that member's own
1836
+ * tax year begin/end, days in that year, and the resulting $4M-pool
1837
+ * maximum for the group
1838
+ * Per member, occurrence incrementing in the order given (claimant first):
1839
+ * 220 Federal Business Number, 230 Alberta CAN, 235 current taxation
1840
+ * year end, 240 allocated expenditure limit, 245 current-year
1841
+ * expenditures, 250 prior year 1, 260 prior year 2, 265 taxable capital
1842
+ * (prior year), 267 individual maximum allowed amount, 268 allocated
1843
+ * allowed amount. The form has NO line for the member's NAME — 220 is
1844
+ * the Federal Business Number, confirmed by re-rendering page 3 of the
1845
+ * live form (a prior version of this function filed `name` at 220,
1846
+ * which put free text in a box the form defines as a 9-10 digit account
1847
+ * number; `name` is not transmitted at all, matching the form).
1848
+ * 270/275/280/290/300 Σ 240/245/250/260/265 across every member
1849
+ * 310 the group Allowed Amount — 275 − (280 + 290) / 2
1850
+ * 320 Σ 268
1851
+ * 325 the claiming corporation's own 268 — this is what feeds line 125
1852
+ * above (`associatedAllowedAmount` in `computeIeg`'s input)
1853
+ *
1854
+ * 128 is a RATIO, not a dollar figure — formatted to 6 decimal places, the
1855
+ * same precision `schedule2.ts`'s Reg 402 allocation factor uses. That
1856
+ * precision is this codebase's own convention, not something confirmed
1857
+ * against TRA's certification validator for THIS field; verify before relying
1858
+ * on it for a corporation whose taxable capital sits inside the $10M–$50M
1859
+ * band. See `schedule29-ieg.ts` for why 128 exists and the one unresolved
1860
+ * discrepancy in how 130 is meant to be computed.
1861
+ */
1862
+ declare function schedule29Values(result: IegResult, agreement?: IegAgreementResult): At1ScheduleData;
1525
1863
  /**
1526
1864
  * Schedule 12 takes **both** figures side by side, not a difference.
1527
1865
  *
@@ -1788,76 +2126,6 @@ interface AllocationFactorInput {
1788
2126
  declare const SINGLE_JURISDICTION_ALBERTA_FACTOR = 1;
1789
2127
  declare function computeAllocationFactor(input: AllocationFactorInput): number;
1790
2128
  //#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
2129
  //#region src/t2/at1/engine/alberta-return.d.ts
1862
2130
  interface AlbertaReturnInput {
1863
2131
  /** Federal taxable income (from the T2). */
@@ -1909,11 +2177,27 @@ interface AlbertaReturnInput {
1909
2177
  */
1910
2178
  group: readonly IegGroupMember[];
1911
2179
  /**
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.
2180
+ * This corporation's agreed share of the group's expenditure limit. Omit it
2181
+ * and the whole limit is allocated here, which is correct only when no other
2182
+ * member is claiming.
1915
2183
  */
1916
2184
  allocatedLimit?: number;
2185
+ /**
2186
+ * Line 132 — recapture where property funded by an earlier IEG was sold or
2187
+ * converted to commercial use in the year. Omitted when there is none to
2188
+ * report, not defaulted to 0 — see `IegInput.recapture`.
2189
+ */
2190
+ recapture?: number;
2191
+ /**
2192
+ * The formal Agreement Among Associated Corporations (Schedule 29 page 3).
2193
+ * Supplying it switches the grant to the ASSOCIATED formula (line 125): the
2194
+ * enhanced-rate credit is 12% of the agreement's allocated allowed amount
2195
+ * instead of 12% of spending above base (line 112). Omit it for a
2196
+ * non-associated claim, or for an associated group that has chosen not to
2197
+ * file the agreement (line 112 still applies, just without an allocated
2198
+ * limit shared by agreement).
2199
+ */
2200
+ agreement?: IegAgreementInput;
1917
2201
  };
1918
2202
  }
1919
2203
  interface AlbertaReturnResult {
@@ -1923,6 +2207,8 @@ interface AlbertaReturnResult {
1923
2207
  albertaTaxPayable: number;
1924
2208
  /** The associated-group figures the grant was computed from. */
1925
2209
  iegGroup?: IegGroupResult;
2210
+ /** The formal Agreement Among Associated Corporations, when one was filed. */
2211
+ iegAgreement?: IegAgreementResult;
1926
2212
  /** Schedule 29 detail. */
1927
2213
  ieg?: IegResult;
1928
2214
  /**
@@ -5600,4 +5886,4 @@ interface MpDeductionResult {
5600
5886
  }
5601
5887
  declare function computeMpDeduction(input: MpDeductionInput, rates?: MpDeductionRates): MpDeductionResult;
5602
5888
  //#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 };
5889
+ export { QuebecTaxResult as $, At1DispositionCategory as $a, At1ScheduleValue as $i, mealsAndEntertainmentAddBack as $n, resolveCcaRates as $o, Schedule12Adjustment as $r, ItcRecaptureItem as $t, T2CifGifi as A, computeIegGroupFigures as Aa, At1CriticalFieldMissingError as Ai, Schedule4Input as An, computeSchedule8 as Ao, PartITaxResult as Ar, computeSchedule55 as At, Co17Certification as B, DonationMaximumResult as Ba, at1YesNo as Bi, computeSchedule2 as Bn, Class14Result as Bo, CORP_TAX_RATE_BOOK as Br, computeGrip as Bt, FOREIGN_TAX_CREDIT_GROSS_UP as C, IegAllocationResult as Ca, formatRsiDate as Ci, Schedule5Result as Cn, CcaClassResult as Co, computeTaxableIncome as Cr, RateBook as Cs, computeSchedule101 as Ct, computeT2Settlement as D, allocateIegEvenly as Da, renderRsiLineItem as Di, ProvincialAllocationInput as Dn, UnsupportedCcaClassError as Do, CcpcActiveBusinessTaxInput as Dr, hasExactRateYear as Ds, normalizeSchedule88 as Dt, T2SettlementResult as E, IegLimitAllocation as Ea, renderRsiHeader as Ei, PermanentEstablishment as En, Schedule8Result as Eo, nonCapitalLossApplied as Er, extendRateBook as Es, Schedule88Result as Et, T2GifiLine as F, computeIegBaseAmount as Fa, albertaBalanceUnpaid as Fi, Part4RdtohResult as Fn, Class141AdditionalAllowanceInput as Fo, SbdInput as Fr, Schedule54Input as Ft, co17Engine as G, computeSchedule20 as Ga, AlbertaReturnResult as Gi, Schedule1Result as Gn, computeClass13 as Go, computeLossSchedule as Gr, LARGE_CORPORATION_THRESHOLD as Gt, Co17ReturnData as H, AlbertaGiftCarryforward as Ha, At1ReturnInput as Hi, Schedule1Line as Hn, LeaseholdLayerResult as Ho, resolveCorpTaxRates as Hr, Schedule43Rates as Ht, renderT2DraftReturn as I, computeIegReductionFactor as Ia, assertAt1MandatoryComplete as Ii, REFUNDABLE_PART_I_RATE as In, Class141AdditionalAllowanceResult as Io, SbdResult as Ir, Schedule54Result as It, computeQuebecReturn as J, AlbertaSchedule18Result as Ja, SINGLE_JURISDICTION_ALBERTA_FACTOR as Ji, ccaDeduction as Jn, leaseholdPeriods as Jo, CEC_DEDUCTION_RATE as Jr, computeTaxableCapital as Jt, QuebecReturnInput as K, AT1_DISPOSITION_CATEGORIES as Ka, computeAlbertaReturn as Ki, amortizationAddBack as Kn, computeClass14 as Ko, AlbertaSchedule14Input as Kr, TaxableCapitalInput as Kt, T2ReturnInput as L, AT1_DONATION_GAIN_RATE as La, assertAt1TaxPayableReconciles as Li, computePart4Rdtoh as Ln, Class14Input as Lo, computeBusinessLimit as Lr, computeSchedule54 as Lt, T2CifQuestionnaire as M, IegInput as Ma, At1MandatoryFieldMissingError as Mi, computeSchedule4Losses as Mn, CLASS_14_1_TRANSITIONAL_RATE as Mo, computePartITax as Mr, LRIP_INVESTMENT_INCOME_FACTOR as Mt, T2CifSettlement as N, IegResult as Na, At1TaxPayableMismatchError as Ni, PART_IV_RATE as Nn, Class13Input as No, BusinessLimitInput as Nr, LripDividendEvent as Nt, T2CifAddress as O, allocateIegExpenditureLimit as Oa, renderAt1NetFile as Oi, ProvincialAllocationResult as On, computeCcaClass as Oo, CcpcActiveBusinessTaxResult as Or, latestRateYear as Os, Schedule55Input as Ot, T2CifShareholder as P, computeIeg as Pa, At1TransmitterInfo as Pi, Part4RdtohInput as Pn, Class13Result as Po, BusinessLimitResult as Pr, LripEventResult as Pt, QuebecTaxInput as Q, At1CategoryTotals as Qa, At1ScheduleData as Qi, incomeTaxProvisionAddBack as Qn, isDecliningBalanceClass as Qo, computeAlbertaSchedule14 as Qr, ITC_RECAPTURE_PERIOD_YEARS as Qt, t2Engine as R, AT1_DONATION_INCOME_RATE as Ra, assertCriticalFields as Ri, Schedule2Input as Rn, Class14Property as Ro, computeSBD as Rr, GripInput as Rt, AdjustedTaxableIncomeResult as S, IegAgreementResult as Sa, formatRsiAmount as Si, Schedule5Input as Sn, CcaClassInput as So, charitableDonationsDeduction as Sr, resolveAlbertaTaxRates as Ss, Schedule101Result as St, T2SettlementInput as T, IegGroupResult as Ta, renderAt1Rsi as Ti, AllocatedProvince as Tn, Schedule8Entry as To, netCapitalLossApplied as Tr, earliestRateYear as Ts, Schedule88Input as Tt, renderCo17DraftReturn as U, Schedule20Input as Ua, at1Engine as Ui, Schedule1LineDefect as Un, MAX_LEASEHOLD_PERIODS as Uo, LossScheduleInput as Ur, Schedule43Result as Ut, Co17Identity as V, computeDonationMaximum as Va, xmlEscape as Vi, Schedule1Input as Vn, LeaseholdLayer as Vo, CorpTaxRates as Vr, Schedule43Input as Vt, Co17ReturnInput as W, Schedule20Result as Wa, AlbertaReturnInput as Wi, Schedule1NotFileableError as Wn, MIN_LEASEHOLD_PERIODS as Wo, LossScheduleResult as Wr, computeSchedule43 as Wt, QuebecEstablishment as X, At1AbilResult as Xa, AT1_SCHEDULES_WITHOUT_BUILDERS as Xi, deferredIncomeTaxProvisionAddBack as Xn, CCA_RATE_BOOK as Xo, CecIncomeInclusionDetail as Xr, Schedule31Result as Xt, QuebecAllocationResult as Y, At1AbilEntry as Ya, computeAllocationFactor as Yi, computeSchedule1 as Yn, CCA_DECLINING_BALANCE_RATES_2024 as Yo, CEC_INCLUSION_RATE as Yr, Schedule31Input as Yt, computeQuebecAllocationFactor as Z, At1CategoryResult as Za, AT1_SCHEDULES_WITH_BUILDERS as Zi, findSchedule1LineDefects as Zn, CcaRateTable as Zo, cecScheduleAppliesToTaxYear as Zr, computeSchedule31 as Zt, EifelLimitationInput as _, schedule29Values as _a, RSI_WORD_GAP as _i, computeSchedule13 as _n, AlbertaSchedule13ClassResult as _o, isSchedule5Province as _r, GeneralRateBand as _s, FederalT2Input as _t, MpDeductionRates as a, Schedule2FilingInput as aa, albertaCcaDifference as ai, computeZetm as an, AlbertaSchedule17Input as ao, EifelResult as ar, LossCarrybackResult as as, T2_CERTIFICATION_FIXTURES as at, ratioOfPermissibleExpenses as b, IegAgreementMember as ba, RsiLineItemError as bi, Schedule6Result as bn, FederalCcaClass as bo, TaxableIncomeLine as br, AB_TAX_RATE_BOOK as bs, FirstReturnEvent as bt, PART_VI_1_DEDUCTION_BANDS as c, schedule12LossDeductions as ca, albertaDispositionAdjustments as ci, BusinessLimitAllocationInput as cn, At1ReserveKind as co, ProvincialRateChange as cr, AlbertaTaxInput as cs, ConformanceSummary as ct, computePartVI1Deduction as d, schedule16Values as da, albertaTerminalLossDifference as di, computeBusinessLimitAllocation as dn, computeAlbertaSchedule17 as do, dayWeightedRate as dr, AlbertaCorporationStatus as ds, T2LineKey as dt, Schedule10FilingInput as ea, Schedule12Input as ei, ItcRecaptureItemResult as en, SECTION_34_2_GROSS_UP as eo, recaptureAddBack as er, LossContinuityInput as es, computeQuebecTax as et, partVI1DeductionMultiple as f, schedule17Values as fa, computeSchedule12 as fi, Schedule21Input as fn, AlbertaSchedule16Input as fo, PROVINCE_RATES_2024 as fr, AlbertaSbdInput as fs, T2_LINE_META as ft, EIFEL_TRANSITIONAL_RATIO as g, schedule21Values as ga, RSI_NEGATIVE_PREFIX as gi, ReserveContinuityRow as gn, AlbertaCcaOverride as go, ProvincialRate as gr, DayWeightedRateResult as gs, runConformanceSuite as gt, EIFEL_STANDARD_RATIO_FROM as h, schedule20Values as ha, RSI_DELIMITER as hi, ReserveContinuityResult as hn, computeAlbertaSchedule16 as ho, ProvinceRateTable as hr, AB_GENERAL_RATE_BANDS as hs, runConformance as ht, MpDeductionInput as i, Schedule21FilingInput as ia, albertaCapitalGainDifference as ii, ZetmResult as in, AT1_RESERVE_TOTAL_LINES as io, EifelInput as ir, LossCarrybackInput as is, resolveQuebecTaxRates as it, T2CifPartI as j, IEG_2024 as ja, At1FilingData as ji, Schedule4Result as jn, CLASS_14_1_MINIMUM_DEDUCTION as jo, computeCcpcActiveBusinessTax as jr, LRIP_INVESTMENT_CORPORATION_MULTIPLE as jt, T2CifData as k, computeIegAgreement as ka, AT1_CRITICAL_MANDATORY_FIELDS as ki, computeProvincialAllocation as kn, computeCcaSchedule as ko, PartITaxInput as kr, resolveRates as ks, Schedule55Result as kt, PartVI1DeductionBand as l, schedule12Values as la, albertaRecaptureDifference as li, BusinessLimitAllocationResult as ln, At1ReserveRowResult as lo, ProvincialRateChanges as lr, AlbertaTaxResult as ls, ExpectedSource as lt, EIFEL_STANDARD_RATIO as m, schedule1Values as ma, RSI_COLUMN_GAP as mi, computeSchedule21 as mn, assistanceFrom as mo, ProvinceCode as mr, computeAlbertaSbd as ms, formatConformanceReport as mt, MP_GROSS_REVENUE_THRESHOLD as n, Schedule1FilingInput as na, Schedule12Result as ni, computeItcRecapture as nn, AT1_RESERVE_KINDS as no, EIFEL_EFFECTIVE_FROM as nr, computeLossContinuity as ns, QC_TAX_RATE_BOOK as nt, MpDeductionResult as o, at1LineItemId as oa, albertaCcaScheduleAdjustments as oi, AssociatedMemberInput as on, AlbertaSchedule17Result as oo, EifelThresholds as or, LossCarrybackYear as os, CertificationFixture as ot, EIFEL_FIRST_YEAR_START as p, schedule18Values as pa, reconcileAlbertaNetIncome as pi, Schedule21Result as pn, AlbertaSchedule16Result as po, PROVINCE_RATE_BOOK as pr, AlbertaSbdResult as ps, foldT2Lines as pt, QuebecReturnResult as q, AlbertaSchedule18Input as qa, AllocationFactorInput as qi, assertSchedule1Fileable as qn, computeClass141AdditionalAllowance as qo, AlbertaSchedule14Result as qr, TaxableCapitalResult as qt, MP_RATES_2024 as r, Schedule20FilingInput as ra, albertaAbilDifference as ri, ZetmInput as rn, AT1_RESERVE_LINES as ro, EifelExemption as rr, LossCarrybackError as rs, QuebecTaxRates as rt, computeMpDeduction as s, schedule10Values as sa, albertaCurrentYearLoss as si, AssociatedMemberResult as sn, At1ReserveBalances as so, assessEifel as sr, computeLossCarryback as ss, ConformanceResult as st, MP_EXCLUDED_ACTIVITIES as t, Schedule12FilingInput as ta, Schedule12Line as ti, ItcRecaptureResult as tn, computeAlbertaSchedule18 as to, terminalLossDeduction as tr, LossContinuityResult as ts, QC_TAX_2024 as tt, PartVI1DeductionResult as u, schedule13Values as ua, albertaReserveDifference as ui, allocateEvenly as un, At1ReserveTable as uo, blendProvinceRateTable as ur, computeAlbertaTax as us, LineCheck as ut, EifelLimitationResult as v, schedule2Values as va, RsiHeaderInput as vi, CapitalDisposition as vn, AlbertaSchedule13Input as vo, resolveProvinceRates as vr, computeDayWeightedGeneralTax as vs, FederalT2Result as vt, computeAdjustedTaxableIncome as w, IegGroupMember as wa, formatRsiText as wi, computeSchedule5 as wn, CcaScheduleResult as wo, dividendsDeductibleS112 as wr, RateBookEntry as ws, SCHEDULE_88_MAX_URLS as wt, AdjustedTaxableIncomeInput as x, IegAgreementMemberResult as xa, RsiScheduleInput as xi, computeSchedule6 as xn, computeAlbertaSchedule13 as xo, TaxableIncomeResult as xr, AlbertaTaxRates as xs, Schedule101Input as xt, computeEifelLimitation as y, IegAgreementInput as ya, RsiLineItem as yi, DispositionResult as yn, AlbertaSchedule13Result as yo, TaxableIncomeInput as yr, AB_TAX_2024 as ys, computeFederalT2 as yt, Co17Address as z, DonationMaximumInput as za, at1TaxPayableDeductions as zi, Schedule2Result as zn, Class14PropertyResult as zo, CORP_TAX_2024 as zr, GripResult as zt };