@classytic/ca-tax 0.0.2 → 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/CHANGELOG.md +331 -0
- package/dist/forms/index.d.mts +2 -2
- package/dist/forms/index.mjs +2 -2
- package/dist/forms.mjs +522 -72
- package/dist/index.d.mts +6 -1
- package/dist/index.mjs +3 -3
- package/dist/index3.d.mts +3569 -244
- package/dist/index4.d.mts +3 -3
- package/dist/t2/index.d.mts +3 -3
- package/dist/t2/index.mjs +3 -3
- package/dist/t2.mjs +3041 -187
- package/package.json +8 -6
package/dist/forms.mjs
CHANGED
|
@@ -1,3 +1,114 @@
|
|
|
1
|
+
//#region src/t2/at1/forms/at4970.ts
|
|
2
|
+
/** `SSSFFFOOO` — placeholder schedule code; see the module note above. */
|
|
3
|
+
const id$11 = (field, occurrence = 1) => `497${field}${String(occurrence).padStart(3, "0")}`;
|
|
4
|
+
const AT4970 = {
|
|
5
|
+
id: "AT4970",
|
|
6
|
+
program: "AT1",
|
|
7
|
+
schedule: "4970",
|
|
8
|
+
title: "Listing of Innovation Employment Grant Projects Carried Out in Alberta",
|
|
9
|
+
scheme: "tra-line-item-id",
|
|
10
|
+
taxYears: { from: 2021 },
|
|
11
|
+
sections: [{
|
|
12
|
+
id: "projects",
|
|
13
|
+
title: "Listing of Innovation Employment Grant Projects Carried Out in Alberta",
|
|
14
|
+
description: "One row per Alberta SR&ED project. The TOTAL row transcribes onto Schedule 29 page 1 (105→005, 111→007, 113→009)."
|
|
15
|
+
}, {
|
|
16
|
+
id: "jurisdictions",
|
|
17
|
+
title: "Jurisdictions where federal qualified expenditures were incurred",
|
|
18
|
+
description: "Informational breakdown by province/territory. Entered directly, not derived."
|
|
19
|
+
}],
|
|
20
|
+
fields: [
|
|
21
|
+
{
|
|
22
|
+
field: "101",
|
|
23
|
+
caption: "Project title",
|
|
24
|
+
kind: "text",
|
|
25
|
+
role: "input",
|
|
26
|
+
section: "projects",
|
|
27
|
+
note: "Same information as line 200 from Part 2 of federal T661."
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
field: "103",
|
|
31
|
+
caption: "Project code",
|
|
32
|
+
kind: "text",
|
|
33
|
+
role: "input",
|
|
34
|
+
section: "projects",
|
|
35
|
+
note: "Federal T661 line 206."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
field: "105",
|
|
39
|
+
caption: "Portion of federal T661 line 559/557 incurred in Alberta, this project",
|
|
40
|
+
kind: "money",
|
|
41
|
+
role: "input",
|
|
42
|
+
section: "projects",
|
|
43
|
+
note: "Before IEG, for the taxation year. TOTAL feeds Schedule 29 page 1 line 005."
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
field: "107",
|
|
47
|
+
caption: "Portion of federal T661 line 559/557 NOT carried out in Alberta, this project",
|
|
48
|
+
kind: "money",
|
|
49
|
+
role: "input",
|
|
50
|
+
section: "projects"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
field: "109",
|
|
54
|
+
caption: "Total salaries and wages re SR&ED carried out in Alberta, this project",
|
|
55
|
+
kind: "money",
|
|
56
|
+
role: "input",
|
|
57
|
+
section: "projects",
|
|
58
|
+
note: "Excludes bonuses, remuneration based on profits, and taxable benefits."
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
field: "111",
|
|
62
|
+
caption: "Total prescribed proxy amount included in the Alberta portion, this project",
|
|
63
|
+
kind: "money",
|
|
64
|
+
role: "input",
|
|
65
|
+
section: "projects",
|
|
66
|
+
note: "If claimed federally. TOTAL feeds Schedule 29 page 1 line 007."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
field: "113",
|
|
70
|
+
caption: "Alberta proxy amount for this project",
|
|
71
|
+
kind: "money",
|
|
72
|
+
role: "input",
|
|
73
|
+
section: "projects",
|
|
74
|
+
note: "If line 111 is applicable. TOTAL feeds Schedule 29 page 1 line 009."
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
field: "170",
|
|
78
|
+
caption: "Total of all jurisdictions",
|
|
79
|
+
kind: "money",
|
|
80
|
+
role: "total",
|
|
81
|
+
section: "jurisdictions",
|
|
82
|
+
note: "Σ every jurisdiction amount (135–161). Informational — see the compute module’s note."
|
|
83
|
+
}
|
|
84
|
+
].map(({ field, ...rest }) => ({
|
|
85
|
+
...rest,
|
|
86
|
+
line: id$11(field)
|
|
87
|
+
})).sort((a, b) => a.line.localeCompare(b.line)),
|
|
88
|
+
provenance: {
|
|
89
|
+
document: "research/sources/tra-guides/tra-guide-claiming-the-innovation-employment-grant.pdf",
|
|
90
|
+
retrieved: "2026-08-29",
|
|
91
|
+
revision: "Field numbers (101–113, 135–161, 170) transcribed from TRA’s own worked Examples 3 and 4 (pages 24 and 29 of the Guide), independently verified twice — once directly, once by an independent multi-agent re-derivation blind to the first reading. The NetFile wire-format encoding (schedule code, line-item id scheme) is NOT confirmed — see the module’s own top-of-file note."
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
/** The 13 named jurisdictions the jurisdiction table lists, in the form’s own order. Plus 'other'. */
|
|
95
|
+
const AT4970_JURISDICTIONS = Object.freeze([
|
|
96
|
+
"alberta",
|
|
97
|
+
"britishColumbia",
|
|
98
|
+
"manitoba",
|
|
99
|
+
"newBrunswick",
|
|
100
|
+
"newfoundlandAndLabrador",
|
|
101
|
+
"northwestTerritories",
|
|
102
|
+
"novaScotia",
|
|
103
|
+
"nunavut",
|
|
104
|
+
"ontario",
|
|
105
|
+
"princeEdwardIsland",
|
|
106
|
+
"quebec",
|
|
107
|
+
"saskatchewan",
|
|
108
|
+
"yukon",
|
|
109
|
+
"other"
|
|
110
|
+
]);
|
|
111
|
+
//#endregion
|
|
1
112
|
//#region src/t2/at1/forms/generated/jacket.captions.ts
|
|
2
113
|
const AT1_JACKET_CAPTIONS = [
|
|
3
114
|
{
|
|
@@ -454,8 +565,8 @@ const AT1_JACKET_CAPTIONS = [
|
|
|
454
565
|
//#endregion
|
|
455
566
|
//#region src/t2/at1/forms/jacket.ts
|
|
456
567
|
/** `SSSFFFOOO` — schedule, field, occurrence. The jacket is schedule 000. */
|
|
457
|
-
const id$
|
|
458
|
-
const SECTIONS$
|
|
568
|
+
const id$10 = (field, occurrence = 1) => `000${field}${String(occurrence).padStart(3, "0")}`;
|
|
569
|
+
const SECTIONS$31 = [
|
|
459
570
|
{
|
|
460
571
|
id: "identification",
|
|
461
572
|
title: "Identification",
|
|
@@ -582,12 +693,12 @@ const AT1_JACKET = {
|
|
|
582
693
|
title: "Alberta Corporate Income Tax Return — AT1",
|
|
583
694
|
scheme: "tra-line-item-id",
|
|
584
695
|
taxYears: { from: 2025 },
|
|
585
|
-
sections: SECTIONS$
|
|
696
|
+
sections: SECTIONS$31,
|
|
586
697
|
fields: AT1_JACKET_CAPTIONS.map((c) => {
|
|
587
698
|
const carried = CARRIED_IN$1[c.line];
|
|
588
699
|
const note = NOTES$2[c.line];
|
|
589
700
|
return {
|
|
590
|
-
line: id$
|
|
701
|
+
line: id$10(c.line),
|
|
591
702
|
caption: c.caption,
|
|
592
703
|
kind: kindOf(c),
|
|
593
704
|
role: COMPUTED.has(c.line) ? "computed" : carried ? "carried-in" : "input",
|
|
@@ -608,25 +719,25 @@ const AT1_JACKET = {
|
|
|
608
719
|
}
|
|
609
720
|
};
|
|
610
721
|
/** 000080001 — Alberta tax payable, before credits. */
|
|
611
|
-
const AT1_TAX_PAYABLE_LINE = id$
|
|
722
|
+
const AT1_TAX_PAYABLE_LINE = id$10("080");
|
|
612
723
|
/** 000090001 — the balance, signed. Negative is an overpayment. */
|
|
613
|
-
const AT1_BALANCE_LINE = id$
|
|
724
|
+
const AT1_BALANCE_LINE = id$10("090");
|
|
614
725
|
/**
|
|
615
726
|
* The five credits the specification nets against 080 to reach 090. The
|
|
616
727
|
* Innovation Employment Grant (129) is NOT among them.
|
|
617
728
|
*/
|
|
618
729
|
const AT1_BALANCE_CREDIT_LINES = Object.freeze([
|
|
619
|
-
id$
|
|
620
|
-
id$
|
|
621
|
-
id$
|
|
622
|
-
id$
|
|
623
|
-
id$
|
|
730
|
+
id$10("081"),
|
|
731
|
+
id$10("082"),
|
|
732
|
+
id$10("085"),
|
|
733
|
+
id$10("086"),
|
|
734
|
+
id$10("087")
|
|
624
735
|
]);
|
|
625
736
|
//#endregion
|
|
626
737
|
//#region src/t2/at1/forms/schedule12.ts
|
|
627
738
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
628
|
-
const id$
|
|
629
|
-
const SECTIONS$
|
|
739
|
+
const id$9 = (field, occurrence = 1) => `012${field}${String(occurrence).padStart(3, "0")}`;
|
|
740
|
+
const SECTIONS$30 = [{
|
|
630
741
|
id: "area-a",
|
|
631
742
|
title: "Area A — net income for Alberta corporate income tax purposes",
|
|
632
743
|
description: "Reconciling items between federal and Alberta net income. Report a pair only where the two figures differ."
|
|
@@ -888,21 +999,21 @@ const SINGLES = [
|
|
|
888
999
|
}
|
|
889
1000
|
];
|
|
890
1001
|
const pairFields = AT1_SCHEDULE_12_PAIRS.flatMap((p) => [{
|
|
891
|
-
line: id$
|
|
1002
|
+
line: id$9(p.federal),
|
|
892
1003
|
caption: `${p.label} — federal`,
|
|
893
1004
|
kind: "money",
|
|
894
1005
|
role: "input",
|
|
895
1006
|
section: p.section,
|
|
896
1007
|
requirement: "conditional",
|
|
897
|
-
note: `Report only if it differs from the Alberta figure at ${id$
|
|
1008
|
+
note: `Report only if it differs from the Alberta figure at ${id$9(p.alberta)}.${p.note ? ` ${p.note}` : ""}`
|
|
898
1009
|
}, {
|
|
899
|
-
line: id$
|
|
1010
|
+
line: id$9(p.alberta),
|
|
900
1011
|
caption: `${p.label} — Alberta`,
|
|
901
1012
|
kind: "money",
|
|
902
1013
|
role: "input",
|
|
903
1014
|
section: p.section,
|
|
904
1015
|
requirement: "conditional",
|
|
905
|
-
note: `Report only if it differs from the federal figure at ${id$
|
|
1016
|
+
note: `Report only if it differs from the federal figure at ${id$9(p.federal)}.${p.note ? ` ${p.note}` : ""}`
|
|
906
1017
|
}]);
|
|
907
1018
|
const AT1_SCHEDULE_12 = {
|
|
908
1019
|
id: "AT1SCH12",
|
|
@@ -911,10 +1022,10 @@ const AT1_SCHEDULE_12 = {
|
|
|
911
1022
|
title: "Alberta income/loss reconciliation",
|
|
912
1023
|
scheme: "tra-line-item-id",
|
|
913
1024
|
taxYears: { from: 2024 },
|
|
914
|
-
sections: SECTIONS$
|
|
1025
|
+
sections: SECTIONS$30,
|
|
915
1026
|
fields: [...SINGLES.map(({ field, ...rest }) => ({
|
|
916
1027
|
...rest,
|
|
917
|
-
line: id$
|
|
1028
|
+
line: id$9(field)
|
|
918
1029
|
})), ...pairFields].sort((a, b) => a.line.localeCompare(b.line)),
|
|
919
1030
|
provenance: {
|
|
920
1031
|
document: "research/field-maps/at1-schedules-12-21.md",
|
|
@@ -925,7 +1036,7 @@ const AT1_SCHEDULE_12 = {
|
|
|
925
1036
|
//#endregion
|
|
926
1037
|
//#region src/t2/at1/forms/schedule13.ts
|
|
927
1038
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
928
|
-
const id$
|
|
1039
|
+
const id$8 = (field, occurrence = 1) => `013${field}${String(occurrence).padStart(3, "0")}`;
|
|
929
1040
|
const AT1_SCHEDULE_13_COLUMNS = [
|
|
930
1041
|
{
|
|
931
1042
|
column: 1,
|
|
@@ -1082,10 +1193,10 @@ const AT1_SCHEDULE_13 = {
|
|
|
1082
1193
|
fields: [
|
|
1083
1194
|
...RETURN_LEVEL.map(({ field, ...rest }) => ({
|
|
1084
1195
|
...rest,
|
|
1085
|
-
line: id$
|
|
1196
|
+
line: id$8(field)
|
|
1086
1197
|
})),
|
|
1087
1198
|
...AT1_SCHEDULE_13_COLUMNS.filter((c) => c.line).map((c) => ({
|
|
1088
|
-
line: id$
|
|
1199
|
+
line: id$8(c.line),
|
|
1089
1200
|
caption: c.caption,
|
|
1090
1201
|
kind: c.column === 1 ? "code" : c.column === 20 ? "rate" : "money",
|
|
1091
1202
|
role: "input",
|
|
@@ -1093,7 +1204,7 @@ const AT1_SCHEDULE_13 = {
|
|
|
1093
1204
|
...c.note ? { note: c.note } : {}
|
|
1094
1205
|
})),
|
|
1095
1206
|
...TOTALS$3.map((t) => ({
|
|
1096
|
-
line: id$
|
|
1207
|
+
line: id$8(t.field),
|
|
1097
1208
|
caption: t.caption,
|
|
1098
1209
|
kind: "money",
|
|
1099
1210
|
role: "total",
|
|
@@ -1114,7 +1225,7 @@ const AT1_SCHEDULE_13 = {
|
|
|
1114
1225
|
//#endregion
|
|
1115
1226
|
//#region src/t2/at1/forms/schedule16.ts
|
|
1116
1227
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
1117
|
-
const id$
|
|
1228
|
+
const id$7 = (field, occurrence = 1) => `016${field}${String(occurrence).padStart(3, "0")}`;
|
|
1118
1229
|
const AT1_SCHEDULE_16 = {
|
|
1119
1230
|
id: "AT1SCH16",
|
|
1120
1231
|
program: "AT1",
|
|
@@ -1244,7 +1355,7 @@ const AT1_SCHEDULE_16 = {
|
|
|
1244
1355
|
}
|
|
1245
1356
|
].map(({ field, ...rest }) => ({
|
|
1246
1357
|
...rest,
|
|
1247
|
-
line: id$
|
|
1358
|
+
line: id$7(field)
|
|
1248
1359
|
})),
|
|
1249
1360
|
provenance: {
|
|
1250
1361
|
document: "research/field-maps/at1-schedules-16-17.md",
|
|
@@ -1257,7 +1368,7 @@ const AT1_SCHEDULE_16_CARRYFORWARD_LINE = "016022001";
|
|
|
1257
1368
|
//#endregion
|
|
1258
1369
|
//#region src/t2/at1/forms/schedule17.ts
|
|
1259
1370
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
1260
|
-
const id$
|
|
1371
|
+
const id$6 = (field, occurrence = 1) => `017${field}${String(occurrence).padStart(3, "0")}`;
|
|
1261
1372
|
const AT1_SCHEDULE_17_RESERVES = [
|
|
1262
1373
|
{
|
|
1263
1374
|
label: "Doubtful debts",
|
|
@@ -1314,7 +1425,7 @@ const AT1_SCHEDULE_17_RESERVES = [
|
|
|
1314
1425
|
federalOpening: "230"
|
|
1315
1426
|
}
|
|
1316
1427
|
];
|
|
1317
|
-
const SECTIONS$
|
|
1428
|
+
const SECTIONS$27 = [{
|
|
1318
1429
|
id: "reserves",
|
|
1319
1430
|
title: "Continuity of reserves",
|
|
1320
1431
|
description: "Eight reserve kinds. Six mirror federal Schedule 13; policy reserves and bank reserves exist only on the Alberta form."
|
|
@@ -1331,7 +1442,7 @@ const COLUMNS$1 = [
|
|
|
1331
1442
|
const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([key, columnCaption]) => {
|
|
1332
1443
|
const isOpening = key === "opening";
|
|
1333
1444
|
return {
|
|
1334
|
-
line: id$
|
|
1445
|
+
line: id$6(r[key]),
|
|
1335
1446
|
caption: `${r.label} — ${columnCaption}`,
|
|
1336
1447
|
kind: "money",
|
|
1337
1448
|
role: "input",
|
|
@@ -1347,21 +1458,21 @@ const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([
|
|
|
1347
1458
|
}));
|
|
1348
1459
|
const TOTALS$2 = [
|
|
1349
1460
|
{
|
|
1350
|
-
line: id$
|
|
1461
|
+
line: id$6("021"),
|
|
1351
1462
|
caption: "Total of the opening balances",
|
|
1352
1463
|
kind: "money",
|
|
1353
1464
|
role: "total",
|
|
1354
1465
|
section: "totals"
|
|
1355
1466
|
},
|
|
1356
1467
|
{
|
|
1357
|
-
line: id$
|
|
1468
|
+
line: id$6("051"),
|
|
1358
1469
|
caption: "Total of the transfers on wind-up or amalgamation",
|
|
1359
1470
|
kind: "money",
|
|
1360
1471
|
role: "total",
|
|
1361
1472
|
section: "totals"
|
|
1362
1473
|
},
|
|
1363
1474
|
{
|
|
1364
|
-
line: id$
|
|
1475
|
+
line: id$6("081"),
|
|
1365
1476
|
caption: "Total of the closing balances",
|
|
1366
1477
|
kind: "money",
|
|
1367
1478
|
role: "total",
|
|
@@ -1373,7 +1484,7 @@ const TOTALS$2 = [
|
|
|
1373
1484
|
note: "This year’s reserves, deducted from Alberta income."
|
|
1374
1485
|
},
|
|
1375
1486
|
{
|
|
1376
|
-
line: id$
|
|
1487
|
+
line: id$6("091"),
|
|
1377
1488
|
caption: "Total of line 021 plus line 051",
|
|
1378
1489
|
kind: "money",
|
|
1379
1490
|
role: "computed",
|
|
@@ -1392,7 +1503,7 @@ const AT1_SCHEDULE_17 = {
|
|
|
1392
1503
|
title: "Alberta continuity of reserves",
|
|
1393
1504
|
scheme: "tra-line-item-id",
|
|
1394
1505
|
taxYears: { from: 2024 },
|
|
1395
|
-
sections: SECTIONS$
|
|
1506
|
+
sections: SECTIONS$27,
|
|
1396
1507
|
fields: [...reserveFields$1, ...TOTALS$2].sort((a, b) => a.line.localeCompare(b.line)),
|
|
1397
1508
|
provenance: {
|
|
1398
1509
|
document: "research/field-maps/at1-schedules-16-17.md",
|
|
@@ -1403,7 +1514,7 @@ const AT1_SCHEDULE_17 = {
|
|
|
1403
1514
|
//#endregion
|
|
1404
1515
|
//#region src/t2/at1/forms/schedule18.ts
|
|
1405
1516
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
1406
|
-
const id$
|
|
1517
|
+
const id$5 = (field, occurrence = 1) => `018${field}${String(occurrence).padStart(3, "0")}`;
|
|
1407
1518
|
const AT1_SCHEDULE_18_CATEGORIES = [
|
|
1408
1519
|
{
|
|
1409
1520
|
label: "Shares",
|
|
@@ -1450,7 +1561,7 @@ const AT1_SCHEDULE_18_CATEGORIES = [
|
|
|
1450
1561
|
lossRestricted: true
|
|
1451
1562
|
}
|
|
1452
1563
|
];
|
|
1453
|
-
const SECTIONS$
|
|
1564
|
+
const SECTIONS$26 = [
|
|
1454
1565
|
{
|
|
1455
1566
|
id: "dispositions",
|
|
1456
1567
|
title: "Dispositions by category",
|
|
@@ -1475,7 +1586,7 @@ const COLUMNS = [
|
|
|
1475
1586
|
["gainOrLoss", "D — gain or (loss)"]
|
|
1476
1587
|
];
|
|
1477
1588
|
const categoryFields = AT1_SCHEDULE_18_CATEGORIES.flatMap((c) => COLUMNS.map(([key, columnCaption]) => ({
|
|
1478
|
-
line: id$
|
|
1589
|
+
line: id$5(c[key]),
|
|
1479
1590
|
caption: `${c.label} — ${columnCaption}`,
|
|
1480
1591
|
kind: "money",
|
|
1481
1592
|
role: key === "gainOrLoss" ? "computed" : "input",
|
|
@@ -1698,10 +1809,10 @@ const AT1_SCHEDULE_18 = {
|
|
|
1698
1809
|
title: "Alberta dispositions of capital property",
|
|
1699
1810
|
scheme: "tra-line-item-id",
|
|
1700
1811
|
taxYears: { from: 2024 },
|
|
1701
|
-
sections: SECTIONS$
|
|
1812
|
+
sections: SECTIONS$26,
|
|
1702
1813
|
fields: [...categoryFields, ...REST.map(({ field, ...rest }) => ({
|
|
1703
1814
|
...rest,
|
|
1704
|
-
line: id$
|
|
1815
|
+
line: id$5(field)
|
|
1705
1816
|
}))].sort((a, b) => a.line.localeCompare(b.line)),
|
|
1706
1817
|
provenance: {
|
|
1707
1818
|
document: "research/field-maps/at1-schedule-18-dispositions.md",
|
|
@@ -1714,7 +1825,7 @@ const AT1_SECTION_34_2_GROSS_UP = 2;
|
|
|
1714
1825
|
//#endregion
|
|
1715
1826
|
//#region src/t2/at1/forms/schedule20.ts
|
|
1716
1827
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
1717
|
-
const id$
|
|
1828
|
+
const id$4 = (field, occurrence = 1) => `020${field}${String(occurrence).padStart(3, "0")}`;
|
|
1718
1829
|
/** The ten rows every donation continuity runs through, in form order. */
|
|
1719
1830
|
const CONTINUITY_ROWS = [
|
|
1720
1831
|
["opening", "Balance at the end of the previous year"],
|
|
@@ -1759,7 +1870,7 @@ const AT1_SCHEDULE_20_POOLS = [{
|
|
|
1759
1870
|
closing: "078"
|
|
1760
1871
|
}
|
|
1761
1872
|
}];
|
|
1762
|
-
const SECTIONS$
|
|
1873
|
+
const SECTIONS$25 = [
|
|
1763
1874
|
{
|
|
1764
1875
|
id: "charitable",
|
|
1765
1876
|
title: "Area A — Charitable donations",
|
|
@@ -1830,11 +1941,11 @@ const AT1_SCHEDULE_20 = {
|
|
|
1830
1941
|
title: "Alberta charitable donations and gifts",
|
|
1831
1942
|
scheme: "tra-line-item-id",
|
|
1832
1943
|
taxYears: { from: 2024 },
|
|
1833
|
-
sections: SECTIONS$
|
|
1944
|
+
sections: SECTIONS$25,
|
|
1834
1945
|
fields: [...AT1_SCHEDULE_20_POOLS.flatMap((pool) => CONTINUITY_ROWS.map(([key, caption]) => {
|
|
1835
1946
|
const computed = key === "beginning" || key === "subtotal" || key === "available" || key === "closing";
|
|
1836
1947
|
return {
|
|
1837
|
-
line: id$
|
|
1948
|
+
line: id$4(pool.lines[key]),
|
|
1838
1949
|
caption: `${pool.label} — ${caption}`,
|
|
1839
1950
|
kind: "money",
|
|
1840
1951
|
role: computed ? "computed" : "input",
|
|
@@ -1843,7 +1954,7 @@ const AT1_SCHEDULE_20 = {
|
|
|
1843
1954
|
};
|
|
1844
1955
|
})), ...MAXIMUM.map(({ field, ...rest }) => ({
|
|
1845
1956
|
...rest,
|
|
1846
|
-
line: id$
|
|
1957
|
+
line: id$4(field)
|
|
1847
1958
|
}))].sort((a, b) => a.line.localeCompare(b.line)),
|
|
1848
1959
|
provenance: {
|
|
1849
1960
|
document: "research/validation/auratax/2026-08-07-cca-classes/README.md",
|
|
@@ -1863,7 +1974,7 @@ const AT1_DONATION_CARRYFORWARD_YEARS = 5;
|
|
|
1863
1974
|
//#endregion
|
|
1864
1975
|
//#region src/t2/at1/forms/schedule21.ts
|
|
1865
1976
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
1866
|
-
const id$
|
|
1977
|
+
const id$3 = (field, occurrence = 1) => `021${field}${String(occurrence).padStart(3, "0")}`;
|
|
1867
1978
|
const AT1_SCHEDULE_21_POOLS = [
|
|
1868
1979
|
{
|
|
1869
1980
|
key: "non-capital",
|
|
@@ -1935,7 +2046,7 @@ const AT1_SCHEDULE_21_POOLS = [
|
|
|
1935
2046
|
closing: "125"
|
|
1936
2047
|
}
|
|
1937
2048
|
];
|
|
1938
|
-
const SECTIONS$
|
|
2049
|
+
const SECTIONS$24 = [{
|
|
1939
2050
|
id: "current-year",
|
|
1940
2051
|
title: "Part 1 — Calculating the current-year non-capital loss",
|
|
1941
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."
|
|
@@ -2054,7 +2165,7 @@ const continuityFields = AT1_SCHEDULE_21_POOLS.flatMap((pool) => CONTINUITY_ORDE
|
|
|
2054
2165
|
const isClosing = k === "closing";
|
|
2055
2166
|
const isCarryBack = k === "carryBack";
|
|
2056
2167
|
return {
|
|
2057
|
-
line: id$
|
|
2168
|
+
line: id$3(pool[k]),
|
|
2058
2169
|
caption: `${pool.label} — ${CONTINUITY_CAPTIONS[k]}`,
|
|
2059
2170
|
kind: "money",
|
|
2060
2171
|
role: isClosing ? "computed" : "input",
|
|
@@ -2074,10 +2185,10 @@ const AT1_SCHEDULE_21 = {
|
|
|
2074
2185
|
title: "Current-year loss and continuity of losses",
|
|
2075
2186
|
scheme: "tra-line-item-id",
|
|
2076
2187
|
taxYears: { from: 2024 },
|
|
2077
|
-
sections: SECTIONS$
|
|
2188
|
+
sections: SECTIONS$24,
|
|
2078
2189
|
fields: [...PART_1.map(({ field, ...rest }) => ({
|
|
2079
2190
|
...rest,
|
|
2080
|
-
line: id$
|
|
2191
|
+
line: id$3(field)
|
|
2081
2192
|
})), ...continuityFields].sort((a, b) => a.line.localeCompare(b.line)),
|
|
2082
2193
|
provenance: {
|
|
2083
2194
|
document: "research/field-maps/at1-schedules-12-21.md",
|
|
@@ -2088,7 +2199,7 @@ const AT1_SCHEDULE_21 = {
|
|
|
2088
2199
|
//#endregion
|
|
2089
2200
|
//#region src/t2/at1/forms/schedule29.ts
|
|
2090
2201
|
/** `SSSFFFOOO` — schedule, field, occurrence. */
|
|
2091
|
-
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")}`;
|
|
2092
2203
|
const AT1_SCHEDULE_29 = {
|
|
2093
2204
|
id: "AT1SCH29",
|
|
2094
2205
|
program: "AT1",
|
|
@@ -2097,6 +2208,12 @@ const AT1_SCHEDULE_29 = {
|
|
|
2097
2208
|
scheme: "tra-line-item-id",
|
|
2098
2209
|
taxYears: { from: 2021 },
|
|
2099
2210
|
sections: [
|
|
2211
|
+
{
|
|
2212
|
+
id: "eligible",
|
|
2213
|
+
title: "Eligible Expenditures for IEG Purposes",
|
|
2214
|
+
page: 1,
|
|
2215
|
+
description: "Derives line 031, the \"eligible expenditures\" figure everything else on this schedule is built from, off federal T661 line 559 or 557 (see the field notes below) and the AT4970 attachment’s own totals."
|
|
2216
|
+
},
|
|
2100
2217
|
{
|
|
2101
2218
|
id: "limit",
|
|
2102
2219
|
title: "Maximum Expenditure Limit",
|
|
@@ -2117,6 +2234,70 @@ const AT1_SCHEDULE_29 = {
|
|
|
2117
2234
|
}
|
|
2118
2235
|
],
|
|
2119
2236
|
fields: [
|
|
2237
|
+
{
|
|
2238
|
+
field: "003",
|
|
2239
|
+
caption: "Federal amount of qualified/current SR&ED expenditures",
|
|
2240
|
+
kind: "money",
|
|
2241
|
+
role: "input",
|
|
2242
|
+
section: "eligible",
|
|
2243
|
+
note: "Federal T661 line 559 for a taxation year ending on or before 2024-12-15; T661 line 557 (a DIFFERENT federal figure — current, not qualified, SR&ED expenditures) for a taxation year ending on or after 2024-12-16. See `iegT661SourceLine` in `schedule29-eligible-expenditures.ts`."
|
|
2244
|
+
},
|
|
2245
|
+
{
|
|
2246
|
+
field: "005",
|
|
2247
|
+
caption: "Portion of line 003 carried out in Alberta",
|
|
2248
|
+
kind: "money",
|
|
2249
|
+
role: "input",
|
|
2250
|
+
section: "eligible",
|
|
2251
|
+
note: "Normally the AT4970 attachment’s own total of column 105 across every project."
|
|
2252
|
+
},
|
|
2253
|
+
{
|
|
2254
|
+
field: "007",
|
|
2255
|
+
caption: "Deduct: federal prescribed proxy amount included in the Alberta portion",
|
|
2256
|
+
kind: "money",
|
|
2257
|
+
role: "input",
|
|
2258
|
+
section: "eligible",
|
|
2259
|
+
note: "Normally AT4970’s total of column 111."
|
|
2260
|
+
},
|
|
2261
|
+
{
|
|
2262
|
+
field: "009",
|
|
2263
|
+
caption: "Add: Alberta proxy amount",
|
|
2264
|
+
kind: "money",
|
|
2265
|
+
role: "input",
|
|
2266
|
+
section: "eligible",
|
|
2267
|
+
note: "Normally AT4970’s total of column 113."
|
|
2268
|
+
},
|
|
2269
|
+
{
|
|
2270
|
+
field: "011",
|
|
2271
|
+
caption: "Add: IEG that reduced the federal expenditure in the taxation year",
|
|
2272
|
+
kind: "money",
|
|
2273
|
+
role: "input",
|
|
2274
|
+
section: "eligible",
|
|
2275
|
+
note: "Zero for a first-time current-year claim reported on the pre-deduction federal figures — only non-zero when line 003 was already reported net of this year’s own IEG (see the Step 1 / Step 2 note in schedule29-eligible-expenditures.ts)."
|
|
2276
|
+
},
|
|
2277
|
+
{
|
|
2278
|
+
field: "025",
|
|
2279
|
+
caption: "Add: repayment of government assistance or a contract payment",
|
|
2280
|
+
kind: "money",
|
|
2281
|
+
role: "input",
|
|
2282
|
+
section: "eligible",
|
|
2283
|
+
note: "The Alberta portion of EITHER a repayment of government assistance (other than an IEG) OR a contract payment — two independent triggers — relating to amounts in line 005 from the current year or ANY PRECEDING taxation year."
|
|
2284
|
+
},
|
|
2285
|
+
{
|
|
2286
|
+
field: "031",
|
|
2287
|
+
caption: "Total: Eligible Expenditures for Alberta Purposes",
|
|
2288
|
+
kind: "money",
|
|
2289
|
+
role: "total",
|
|
2290
|
+
section: "eligible",
|
|
2291
|
+
note: "005 − 007 + 009 + 011 + 025. Feeds every other \"eligible expenditures\" figure on this schedule."
|
|
2292
|
+
},
|
|
2293
|
+
{
|
|
2294
|
+
field: "040",
|
|
2295
|
+
caption: "Primary field of science or technology",
|
|
2296
|
+
kind: "code",
|
|
2297
|
+
role: "input",
|
|
2298
|
+
section: "eligible",
|
|
2299
|
+
note: "1 = Natural and formal sciences, 2 = Engineering and technology, 3 = Medical and health sciences, 4 = Agricultural sciences."
|
|
2300
|
+
},
|
|
2120
2301
|
{
|
|
2121
2302
|
field: "100",
|
|
2122
2303
|
caption: "Associated with one or more corporations for IEG purposes?",
|
|
@@ -2423,7 +2604,7 @@ const AT1_SCHEDULE_29 = {
|
|
|
2423
2604
|
}
|
|
2424
2605
|
].map(({ field, ...rest }) => ({
|
|
2425
2606
|
...rest,
|
|
2426
|
-
line: id(field)
|
|
2607
|
+
line: id$2(field)
|
|
2427
2608
|
})).sort((a, b) => a.line.localeCompare(b.line)),
|
|
2428
2609
|
provenance: {
|
|
2429
2610
|
document: "research/sources/tra-forms/pdf/AT1SCH29-innovation-employment-grant-TRA14637.pdf",
|
|
@@ -2443,7 +2624,7 @@ const AT1_IEG_PRIOR_YEARS = 2;
|
|
|
2443
2624
|
const AT1_IEG_JACKET_LINE = "000129001";
|
|
2444
2625
|
//#endregion
|
|
2445
2626
|
//#region src/t2/co17/forms/co17.ts
|
|
2446
|
-
const SECTIONS$
|
|
2627
|
+
const SECTIONS$22 = [
|
|
2447
2628
|
{
|
|
2448
2629
|
id: "identity",
|
|
2449
2630
|
title: "1 — Renseignements sur l'identité de la société"
|
|
@@ -2479,7 +2660,7 @@ const CO17_RETURN = {
|
|
|
2479
2660
|
title: "CO-17 — Déclaration de revenus des sociétés",
|
|
2480
2661
|
scheme: "rq-box",
|
|
2481
2662
|
taxYears: { from: 2025 },
|
|
2482
|
-
sections: SECTIONS$
|
|
2663
|
+
sections: SECTIONS$22,
|
|
2483
2664
|
fields: [
|
|
2484
2665
|
F$5("01a", "Numéro d'entreprise du Québec (NEQ)", "identity", { kind: "text" }),
|
|
2485
2666
|
F$5("01b", "Numéro d'identification", "identity", { kind: "text" }),
|
|
@@ -2541,7 +2722,7 @@ const CO17_QUEBEC_PROPORTION_BOX = "421";
|
|
|
2541
2722
|
const CO17_TAX_PAYABLE_BOX = "425";
|
|
2542
2723
|
//#endregion
|
|
2543
2724
|
//#region src/t2/forms/jacket.ts
|
|
2544
|
-
const SECTIONS$
|
|
2725
|
+
const SECTIONS$21 = [
|
|
2545
2726
|
{
|
|
2546
2727
|
id: "taxable-income",
|
|
2547
2728
|
title: "Taxable income",
|
|
@@ -2597,7 +2778,7 @@ const T2_JACKET = {
|
|
|
2597
2778
|
title: "T2 Corporation Income Tax Return",
|
|
2598
2779
|
scheme: "cra-line",
|
|
2599
2780
|
taxYears: { from: 2025 },
|
|
2600
|
-
sections: SECTIONS$
|
|
2781
|
+
sections: SECTIONS$21,
|
|
2601
2782
|
fields: [
|
|
2602
2783
|
F$4("300", "Net income or (loss) for income tax purposes", "taxable-income", {
|
|
2603
2784
|
role: "carried-in",
|
|
@@ -3533,7 +3714,7 @@ new Map(SCHEDULE_1_CAPTIONS.map((c) => [c.line, c]));
|
|
|
3533
3714
|
* Captions come from `./generated/schedule1.captions.ts`, which is produced from
|
|
3534
3715
|
* the CRA document. This module adds only what the paper does not say.
|
|
3535
3716
|
*/
|
|
3536
|
-
const SECTIONS$
|
|
3717
|
+
const SECTIONS$20 = [
|
|
3537
3718
|
{
|
|
3538
3719
|
id: "add-1",
|
|
3539
3720
|
title: "Add",
|
|
@@ -3662,7 +3843,7 @@ const T2_SCHEDULE_1 = {
|
|
|
3662
3843
|
title: "Net income (loss) for income tax purposes",
|
|
3663
3844
|
scheme: "cra-line",
|
|
3664
3845
|
taxYears: { from: 2023 },
|
|
3665
|
-
sections: SECTIONS$
|
|
3846
|
+
sections: SECTIONS$20,
|
|
3666
3847
|
fields: SCHEDULE_1_CAPTIONS.map((c) => {
|
|
3667
3848
|
const section = sectionFor(Number(c.line));
|
|
3668
3849
|
const side = section.startsWith("add") ? "add" : "deduct";
|
|
@@ -3702,7 +3883,7 @@ const SCHEDULE_1_LINE_BY_NUMBER = indexByLine(T2_SCHEDULE_1);
|
|
|
3702
3883
|
const SCHEDULE_1_LINES = T2_SCHEDULE_1.fields;
|
|
3703
3884
|
//#endregion
|
|
3704
3885
|
//#region src/t2/forms/schedule2.ts
|
|
3705
|
-
const SECTIONS$
|
|
3886
|
+
const SECTIONS$19 = [
|
|
3706
3887
|
{
|
|
3707
3888
|
id: "charitable",
|
|
3708
3889
|
title: "Part 2 — Charitable donations",
|
|
@@ -3734,7 +3915,7 @@ const T2_SCHEDULE_2 = {
|
|
|
3734
3915
|
title: "Charitable donations and gifts",
|
|
3735
3916
|
scheme: "cra-line",
|
|
3736
3917
|
taxYears: { from: 2023 },
|
|
3737
|
-
sections: SECTIONS$
|
|
3918
|
+
sections: SECTIONS$19,
|
|
3738
3919
|
fields: [
|
|
3739
3920
|
F$3("239", "Charitable donations expired after five tax years", "charitable"),
|
|
3740
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." }),
|
|
@@ -3768,7 +3949,7 @@ const SCHEDULE_2_CARRYFORWARD_YEARS = {
|
|
|
3768
3949
|
};
|
|
3769
3950
|
//#endregion
|
|
3770
3951
|
//#region src/t2/forms/schedule3.ts
|
|
3771
|
-
const SECTIONS$
|
|
3952
|
+
const SECTIONS$18 = [{
|
|
3772
3953
|
id: "received",
|
|
3773
3954
|
title: "Part 1 — Dividends received in the tax year",
|
|
3774
3955
|
description: "One row per payer. Columns B, C, D, I and J are completed only when the payer is connected."
|
|
@@ -3792,7 +3973,7 @@ const T2_SCHEDULE_3 = {
|
|
|
3792
3973
|
title: "Dividends received, taxable dividends paid, and Part IV tax calculation",
|
|
3793
3974
|
scheme: "cra-line",
|
|
3794
3975
|
taxYears: { from: 2023 },
|
|
3795
|
-
sections: SECTIONS$
|
|
3976
|
+
sections: SECTIONS$18,
|
|
3796
3977
|
fields: [
|
|
3797
3978
|
F$2("200", "Name of payer corporation from which the corporation received the dividend", "received", { kind: "text" }),
|
|
3798
3979
|
F$2("205", "Enter 1 if the payer corporation is connected", "received", {
|
|
@@ -4772,7 +4953,7 @@ const SCHEDULE_6_GRIDS = [
|
|
|
4772
4953
|
]
|
|
4773
4954
|
}
|
|
4774
4955
|
];
|
|
4775
|
-
const SECTIONS$
|
|
4956
|
+
const SECTIONS$15 = [
|
|
4776
4957
|
{
|
|
4777
4958
|
id: "designation",
|
|
4778
4959
|
title: "Designation under paragraph 111(4)(e)"
|
|
@@ -4904,7 +5085,7 @@ const T2_SCHEDULE_6 = {
|
|
|
4904
5085
|
title: "Summary of dispositions of capital property",
|
|
4905
5086
|
scheme: "cra-line",
|
|
4906
5087
|
taxYears: { from: 2023 },
|
|
4907
|
-
sections: SECTIONS$
|
|
5088
|
+
sections: SECTIONS$15,
|
|
4908
5089
|
fields: [...gridFields, ...SUMMARY].sort((a, b) => Number(a.line) - Number(b.line)),
|
|
4909
5090
|
provenance: {
|
|
4910
5091
|
document: "research/sources/cra-forms/T2SCH06-capital-gains.pdf",
|
|
@@ -5320,7 +5501,7 @@ const SCHEDULE_8_COLUMNS = [
|
|
|
5320
5501
|
caption: "UCC at the end of the year"
|
|
5321
5502
|
}
|
|
5322
5503
|
];
|
|
5323
|
-
const SECTIONS$
|
|
5504
|
+
const SECTIONS$13 = [{
|
|
5324
5505
|
id: "cca-grid",
|
|
5325
5506
|
title: "Capital cost allowance by class",
|
|
5326
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."
|
|
@@ -5352,7 +5533,7 @@ const T2_SCHEDULE_8 = {
|
|
|
5352
5533
|
title: "Capital cost allowance",
|
|
5353
5534
|
scheme: "cra-line",
|
|
5354
5535
|
taxYears: { from: 2026 },
|
|
5355
|
-
sections: SECTIONS$
|
|
5536
|
+
sections: SECTIONS$13,
|
|
5356
5537
|
fields: SCHEDULE_8_COLUMNS.filter((c) => c.line).map((c) => {
|
|
5357
5538
|
const dest = DESTINATIONS[c.line];
|
|
5358
5539
|
return {
|
|
@@ -5416,7 +5597,7 @@ const SCHEDULE_13_RESERVE_ROWS = [
|
|
|
5416
5597
|
closing: "240"
|
|
5417
5598
|
}
|
|
5418
5599
|
];
|
|
5419
|
-
const SECTIONS$
|
|
5600
|
+
const SECTIONS$12 = [{
|
|
5420
5601
|
id: "capital-gains",
|
|
5421
5602
|
title: "Part 1 — Capital gains reserves",
|
|
5422
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."
|
|
@@ -5555,7 +5736,7 @@ const T2_SCHEDULE_13 = {
|
|
|
5555
5736
|
title: "Continuity of reserves",
|
|
5556
5737
|
scheme: "cra-line",
|
|
5557
5738
|
taxYears: { from: 2011 },
|
|
5558
|
-
sections: SECTIONS$
|
|
5739
|
+
sections: SECTIONS$12,
|
|
5559
5740
|
fields: [
|
|
5560
5741
|
...COLUMN_HEADS,
|
|
5561
5742
|
...reserveFields,
|
|
@@ -5569,7 +5750,7 @@ const T2_SCHEDULE_13 = {
|
|
|
5569
5750
|
};
|
|
5570
5751
|
//#endregion
|
|
5571
5752
|
//#region src/t2/forms/schedule21.ts
|
|
5572
|
-
const SECTIONS$
|
|
5753
|
+
const SECTIONS$11 = [
|
|
5573
5754
|
{
|
|
5574
5755
|
id: "non-business",
|
|
5575
5756
|
title: "Part 1 — Federal foreign non-business income tax credit",
|
|
@@ -5600,7 +5781,7 @@ const T2_SCHEDULE_21 = {
|
|
|
5600
5781
|
title: "Federal and provincial or territorial foreign income tax credits and federal logging tax credit",
|
|
5601
5782
|
scheme: "cra-line",
|
|
5602
5783
|
taxYears: { from: 2023 },
|
|
5603
|
-
sections: SECTIONS$
|
|
5784
|
+
sections: SECTIONS$11,
|
|
5604
5785
|
fields: [
|
|
5605
5786
|
F$1("100", "Country of source of foreign non-business income", "non-business", { kind: "text" }),
|
|
5606
5787
|
F$1("110", "Net foreign non-business income earned in the year", "non-business"),
|
|
@@ -5756,7 +5937,7 @@ const T2_SCHEDULE_23 = {
|
|
|
5756
5937
|
const SCHEDULE_23_GROUP_BUSINESS_LIMIT = 5e5;
|
|
5757
5938
|
//#endregion
|
|
5758
5939
|
//#region src/t2/forms/schedule24.ts
|
|
5759
|
-
const SECTIONS$
|
|
5940
|
+
const SECTIONS$9 = [
|
|
5760
5941
|
{
|
|
5761
5942
|
id: "operation",
|
|
5762
5943
|
title: "Part 1 — Type of operation",
|
|
@@ -5787,7 +5968,7 @@ const T2_SCHEDULE_24 = {
|
|
|
5787
5968
|
title: "First-time filer after incorporation, amalgamation, or wind-up of a subsidiary",
|
|
5788
5969
|
scheme: "cra-line",
|
|
5789
5970
|
taxYears: { from: 2011 },
|
|
5790
|
-
sections: SECTIONS$
|
|
5971
|
+
sections: SECTIONS$9,
|
|
5791
5972
|
fields: [
|
|
5792
5973
|
F("100", "Type of operation that applies to the corporation", "operation", {
|
|
5793
5974
|
kind: "code",
|
|
@@ -7981,6 +8162,208 @@ const T2_SCHEDULE_130 = {
|
|
|
7981
8162
|
}
|
|
7982
8163
|
};
|
|
7983
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
|
|
7984
8367
|
//#region src/forms/registry.ts
|
|
7985
8368
|
/**
|
|
7986
8369
|
* THE FORM REGISTRY — every form definition, and the links between them.
|
|
@@ -8024,14 +8407,81 @@ const FORMS = [
|
|
|
8024
8407
|
T2_SCHEDULE_53,
|
|
8025
8408
|
T2_SCHEDULE_55,
|
|
8026
8409
|
AT1_JACKET,
|
|
8410
|
+
AT1_SCHEDULE_3,
|
|
8027
8411
|
AT1_SCHEDULE_12,
|
|
8028
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
|
+
},
|
|
8029
8478
|
AT1_SCHEDULE_16,
|
|
8030
8479
|
AT1_SCHEDULE_17,
|
|
8031
8480
|
AT1_SCHEDULE_18,
|
|
8032
8481
|
AT1_SCHEDULE_20,
|
|
8033
8482
|
AT1_SCHEDULE_21,
|
|
8034
|
-
AT1_SCHEDULE_29
|
|
8483
|
+
AT1_SCHEDULE_29,
|
|
8484
|
+
AT4970
|
|
8035
8485
|
];
|
|
8036
8486
|
const BY_ID = new Map(FORMS.map((f) => [f.id, f]));
|
|
8037
8487
|
/** A form definition by id — `'T2SCH1'`, `'AT1SCH12'`. */
|
|
@@ -8078,4 +8528,4 @@ function findBrokenLinks() {
|
|
|
8078
8528
|
return problems;
|
|
8079
8529
|
}
|
|
8080
8530
|
//#endregion
|
|
8081
|
-
export { SCHEDULE_2_CARRYFORWARD_YEARS as $, SCHEDULE_8_CCA_LINE as A, AT1_DONATION_CARRYFORWARD_YEARS as At, SCHEDULE_5_JURISDICTIONS as B, AT1_SCHEDULE_13 as Bt, SCHEDULE_23_GROUP_BUSINESS_LIMIT as C, AT1_IEG_ENHANCED_RATE as Ct, T2_SCHEDULE_21 as D, AT1_SCHEDULE_29 as Dt, SCHEDULE_21_NON_BUSINESS_CREDIT_LINE as E, AT1_IEG_PRIOR_YEARS as Et, SCHEDULE_7_ADJUSTED_AII_LINE as F, AT1_SECTION_34_2_GROSS_UP as Ft, SCHEDULE_4_LPP_CARRYFORWARD_YEARS as G, AT1_BALANCE_LINE as Gt, SCHEDULE_5_SALARIES_OFFSET as H, AT1_SCHEDULE_12 as Ht, SCHEDULE_7_PASSIVE_INCOME_THRESHOLD as I, AT1_SCHEDULE_17 as It, UnclassifiedLineError as J, SCHEDULE_4_NON_CAPITAL_CARRYFORWARD_YEARS as K, AT1_JACKET as Kt, T2_SCHEDULE_7 as L, AT1_SCHEDULE_17_RESERVES as Lt, SCHEDULE_8_RECAPTURE_LINE as M, AT1_SCHEDULE_20_POOLS as Mt, SCHEDULE_8_TERMINAL_LOSS_LINE as N, AT1_SCHEDULE_18 as Nt, SCHEDULE_13_RESERVE_ROWS as O, AT1_SCHEDULE_21 as Ot, T2_SCHEDULE_8 as P, AT1_SCHEDULE_18_CATEGORIES as Pt, T2_SCHEDULE_3 as Q, SCHEDULE_6_GRIDS as R, AT1_SCHEDULE_16 as Rt, T2_SCHEDULE_24 as S, AT1_IEG_BASE_RATE as St, SCHEDULE_21_BUSINESS_CREDIT_LINE as T, AT1_IEG_MAX_EXPENDITURE as Tt, T2_SCHEDULE_5 as U, AT1_SCHEDULE_12_PAIRS as Ut, SCHEDULE_5_REVENUE_OFFSET as V, AT1_SCHEDULE_13_COLUMNS as Vt, SCHEDULE_4_CARRYBACK_YEARS as W, AT1_BALANCE_CREDIT_LINES as Wt, SCHEDULE_3_ELIGIBLE_PAID_LINE as X, buildFields as Y, SCHEDULE_3_TAXABLE_PAID_LINE as Z, T2_SCHEDULE_33 as _, T2_TOTAL_TAX_PAYABLE_LINE as _t, getField as a, SCHEDULE_1_TOTAL_DEDUCTIONS_LINE as at, T2_SCHEDULE_31 as b, CO17_TAXABLE_INCOME_BOX as bt, T2_SCHEDULE_55 as c, indexByLine as ct, T2_SCHEDULE_53 as d, validateFormDefinition as dt, SCHEDULE_2_CHARITABLE_CURRENT_LINE as et, SCHEDULE_50_DISCLOSURE_THRESHOLD as f, T2_BASE_PART_I_RATE as ft, SCHEDULE_33_TAXABLE_CAPITAL_IN_CANADA_LINE as g, T2_TAXABLE_INCOME_LINE as gt, T2_SCHEDULE_43 as h, T2_SMALL_BUSINESS_DEDUCTION_RATE as ht, formsForProgram as i, SCHEDULE_1_TOTAL_ADDITIONS_LINE as it, SCHEDULE_8_COLUMNS as j, AT1_SCHEDULE_20 as jt, T2_SCHEDULE_13 as k, AT1_SCHEDULE_21_POOLS as kt, SCHEDULE_53_CLOSING_GRIP_LINE as l, inputFields as lt, SCHEDULE_43_DIVIDEND_ALLOWANCE as m, T2_NET_INCOME_FOR_TAX_LINE as mt, describeLine as n, SCHEDULE_1_LINES as nt, getForm as o, T2_SCHEDULE_1 as ot, T2_SCHEDULE_50 as p, T2_JACKET as pt, T2_SCHEDULE_4 as q, AT1_TAX_PAYABLE_LINE as qt, findBrokenLinks as r, SCHEDULE_1_LINE_BY_NUMBER as rt, T2_SCHEDULE_130 as s, fieldsInSection as st, FORMS as t, T2_SCHEDULE_2 as tt, SCHEDULE_53_GENERAL_RATE_FACTOR as u, isEnterableLine as ut, SCHEDULE_31_ENHANCED_SRED_RATE as v, CO17_QUEBEC_PROPORTION_BOX as vt, T2_SCHEDULE_23 as w, AT1_IEG_JACKET_LINE as wt, SCHEDULE_24_OPERATION_TYPE_LINE as x, CO17_TAX_PAYABLE_BOX as xt, SCHEDULE_31_GENERAL_SRED_RATE as y, CO17_RETURN as yt, T2_SCHEDULE_6 as z, AT1_SCHEDULE_16_CARRYFORWARD_LINE as zt };
|
|
8531
|
+
export { SCHEDULE_2_CARRYFORWARD_YEARS as $, SCHEDULE_8_CCA_LINE as A, AT1_DONATION_CARRYFORWARD_YEARS as At, SCHEDULE_5_JURISDICTIONS as B, AT1_SCHEDULE_13 as Bt, SCHEDULE_23_GROUP_BUSINESS_LIMIT as C, AT1_IEG_ENHANCED_RATE as Ct, T2_SCHEDULE_21 as D, AT1_SCHEDULE_29 as Dt, SCHEDULE_21_NON_BUSINESS_CREDIT_LINE as E, AT1_IEG_PRIOR_YEARS as Et, SCHEDULE_7_ADJUSTED_AII_LINE as F, AT1_SECTION_34_2_GROSS_UP as Ft, SCHEDULE_4_LPP_CARRYFORWARD_YEARS as G, AT1_BALANCE_LINE as Gt, SCHEDULE_5_SALARIES_OFFSET as H, AT1_SCHEDULE_12 as Ht, SCHEDULE_7_PASSIVE_INCOME_THRESHOLD as I, AT1_SCHEDULE_17 as It, UnclassifiedLineError as J, AT4970 as Jt, SCHEDULE_4_NON_CAPITAL_CARRYFORWARD_YEARS as K, AT1_JACKET as Kt, T2_SCHEDULE_7 as L, AT1_SCHEDULE_17_RESERVES as Lt, SCHEDULE_8_RECAPTURE_LINE as M, AT1_SCHEDULE_20_POOLS as Mt, SCHEDULE_8_TERMINAL_LOSS_LINE as N, AT1_SCHEDULE_18 as Nt, SCHEDULE_13_RESERVE_ROWS as O, AT1_SCHEDULE_21 as Ot, T2_SCHEDULE_8 as P, AT1_SCHEDULE_18_CATEGORIES as Pt, T2_SCHEDULE_3 as Q, SCHEDULE_6_GRIDS as R, AT1_SCHEDULE_16 as Rt, T2_SCHEDULE_24 as S, AT1_IEG_BASE_RATE as St, SCHEDULE_21_BUSINESS_CREDIT_LINE as T, AT1_IEG_MAX_EXPENDITURE as Tt, T2_SCHEDULE_5 as U, AT1_SCHEDULE_12_PAIRS as Ut, SCHEDULE_5_REVENUE_OFFSET as V, AT1_SCHEDULE_13_COLUMNS as Vt, SCHEDULE_4_CARRYBACK_YEARS as W, AT1_BALANCE_CREDIT_LINES as Wt, SCHEDULE_3_ELIGIBLE_PAID_LINE as X, buildFields as Y, AT4970_JURISDICTIONS as Yt, SCHEDULE_3_TAXABLE_PAID_LINE as Z, T2_SCHEDULE_33 as _, T2_TOTAL_TAX_PAYABLE_LINE as _t, getField as a, SCHEDULE_1_TOTAL_DEDUCTIONS_LINE as at, T2_SCHEDULE_31 as b, CO17_TAXABLE_INCOME_BOX as bt, T2_SCHEDULE_55 as c, indexByLine as ct, T2_SCHEDULE_53 as d, validateFormDefinition as dt, SCHEDULE_2_CHARITABLE_CURRENT_LINE as et, SCHEDULE_50_DISCLOSURE_THRESHOLD as f, T2_BASE_PART_I_RATE as ft, SCHEDULE_33_TAXABLE_CAPITAL_IN_CANADA_LINE as g, T2_TAXABLE_INCOME_LINE as gt, T2_SCHEDULE_43 as h, T2_SMALL_BUSINESS_DEDUCTION_RATE as ht, formsForProgram as i, SCHEDULE_1_TOTAL_ADDITIONS_LINE as it, SCHEDULE_8_COLUMNS as j, AT1_SCHEDULE_20 as jt, T2_SCHEDULE_13 as k, AT1_SCHEDULE_21_POOLS as kt, SCHEDULE_53_CLOSING_GRIP_LINE as l, inputFields as lt, SCHEDULE_43_DIVIDEND_ALLOWANCE as m, T2_NET_INCOME_FOR_TAX_LINE as mt, describeLine as n, SCHEDULE_1_LINES as nt, getForm as o, T2_SCHEDULE_1 as ot, T2_SCHEDULE_50 as p, T2_JACKET as pt, T2_SCHEDULE_4 as q, AT1_TAX_PAYABLE_LINE as qt, findBrokenLinks as r, SCHEDULE_1_LINE_BY_NUMBER as rt, T2_SCHEDULE_130 as s, fieldsInSection as st, FORMS as t, T2_SCHEDULE_2 as tt, SCHEDULE_53_GENERAL_RATE_FACTOR as u, isEnterableLine as ut, SCHEDULE_31_ENHANCED_SRED_RATE as v, CO17_QUEBEC_PROPORTION_BOX as vt, T2_SCHEDULE_23 as w, AT1_IEG_JACKET_LINE as wt, SCHEDULE_24_OPERATION_TYPE_LINE as x, CO17_TAX_PAYABLE_BOX as xt, SCHEDULE_31_GENERAL_SRED_RATE as y, CO17_RETURN as yt, T2_SCHEDULE_6 as z, AT1_SCHEDULE_16_CARRYFORWARD_LINE as zt };
|