@classytic/ca-tax 0.0.5 → 0.0.12

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/forms.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  //#region src/t2/at1/forms/at4970.ts
2
2
  /** `SSSFFFOOO` — placeholder schedule code; see the module note above. */
3
- const id$9 = (field, occurrence = 1) => `497${field}${String(occurrence).padStart(3, "0")}`;
3
+ const id$11 = (field, occurrence = 1) => `497${field}${String(occurrence).padStart(3, "0")}`;
4
4
  const AT4970 = {
5
5
  id: "AT4970",
6
6
  program: "AT1",
@@ -83,7 +83,7 @@ const AT4970 = {
83
83
  }
84
84
  ].map(({ field, ...rest }) => ({
85
85
  ...rest,
86
- line: id$9(field)
86
+ line: id$11(field)
87
87
  })).sort((a, b) => a.line.localeCompare(b.line)),
88
88
  provenance: {
89
89
  document: "research/sources/tra-guides/tra-guide-claiming-the-innovation-employment-grant.pdf",
@@ -565,8 +565,8 @@ const AT1_JACKET_CAPTIONS = [
565
565
  //#endregion
566
566
  //#region src/t2/at1/forms/jacket.ts
567
567
  /** `SSSFFFOOO` — schedule, field, occurrence. The jacket is schedule 000. */
568
- const id$8 = (field, occurrence = 1) => `000${field}${String(occurrence).padStart(3, "0")}`;
569
- const SECTIONS$29 = [
568
+ const id$10 = (field, occurrence = 1) => `000${field}${String(occurrence).padStart(3, "0")}`;
569
+ const SECTIONS$31 = [
570
570
  {
571
571
  id: "identification",
572
572
  title: "Identification",
@@ -693,12 +693,12 @@ const AT1_JACKET = {
693
693
  title: "Alberta Corporate Income Tax Return — AT1",
694
694
  scheme: "tra-line-item-id",
695
695
  taxYears: { from: 2025 },
696
- sections: SECTIONS$29,
696
+ sections: SECTIONS$31,
697
697
  fields: AT1_JACKET_CAPTIONS.map((c) => {
698
698
  const carried = CARRIED_IN$1[c.line];
699
699
  const note = NOTES$2[c.line];
700
700
  return {
701
- line: id$8(c.line),
701
+ line: id$10(c.line),
702
702
  caption: c.caption,
703
703
  kind: kindOf(c),
704
704
  role: COMPUTED.has(c.line) ? "computed" : carried ? "carried-in" : "input",
@@ -719,25 +719,25 @@ const AT1_JACKET = {
719
719
  }
720
720
  };
721
721
  /** 000080001 — Alberta tax payable, before credits. */
722
- const AT1_TAX_PAYABLE_LINE = id$8("080");
722
+ const AT1_TAX_PAYABLE_LINE = id$10("080");
723
723
  /** 000090001 — the balance, signed. Negative is an overpayment. */
724
- const AT1_BALANCE_LINE = id$8("090");
724
+ const AT1_BALANCE_LINE = id$10("090");
725
725
  /**
726
726
  * The five credits the specification nets against 080 to reach 090. The
727
727
  * Innovation Employment Grant (129) is NOT among them.
728
728
  */
729
729
  const AT1_BALANCE_CREDIT_LINES = Object.freeze([
730
- id$8("081"),
731
- id$8("082"),
732
- id$8("085"),
733
- id$8("086"),
734
- id$8("087")
730
+ id$10("081"),
731
+ id$10("082"),
732
+ id$10("085"),
733
+ id$10("086"),
734
+ id$10("087")
735
735
  ]);
736
736
  //#endregion
737
737
  //#region src/t2/at1/forms/schedule12.ts
738
738
  /** `SSSFFFOOO` — schedule, field, occurrence. */
739
- const id$7 = (field, occurrence = 1) => `012${field}${String(occurrence).padStart(3, "0")}`;
740
- const SECTIONS$28 = [{
739
+ const id$9 = (field, occurrence = 1) => `012${field}${String(occurrence).padStart(3, "0")}`;
740
+ const SECTIONS$30 = [{
741
741
  id: "area-a",
742
742
  title: "Area A — net income for Alberta corporate income tax purposes",
743
743
  description: "Reconciling items between federal and Alberta net income. Report a pair only where the two figures differ."
@@ -999,21 +999,21 @@ const SINGLES = [
999
999
  }
1000
1000
  ];
1001
1001
  const pairFields = AT1_SCHEDULE_12_PAIRS.flatMap((p) => [{
1002
- line: id$7(p.federal),
1002
+ line: id$9(p.federal),
1003
1003
  caption: `${p.label} — federal`,
1004
1004
  kind: "money",
1005
1005
  role: "input",
1006
1006
  section: p.section,
1007
1007
  requirement: "conditional",
1008
- note: `Report only if it differs from the Alberta figure at ${id$7(p.alberta)}.${p.note ? ` ${p.note}` : ""}`
1008
+ note: `Report only if it differs from the Alberta figure at ${id$9(p.alberta)}.${p.note ? ` ${p.note}` : ""}`
1009
1009
  }, {
1010
- line: id$7(p.alberta),
1010
+ line: id$9(p.alberta),
1011
1011
  caption: `${p.label} — Alberta`,
1012
1012
  kind: "money",
1013
1013
  role: "input",
1014
1014
  section: p.section,
1015
1015
  requirement: "conditional",
1016
- note: `Report only if it differs from the federal figure at ${id$7(p.federal)}.${p.note ? ` ${p.note}` : ""}`
1016
+ note: `Report only if it differs from the federal figure at ${id$9(p.federal)}.${p.note ? ` ${p.note}` : ""}`
1017
1017
  }]);
1018
1018
  const AT1_SCHEDULE_12 = {
1019
1019
  id: "AT1SCH12",
@@ -1022,10 +1022,10 @@ const AT1_SCHEDULE_12 = {
1022
1022
  title: "Alberta income/loss reconciliation",
1023
1023
  scheme: "tra-line-item-id",
1024
1024
  taxYears: { from: 2024 },
1025
- sections: SECTIONS$28,
1025
+ sections: SECTIONS$30,
1026
1026
  fields: [...SINGLES.map(({ field, ...rest }) => ({
1027
1027
  ...rest,
1028
- line: id$7(field)
1028
+ line: id$9(field)
1029
1029
  })), ...pairFields].sort((a, b) => a.line.localeCompare(b.line)),
1030
1030
  provenance: {
1031
1031
  document: "research/field-maps/at1-schedules-12-21.md",
@@ -1036,7 +1036,7 @@ const AT1_SCHEDULE_12 = {
1036
1036
  //#endregion
1037
1037
  //#region src/t2/at1/forms/schedule13.ts
1038
1038
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1039
- const id$6 = (field, occurrence = 1) => `013${field}${String(occurrence).padStart(3, "0")}`;
1039
+ const id$8 = (field, occurrence = 1) => `013${field}${String(occurrence).padStart(3, "0")}`;
1040
1040
  const AT1_SCHEDULE_13_COLUMNS = [
1041
1041
  {
1042
1042
  column: 1,
@@ -1193,10 +1193,10 @@ const AT1_SCHEDULE_13 = {
1193
1193
  fields: [
1194
1194
  ...RETURN_LEVEL.map(({ field, ...rest }) => ({
1195
1195
  ...rest,
1196
- line: id$6(field)
1196
+ line: id$8(field)
1197
1197
  })),
1198
1198
  ...AT1_SCHEDULE_13_COLUMNS.filter((c) => c.line).map((c) => ({
1199
- line: id$6(c.line),
1199
+ line: id$8(c.line),
1200
1200
  caption: c.caption,
1201
1201
  kind: c.column === 1 ? "code" : c.column === 20 ? "rate" : "money",
1202
1202
  role: "input",
@@ -1204,7 +1204,7 @@ const AT1_SCHEDULE_13 = {
1204
1204
  ...c.note ? { note: c.note } : {}
1205
1205
  })),
1206
1206
  ...TOTALS$3.map((t) => ({
1207
- line: id$6(t.field),
1207
+ line: id$8(t.field),
1208
1208
  caption: t.caption,
1209
1209
  kind: "money",
1210
1210
  role: "total",
@@ -1225,7 +1225,7 @@ const AT1_SCHEDULE_13 = {
1225
1225
  //#endregion
1226
1226
  //#region src/t2/at1/forms/schedule16.ts
1227
1227
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1228
- const id$5 = (field, occurrence = 1) => `016${field}${String(occurrence).padStart(3, "0")}`;
1228
+ const id$7 = (field, occurrence = 1) => `016${field}${String(occurrence).padStart(3, "0")}`;
1229
1229
  const AT1_SCHEDULE_16 = {
1230
1230
  id: "AT1SCH16",
1231
1231
  program: "AT1",
@@ -1355,7 +1355,7 @@ const AT1_SCHEDULE_16 = {
1355
1355
  }
1356
1356
  ].map(({ field, ...rest }) => ({
1357
1357
  ...rest,
1358
- line: id$5(field)
1358
+ line: id$7(field)
1359
1359
  })),
1360
1360
  provenance: {
1361
1361
  document: "research/field-maps/at1-schedules-16-17.md",
@@ -1368,7 +1368,7 @@ const AT1_SCHEDULE_16_CARRYFORWARD_LINE = "016022001";
1368
1368
  //#endregion
1369
1369
  //#region src/t2/at1/forms/schedule17.ts
1370
1370
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1371
- const id$4 = (field, occurrence = 1) => `017${field}${String(occurrence).padStart(3, "0")}`;
1371
+ const id$6 = (field, occurrence = 1) => `017${field}${String(occurrence).padStart(3, "0")}`;
1372
1372
  const AT1_SCHEDULE_17_RESERVES = [
1373
1373
  {
1374
1374
  label: "Doubtful debts",
@@ -1425,7 +1425,7 @@ const AT1_SCHEDULE_17_RESERVES = [
1425
1425
  federalOpening: "230"
1426
1426
  }
1427
1427
  ];
1428
- const SECTIONS$25 = [{
1428
+ const SECTIONS$27 = [{
1429
1429
  id: "reserves",
1430
1430
  title: "Continuity of reserves",
1431
1431
  description: "Eight reserve kinds. Six mirror federal Schedule 13; policy reserves and bank reserves exist only on the Alberta form."
@@ -1442,7 +1442,7 @@ const COLUMNS$1 = [
1442
1442
  const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([key, columnCaption]) => {
1443
1443
  const isOpening = key === "opening";
1444
1444
  return {
1445
- line: id$4(r[key]),
1445
+ line: id$6(r[key]),
1446
1446
  caption: `${r.label} — ${columnCaption}`,
1447
1447
  kind: "money",
1448
1448
  role: "input",
@@ -1458,21 +1458,21 @@ const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([
1458
1458
  }));
1459
1459
  const TOTALS$2 = [
1460
1460
  {
1461
- line: id$4("021"),
1461
+ line: id$6("021"),
1462
1462
  caption: "Total of the opening balances",
1463
1463
  kind: "money",
1464
1464
  role: "total",
1465
1465
  section: "totals"
1466
1466
  },
1467
1467
  {
1468
- line: id$4("051"),
1468
+ line: id$6("051"),
1469
1469
  caption: "Total of the transfers on wind-up or amalgamation",
1470
1470
  kind: "money",
1471
1471
  role: "total",
1472
1472
  section: "totals"
1473
1473
  },
1474
1474
  {
1475
- line: id$4("081"),
1475
+ line: id$6("081"),
1476
1476
  caption: "Total of the closing balances",
1477
1477
  kind: "money",
1478
1478
  role: "total",
@@ -1484,7 +1484,7 @@ const TOTALS$2 = [
1484
1484
  note: "This year’s reserves, deducted from Alberta income."
1485
1485
  },
1486
1486
  {
1487
- line: id$4("091"),
1487
+ line: id$6("091"),
1488
1488
  caption: "Total of line 021 plus line 051",
1489
1489
  kind: "money",
1490
1490
  role: "computed",
@@ -1503,7 +1503,7 @@ const AT1_SCHEDULE_17 = {
1503
1503
  title: "Alberta continuity of reserves",
1504
1504
  scheme: "tra-line-item-id",
1505
1505
  taxYears: { from: 2024 },
1506
- sections: SECTIONS$25,
1506
+ sections: SECTIONS$27,
1507
1507
  fields: [...reserveFields$1, ...TOTALS$2].sort((a, b) => a.line.localeCompare(b.line)),
1508
1508
  provenance: {
1509
1509
  document: "research/field-maps/at1-schedules-16-17.md",
@@ -1514,7 +1514,7 @@ const AT1_SCHEDULE_17 = {
1514
1514
  //#endregion
1515
1515
  //#region src/t2/at1/forms/schedule18.ts
1516
1516
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1517
- const id$3 = (field, occurrence = 1) => `018${field}${String(occurrence).padStart(3, "0")}`;
1517
+ const id$5 = (field, occurrence = 1) => `018${field}${String(occurrence).padStart(3, "0")}`;
1518
1518
  const AT1_SCHEDULE_18_CATEGORIES = [
1519
1519
  {
1520
1520
  label: "Shares",
@@ -1561,7 +1561,7 @@ const AT1_SCHEDULE_18_CATEGORIES = [
1561
1561
  lossRestricted: true
1562
1562
  }
1563
1563
  ];
1564
- const SECTIONS$24 = [
1564
+ const SECTIONS$26 = [
1565
1565
  {
1566
1566
  id: "dispositions",
1567
1567
  title: "Dispositions by category",
@@ -1586,7 +1586,7 @@ const COLUMNS = [
1586
1586
  ["gainOrLoss", "D — gain or (loss)"]
1587
1587
  ];
1588
1588
  const categoryFields = AT1_SCHEDULE_18_CATEGORIES.flatMap((c) => COLUMNS.map(([key, columnCaption]) => ({
1589
- line: id$3(c[key]),
1589
+ line: id$5(c[key]),
1590
1590
  caption: `${c.label} — ${columnCaption}`,
1591
1591
  kind: "money",
1592
1592
  role: key === "gainOrLoss" ? "computed" : "input",
@@ -1809,10 +1809,10 @@ const AT1_SCHEDULE_18 = {
1809
1809
  title: "Alberta dispositions of capital property",
1810
1810
  scheme: "tra-line-item-id",
1811
1811
  taxYears: { from: 2024 },
1812
- sections: SECTIONS$24,
1812
+ sections: SECTIONS$26,
1813
1813
  fields: [...categoryFields, ...REST.map(({ field, ...rest }) => ({
1814
1814
  ...rest,
1815
- line: id$3(field)
1815
+ line: id$5(field)
1816
1816
  }))].sort((a, b) => a.line.localeCompare(b.line)),
1817
1817
  provenance: {
1818
1818
  document: "research/field-maps/at1-schedule-18-dispositions.md",
@@ -1825,7 +1825,7 @@ const AT1_SECTION_34_2_GROSS_UP = 2;
1825
1825
  //#endregion
1826
1826
  //#region src/t2/at1/forms/schedule20.ts
1827
1827
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1828
- const id$2 = (field, occurrence = 1) => `020${field}${String(occurrence).padStart(3, "0")}`;
1828
+ const id$4 = (field, occurrence = 1) => `020${field}${String(occurrence).padStart(3, "0")}`;
1829
1829
  /** The ten rows every donation continuity runs through, in form order. */
1830
1830
  const CONTINUITY_ROWS = [
1831
1831
  ["opening", "Balance at the end of the previous year"],
@@ -1870,7 +1870,7 @@ const AT1_SCHEDULE_20_POOLS = [{
1870
1870
  closing: "078"
1871
1871
  }
1872
1872
  }];
1873
- const SECTIONS$23 = [
1873
+ const SECTIONS$25 = [
1874
1874
  {
1875
1875
  id: "charitable",
1876
1876
  title: "Area A — Charitable donations",
@@ -1941,11 +1941,11 @@ const AT1_SCHEDULE_20 = {
1941
1941
  title: "Alberta charitable donations and gifts",
1942
1942
  scheme: "tra-line-item-id",
1943
1943
  taxYears: { from: 2024 },
1944
- sections: SECTIONS$23,
1944
+ sections: SECTIONS$25,
1945
1945
  fields: [...AT1_SCHEDULE_20_POOLS.flatMap((pool) => CONTINUITY_ROWS.map(([key, caption]) => {
1946
1946
  const computed = key === "beginning" || key === "subtotal" || key === "available" || key === "closing";
1947
1947
  return {
1948
- line: id$2(pool.lines[key]),
1948
+ line: id$4(pool.lines[key]),
1949
1949
  caption: `${pool.label} — ${caption}`,
1950
1950
  kind: "money",
1951
1951
  role: computed ? "computed" : "input",
@@ -1954,7 +1954,7 @@ const AT1_SCHEDULE_20 = {
1954
1954
  };
1955
1955
  })), ...MAXIMUM.map(({ field, ...rest }) => ({
1956
1956
  ...rest,
1957
- line: id$2(field)
1957
+ line: id$4(field)
1958
1958
  }))].sort((a, b) => a.line.localeCompare(b.line)),
1959
1959
  provenance: {
1960
1960
  document: "research/validation/auratax/2026-08-07-cca-classes/README.md",
@@ -1974,7 +1974,7 @@ const AT1_DONATION_CARRYFORWARD_YEARS = 5;
1974
1974
  //#endregion
1975
1975
  //#region src/t2/at1/forms/schedule21.ts
1976
1976
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1977
- const id$1 = (field, occurrence = 1) => `021${field}${String(occurrence).padStart(3, "0")}`;
1977
+ const id$3 = (field, occurrence = 1) => `021${field}${String(occurrence).padStart(3, "0")}`;
1978
1978
  const AT1_SCHEDULE_21_POOLS = [
1979
1979
  {
1980
1980
  key: "non-capital",
@@ -2046,7 +2046,7 @@ const AT1_SCHEDULE_21_POOLS = [
2046
2046
  closing: "125"
2047
2047
  }
2048
2048
  ];
2049
- const SECTIONS$22 = [{
2049
+ const SECTIONS$24 = [{
2050
2050
  id: "current-year",
2051
2051
  title: "Part 1 — Calculating the current-year non-capital loss",
2052
2052
  description: "Starts from Alberta net income on Schedule 12 line 054 and works down through the Division C deductions to the loss for the year."
@@ -2165,7 +2165,7 @@ const continuityFields = AT1_SCHEDULE_21_POOLS.flatMap((pool) => CONTINUITY_ORDE
2165
2165
  const isClosing = k === "closing";
2166
2166
  const isCarryBack = k === "carryBack";
2167
2167
  return {
2168
- line: id$1(pool[k]),
2168
+ line: id$3(pool[k]),
2169
2169
  caption: `${pool.label} — ${CONTINUITY_CAPTIONS[k]}`,
2170
2170
  kind: "money",
2171
2171
  role: isClosing ? "computed" : "input",
@@ -2185,10 +2185,10 @@ const AT1_SCHEDULE_21 = {
2185
2185
  title: "Current-year loss and continuity of losses",
2186
2186
  scheme: "tra-line-item-id",
2187
2187
  taxYears: { from: 2024 },
2188
- sections: SECTIONS$22,
2188
+ sections: SECTIONS$24,
2189
2189
  fields: [...PART_1.map(({ field, ...rest }) => ({
2190
2190
  ...rest,
2191
- line: id$1(field)
2191
+ line: id$3(field)
2192
2192
  })), ...continuityFields].sort((a, b) => a.line.localeCompare(b.line)),
2193
2193
  provenance: {
2194
2194
  document: "research/field-maps/at1-schedules-12-21.md",
@@ -2199,7 +2199,7 @@ const AT1_SCHEDULE_21 = {
2199
2199
  //#endregion
2200
2200
  //#region src/t2/at1/forms/schedule29.ts
2201
2201
  /** `SSSFFFOOO` — schedule, field, occurrence. */
2202
- const id = (field, occurrence = 1) => `029${field}${String(occurrence).padStart(3, "0")}`;
2202
+ const id$2 = (field, occurrence = 1) => `029${field}${String(occurrence).padStart(3, "0")}`;
2203
2203
  const AT1_SCHEDULE_29 = {
2204
2204
  id: "AT1SCH29",
2205
2205
  program: "AT1",
@@ -2604,7 +2604,7 @@ const AT1_SCHEDULE_29 = {
2604
2604
  }
2605
2605
  ].map(({ field, ...rest }) => ({
2606
2606
  ...rest,
2607
- line: id(field)
2607
+ line: id$2(field)
2608
2608
  })).sort((a, b) => a.line.localeCompare(b.line)),
2609
2609
  provenance: {
2610
2610
  document: "research/sources/tra-forms/pdf/AT1SCH29-innovation-employment-grant-TRA14637.pdf",
@@ -2624,7 +2624,7 @@ const AT1_IEG_PRIOR_YEARS = 2;
2624
2624
  const AT1_IEG_JACKET_LINE = "000129001";
2625
2625
  //#endregion
2626
2626
  //#region src/t2/co17/forms/co17.ts
2627
- const SECTIONS$20 = [
2627
+ const SECTIONS$22 = [
2628
2628
  {
2629
2629
  id: "identity",
2630
2630
  title: "1 — Renseignements sur l'identité de la société"
@@ -2660,7 +2660,7 @@ const CO17_RETURN = {
2660
2660
  title: "CO-17 — Déclaration de revenus des sociétés",
2661
2661
  scheme: "rq-box",
2662
2662
  taxYears: { from: 2025 },
2663
- sections: SECTIONS$20,
2663
+ sections: SECTIONS$22,
2664
2664
  fields: [
2665
2665
  F$5("01a", "Numéro d'entreprise du Québec (NEQ)", "identity", { kind: "text" }),
2666
2666
  F$5("01b", "Numéro d'identification", "identity", { kind: "text" }),
@@ -2722,7 +2722,7 @@ const CO17_QUEBEC_PROPORTION_BOX = "421";
2722
2722
  const CO17_TAX_PAYABLE_BOX = "425";
2723
2723
  //#endregion
2724
2724
  //#region src/t2/forms/jacket.ts
2725
- const SECTIONS$19 = [
2725
+ const SECTIONS$21 = [
2726
2726
  {
2727
2727
  id: "taxable-income",
2728
2728
  title: "Taxable income",
@@ -2778,7 +2778,7 @@ const T2_JACKET = {
2778
2778
  title: "T2 Corporation Income Tax Return",
2779
2779
  scheme: "cra-line",
2780
2780
  taxYears: { from: 2025 },
2781
- sections: SECTIONS$19,
2781
+ sections: SECTIONS$21,
2782
2782
  fields: [
2783
2783
  F$4("300", "Net income or (loss) for income tax purposes", "taxable-income", {
2784
2784
  role: "carried-in",
@@ -3714,7 +3714,7 @@ new Map(SCHEDULE_1_CAPTIONS.map((c) => [c.line, c]));
3714
3714
  * Captions come from `./generated/schedule1.captions.ts`, which is produced from
3715
3715
  * the CRA document. This module adds only what the paper does not say.
3716
3716
  */
3717
- const SECTIONS$18 = [
3717
+ const SECTIONS$20 = [
3718
3718
  {
3719
3719
  id: "add-1",
3720
3720
  title: "Add",
@@ -3843,7 +3843,7 @@ const T2_SCHEDULE_1 = {
3843
3843
  title: "Net income (loss) for income tax purposes",
3844
3844
  scheme: "cra-line",
3845
3845
  taxYears: { from: 2023 },
3846
- sections: SECTIONS$18,
3846
+ sections: SECTIONS$20,
3847
3847
  fields: SCHEDULE_1_CAPTIONS.map((c) => {
3848
3848
  const section = sectionFor(Number(c.line));
3849
3849
  const side = section.startsWith("add") ? "add" : "deduct";
@@ -3883,7 +3883,7 @@ const SCHEDULE_1_LINE_BY_NUMBER = indexByLine(T2_SCHEDULE_1);
3883
3883
  const SCHEDULE_1_LINES = T2_SCHEDULE_1.fields;
3884
3884
  //#endregion
3885
3885
  //#region src/t2/forms/schedule2.ts
3886
- const SECTIONS$17 = [
3886
+ const SECTIONS$19 = [
3887
3887
  {
3888
3888
  id: "charitable",
3889
3889
  title: "Part 2 — Charitable donations",
@@ -3915,7 +3915,7 @@ const T2_SCHEDULE_2 = {
3915
3915
  title: "Charitable donations and gifts",
3916
3916
  scheme: "cra-line",
3917
3917
  taxYears: { from: 2023 },
3918
- sections: SECTIONS$17,
3918
+ sections: SECTIONS$19,
3919
3919
  fields: [
3920
3920
  F$3("239", "Charitable donations expired after five tax years", "charitable"),
3921
3921
  F$3("240", "Charitable donations at the beginning of the current tax year", "charitable", { note: "Amount 1A less the expired amount at line 239 — last year’s closing pool, net of what aged out." }),
@@ -3949,7 +3949,7 @@ const SCHEDULE_2_CARRYFORWARD_YEARS = {
3949
3949
  };
3950
3950
  //#endregion
3951
3951
  //#region src/t2/forms/schedule3.ts
3952
- const SECTIONS$16 = [{
3952
+ const SECTIONS$18 = [{
3953
3953
  id: "received",
3954
3954
  title: "Part 1 — Dividends received in the tax year",
3955
3955
  description: "One row per payer. Columns B, C, D, I and J are completed only when the payer is connected."
@@ -3973,7 +3973,7 @@ const T2_SCHEDULE_3 = {
3973
3973
  title: "Dividends received, taxable dividends paid, and Part IV tax calculation",
3974
3974
  scheme: "cra-line",
3975
3975
  taxYears: { from: 2023 },
3976
- sections: SECTIONS$16,
3976
+ sections: SECTIONS$18,
3977
3977
  fields: [
3978
3978
  F$2("200", "Name of payer corporation from which the corporation received the dividend", "received", { kind: "text" }),
3979
3979
  F$2("205", "Enter 1 if the payer corporation is connected", "received", {
@@ -4953,7 +4953,7 @@ const SCHEDULE_6_GRIDS = [
4953
4953
  ]
4954
4954
  }
4955
4955
  ];
4956
- const SECTIONS$13 = [
4956
+ const SECTIONS$15 = [
4957
4957
  {
4958
4958
  id: "designation",
4959
4959
  title: "Designation under paragraph 111(4)(e)"
@@ -5085,7 +5085,7 @@ const T2_SCHEDULE_6 = {
5085
5085
  title: "Summary of dispositions of capital property",
5086
5086
  scheme: "cra-line",
5087
5087
  taxYears: { from: 2023 },
5088
- sections: SECTIONS$13,
5088
+ sections: SECTIONS$15,
5089
5089
  fields: [...gridFields, ...SUMMARY].sort((a, b) => Number(a.line) - Number(b.line)),
5090
5090
  provenance: {
5091
5091
  document: "research/sources/cra-forms/T2SCH06-capital-gains.pdf",
@@ -5501,7 +5501,7 @@ const SCHEDULE_8_COLUMNS = [
5501
5501
  caption: "UCC at the end of the year"
5502
5502
  }
5503
5503
  ];
5504
- const SECTIONS$11 = [{
5504
+ const SECTIONS$13 = [{
5505
5505
  id: "cca-grid",
5506
5506
  title: "Capital cost allowance by class",
5507
5507
  description: "One row per class. The numbered columns are what a return transmits; the unnumbered ones are arithmetic the form shows on the way."
@@ -5533,7 +5533,7 @@ const T2_SCHEDULE_8 = {
5533
5533
  title: "Capital cost allowance",
5534
5534
  scheme: "cra-line",
5535
5535
  taxYears: { from: 2026 },
5536
- sections: SECTIONS$11,
5536
+ sections: SECTIONS$13,
5537
5537
  fields: SCHEDULE_8_COLUMNS.filter((c) => c.line).map((c) => {
5538
5538
  const dest = DESTINATIONS[c.line];
5539
5539
  return {
@@ -5597,7 +5597,7 @@ const SCHEDULE_13_RESERVE_ROWS = [
5597
5597
  closing: "240"
5598
5598
  }
5599
5599
  ];
5600
- const SECTIONS$10 = [{
5600
+ const SECTIONS$12 = [{
5601
5601
  id: "capital-gains",
5602
5602
  title: "Part 1 — Capital gains reserves",
5603
5603
  description: "A repeating grid, one row per property. Lines 001–004 head the columns rather than naming fields, so only the totals carry single figures."
@@ -5736,7 +5736,7 @@ const T2_SCHEDULE_13 = {
5736
5736
  title: "Continuity of reserves",
5737
5737
  scheme: "cra-line",
5738
5738
  taxYears: { from: 2011 },
5739
- sections: SECTIONS$10,
5739
+ sections: SECTIONS$12,
5740
5740
  fields: [
5741
5741
  ...COLUMN_HEADS,
5742
5742
  ...reserveFields,
@@ -5750,7 +5750,7 @@ const T2_SCHEDULE_13 = {
5750
5750
  };
5751
5751
  //#endregion
5752
5752
  //#region src/t2/forms/schedule21.ts
5753
- const SECTIONS$9 = [
5753
+ const SECTIONS$11 = [
5754
5754
  {
5755
5755
  id: "non-business",
5756
5756
  title: "Part 1 — Federal foreign non-business income tax credit",
@@ -5781,7 +5781,7 @@ const T2_SCHEDULE_21 = {
5781
5781
  title: "Federal and provincial or territorial foreign income tax credits and federal logging tax credit",
5782
5782
  scheme: "cra-line",
5783
5783
  taxYears: { from: 2023 },
5784
- sections: SECTIONS$9,
5784
+ sections: SECTIONS$11,
5785
5785
  fields: [
5786
5786
  F$1("100", "Country of source of foreign non-business income", "non-business", { kind: "text" }),
5787
5787
  F$1("110", "Net foreign non-business income earned in the year", "non-business"),
@@ -5937,7 +5937,7 @@ const T2_SCHEDULE_23 = {
5937
5937
  const SCHEDULE_23_GROUP_BUSINESS_LIMIT = 5e5;
5938
5938
  //#endregion
5939
5939
  //#region src/t2/forms/schedule24.ts
5940
- const SECTIONS$7 = [
5940
+ const SECTIONS$9 = [
5941
5941
  {
5942
5942
  id: "operation",
5943
5943
  title: "Part 1 — Type of operation",
@@ -5968,7 +5968,7 @@ const T2_SCHEDULE_24 = {
5968
5968
  title: "First-time filer after incorporation, amalgamation, or wind-up of a subsidiary",
5969
5969
  scheme: "cra-line",
5970
5970
  taxYears: { from: 2011 },
5971
- sections: SECTIONS$7,
5971
+ sections: SECTIONS$9,
5972
5972
  fields: [
5973
5973
  F("100", "Type of operation that applies to the corporation", "operation", {
5974
5974
  kind: "code",
@@ -8162,6 +8162,208 @@ const T2_SCHEDULE_130 = {
8162
8162
  }
8163
8163
  };
8164
8164
  //#endregion
8165
+ //#region src/t2/at1/forms/schedule3.ts
8166
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
8167
+ const id$1 = (field, occurrence = 1) => `003${field}${String(occurrence).padStart(3, "0")}`;
8168
+ const AT1_SCHEDULE_3 = {
8169
+ id: "AT1SCH03",
8170
+ program: "AT1",
8171
+ schedule: "003",
8172
+ title: "Alberta Other Tax Deductions and Credits",
8173
+ scheme: "tra-line-item-id",
8174
+ taxYears: { from: 2024 },
8175
+ sections: [
8176
+ {
8177
+ id: "itc",
8178
+ title: "Investor Tax Credit (ITC)"
8179
+ },
8180
+ {
8181
+ id: "citc",
8182
+ title: "Capital Investment Tax Credit (CITC)"
8183
+ },
8184
+ {
8185
+ id: "apitc",
8186
+ title: "Agri-Processing Investment Tax Credit (APITC)",
8187
+ description: "Per-vintage caps: 20% current year, 30% 1st preceding, 50% 2nd preceding, uncapped 3rd-10th."
8188
+ },
8189
+ {
8190
+ id: "mad",
8191
+ title: "Maximum Allowable Deduction (MAD)",
8192
+ description: "The shared ceiling across all three credits — ITC has first call on it."
8193
+ }
8194
+ ],
8195
+ fields: [
8196
+ {
8197
+ field: "100",
8198
+ caption: "ITC — total on certificates issued during the year",
8199
+ kind: "money",
8200
+ role: "input",
8201
+ section: "itc"
8202
+ },
8203
+ {
8204
+ field: "102",
8205
+ caption: "ITC — carried forward from prior year(s)",
8206
+ kind: "money",
8207
+ role: "input",
8208
+ section: "itc",
8209
+ note: "= prior year’s line 108."
8210
+ },
8211
+ {
8212
+ field: "104",
8213
+ caption: "ITC — amount applied to the current taxation year",
8214
+ kind: "money",
8215
+ role: "input",
8216
+ section: "itc",
8217
+ note: "Blank claims the maximum the shared room (604) and the pool (100+102) both allow."
8218
+ },
8219
+ {
8220
+ field: "106",
8221
+ caption: "ITC — expired during the year",
8222
+ kind: "money",
8223
+ role: "input",
8224
+ section: "itc"
8225
+ },
8226
+ {
8227
+ field: "108",
8228
+ caption: "ITC — carried forward to next year",
8229
+ kind: "money",
8230
+ role: "computed",
8231
+ section: "itc",
8232
+ note: "= 100 + 102 − 104 − 106."
8233
+ },
8234
+ {
8235
+ field: "200",
8236
+ caption: "CITC — total on certificates issued during the year",
8237
+ kind: "money",
8238
+ role: "input",
8239
+ section: "citc"
8240
+ },
8241
+ {
8242
+ field: "202",
8243
+ caption: "CITC — carried forward from prior year(s)",
8244
+ kind: "money",
8245
+ role: "input",
8246
+ section: "citc",
8247
+ note: "= prior year’s line 208."
8248
+ },
8249
+ {
8250
+ field: "204",
8251
+ caption: "CITC — amount applied to the current taxation year",
8252
+ kind: "money",
8253
+ role: "input",
8254
+ section: "citc",
8255
+ note: "Forced to nil while ITC (line 108) still has an unused carryforward balance."
8256
+ },
8257
+ {
8258
+ field: "206",
8259
+ caption: "CITC — expired during the year",
8260
+ kind: "money",
8261
+ role: "input",
8262
+ section: "citc"
8263
+ },
8264
+ {
8265
+ field: "208",
8266
+ caption: "CITC — carried forward to next year",
8267
+ kind: "money",
8268
+ role: "computed",
8269
+ section: "citc",
8270
+ note: "= 200 + 202 − 204 − 206."
8271
+ },
8272
+ {
8273
+ field: "300",
8274
+ caption: "APITC — total received on certificates issued this year",
8275
+ kind: "money",
8276
+ role: "input",
8277
+ section: "apitc"
8278
+ },
8279
+ {
8280
+ field: "302",
8281
+ caption: "APITC — carried forward from prior year(s), all vintages",
8282
+ kind: "money",
8283
+ role: "input",
8284
+ section: "apitc"
8285
+ },
8286
+ {
8287
+ field: "304",
8288
+ caption: "APITC — applied, current year (≤20%)",
8289
+ kind: "money",
8290
+ role: "input",
8291
+ section: "apitc"
8292
+ },
8293
+ {
8294
+ field: "306",
8295
+ caption: "APITC — applied, 1st preceding taxation year (≤30%)",
8296
+ kind: "money",
8297
+ role: "input",
8298
+ section: "apitc"
8299
+ },
8300
+ {
8301
+ field: "308",
8302
+ caption: "APITC — applied, 2nd preceding taxation year (≤50%)",
8303
+ kind: "money",
8304
+ role: "input",
8305
+ section: "apitc"
8306
+ },
8307
+ {
8308
+ field: "310",
8309
+ caption: "APITC — applied, 3rd-10th preceding taxation years (uncapped)",
8310
+ kind: "money",
8311
+ role: "input",
8312
+ section: "apitc"
8313
+ },
8314
+ {
8315
+ field: "312",
8316
+ caption: "APITC — total applied, after shared-room allocation",
8317
+ kind: "money",
8318
+ role: "computed",
8319
+ section: "apitc",
8320
+ note: "= 304 + 306 + 308 + 310."
8321
+ },
8322
+ {
8323
+ field: "314",
8324
+ caption: "APITC — expired during the year",
8325
+ kind: "money",
8326
+ role: "input",
8327
+ section: "apitc"
8328
+ },
8329
+ {
8330
+ field: "316",
8331
+ caption: "APITC — available for carryforward",
8332
+ kind: "money",
8333
+ role: "computed",
8334
+ section: "apitc",
8335
+ note: "= 300 + 302 − 312 − 314."
8336
+ },
8337
+ {
8338
+ field: "600",
8339
+ caption: "MAD — total credits applied (104 + 204 + 312)",
8340
+ kind: "money",
8341
+ role: "computed",
8342
+ section: "mad"
8343
+ },
8344
+ {
8345
+ field: "604",
8346
+ caption: "MAD — maximum allowable deduction for the year",
8347
+ kind: "money",
8348
+ role: "computed",
8349
+ section: "mad",
8350
+ note: "Lesser of line 600 and the room at line 602 (AT1 jacket line 068 minus lines 070+071+072+074); floored at nil."
8351
+ }
8352
+ ].map(({ field, ...rest }) => ({
8353
+ ...rest,
8354
+ line: id$1(field)
8355
+ })).sort((a, b) => a.line.localeCompare(b.line)),
8356
+ provenance: {
8357
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
8358
+ retrieved: "2026-08-29",
8359
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
8360
+ }
8361
+ };
8362
+ //#endregion
8363
+ //#region src/t2/at1/forms/schedule15.ts
8364
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
8365
+ const id = (field, occurrence = 1) => `015${field}${String(occurrence).padStart(3, "0")}`;
8366
+ //#endregion
8165
8367
  //#region src/forms/registry.ts
8166
8368
  /**
8167
8369
  * THE FORM REGISTRY — every form definition, and the links between them.
@@ -8205,8 +8407,74 @@ const FORMS = [
8205
8407
  T2_SCHEDULE_53,
8206
8408
  T2_SCHEDULE_55,
8207
8409
  AT1_JACKET,
8410
+ AT1_SCHEDULE_3,
8208
8411
  AT1_SCHEDULE_12,
8209
8412
  AT1_SCHEDULE_13,
8413
+ {
8414
+ id: "AT1SCH15",
8415
+ program: "AT1",
8416
+ schedule: "015",
8417
+ title: "Alberta Resource Related Deductions",
8418
+ scheme: "tra-line-item-id",
8419
+ taxYears: { from: 2024 },
8420
+ sections: [{
8421
+ id: "sfede",
8422
+ title: "SFEDE — Specified Foreign Exploration and Development Expenses, per country"
8423
+ }, {
8424
+ id: "cfre",
8425
+ title: "CFRE — Cumulative Foreign Resource Expenses, per country"
8426
+ }],
8427
+ fields: [
8428
+ {
8429
+ field: "241",
8430
+ caption: "SFEDE regular — country code",
8431
+ kind: "code",
8432
+ role: "input",
8433
+ section: "sfede",
8434
+ note: "Must equal the federal country code (fed 012601)."
8435
+ },
8436
+ {
8437
+ field: "261",
8438
+ caption: "SFEDE successor — country code",
8439
+ kind: "code",
8440
+ role: "input",
8441
+ section: "sfede",
8442
+ note: "Must equal the federal country code (fed 012651)."
8443
+ },
8444
+ {
8445
+ field: "281",
8446
+ caption: "CFRE regular — country code",
8447
+ kind: "code",
8448
+ role: "input",
8449
+ section: "cfre",
8450
+ note: "Must equal the federal country code (fed 012701)."
8451
+ },
8452
+ {
8453
+ field: "293",
8454
+ caption: "CFRE regular — amount claimed this year",
8455
+ kind: "money",
8456
+ role: "input",
8457
+ section: "cfre",
8458
+ note: "= A + B: A is a 10%-floor/30%-income-capped amount from this country’s own pool; B draws on the (spec-undefined) global foreign resource limit."
8459
+ },
8460
+ {
8461
+ field: "301",
8462
+ caption: "CFRE successor — country code",
8463
+ kind: "code",
8464
+ role: "input",
8465
+ section: "cfre",
8466
+ note: "Must equal the federal country code (fed 012751)."
8467
+ }
8468
+ ].map(({ field, ...rest }) => ({
8469
+ ...rest,
8470
+ line: id(field)
8471
+ })).sort((a, b) => a.line.localeCompare(b.line)),
8472
+ provenance: {
8473
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
8474
+ retrieved: "2026-08-29",
8475
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule; partial (SFEDE/CFRE per-country lines only)"
8476
+ }
8477
+ },
8210
8478
  AT1_SCHEDULE_16,
8211
8479
  AT1_SCHEDULE_17,
8212
8480
  AT1_SCHEDULE_18,