@classytic/ca-tax 0.0.5 → 0.0.13

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$21 = (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$21(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$20 = (field, occurrence = 1) => `000${field}${String(occurrence).padStart(3, "0")}`;
569
+ const SECTIONS$41 = [
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$41,
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$20(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,469 @@ 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$20("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$20("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$20("081"),
731
+ id$20("082"),
732
+ id$20("085"),
733
+ id$20("086"),
734
+ id$20("087")
735
735
  ]);
736
736
  //#endregion
737
+ //#region src/t2/at1/forms/schedule1.ts
738
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
739
+ const id$19 = (field, occurrence = 1) => `001${field}${String(occurrence).padStart(3, "0")}`;
740
+ const AT1_SCHEDULE_1 = {
741
+ id: "AT1SCH1",
742
+ program: "AT1",
743
+ schedule: "001",
744
+ title: "Alberta Small Business Deduction",
745
+ scheme: "tra-line-item-id",
746
+ taxYears: { from: 2023 },
747
+ sections: [
748
+ {
749
+ id: "association",
750
+ title: "Association for purposes of the Alberta Small Business Deduction"
751
+ },
752
+ {
753
+ id: "deduction",
754
+ title: "Alberta Small Business Deduction",
755
+ description: "Two income bases (active business income and taxable income, each less the royalty tax deduction) floored at nil. Line 015 (the base amount and the calculation table that arrives at the deduction itself) is not modelled; see this module's own doc comment."
756
+ },
757
+ {
758
+ id: "agreement",
759
+ title: "Area A — Agreement Among Associated Corporations",
760
+ description: "Filed only when line 001 is Yes. One occurrence per associated corporation, the corporation filing this return first. The allocation at 045 must use the SAME percentage split as federal Schedule 23 (fed 023350), applied against Alberta's own base amount — see this module's doc comment on the $200,000 vs $500,000 discrepancy this engine has not resolved."
761
+ }
762
+ ],
763
+ fields: [
764
+ {
765
+ field: "001",
766
+ caption: "Is the corporation associated with one or more Canadian-controlled private corporations?",
767
+ kind: "flag",
768
+ role: "carried-in",
769
+ section: "association",
770
+ requirement: "mandatory",
771
+ from: {
772
+ form: "T2SCH23",
773
+ line: "",
774
+ note: "The federal associated-group list — the same corporations, the same ITA test."
775
+ }
776
+ },
777
+ {
778
+ field: "003",
779
+ caption: "Income from active businesses carried on in Canada, as reported on the T2 line 400 or Schedule 12, line 106",
780
+ kind: "money",
781
+ role: "carried-in",
782
+ section: "deduction",
783
+ requirement: "mandatory",
784
+ from: {
785
+ form: "T2",
786
+ line: "400"
787
+ }
788
+ },
789
+ {
790
+ field: "005",
791
+ caption: "Deduct: Royalty Tax Deduction for the year (Schedule 5, line 021)",
792
+ kind: "money",
793
+ role: "input",
794
+ section: "deduction",
795
+ requirement: "optional",
796
+ note: "Oil and gas only. The same figure filed again at 011, against the second income base."
797
+ },
798
+ {
799
+ field: "007",
800
+ caption: "Balance — line 003 minus line 005 (if negative, enter \"0\")",
801
+ kind: "money",
802
+ role: "computed",
803
+ section: "deduction",
804
+ requirement: "mandatory"
805
+ },
806
+ {
807
+ field: "009",
808
+ caption: "Taxable Income (less adjustments for foreign tax credits and amounts included in Amount Taxable in Alberta not subject to Alberta corporate income tax)",
809
+ kind: "money",
810
+ role: "carried-in",
811
+ section: "deduction",
812
+ requirement: "mandatory",
813
+ from: {
814
+ form: "AT1",
815
+ line: "000062001",
816
+ note: "Alberta taxable income, adjusted per the Guide."
817
+ }
818
+ },
819
+ {
820
+ field: "011",
821
+ caption: "Deduct: Royalty Tax Deduction for the year (Schedule 5, line 021)",
822
+ kind: "money",
823
+ role: "input",
824
+ section: "deduction",
825
+ requirement: "optional",
826
+ note: "The same figure as line 005, filed against this second income base."
827
+ },
828
+ {
829
+ field: "013",
830
+ caption: "Balance — line 009 minus line 011 (if negative, enter \"0\")",
831
+ kind: "money",
832
+ role: "computed",
833
+ section: "deduction",
834
+ requirement: "mandatory"
835
+ },
836
+ {
837
+ field: "041",
838
+ caption: "Name of the Associated Canadian-controlled Private Corporation",
839
+ kind: "text",
840
+ role: "input",
841
+ section: "agreement",
842
+ requirement: "mandatory",
843
+ note: "One occurrence per associated corp, this corporation first. Required whenever line 001 is Yes."
844
+ },
845
+ {
846
+ field: "043",
847
+ caption: "Corporate Account Number",
848
+ kind: "code",
849
+ role: "input",
850
+ section: "agreement",
851
+ requirement: "optional",
852
+ note: "Alberta CAN. Must equal the same corporation's fed 023100 (federal Schedule 23) — not enforced here."
853
+ },
854
+ {
855
+ field: "045",
856
+ caption: "Allocation of the Base Amount",
857
+ kind: "money",
858
+ role: "input",
859
+ section: "agreement",
860
+ requirement: "mandatory",
861
+ note: "Required whenever 041 has a value. Total across all occurrences is capped by the group's base amount."
862
+ }
863
+ ].map(({ field, ...rest }) => ({
864
+ ...rest,
865
+ line: id$19(field)
866
+ })),
867
+ provenance: {
868
+ document: "research/sources/tra-forms/pdf/AT1SCH01-small-business-deduction-TRA11723.pdf",
869
+ retrieved: "2026-08-30",
870
+ revision: "TRA11723 (AT2) Rev. 2023-04 — lines 001-013 and 041/043/045 only, see this module's doc comment"
871
+ }
872
+ };
873
+ //#endregion
874
+ //#region src/t2/at1/forms/schedule2.ts
875
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
876
+ const id$18 = (field, occurrence = 1) => `002${field}${String(occurrence).padStart(3, "0")}`;
877
+ const AT1_SCHEDULE_2 = {
878
+ id: "AT1SCH2",
879
+ program: "AT1",
880
+ schedule: "002",
881
+ title: "Alberta Income Allocation Factor",
882
+ scheme: "tra-line-item-id",
883
+ taxYears: { from: 2023 },
884
+ sections: [{
885
+ id: "general",
886
+ title: "Area A — General Allocation Formula (ITA Reg 402)",
887
+ description: "The common case: taken straight from the federal Schedule 5. Area B's seven industry-specific formulas (insurance, banking, airlines, railways, ship operators, trust & loan, divided businesses) are not modelled — see this module's doc comment."
888
+ }],
889
+ fields: [
890
+ {
891
+ field: "002",
892
+ caption: "Salaries and wages paid in Alberta",
893
+ kind: "money",
894
+ role: "carried-in",
895
+ section: "general",
896
+ requirement: "mandatory",
897
+ from: {
898
+ form: "T2SCH5",
899
+ line: "",
900
+ note: "The Alberta row of the federal establishments allocation."
901
+ }
902
+ },
903
+ {
904
+ field: "004",
905
+ caption: "Total salaries and wages paid in all jurisdictions",
906
+ kind: "money",
907
+ role: "carried-in",
908
+ section: "general",
909
+ requirement: "mandatory",
910
+ from: {
911
+ form: "T2SCH5",
912
+ line: "",
913
+ note: "Every jurisdiction's row, summed."
914
+ }
915
+ },
916
+ {
917
+ field: "006",
918
+ caption: "Gross revenue in Alberta",
919
+ kind: "money",
920
+ role: "carried-in",
921
+ section: "general",
922
+ requirement: "mandatory",
923
+ from: {
924
+ form: "T2SCH5",
925
+ line: "",
926
+ note: "The Alberta row of the federal establishments allocation."
927
+ }
928
+ },
929
+ {
930
+ field: "008",
931
+ caption: "Gross revenue in all jurisdictions",
932
+ kind: "money",
933
+ role: "carried-in",
934
+ section: "general",
935
+ requirement: "mandatory",
936
+ from: {
937
+ form: "T2SCH5",
938
+ line: "",
939
+ note: "Every jurisdiction's row, summed."
940
+ }
941
+ }
942
+ ].map(({ field, ...rest }) => ({
943
+ ...rest,
944
+ line: id$18(field)
945
+ })),
946
+ provenance: {
947
+ document: "research/sources/tra-forms/pdf/AT1SCH02-income-allocation-factor-TRA11724.pdf",
948
+ retrieved: "2026-08-30",
949
+ revision: "TRA11724 (AT271) Rev. 2023-10 — Area A only, see this module's doc comment"
950
+ }
951
+ };
952
+ //#endregion
953
+ //#region src/t2/at1/forms/schedule10.ts
954
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
955
+ const id$17 = (field, occurrence = 1) => `010${field}${String(occurrence).padStart(3, "0")}`;
956
+ const AT1_SCHEDULE_10 = {
957
+ id: "AT1SCH10",
958
+ program: "AT1",
959
+ schedule: "010",
960
+ title: "Alberta Loss Carry-Back Application",
961
+ scheme: "tra-line-item-id",
962
+ taxYears: { from: 2024 },
963
+ sections: [{
964
+ id: "carryback",
965
+ title: "Application of current year losses",
966
+ description: "Non-capital, farm, one checkbox-selected \"other loss\" column (restricted farm or listed personal property), and capital."
967
+ }],
968
+ fields: [
969
+ {
970
+ field: "002",
971
+ caption: "Amount of current year non-capital loss available for carry-back",
972
+ kind: "money",
973
+ role: "computed",
974
+ section: "carryback",
975
+ requirement: "mandatory"
976
+ },
977
+ {
978
+ field: "003",
979
+ caption: "1st preceding taxation year ending",
980
+ kind: "date",
981
+ role: "input",
982
+ section: "carryback",
983
+ requirement: "conditional"
984
+ },
985
+ {
986
+ field: "004",
987
+ caption: "Non-capital loss carried back — 1st preceding taxation year",
988
+ kind: "money",
989
+ role: "input",
990
+ section: "carryback",
991
+ requirement: "conditional"
992
+ },
993
+ {
994
+ field: "005",
995
+ caption: "2nd preceding taxation year ending",
996
+ kind: "date",
997
+ role: "input",
998
+ section: "carryback",
999
+ requirement: "conditional"
1000
+ },
1001
+ {
1002
+ field: "006",
1003
+ caption: "Non-capital loss carried back — 2nd preceding taxation year",
1004
+ kind: "money",
1005
+ role: "input",
1006
+ section: "carryback",
1007
+ requirement: "conditional"
1008
+ },
1009
+ {
1010
+ field: "007",
1011
+ caption: "3rd preceding taxation year ending",
1012
+ kind: "date",
1013
+ role: "input",
1014
+ section: "carryback",
1015
+ requirement: "conditional"
1016
+ },
1017
+ {
1018
+ field: "008",
1019
+ caption: "Non-capital loss carried back — 3rd preceding taxation year",
1020
+ kind: "money",
1021
+ role: "input",
1022
+ section: "carryback",
1023
+ requirement: "conditional"
1024
+ },
1025
+ {
1026
+ field: "010",
1027
+ caption: "Balance of current year non-capital loss available for carry forward",
1028
+ kind: "money",
1029
+ role: "computed",
1030
+ section: "carryback",
1031
+ requirement: "mandatory",
1032
+ note: "Line 002 minus the total carried back."
1033
+ },
1034
+ {
1035
+ field: "012",
1036
+ caption: "Amount of current year farm loss available for carry-back",
1037
+ kind: "money",
1038
+ role: "computed",
1039
+ section: "carryback",
1040
+ requirement: "mandatory"
1041
+ },
1042
+ {
1043
+ field: "014",
1044
+ caption: "Farm loss carried back — 1st preceding taxation year",
1045
+ kind: "money",
1046
+ role: "input",
1047
+ section: "carryback",
1048
+ requirement: "conditional"
1049
+ },
1050
+ {
1051
+ field: "016",
1052
+ caption: "Farm loss carried back — 2nd preceding taxation year",
1053
+ kind: "money",
1054
+ role: "input",
1055
+ section: "carryback",
1056
+ requirement: "conditional"
1057
+ },
1058
+ {
1059
+ field: "018",
1060
+ caption: "Farm loss carried back — 3rd preceding taxation year",
1061
+ kind: "money",
1062
+ role: "input",
1063
+ section: "carryback",
1064
+ requirement: "conditional"
1065
+ },
1066
+ {
1067
+ field: "020",
1068
+ caption: "Balance of current year farm loss available for carry forward",
1069
+ kind: "money",
1070
+ role: "computed",
1071
+ section: "carryback",
1072
+ requirement: "mandatory",
1073
+ note: "Line 012 minus the total carried back."
1074
+ },
1075
+ {
1076
+ field: "023",
1077
+ caption: "Other Losses: Restricted Farm (check box)",
1078
+ kind: "flag",
1079
+ role: "computed",
1080
+ section: "carryback",
1081
+ requirement: "mandatory",
1082
+ note: "Always filed once Schedule 10 is filed at all — 1 (Yes) or 2 (No). NOT mutually exclusive with line 025; both may be checked."
1083
+ },
1084
+ {
1085
+ field: "025",
1086
+ caption: "Other Losses: Listed Personal Property (check box)",
1087
+ kind: "flag",
1088
+ role: "computed",
1089
+ section: "carryback",
1090
+ requirement: "mandatory",
1091
+ note: "Always filed once Schedule 10 is filed at all — 1 (Yes) or 2 (No). NOT mutually exclusive with line 023; both may be checked."
1092
+ },
1093
+ {
1094
+ field: "032",
1095
+ caption: "Amount of current year \"other\" loss available for carry-back",
1096
+ kind: "money",
1097
+ role: "computed",
1098
+ section: "carryback",
1099
+ requirement: "conditional",
1100
+ note: "Restricted farm and/or listed personal property, per 023/025 — the SUM of both when both are checked, not one or the other."
1101
+ },
1102
+ {
1103
+ field: "034",
1104
+ caption: "\"Other\" loss carried back — 1st preceding taxation year",
1105
+ kind: "money",
1106
+ role: "input",
1107
+ section: "carryback",
1108
+ requirement: "conditional"
1109
+ },
1110
+ {
1111
+ field: "036",
1112
+ caption: "\"Other\" loss carried back — 2nd preceding taxation year",
1113
+ kind: "money",
1114
+ role: "input",
1115
+ section: "carryback",
1116
+ requirement: "conditional"
1117
+ },
1118
+ {
1119
+ field: "038",
1120
+ caption: "\"Other\" loss carried back — 3rd preceding taxation year",
1121
+ kind: "money",
1122
+ role: "input",
1123
+ section: "carryback",
1124
+ requirement: "conditional"
1125
+ },
1126
+ {
1127
+ field: "040",
1128
+ caption: "Balance of current year \"other\" loss available for carry forward",
1129
+ kind: "money",
1130
+ role: "computed",
1131
+ section: "carryback",
1132
+ requirement: "mandatory",
1133
+ note: "Line 032 minus the total carried back."
1134
+ },
1135
+ {
1136
+ field: "042",
1137
+ caption: "Gross amount of current year capital loss available for carry-back",
1138
+ kind: "money",
1139
+ role: "computed",
1140
+ section: "carryback",
1141
+ requirement: "mandatory"
1142
+ },
1143
+ {
1144
+ field: "044",
1145
+ caption: "Capital loss applied — 1st preceding taxation year (at the inclusion rate)",
1146
+ kind: "money",
1147
+ role: "computed",
1148
+ section: "carryback",
1149
+ requirement: "conditional",
1150
+ note: "The gross carry-back request × the inclusion rate — not the raw entered amount."
1151
+ },
1152
+ {
1153
+ field: "046",
1154
+ caption: "Capital loss applied — 2nd preceding taxation year (at the inclusion rate)",
1155
+ kind: "money",
1156
+ role: "computed",
1157
+ section: "carryback",
1158
+ requirement: "conditional",
1159
+ note: "The gross carry-back request × the inclusion rate — not the raw entered amount."
1160
+ },
1161
+ {
1162
+ field: "048",
1163
+ caption: "Capital loss applied — 3rd preceding taxation year (at the inclusion rate)",
1164
+ kind: "money",
1165
+ role: "computed",
1166
+ section: "carryback",
1167
+ requirement: "conditional",
1168
+ note: "The gross carry-back request × the inclusion rate — not the raw entered amount."
1169
+ }
1170
+ ].map(({ field, ...rest }) => ({
1171
+ ...rest,
1172
+ line: id$17(field)
1173
+ })),
1174
+ provenance: {
1175
+ document: "research/sources/tra-forms/pdf/AT1SCH10-loss-carryback-TRA11731.pdf",
1176
+ retrieved: "2026-08-30",
1177
+ revision: "TRA11731 (AT293) Rev. 2025-12 — non-capital, farm, other-loss and capital; see this module's doc comment"
1178
+ }
1179
+ };
1180
+ //#endregion
737
1181
  //#region src/t2/at1/forms/schedule12.ts
738
1182
  /** `SSSFFFOOO` — schedule, field, occurrence. */
739
- const id$7 = (field, occurrence = 1) => `012${field}${String(occurrence).padStart(3, "0")}`;
740
- const SECTIONS$28 = [{
1183
+ const id$16 = (field, occurrence = 1) => `012${field}${String(occurrence).padStart(3, "0")}`;
1184
+ const SECTIONS$37 = [{
741
1185
  id: "area-a",
742
1186
  title: "Area A — net income for Alberta corporate income tax purposes",
743
1187
  description: "Reconciling items between federal and Alberta net income. Report a pair only where the two figures differ."
@@ -999,21 +1443,21 @@ const SINGLES = [
999
1443
  }
1000
1444
  ];
1001
1445
  const pairFields = AT1_SCHEDULE_12_PAIRS.flatMap((p) => [{
1002
- line: id$7(p.federal),
1446
+ line: id$16(p.federal),
1003
1447
  caption: `${p.label} — federal`,
1004
1448
  kind: "money",
1005
1449
  role: "input",
1006
1450
  section: p.section,
1007
1451
  requirement: "conditional",
1008
- note: `Report only if it differs from the Alberta figure at ${id$7(p.alberta)}.${p.note ? ` ${p.note}` : ""}`
1452
+ note: `Report only if it differs from the Alberta figure at ${id$16(p.alberta)}.${p.note ? ` ${p.note}` : ""}`
1009
1453
  }, {
1010
- line: id$7(p.alberta),
1454
+ line: id$16(p.alberta),
1011
1455
  caption: `${p.label} — Alberta`,
1012
1456
  kind: "money",
1013
1457
  role: "input",
1014
1458
  section: p.section,
1015
1459
  requirement: "conditional",
1016
- note: `Report only if it differs from the federal figure at ${id$7(p.federal)}.${p.note ? ` ${p.note}` : ""}`
1460
+ note: `Report only if it differs from the federal figure at ${id$16(p.federal)}.${p.note ? ` ${p.note}` : ""}`
1017
1461
  }]);
1018
1462
  const AT1_SCHEDULE_12 = {
1019
1463
  id: "AT1SCH12",
@@ -1022,10 +1466,10 @@ const AT1_SCHEDULE_12 = {
1022
1466
  title: "Alberta income/loss reconciliation",
1023
1467
  scheme: "tra-line-item-id",
1024
1468
  taxYears: { from: 2024 },
1025
- sections: SECTIONS$28,
1469
+ sections: SECTIONS$37,
1026
1470
  fields: [...SINGLES.map(({ field, ...rest }) => ({
1027
1471
  ...rest,
1028
- line: id$7(field)
1472
+ line: id$16(field)
1029
1473
  })), ...pairFields].sort((a, b) => a.line.localeCompare(b.line)),
1030
1474
  provenance: {
1031
1475
  document: "research/field-maps/at1-schedules-12-21.md",
@@ -1036,7 +1480,7 @@ const AT1_SCHEDULE_12 = {
1036
1480
  //#endregion
1037
1481
  //#region src/t2/at1/forms/schedule13.ts
1038
1482
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1039
- const id$6 = (field, occurrence = 1) => `013${field}${String(occurrence).padStart(3, "0")}`;
1483
+ const id$15 = (field, occurrence = 1) => `013${field}${String(occurrence).padStart(3, "0")}`;
1040
1484
  const AT1_SCHEDULE_13_COLUMNS = [
1041
1485
  {
1042
1486
  column: 1,
@@ -1193,10 +1637,10 @@ const AT1_SCHEDULE_13 = {
1193
1637
  fields: [
1194
1638
  ...RETURN_LEVEL.map(({ field, ...rest }) => ({
1195
1639
  ...rest,
1196
- line: id$6(field)
1640
+ line: id$15(field)
1197
1641
  })),
1198
1642
  ...AT1_SCHEDULE_13_COLUMNS.filter((c) => c.line).map((c) => ({
1199
- line: id$6(c.line),
1643
+ line: id$15(c.line),
1200
1644
  caption: c.caption,
1201
1645
  kind: c.column === 1 ? "code" : c.column === 20 ? "rate" : "money",
1202
1646
  role: "input",
@@ -1204,7 +1648,7 @@ const AT1_SCHEDULE_13 = {
1204
1648
  ...c.note ? { note: c.note } : {}
1205
1649
  })),
1206
1650
  ...TOTALS$3.map((t) => ({
1207
- line: id$6(t.field),
1651
+ line: id$15(t.field),
1208
1652
  caption: t.caption,
1209
1653
  kind: "money",
1210
1654
  role: "total",
@@ -1225,7 +1669,7 @@ const AT1_SCHEDULE_13 = {
1225
1669
  //#endregion
1226
1670
  //#region src/t2/at1/forms/schedule16.ts
1227
1671
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1228
- const id$5 = (field, occurrence = 1) => `016${field}${String(occurrence).padStart(3, "0")}`;
1672
+ const id$14 = (field, occurrence = 1) => `016${field}${String(occurrence).padStart(3, "0")}`;
1229
1673
  const AT1_SCHEDULE_16 = {
1230
1674
  id: "AT1SCH16",
1231
1675
  program: "AT1",
@@ -1355,7 +1799,7 @@ const AT1_SCHEDULE_16 = {
1355
1799
  }
1356
1800
  ].map(({ field, ...rest }) => ({
1357
1801
  ...rest,
1358
- line: id$5(field)
1802
+ line: id$14(field)
1359
1803
  })),
1360
1804
  provenance: {
1361
1805
  document: "research/field-maps/at1-schedules-16-17.md",
@@ -1368,7 +1812,7 @@ const AT1_SCHEDULE_16_CARRYFORWARD_LINE = "016022001";
1368
1812
  //#endregion
1369
1813
  //#region src/t2/at1/forms/schedule17.ts
1370
1814
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1371
- const id$4 = (field, occurrence = 1) => `017${field}${String(occurrence).padStart(3, "0")}`;
1815
+ const id$13 = (field, occurrence = 1) => `017${field}${String(occurrence).padStart(3, "0")}`;
1372
1816
  const AT1_SCHEDULE_17_RESERVES = [
1373
1817
  {
1374
1818
  label: "Doubtful debts",
@@ -1425,7 +1869,7 @@ const AT1_SCHEDULE_17_RESERVES = [
1425
1869
  federalOpening: "230"
1426
1870
  }
1427
1871
  ];
1428
- const SECTIONS$25 = [{
1872
+ const SECTIONS$34 = [{
1429
1873
  id: "reserves",
1430
1874
  title: "Continuity of reserves",
1431
1875
  description: "Eight reserve kinds. Six mirror federal Schedule 13; policy reserves and bank reserves exist only on the Alberta form."
@@ -1442,7 +1886,7 @@ const COLUMNS$1 = [
1442
1886
  const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([key, columnCaption]) => {
1443
1887
  const isOpening = key === "opening";
1444
1888
  return {
1445
- line: id$4(r[key]),
1889
+ line: id$13(r[key]),
1446
1890
  caption: `${r.label} — ${columnCaption}`,
1447
1891
  kind: "money",
1448
1892
  role: "input",
@@ -1458,21 +1902,21 @@ const reserveFields$1 = AT1_SCHEDULE_17_RESERVES.flatMap((r) => COLUMNS$1.map(([
1458
1902
  }));
1459
1903
  const TOTALS$2 = [
1460
1904
  {
1461
- line: id$4("021"),
1905
+ line: id$13("021"),
1462
1906
  caption: "Total of the opening balances",
1463
1907
  kind: "money",
1464
1908
  role: "total",
1465
1909
  section: "totals"
1466
1910
  },
1467
1911
  {
1468
- line: id$4("051"),
1912
+ line: id$13("051"),
1469
1913
  caption: "Total of the transfers on wind-up or amalgamation",
1470
1914
  kind: "money",
1471
1915
  role: "total",
1472
1916
  section: "totals"
1473
1917
  },
1474
1918
  {
1475
- line: id$4("081"),
1919
+ line: id$13("081"),
1476
1920
  caption: "Total of the closing balances",
1477
1921
  kind: "money",
1478
1922
  role: "total",
@@ -1484,7 +1928,7 @@ const TOTALS$2 = [
1484
1928
  note: "This year’s reserves, deducted from Alberta income."
1485
1929
  },
1486
1930
  {
1487
- line: id$4("091"),
1931
+ line: id$13("091"),
1488
1932
  caption: "Total of line 021 plus line 051",
1489
1933
  kind: "money",
1490
1934
  role: "computed",
@@ -1503,7 +1947,7 @@ const AT1_SCHEDULE_17 = {
1503
1947
  title: "Alberta continuity of reserves",
1504
1948
  scheme: "tra-line-item-id",
1505
1949
  taxYears: { from: 2024 },
1506
- sections: SECTIONS$25,
1950
+ sections: SECTIONS$34,
1507
1951
  fields: [...reserveFields$1, ...TOTALS$2].sort((a, b) => a.line.localeCompare(b.line)),
1508
1952
  provenance: {
1509
1953
  document: "research/field-maps/at1-schedules-16-17.md",
@@ -1514,7 +1958,7 @@ const AT1_SCHEDULE_17 = {
1514
1958
  //#endregion
1515
1959
  //#region src/t2/at1/forms/schedule18.ts
1516
1960
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1517
- const id$3 = (field, occurrence = 1) => `018${field}${String(occurrence).padStart(3, "0")}`;
1961
+ const id$12 = (field, occurrence = 1) => `018${field}${String(occurrence).padStart(3, "0")}`;
1518
1962
  const AT1_SCHEDULE_18_CATEGORIES = [
1519
1963
  {
1520
1964
  label: "Shares",
@@ -1561,7 +2005,7 @@ const AT1_SCHEDULE_18_CATEGORIES = [
1561
2005
  lossRestricted: true
1562
2006
  }
1563
2007
  ];
1564
- const SECTIONS$24 = [
2008
+ const SECTIONS$33 = [
1565
2009
  {
1566
2010
  id: "dispositions",
1567
2011
  title: "Dispositions by category",
@@ -1586,7 +2030,7 @@ const COLUMNS = [
1586
2030
  ["gainOrLoss", "D — gain or (loss)"]
1587
2031
  ];
1588
2032
  const categoryFields = AT1_SCHEDULE_18_CATEGORIES.flatMap((c) => COLUMNS.map(([key, columnCaption]) => ({
1589
- line: id$3(c[key]),
2033
+ line: id$12(c[key]),
1590
2034
  caption: `${c.label} — ${columnCaption}`,
1591
2035
  kind: "money",
1592
2036
  role: key === "gainOrLoss" ? "computed" : "input",
@@ -1809,10 +2253,10 @@ const AT1_SCHEDULE_18 = {
1809
2253
  title: "Alberta dispositions of capital property",
1810
2254
  scheme: "tra-line-item-id",
1811
2255
  taxYears: { from: 2024 },
1812
- sections: SECTIONS$24,
2256
+ sections: SECTIONS$33,
1813
2257
  fields: [...categoryFields, ...REST.map(({ field, ...rest }) => ({
1814
2258
  ...rest,
1815
- line: id$3(field)
2259
+ line: id$12(field)
1816
2260
  }))].sort((a, b) => a.line.localeCompare(b.line)),
1817
2261
  provenance: {
1818
2262
  document: "research/field-maps/at1-schedule-18-dispositions.md",
@@ -1825,8 +2269,13 @@ const AT1_SECTION_34_2_GROSS_UP = 2;
1825
2269
  //#endregion
1826
2270
  //#region src/t2/at1/forms/schedule20.ts
1827
2271
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1828
- const id$2 = (field, occurrence = 1) => `020${field}${String(occurrence).padStart(3, "0")}`;
1829
- /** The ten rows every donation continuity runs through, in form order. */
2272
+ const id$11 = (field, occurrence = 1) => `020${field}${String(occurrence).padStart(3, "0")}`;
2273
+ /**
2274
+ * The ten rows every donation continuity runs through, in form order.
2275
+ * Exported so a UI-side paper Form View can build the same per-pool grid
2276
+ * without re-typing the captions — see `schedule21.ts`'s `CONTINUITY_ORDER`
2277
+ * for the identical pattern.
2278
+ */
1830
2279
  const CONTINUITY_ROWS = [
1831
2280
  ["opening", "Balance at the end of the previous year"],
1832
2281
  ["expired", "Deduct: expired"],
@@ -1870,7 +2319,7 @@ const AT1_SCHEDULE_20_POOLS = [{
1870
2319
  closing: "078"
1871
2320
  }
1872
2321
  }];
1873
- const SECTIONS$23 = [
2322
+ const SECTIONS$32 = [
1874
2323
  {
1875
2324
  id: "charitable",
1876
2325
  title: "Area A — Charitable donations",
@@ -1885,6 +2334,11 @@ const SECTIONS$23 = [
1885
2334
  id: "maximum",
1886
2335
  title: "Area B — Maximum deduction",
1887
2336
  description: "75% of income, plus 25% of the taxable capital gain and recapture on gifted capital property. Alberta does have this ceiling."
2337
+ },
2338
+ {
2339
+ id: "carryforward",
2340
+ title: "Carryforward available, by category",
2341
+ description: "Filed only when at least one category figure is entered. Charitable donations (002-018) and gifts (062-078) are each ONE combined continuity on this schedule; this block reports how much of the gifts pool's closing balance belongs to each of the three federal source categories, plus the medicine-gift deduction (ITA s.110.1(1)(a.1)), which nothing else on this schedule models at all."
1888
2342
  }
1889
2343
  ];
1890
2344
  const MAXIMUM = [
@@ -1896,6 +2350,41 @@ const MAXIMUM = [
1896
2350
  section: "maximum",
1897
2351
  note: "75% of Alberta net income for the year."
1898
2352
  },
2353
+ {
2354
+ field: "032",
2355
+ caption: "Taxable capital gains arising on gifts of capital property",
2356
+ kind: "money",
2357
+ role: "input",
2358
+ section: "maximum"
2359
+ },
2360
+ {
2361
+ field: "034",
2362
+ caption: "Taxable capital gain on deemed gifts of non-qualifying securities (ITA subsection 40(1.01))",
2363
+ kind: "money",
2364
+ role: "input",
2365
+ section: "maximum"
2366
+ },
2367
+ {
2368
+ field: "036",
2369
+ caption: "Recapture of capital cost allowance on charitable gifts",
2370
+ kind: "money",
2371
+ role: "input",
2372
+ section: "maximum"
2373
+ },
2374
+ {
2375
+ field: "038",
2376
+ caption: "Proceeds of disposition, less outlays and expenses",
2377
+ kind: "money",
2378
+ role: "input",
2379
+ section: "maximum"
2380
+ },
2381
+ {
2382
+ field: "040",
2383
+ caption: "Capital cost of the gifted property",
2384
+ kind: "money",
2385
+ role: "input",
2386
+ section: "maximum"
2387
+ },
1899
2388
  {
1900
2389
  field: "042",
1901
2390
  caption: "Lesser of proceeds of disposition and capital cost of gifted capital property",
@@ -1926,6 +2415,56 @@ const MAXIMUM = [
1926
2415
  role: "computed",
1927
2416
  section: "maximum",
1928
2417
  note: "Caps the amounts applied at lines 016 and 076."
2418
+ },
2419
+ {
2420
+ field: "090",
2421
+ caption: "Year of origin",
2422
+ kind: "date",
2423
+ role: "input",
2424
+ section: "carryforward",
2425
+ requirement: "conditional",
2426
+ note: "Mandatory whenever 092, 094, 096, 098 or 100 has a value."
2427
+ },
2428
+ {
2429
+ field: "092",
2430
+ caption: "Charitable donations available for carryforward",
2431
+ kind: "money",
2432
+ role: "input",
2433
+ section: "carryforward",
2434
+ requirement: "optional"
2435
+ },
2436
+ {
2437
+ field: "094",
2438
+ caption: "Gifts to Canada, a province or territory available for carryforward",
2439
+ kind: "money",
2440
+ role: "input",
2441
+ section: "carryforward",
2442
+ requirement: "optional"
2443
+ },
2444
+ {
2445
+ field: "096",
2446
+ caption: "Gifts of certified cultural property available for carryforward",
2447
+ kind: "money",
2448
+ role: "input",
2449
+ section: "carryforward",
2450
+ requirement: "optional"
2451
+ },
2452
+ {
2453
+ field: "098",
2454
+ caption: "Gifts of certified ecologically sensitive land available for carryforward",
2455
+ kind: "money",
2456
+ role: "input",
2457
+ section: "carryforward",
2458
+ requirement: "optional"
2459
+ },
2460
+ {
2461
+ field: "100",
2462
+ caption: "Additional deduction for gifts of medicine available for carryforward",
2463
+ kind: "money",
2464
+ role: "input",
2465
+ section: "carryforward",
2466
+ requirement: "optional",
2467
+ note: "ITA s.110.1(1)(a.1). Not modelled anywhere else in this engine — accepted here as a direct entry."
1929
2468
  }
1930
2469
  ];
1931
2470
  const NOTES$1 = {
@@ -1941,11 +2480,11 @@ const AT1_SCHEDULE_20 = {
1941
2480
  title: "Alberta charitable donations and gifts",
1942
2481
  scheme: "tra-line-item-id",
1943
2482
  taxYears: { from: 2024 },
1944
- sections: SECTIONS$23,
2483
+ sections: SECTIONS$32,
1945
2484
  fields: [...AT1_SCHEDULE_20_POOLS.flatMap((pool) => CONTINUITY_ROWS.map(([key, caption]) => {
1946
2485
  const computed = key === "beginning" || key === "subtotal" || key === "available" || key === "closing";
1947
2486
  return {
1948
- line: id$2(pool.lines[key]),
2487
+ line: id$11(pool.lines[key]),
1949
2488
  caption: `${pool.label} — ${caption}`,
1950
2489
  kind: "money",
1951
2490
  role: computed ? "computed" : "input",
@@ -1954,7 +2493,7 @@ const AT1_SCHEDULE_20 = {
1954
2493
  };
1955
2494
  })), ...MAXIMUM.map(({ field, ...rest }) => ({
1956
2495
  ...rest,
1957
- line: id$2(field)
2496
+ line: id$11(field)
1958
2497
  }))].sort((a, b) => a.line.localeCompare(b.line)),
1959
2498
  provenance: {
1960
2499
  document: "research/validation/auratax/2026-08-07-cca-classes/README.md",
@@ -1974,7 +2513,9 @@ const AT1_DONATION_CARRYFORWARD_YEARS = 5;
1974
2513
  //#endregion
1975
2514
  //#region src/t2/at1/forms/schedule21.ts
1976
2515
  /** `SSSFFFOOO` — schedule, field, occurrence. */
1977
- const id$1 = (field, occurrence = 1) => `021${field}${String(occurrence).padStart(3, "0")}`;
2516
+ const id$10 = (field, occurrence = 1) => `021${field}${String(occurrence).padStart(3, "0")}`;
2517
+ /** {@link id}, exported for consumers building their own Schedule 21 layouts (e.g. the UI's paper Form View generator) from {@link AT1_SCHEDULE_21_POOLS} directly. */
2518
+ const scheduleTwentyOneLineId = id$10;
1978
2519
  const AT1_SCHEDULE_21_POOLS = [
1979
2520
  {
1980
2521
  key: "non-capital",
@@ -2046,7 +2587,7 @@ const AT1_SCHEDULE_21_POOLS = [
2046
2587
  closing: "125"
2047
2588
  }
2048
2589
  ];
2049
- const SECTIONS$22 = [{
2590
+ const SECTIONS$31 = [{
2050
2591
  id: "current-year",
2051
2592
  title: "Part 1 — Calculating the current-year non-capital loss",
2052
2593
  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."
@@ -2148,6 +2689,7 @@ const PART_1 = [
2148
2689
  note: "Line 015 minus line 017 plus line 019."
2149
2690
  }
2150
2691
  ];
2692
+ /** The row labels for one pool's continuity, in print order — exported so a UI-side paper Form View can build the same per-pool grid without re-typing the captions. */
2151
2693
  const CONTINUITY_CAPTIONS = {
2152
2694
  carriedForward: "Carried forward from the preceding year",
2153
2695
  expired: "Losses expired",
@@ -2165,7 +2707,7 @@ const continuityFields = AT1_SCHEDULE_21_POOLS.flatMap((pool) => CONTINUITY_ORDE
2165
2707
  const isClosing = k === "closing";
2166
2708
  const isCarryBack = k === "carryBack";
2167
2709
  return {
2168
- line: id$1(pool[k]),
2710
+ line: id$10(pool[k]),
2169
2711
  caption: `${pool.label} — ${CONTINUITY_CAPTIONS[k]}`,
2170
2712
  kind: "money",
2171
2713
  role: isClosing ? "computed" : "input",
@@ -2185,10 +2727,10 @@ const AT1_SCHEDULE_21 = {
2185
2727
  title: "Current-year loss and continuity of losses",
2186
2728
  scheme: "tra-line-item-id",
2187
2729
  taxYears: { from: 2024 },
2188
- sections: SECTIONS$22,
2730
+ sections: SECTIONS$31,
2189
2731
  fields: [...PART_1.map(({ field, ...rest }) => ({
2190
2732
  ...rest,
2191
- line: id$1(field)
2733
+ line: id$10(field)
2192
2734
  })), ...continuityFields].sort((a, b) => a.line.localeCompare(b.line)),
2193
2735
  provenance: {
2194
2736
  document: "research/field-maps/at1-schedules-12-21.md",
@@ -2199,7 +2741,7 @@ const AT1_SCHEDULE_21 = {
2199
2741
  //#endregion
2200
2742
  //#region src/t2/at1/forms/schedule29.ts
2201
2743
  /** `SSSFFFOOO` — schedule, field, occurrence. */
2202
- const id = (field, occurrence = 1) => `029${field}${String(occurrence).padStart(3, "0")}`;
2744
+ const id$9 = (field, occurrence = 1) => `029${field}${String(occurrence).padStart(3, "0")}`;
2203
2745
  const AT1_SCHEDULE_29 = {
2204
2746
  id: "AT1SCH29",
2205
2747
  program: "AT1",
@@ -2604,7 +3146,7 @@ const AT1_SCHEDULE_29 = {
2604
3146
  }
2605
3147
  ].map(({ field, ...rest }) => ({
2606
3148
  ...rest,
2607
- line: id(field)
3149
+ line: id$9(field)
2608
3150
  })).sort((a, b) => a.line.localeCompare(b.line)),
2609
3151
  provenance: {
2610
3152
  document: "research/sources/tra-forms/pdf/AT1SCH29-innovation-employment-grant-TRA14637.pdf",
@@ -2624,7 +3166,7 @@ const AT1_IEG_PRIOR_YEARS = 2;
2624
3166
  const AT1_IEG_JACKET_LINE = "000129001";
2625
3167
  //#endregion
2626
3168
  //#region src/t2/co17/forms/co17.ts
2627
- const SECTIONS$20 = [
3169
+ const SECTIONS$29 = [
2628
3170
  {
2629
3171
  id: "identity",
2630
3172
  title: "1 — Renseignements sur l'identité de la société"
@@ -2660,7 +3202,7 @@ const CO17_RETURN = {
2660
3202
  title: "CO-17 — Déclaration de revenus des sociétés",
2661
3203
  scheme: "rq-box",
2662
3204
  taxYears: { from: 2025 },
2663
- sections: SECTIONS$20,
3205
+ sections: SECTIONS$29,
2664
3206
  fields: [
2665
3207
  F$5("01a", "Numéro d'entreprise du Québec (NEQ)", "identity", { kind: "text" }),
2666
3208
  F$5("01b", "Numéro d'identification", "identity", { kind: "text" }),
@@ -2722,7 +3264,7 @@ const CO17_QUEBEC_PROPORTION_BOX = "421";
2722
3264
  const CO17_TAX_PAYABLE_BOX = "425";
2723
3265
  //#endregion
2724
3266
  //#region src/t2/forms/jacket.ts
2725
- const SECTIONS$19 = [
3267
+ const SECTIONS$28 = [
2726
3268
  {
2727
3269
  id: "taxable-income",
2728
3270
  title: "Taxable income",
@@ -2778,7 +3320,7 @@ const T2_JACKET = {
2778
3320
  title: "T2 Corporation Income Tax Return",
2779
3321
  scheme: "cra-line",
2780
3322
  taxYears: { from: 2025 },
2781
- sections: SECTIONS$19,
3323
+ sections: SECTIONS$28,
2782
3324
  fields: [
2783
3325
  F$4("300", "Net income or (loss) for income tax purposes", "taxable-income", {
2784
3326
  role: "carried-in",
@@ -3714,7 +4256,7 @@ new Map(SCHEDULE_1_CAPTIONS.map((c) => [c.line, c]));
3714
4256
  * Captions come from `./generated/schedule1.captions.ts`, which is produced from
3715
4257
  * the CRA document. This module adds only what the paper does not say.
3716
4258
  */
3717
- const SECTIONS$18 = [
4259
+ const SECTIONS$27 = [
3718
4260
  {
3719
4261
  id: "add-1",
3720
4262
  title: "Add",
@@ -3843,7 +4385,7 @@ const T2_SCHEDULE_1 = {
3843
4385
  title: "Net income (loss) for income tax purposes",
3844
4386
  scheme: "cra-line",
3845
4387
  taxYears: { from: 2023 },
3846
- sections: SECTIONS$18,
4388
+ sections: SECTIONS$27,
3847
4389
  fields: SCHEDULE_1_CAPTIONS.map((c) => {
3848
4390
  const section = sectionFor(Number(c.line));
3849
4391
  const side = section.startsWith("add") ? "add" : "deduct";
@@ -3883,7 +4425,7 @@ const SCHEDULE_1_LINE_BY_NUMBER = indexByLine(T2_SCHEDULE_1);
3883
4425
  const SCHEDULE_1_LINES = T2_SCHEDULE_1.fields;
3884
4426
  //#endregion
3885
4427
  //#region src/t2/forms/schedule2.ts
3886
- const SECTIONS$17 = [
4428
+ const SECTIONS$26 = [
3887
4429
  {
3888
4430
  id: "charitable",
3889
4431
  title: "Part 2 — Charitable donations",
@@ -3915,7 +4457,7 @@ const T2_SCHEDULE_2 = {
3915
4457
  title: "Charitable donations and gifts",
3916
4458
  scheme: "cra-line",
3917
4459
  taxYears: { from: 2023 },
3918
- sections: SECTIONS$17,
4460
+ sections: SECTIONS$26,
3919
4461
  fields: [
3920
4462
  F$3("239", "Charitable donations expired after five tax years", "charitable"),
3921
4463
  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 +4491,7 @@ const SCHEDULE_2_CARRYFORWARD_YEARS = {
3949
4491
  };
3950
4492
  //#endregion
3951
4493
  //#region src/t2/forms/schedule3.ts
3952
- const SECTIONS$16 = [{
4494
+ const SECTIONS$25 = [{
3953
4495
  id: "received",
3954
4496
  title: "Part 1 — Dividends received in the tax year",
3955
4497
  description: "One row per payer. Columns B, C, D, I and J are completed only when the payer is connected."
@@ -3973,7 +4515,7 @@ const T2_SCHEDULE_3 = {
3973
4515
  title: "Dividends received, taxable dividends paid, and Part IV tax calculation",
3974
4516
  scheme: "cra-line",
3975
4517
  taxYears: { from: 2023 },
3976
- sections: SECTIONS$16,
4518
+ sections: SECTIONS$25,
3977
4519
  fields: [
3978
4520
  F$2("200", "Name of payer corporation from which the corporation received the dividend", "received", { kind: "text" }),
3979
4521
  F$2("205", "Enter 1 if the payer corporation is connected", "received", {
@@ -4953,7 +5495,7 @@ const SCHEDULE_6_GRIDS = [
4953
5495
  ]
4954
5496
  }
4955
5497
  ];
4956
- const SECTIONS$13 = [
5498
+ const SECTIONS$22 = [
4957
5499
  {
4958
5500
  id: "designation",
4959
5501
  title: "Designation under paragraph 111(4)(e)"
@@ -5085,7 +5627,7 @@ const T2_SCHEDULE_6 = {
5085
5627
  title: "Summary of dispositions of capital property",
5086
5628
  scheme: "cra-line",
5087
5629
  taxYears: { from: 2023 },
5088
- sections: SECTIONS$13,
5630
+ sections: SECTIONS$22,
5089
5631
  fields: [...gridFields, ...SUMMARY].sort((a, b) => Number(a.line) - Number(b.line)),
5090
5632
  provenance: {
5091
5633
  document: "research/sources/cra-forms/T2SCH06-capital-gains.pdf",
@@ -5501,7 +6043,7 @@ const SCHEDULE_8_COLUMNS = [
5501
6043
  caption: "UCC at the end of the year"
5502
6044
  }
5503
6045
  ];
5504
- const SECTIONS$11 = [{
6046
+ const SECTIONS$20 = [{
5505
6047
  id: "cca-grid",
5506
6048
  title: "Capital cost allowance by class",
5507
6049
  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 +6075,7 @@ const T2_SCHEDULE_8 = {
5533
6075
  title: "Capital cost allowance",
5534
6076
  scheme: "cra-line",
5535
6077
  taxYears: { from: 2026 },
5536
- sections: SECTIONS$11,
6078
+ sections: SECTIONS$20,
5537
6079
  fields: SCHEDULE_8_COLUMNS.filter((c) => c.line).map((c) => {
5538
6080
  const dest = DESTINATIONS[c.line];
5539
6081
  return {
@@ -5597,7 +6139,7 @@ const SCHEDULE_13_RESERVE_ROWS = [
5597
6139
  closing: "240"
5598
6140
  }
5599
6141
  ];
5600
- const SECTIONS$10 = [{
6142
+ const SECTIONS$19 = [{
5601
6143
  id: "capital-gains",
5602
6144
  title: "Part 1 — Capital gains reserves",
5603
6145
  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 +6278,7 @@ const T2_SCHEDULE_13 = {
5736
6278
  title: "Continuity of reserves",
5737
6279
  scheme: "cra-line",
5738
6280
  taxYears: { from: 2011 },
5739
- sections: SECTIONS$10,
6281
+ sections: SECTIONS$19,
5740
6282
  fields: [
5741
6283
  ...COLUMN_HEADS,
5742
6284
  ...reserveFields,
@@ -5750,7 +6292,7 @@ const T2_SCHEDULE_13 = {
5750
6292
  };
5751
6293
  //#endregion
5752
6294
  //#region src/t2/forms/schedule21.ts
5753
- const SECTIONS$9 = [
6295
+ const SECTIONS$18 = [
5754
6296
  {
5755
6297
  id: "non-business",
5756
6298
  title: "Part 1 — Federal foreign non-business income tax credit",
@@ -5781,7 +6323,7 @@ const T2_SCHEDULE_21 = {
5781
6323
  title: "Federal and provincial or territorial foreign income tax credits and federal logging tax credit",
5782
6324
  scheme: "cra-line",
5783
6325
  taxYears: { from: 2023 },
5784
- sections: SECTIONS$9,
6326
+ sections: SECTIONS$18,
5785
6327
  fields: [
5786
6328
  F$1("100", "Country of source of foreign non-business income", "non-business", { kind: "text" }),
5787
6329
  F$1("110", "Net foreign non-business income earned in the year", "non-business"),
@@ -5937,7 +6479,7 @@ const T2_SCHEDULE_23 = {
5937
6479
  const SCHEDULE_23_GROUP_BUSINESS_LIMIT = 5e5;
5938
6480
  //#endregion
5939
6481
  //#region src/t2/forms/schedule24.ts
5940
- const SECTIONS$7 = [
6482
+ const SECTIONS$16 = [
5941
6483
  {
5942
6484
  id: "operation",
5943
6485
  title: "Part 1 — Type of operation",
@@ -5968,7 +6510,7 @@ const T2_SCHEDULE_24 = {
5968
6510
  title: "First-time filer after incorporation, amalgamation, or wind-up of a subsidiary",
5969
6511
  scheme: "cra-line",
5970
6512
  taxYears: { from: 2011 },
5971
- sections: SECTIONS$7,
6513
+ sections: SECTIONS$16,
5972
6514
  fields: [
5973
6515
  F("100", "Type of operation that applies to the corporation", "operation", {
5974
6516
  kind: "code",
@@ -8162,57 +8704,1482 @@ const T2_SCHEDULE_130 = {
8162
8704
  }
8163
8705
  };
8164
8706
  //#endregion
8165
- //#region src/forms/registry.ts
8166
- /**
8167
- * THE FORM REGISTRY — every form definition, and the links between them.
8168
- *
8169
- * A return is not a bag of independent schedules. Amount A of one becomes amount
8170
- * C of another; the Alberta reconciliation starts from line 300 of the federal
8171
- * jacket; a capital cost allowance figure computed on Schedule 8 lands on line
8172
- * 403 of Schedule 1 and nowhere else. Those seams are where returns go wrong,
8173
- * because each schedule is individually correct and the figure is carried to the
8174
- * wrong destination.
8175
- *
8176
- * Holding every definition in one place makes the seams checkable: a link that
8177
- * names a form nobody defines, or a line that form does not have, is findable
8178
- * without filing anything.
8179
- *
8180
- * Registration is explicit rather than by directory scan — the engine must stay
8181
- * a pure module graph with no filesystem access, and an explicit list is what a
8182
- * reviewer can read.
8183
- */
8184
- /** Every form defined in this package. */
8185
- const FORMS = [
8186
- T2_JACKET,
8187
- T2_SCHEDULE_1,
8188
- T2_SCHEDULE_2,
8189
- T2_SCHEDULE_3,
8190
- T2_SCHEDULE_5,
8191
- T2_SCHEDULE_24,
8192
- CO17_RETURN,
8193
- T2_SCHEDULE_21,
8194
- T2_SCHEDULE_4,
8195
- T2_SCHEDULE_6,
8196
- T2_SCHEDULE_7,
8197
- T2_SCHEDULE_8,
8198
- T2_SCHEDULE_13,
8199
- T2_SCHEDULE_130,
8200
- T2_SCHEDULE_23,
8201
- T2_SCHEDULE_31,
8202
- T2_SCHEDULE_33,
8203
- T2_SCHEDULE_43,
8204
- T2_SCHEDULE_50,
8205
- T2_SCHEDULE_53,
8206
- T2_SCHEDULE_55,
8207
- AT1_JACKET,
8208
- AT1_SCHEDULE_12,
8209
- AT1_SCHEDULE_13,
8707
+ //#region src/t2/at1/forms/schedule3.ts
8708
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
8709
+ const id$8 = (field, occurrence = 1) => `003${field}${String(occurrence).padStart(3, "0")}`;
8710
+ const AT1_SCHEDULE_3 = {
8711
+ id: "AT1SCH03",
8712
+ program: "AT1",
8713
+ schedule: "003",
8714
+ title: "Alberta Other Tax Deductions and Credits",
8715
+ scheme: "tra-line-item-id",
8716
+ taxYears: { from: 2024 },
8717
+ sections: [
8718
+ {
8719
+ id: "itc",
8720
+ title: "Investor Tax Credit (ITC)"
8721
+ },
8722
+ {
8723
+ id: "citc",
8724
+ title: "Capital Investment Tax Credit (CITC)"
8725
+ },
8726
+ {
8727
+ id: "apitc",
8728
+ title: "Agri-Processing Investment Tax Credit (APITC)",
8729
+ description: "Per-vintage caps: 20% current year, 30% 1st preceding, 50% 2nd preceding, uncapped 3rd-10th."
8730
+ },
8731
+ {
8732
+ id: "mad",
8733
+ title: "Maximum Allowable Deduction (MAD)",
8734
+ description: "The shared ceiling across all three credits — ITC has first call on it."
8735
+ }
8736
+ ],
8737
+ fields: [
8738
+ {
8739
+ field: "100",
8740
+ caption: "ITC — total on certificates issued during the year",
8741
+ kind: "money",
8742
+ role: "input",
8743
+ section: "itc"
8744
+ },
8745
+ {
8746
+ field: "102",
8747
+ caption: "ITC — carried forward from prior year(s)",
8748
+ kind: "money",
8749
+ role: "input",
8750
+ section: "itc",
8751
+ note: "= prior year’s line 108."
8752
+ },
8753
+ {
8754
+ field: "104",
8755
+ caption: "ITC — amount applied to the current taxation year",
8756
+ kind: "money",
8757
+ role: "input",
8758
+ section: "itc",
8759
+ note: "Blank claims the maximum the shared room (604) and the pool (100+102) both allow."
8760
+ },
8761
+ {
8762
+ field: "106",
8763
+ caption: "ITC — expired during the year",
8764
+ kind: "money",
8765
+ role: "input",
8766
+ section: "itc"
8767
+ },
8768
+ {
8769
+ field: "108",
8770
+ caption: "ITC — carried forward to next year",
8771
+ kind: "money",
8772
+ role: "computed",
8773
+ section: "itc",
8774
+ note: "= 100 + 102 − 104 − 106."
8775
+ },
8776
+ {
8777
+ field: "200",
8778
+ caption: "CITC — total on certificates issued during the year",
8779
+ kind: "money",
8780
+ role: "input",
8781
+ section: "citc"
8782
+ },
8783
+ {
8784
+ field: "202",
8785
+ caption: "CITC — carried forward from prior year(s)",
8786
+ kind: "money",
8787
+ role: "input",
8788
+ section: "citc",
8789
+ note: "= prior year’s line 208."
8790
+ },
8791
+ {
8792
+ field: "204",
8793
+ caption: "CITC — amount applied to the current taxation year",
8794
+ kind: "money",
8795
+ role: "input",
8796
+ section: "citc",
8797
+ note: "Forced to nil while ITC (line 108) still has an unused carryforward balance."
8798
+ },
8799
+ {
8800
+ field: "206",
8801
+ caption: "CITC — expired during the year",
8802
+ kind: "money",
8803
+ role: "input",
8804
+ section: "citc"
8805
+ },
8806
+ {
8807
+ field: "208",
8808
+ caption: "CITC — carried forward to next year",
8809
+ kind: "money",
8810
+ role: "computed",
8811
+ section: "citc",
8812
+ note: "= 200 + 202 − 204 − 206."
8813
+ },
8814
+ {
8815
+ field: "300",
8816
+ caption: "APITC — total received on certificates issued this year",
8817
+ kind: "money",
8818
+ role: "input",
8819
+ section: "apitc"
8820
+ },
8821
+ {
8822
+ field: "302",
8823
+ caption: "APITC — carried forward from prior year(s), all vintages",
8824
+ kind: "money",
8825
+ role: "input",
8826
+ section: "apitc"
8827
+ },
8828
+ {
8829
+ field: "304",
8830
+ caption: "APITC — applied, current year (≤20%)",
8831
+ kind: "money",
8832
+ role: "input",
8833
+ section: "apitc"
8834
+ },
8835
+ {
8836
+ field: "306",
8837
+ caption: "APITC — applied, 1st preceding taxation year (≤30%)",
8838
+ kind: "money",
8839
+ role: "input",
8840
+ section: "apitc"
8841
+ },
8842
+ {
8843
+ field: "308",
8844
+ caption: "APITC — applied, 2nd preceding taxation year (≤50%)",
8845
+ kind: "money",
8846
+ role: "input",
8847
+ section: "apitc"
8848
+ },
8849
+ {
8850
+ field: "310",
8851
+ caption: "APITC — applied, 3rd-10th preceding taxation years (uncapped)",
8852
+ kind: "money",
8853
+ role: "input",
8854
+ section: "apitc"
8855
+ },
8856
+ {
8857
+ field: "312",
8858
+ caption: "APITC — total applied, after shared-room allocation",
8859
+ kind: "money",
8860
+ role: "computed",
8861
+ section: "apitc",
8862
+ note: "= 304 + 306 + 308 + 310."
8863
+ },
8864
+ {
8865
+ field: "314",
8866
+ caption: "APITC — expired during the year",
8867
+ kind: "money",
8868
+ role: "input",
8869
+ section: "apitc"
8870
+ },
8871
+ {
8872
+ field: "316",
8873
+ caption: "APITC — available for carryforward",
8874
+ kind: "money",
8875
+ role: "computed",
8876
+ section: "apitc",
8877
+ note: "= 300 + 302 − 312 − 314."
8878
+ },
8879
+ {
8880
+ field: "600",
8881
+ caption: "MAD — total credits applied (104 + 204 + 312)",
8882
+ kind: "money",
8883
+ role: "computed",
8884
+ section: "mad"
8885
+ },
8886
+ {
8887
+ field: "602",
8888
+ caption: "MAD — room (AT1 jacket line 068 minus lines 070+071+072+074)",
8889
+ kind: "money",
8890
+ role: "computed",
8891
+ section: "mad"
8892
+ },
8893
+ {
8894
+ field: "604",
8895
+ caption: "MAD — maximum allowable deduction for the year",
8896
+ kind: "money",
8897
+ role: "computed",
8898
+ section: "mad",
8899
+ note: "Lesser of line 600 and the room at line 602 (AT1 jacket line 068 minus lines 070+071+072+074); floored at nil."
8900
+ }
8901
+ ].map(({ field, ...rest }) => ({
8902
+ ...rest,
8903
+ line: id$8(field)
8904
+ })).sort((a, b) => a.line.localeCompare(b.line)),
8905
+ provenance: {
8906
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
8907
+ retrieved: "2026-08-29",
8908
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
8909
+ }
8910
+ };
8911
+ //#endregion
8912
+ //#region src/t2/at1/forms/schedule4.ts
8913
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
8914
+ const id$7 = (field, occurrence = 1) => `004${field}${String(occurrence).padStart(3, "0")}`;
8915
+ const AT1_SCHEDULE_4 = {
8916
+ id: "AT1SCH04",
8917
+ program: "AT1",
8918
+ schedule: "004",
8919
+ title: "Alberta Foreign Investment Income Tax Credit",
8920
+ scheme: "tra-line-item-id",
8921
+ taxYears: { from: 2024 },
8922
+ sections: [{
8923
+ id: "countries",
8924
+ title: "Foreign Investment Credits",
8925
+ description: "One occurrence per country the corporation earned foreign non-business income in, sorted in the same order as federal Schedule 21. AB form 004 exists only if federal Schedule 21 exists."
8926
+ }],
8927
+ fields: [
8928
+ {
8929
+ field: "002",
8930
+ caption: "Country",
8931
+ kind: "code",
8932
+ role: "input",
8933
+ section: "countries",
8934
+ requirement: "mandatory",
8935
+ note: "Two-letter code. Must equal the matching occurrence of federal Schedule 21, line 100."
8936
+ },
8937
+ {
8938
+ field: "004",
8939
+ caption: "Net Foreign Investment Income",
8940
+ kind: "money",
8941
+ role: "input",
8942
+ section: "countries",
8943
+ requirement: "mandatory",
8944
+ note: "Must equal federal Schedule 21, line 110."
8945
+ },
8946
+ {
8947
+ field: "006",
8948
+ caption: "Foreign tax paid, net of the ITA 20(12)/ACTA 8(2.2) deduction",
8949
+ kind: "money",
8950
+ role: "computed",
8951
+ section: "countries",
8952
+ note: "Derived from the gross federal tax paid and the deduction — neither is itself an AT1 line."
8953
+ },
8954
+ {
8955
+ field: "008",
8956
+ caption: "Federal non-business foreign tax credit",
8957
+ kind: "money",
8958
+ role: "input",
8959
+ section: "countries",
8960
+ requirement: "mandatory",
8961
+ note: "Must equal federal Schedule 21, line 180."
8962
+ },
8963
+ {
8964
+ field: "012",
8965
+ caption: "Allowable Credit",
8966
+ kind: "money",
8967
+ role: "computed",
8968
+ section: "countries",
8969
+ note: "Lesser of D (income proration) and G (tax paid less federal credit), both allocation-factor-scaled — see module doc."
8970
+ }
8971
+ ].map(({ field, ...rest }) => ({
8972
+ ...rest,
8973
+ line: id$7(field)
8974
+ })),
8975
+ provenance: {
8976
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
8977
+ retrieved: "2026-08-31",
8978
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
8979
+ }
8980
+ };
8981
+ //#endregion
8982
+ //#region src/t2/at1/forms/schedule5.ts
8983
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
8984
+ const id$6 = (field, occurrence = 1) => `005${field}${String(occurrence).padStart(3, "0")}`;
8985
+ const AT1_SCHEDULE_5 = {
8986
+ id: "AT1SCH05",
8987
+ program: "AT1",
8988
+ schedule: "005",
8989
+ title: "Alberta Royalty Tax Deduction",
8990
+ scheme: "tra-line-item-id",
8991
+ taxYears: { from: 2024 },
8992
+ sections: [
8993
+ {
8994
+ id: "crtd",
8995
+ title: "Calculation of the Royalty Tax Deduction (CRTD)",
8996
+ description: "The corporation's own unsuccessored pool. Line 016 is discretionary — blank claims the maximum the pool and Alberta taxable income both allow."
8997
+ },
8998
+ {
8999
+ id: "transfer",
9000
+ title: "Pool Transfer / Change in Control",
9001
+ description: "026/027 required only when a transfer occurred; 100 is informational, cross-checked against the AT1 jacket's own tax-year-end-change fields."
9002
+ },
9003
+ {
9004
+ id: "sspi",
9005
+ title: "Second Successored Pool Information (SSPI)",
9006
+ description: "One occurrence per vendor/predecessor. 105 and 107 are mutually exclusive per occurrence — supply exactly one. Must not exist unless line 200 is Yes."
9007
+ },
9008
+ {
9009
+ id: "fspi",
9010
+ title: "First Successored Pool Information (FSPI)",
9011
+ description: "One occurrence per vendor/predecessor. 125 and 127 are mutually exclusive per occurrence — supply exactly one. Must not exist unless line 200 is Yes."
9012
+ },
9013
+ {
9014
+ id: "total",
9015
+ title: "Successored Total"
9016
+ }
9017
+ ],
9018
+ fields: [
9019
+ {
9020
+ field: "001",
9021
+ caption: "Crown charges under s.20(6)(a)-(e), with reference to s.20(13)",
9022
+ kind: "money",
9023
+ role: "input",
9024
+ section: "crtd",
9025
+ note: "AT1 Schedule 7, line 061. Floored at zero."
9026
+ },
9027
+ {
9028
+ field: "005",
9029
+ caption: "Deduct: Resource allowance claimed under s.20(6)(g)",
9030
+ kind: "money",
9031
+ role: "input",
9032
+ section: "crtd",
9033
+ note: "AT1 Schedule 12, line 024, or federal Schedule 1, line 346."
9034
+ },
9035
+ {
9036
+ field: "007",
9037
+ caption: "Deduct: Reimbursements received under a contract in respect of amounts on line 001, under s.20(6)(f)",
9038
+ kind: "money",
9039
+ role: "input",
9040
+ section: "crtd",
9041
+ note: "Excludes ARTC and other government rebates or credits."
9042
+ },
9043
+ {
9044
+ field: "011",
9045
+ caption: "Attributed Royalty Income carried forward from the preceding year",
9046
+ kind: "money",
9047
+ role: "computed",
9048
+ section: "crtd",
9049
+ note: "= opening unsuccessored pool balance (line 043) + Σ predecessor transfers (line 037)."
9050
+ },
9051
+ {
9052
+ field: "016",
9053
+ caption: "Royalty tax deduction claim amount in respect of the pool for the year",
9054
+ kind: "money",
9055
+ role: "input",
9056
+ section: "crtd",
9057
+ note: "Discretionary. Blank = claim the maximum the pool and Alberta taxable income both allow."
9058
+ },
9059
+ {
9060
+ field: "017",
9061
+ caption: "Pool available, carried forward to next year",
9062
+ kind: "money",
9063
+ role: "computed",
9064
+ section: "crtd",
9065
+ note: "= line 013 (unlabeled internal subtotal) − line 016."
9066
+ },
9067
+ {
9068
+ field: "023",
9069
+ caption: "Deduct: Transfers of Attributed Royalty Income to another corporation during the year due to disposal of substantially all Canadian Resource Properties",
9070
+ kind: "money",
9071
+ role: "input",
9072
+ section: "crtd"
9073
+ },
9074
+ {
9075
+ field: "025",
9076
+ caption: "Attributed Royalty Income carried forward to next year",
9077
+ kind: "money",
9078
+ role: "computed",
9079
+ section: "crtd",
9080
+ note: "Floored at zero. Literal spec formula omits line 007 and subtracts the COMBINED royalty tax deduction (line 064), not just line 016 — see module doc."
9081
+ },
9082
+ {
9083
+ field: "026",
9084
+ caption: "Was there a transfer of the resource pools during the year?",
9085
+ kind: "code",
9086
+ role: "input",
9087
+ section: "transfer",
9088
+ requirement: "conditional",
9089
+ note: "1 = disposition of all/substantially all CRP (s.20(8)); 2 = change in control / ceasing s.20(14) exemption; 3 = no transfer."
9090
+ },
9091
+ {
9092
+ field: "027",
9093
+ caption: "Legal name of the corporation who acquired the resource pools",
9094
+ kind: "text",
9095
+ role: "input",
9096
+ section: "transfer",
9097
+ requirement: "conditional",
9098
+ note: "Required when line 026 is 1 or 2; must be absent when 3."
9099
+ },
9100
+ {
9101
+ field: "100",
9102
+ caption: "Was there a change in control that created the immediately preceding taxation year end?",
9103
+ kind: "flag",
9104
+ role: "input",
9105
+ section: "transfer",
9106
+ requirement: "optional"
9107
+ },
9108
+ {
9109
+ field: "101",
9110
+ caption: "Legal name of vendor, predecessor, or the corporation itself on a change in control",
9111
+ kind: "text",
9112
+ role: "input",
9113
+ section: "sspi"
9114
+ },
9115
+ {
9116
+ field: "103",
9117
+ caption: "Date of Event",
9118
+ kind: "date",
9119
+ role: "input",
9120
+ section: "sspi"
9121
+ },
9122
+ {
9123
+ field: "105",
9124
+ caption: "Pool amount available for carry-forward at the end of the preceding year",
9125
+ kind: "money",
9126
+ role: "input",
9127
+ section: "sspi",
9128
+ requirement: "conditional"
9129
+ },
9130
+ {
9131
+ field: "107",
9132
+ caption: "Cost on acquisition of all/substantially all Canadian resource properties, or on a change in control, under s.20(8) or 20(14)",
9133
+ kind: "money",
9134
+ role: "input",
9135
+ section: "sspi",
9136
+ requirement: "conditional"
9137
+ },
9138
+ {
9139
+ field: "109",
9140
+ caption: "Property income under s.20(1)(c)",
9141
+ kind: "money",
9142
+ role: "input",
9143
+ section: "sspi"
9144
+ },
9145
+ {
9146
+ field: "111",
9147
+ caption: "Claim",
9148
+ kind: "money",
9149
+ role: "computed",
9150
+ section: "sspi",
9151
+ note: "= min(pool base, property income). Mandatory arithmetic, not discretionary."
9152
+ },
9153
+ {
9154
+ field: "113",
9155
+ caption: "Carried forward, before transfer",
9156
+ kind: "money",
9157
+ role: "computed",
9158
+ section: "sspi",
9159
+ note: "= pool base − claim."
9160
+ },
9161
+ {
9162
+ field: "115",
9163
+ caption: "Second Successored Pool subtotal",
9164
+ kind: "money",
9165
+ role: "computed",
9166
+ section: "sspi",
9167
+ note: "Σ line 113 across all SSPI occurrences."
9168
+ },
9169
+ {
9170
+ field: "121",
9171
+ caption: "Legal name of vendor, predecessor, or the corporation itself on a change in control",
9172
+ kind: "text",
9173
+ role: "input",
9174
+ section: "fspi"
9175
+ },
9176
+ {
9177
+ field: "123",
9178
+ caption: "Date of Event",
9179
+ kind: "date",
9180
+ role: "input",
9181
+ section: "fspi"
9182
+ },
9183
+ {
9184
+ field: "125",
9185
+ caption: "Pool amount available for carry-forward at the end of the preceding year",
9186
+ kind: "money",
9187
+ role: "input",
9188
+ section: "fspi",
9189
+ requirement: "conditional"
9190
+ },
9191
+ {
9192
+ field: "127",
9193
+ caption: "Cost on acquisition of all/substantially all Canadian resource properties, or on a change in control, under s.20(8) or 20(14)",
9194
+ kind: "money",
9195
+ role: "input",
9196
+ section: "fspi",
9197
+ requirement: "conditional"
9198
+ },
9199
+ {
9200
+ field: "129",
9201
+ caption: "Property income under s.20(1)(c)",
9202
+ kind: "money",
9203
+ role: "input",
9204
+ section: "fspi"
9205
+ },
9206
+ {
9207
+ field: "131",
9208
+ caption: "Claim",
9209
+ kind: "money",
9210
+ role: "computed",
9211
+ section: "fspi",
9212
+ note: "= min(pool base, property income). Mandatory arithmetic, not discretionary."
9213
+ },
9214
+ {
9215
+ field: "133",
9216
+ caption: "Carried forward, before transfer",
9217
+ kind: "money",
9218
+ role: "computed",
9219
+ section: "fspi",
9220
+ note: "= pool base − claim."
9221
+ },
9222
+ {
9223
+ field: "135",
9224
+ caption: "First Successored Pool subtotal",
9225
+ kind: "money",
9226
+ role: "computed",
9227
+ section: "fspi",
9228
+ note: "Σ line 133 across all FSPI occurrences."
9229
+ },
9230
+ {
9231
+ field: "140",
9232
+ caption: "Successored Total",
9233
+ kind: "money",
9234
+ role: "computed",
9235
+ section: "total",
9236
+ note: "= Σ SSPI claims (111) + Σ FSPI claims (131). Feeds AT1 core line 064 alongside line 016."
9237
+ }
9238
+ ].map(({ field, ...rest }) => ({
9239
+ ...rest,
9240
+ line: id$6(field)
9241
+ })),
9242
+ provenance: {
9243
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
9244
+ retrieved: "2026-08-31",
9245
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule; 031-043 not individually filed, see module doc"
9246
+ }
9247
+ };
9248
+ //#endregion
9249
+ //#region src/t2/at1/forms/schedule6.ts
9250
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
9251
+ const id$5 = (field, occurrence = 1) => `006${field}${String(occurrence).padStart(3, "0")}`;
9252
+ const AT1_SCHEDULE_6 = {
9253
+ id: "AT1SCH06",
9254
+ program: "AT1",
9255
+ schedule: "006",
9256
+ title: "Alberta Royalty Tax Credit",
9257
+ scheme: "tra-line-item-id",
9258
+ taxYears: { from: 2024 },
9259
+ sections: [
9260
+ {
9261
+ id: "core",
9262
+ title: "Alberta Royalty Tax Credit",
9263
+ description: "No credit dollar amount is computed here — the ARTC is administered as an instalment program (AT1 jacket line 000082). This schedule establishes the royalty amount, shelter and rate TRA uses for that determination."
9264
+ },
9265
+ {
9266
+ id: "acrs",
9267
+ title: "Aggregate of the Crown Royalty Shelter (ACRS)",
9268
+ description: "Complete only when associated (line 002 = Yes)."
9269
+ },
9270
+ {
9271
+ id: "aacrs",
9272
+ title: "Allocation of the Aggregate of the Crown Royalty Shelter (AACRS)",
9273
+ description: "Complete only when associated. Put the corporation filing this return FIRST — its own allocation becomes line 006 directly."
9274
+ }
9275
+ ],
9276
+ fields: [
9277
+ {
9278
+ field: "002",
9279
+ caption: "Is the corporation associated with one or more corporations that have incurred Alberta Crown Royalty in the year?",
9280
+ kind: "flag",
9281
+ role: "input",
9282
+ section: "core",
9283
+ requirement: "mandatory",
9284
+ note: "Default 2 (No)."
9285
+ },
9286
+ {
9287
+ field: "004",
9288
+ caption: "Alberta Crown Royalty incurred in the taxation year",
9289
+ kind: "money",
9290
+ role: "input",
9291
+ section: "core",
9292
+ requirement: "mandatory",
9293
+ note: "= Schedule 7, line 003 + Σ line 077 − Σ line 087 + Σ line 089."
9294
+ },
9295
+ {
9296
+ field: "006",
9297
+ caption: "Crown Royalty Shelter",
9298
+ kind: "money",
9299
+ role: "computed",
9300
+ section: "core",
9301
+ note: "Not associated: $2,000,000 × (days in own tax year, max 365) / 365. Associated: this filer's own AACRS allocation (line 034, first occurrence)."
9302
+ },
9303
+ {
9304
+ field: "008",
9305
+ caption: "Weighted Average Rate",
9306
+ kind: "rate",
9307
+ role: "computed",
9308
+ section: "core",
9309
+ note: "Day-weighted average of the published RTC quarterly rate across every calendar quarter the taxation year spans, to 4 decimal places."
9310
+ },
9311
+ {
9312
+ field: "022",
9313
+ caption: "Corporate Account Number of the associated corporation with the longest taxation year",
9314
+ kind: "code",
9315
+ role: "input",
9316
+ section: "acrs"
9317
+ },
9318
+ {
9319
+ field: "024",
9320
+ caption: "Taxation Year Beginning",
9321
+ kind: "date",
9322
+ role: "input",
9323
+ section: "acrs"
9324
+ },
9325
+ {
9326
+ field: "026",
9327
+ caption: "Taxation Year Ending",
9328
+ kind: "date",
9329
+ role: "input",
9330
+ section: "acrs"
9331
+ },
9332
+ {
9333
+ field: "028",
9334
+ caption: "Number of days in the longest year",
9335
+ kind: "text",
9336
+ role: "input",
9337
+ section: "acrs",
9338
+ note: "Max 365. Spec Type N — not money; matches the same field's kind on schedule29.ts."
9339
+ },
9340
+ {
9341
+ field: "030",
9342
+ caption: "Name of Corporation",
9343
+ kind: "text",
9344
+ role: "input",
9345
+ section: "aacrs",
9346
+ note: "One occurrence per associated corporation sharing the pool."
9347
+ },
9348
+ {
9349
+ field: "032",
9350
+ caption: "Alberta Corporate Account Number",
9351
+ kind: "code",
9352
+ role: "input",
9353
+ section: "aacrs",
9354
+ requirement: "optional"
9355
+ },
9356
+ {
9357
+ field: "034",
9358
+ caption: "Allocated Amount",
9359
+ kind: "money",
9360
+ role: "input",
9361
+ section: "aacrs",
9362
+ note: "Capped at $2,000,000 × (line 028 / 365), aggregate across all occurrences."
9363
+ }
9364
+ ].map(({ field, ...rest }) => ({
9365
+ ...rest,
9366
+ line: id$5(field)
9367
+ })),
9368
+ provenance: {
9369
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
9370
+ retrieved: "2026-08-31",
9371
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
9372
+ }
9373
+ };
9374
+ //#endregion
9375
+ //#region src/t2/at1/forms/schedule7.ts
9376
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
9377
+ const id$4 = (field, occurrence = 1) => `007${field}${String(occurrence).padStart(3, "0")}`;
9378
+ const AT1_SCHEDULE_7 = {
9379
+ id: "AT1SCH07",
9380
+ program: "AT1",
9381
+ schedule: "007",
9382
+ title: "Alberta Royalty Tax Credit/Deduction Supplemental Information",
9383
+ scheme: "tra-line-item-id",
9384
+ taxYears: { from: 2024 },
9385
+ sections: [
9386
+ {
9387
+ id: "cpi",
9388
+ title: "Crown Payment Information",
9389
+ description: "Transcribed directly from the income statement (federal form 125) and balance sheet (federal form 100)."
9390
+ },
9391
+ {
9392
+ id: "piti",
9393
+ title: "Partnership Income Tax Information",
9394
+ description: "One occurrence per partnership the corporation is a member of."
9395
+ },
9396
+ {
9397
+ id: "acra",
9398
+ title: "Adjustments to ACR Reported in the Current Year but Relating to Prior Taxation Years",
9399
+ description: "One occurrence per correction relating to a prior production year but reported this year."
9400
+ },
9401
+ {
9402
+ id: "totals",
9403
+ title: "Totals",
9404
+ description: "Both computed — neither has a preparer-entered box. 061 has no defining row anywhere in this schedule's own MAPPINGS block; its formula is transcribed from Schedule 5's own field 005001 definition."
9405
+ }
9406
+ ],
9407
+ fields: [
9408
+ {
9409
+ field: "003",
9410
+ caption: "Alberta crown royalty eligible for Royalty Tax Credit",
9411
+ kind: "money",
9412
+ role: "input",
9413
+ section: "cpi"
9414
+ },
9415
+ {
9416
+ field: "005",
9417
+ caption: "Other royalties paid to Alberta not eligible for Royalty Tax Credit",
9418
+ kind: "money",
9419
+ role: "input",
9420
+ section: "cpi"
9421
+ },
9422
+ {
9423
+ field: "007",
9424
+ caption: "Crown royalty paid to other provincial or federal jurisdictions",
9425
+ kind: "money",
9426
+ role: "input",
9427
+ section: "cpi"
9428
+ },
9429
+ {
9430
+ field: "009",
9431
+ caption: "Non-deductible crown lease rentals",
9432
+ kind: "money",
9433
+ role: "input",
9434
+ section: "cpi"
9435
+ },
9436
+ {
9437
+ field: "011",
9438
+ caption: "Mineral taxes",
9439
+ kind: "money",
9440
+ role: "input",
9441
+ section: "cpi"
9442
+ },
9443
+ {
9444
+ field: "013",
9445
+ caption: "Saskatchewan resources surcharge (non-deductible portion only)",
9446
+ kind: "money",
9447
+ role: "input",
9448
+ section: "cpi"
9449
+ },
9450
+ {
9451
+ field: "014",
9452
+ caption: "Other non-deductible crown charges — type",
9453
+ kind: "text",
9454
+ role: "input",
9455
+ section: "cpi",
9456
+ requirement: "optional"
9457
+ },
9458
+ {
9459
+ field: "015",
9460
+ caption: "Other non-deductible crown charges — type",
9461
+ kind: "text",
9462
+ role: "input",
9463
+ section: "cpi",
9464
+ requirement: "optional"
9465
+ },
9466
+ {
9467
+ field: "016",
9468
+ caption: "Other non-deductible crown charges — type",
9469
+ kind: "text",
9470
+ role: "input",
9471
+ section: "cpi",
9472
+ requirement: "optional"
9473
+ },
9474
+ {
9475
+ field: "017",
9476
+ caption: "Other non-deductible crown charges — amount",
9477
+ kind: "money",
9478
+ role: "input",
9479
+ section: "cpi",
9480
+ note: "Blank/zero when no type is named at 014-016."
9481
+ },
9482
+ {
9483
+ field: "025",
9484
+ caption: "Crown lease rentals capitalized during the year on non-producing properties (non-deductible portion)",
9485
+ kind: "money",
9486
+ role: "input",
9487
+ section: "cpi"
9488
+ },
9489
+ {
9490
+ field: "027",
9491
+ caption: "Other balance sheet eligible deduction — name",
9492
+ kind: "text",
9493
+ role: "input",
9494
+ section: "cpi",
9495
+ requirement: "optional"
9496
+ },
9497
+ {
9498
+ field: "029",
9499
+ caption: "Other balance sheet eligible deduction — amount",
9500
+ kind: "money",
9501
+ role: "input",
9502
+ section: "cpi",
9503
+ note: "Blank/zero when no name is given at 027."
9504
+ },
9505
+ {
9506
+ field: "071",
9507
+ caption: "Partnership name",
9508
+ kind: "text",
9509
+ role: "input",
9510
+ section: "piti",
9511
+ requirement: "mandatory"
9512
+ },
9513
+ {
9514
+ field: "073",
9515
+ caption: "Corporation's percentage interest in partnership",
9516
+ kind: "rate",
9517
+ role: "input",
9518
+ section: "piti",
9519
+ note: "Decimal to 4 places, e.g. .7500 for 75% — not a whole percentage."
9520
+ },
9521
+ {
9522
+ field: "075",
9523
+ caption: "Partnership fiscal period end",
9524
+ kind: "date",
9525
+ role: "input",
9526
+ section: "piti"
9527
+ },
9528
+ {
9529
+ field: "077",
9530
+ caption: "Corporation's share of Alberta Crown Royalties eligible for Royalty Tax Credit",
9531
+ kind: "money",
9532
+ role: "input",
9533
+ section: "piti"
9534
+ },
9535
+ {
9536
+ field: "079",
9537
+ caption: "Corporation's share of other royalties paid to Alberta not eligible for Royalty Tax Credit",
9538
+ kind: "money",
9539
+ role: "input",
9540
+ section: "piti"
9541
+ },
9542
+ {
9543
+ field: "081",
9544
+ caption: "Corporation's share of other Crown charges eligible for Royalty Tax Deduction",
9545
+ kind: "money",
9546
+ role: "input",
9547
+ section: "piti",
9548
+ note: "Feeds AT1 Schedule 5, not this schedule's own arithmetic."
9549
+ },
9550
+ {
9551
+ field: "083",
9552
+ caption: "Prior production period the adjustment relates to",
9553
+ kind: "date",
9554
+ role: "input",
9555
+ section: "acra",
9556
+ requirement: "mandatory"
9557
+ },
9558
+ {
9559
+ field: "085",
9560
+ caption: "Source of Adjustment",
9561
+ kind: "code",
9562
+ role: "input",
9563
+ section: "acra",
9564
+ note: "1 = Department of Resource Development (formerly Energy), 2 = Operator."
9565
+ },
9566
+ {
9567
+ field: "087",
9568
+ caption: "Amount of increase to eligible crown royalties for that prior year",
9569
+ kind: "money",
9570
+ role: "input",
9571
+ section: "acra"
9572
+ },
9573
+ {
9574
+ field: "089",
9575
+ caption: "Amount of decrease to eligible crown royalties for that prior year",
9576
+ kind: "money",
9577
+ role: "input",
9578
+ section: "acra"
9579
+ },
9580
+ {
9581
+ field: "091",
9582
+ caption: "Adjustment to the amount not eligible for the Royalty Tax Credit for that prior year",
9583
+ kind: "money",
9584
+ role: "input",
9585
+ section: "acra"
9586
+ },
9587
+ {
9588
+ field: "051",
9589
+ caption: "Total Adjustments to current year Alberta Crown Royalty due to adjustments from Prior Production Years",
9590
+ kind: "money",
9591
+ role: "computed",
9592
+ section: "totals",
9593
+ note: "= Σ (087 − 089 + 091)."
9594
+ },
9595
+ {
9596
+ field: "061",
9597
+ caption: "Crown charges net of reimbursements",
9598
+ kind: "money",
9599
+ role: "computed",
9600
+ section: "totals",
9601
+ note: "No defining row in this schedule's own MAPPINGS block — formula transcribed from Schedule 5's field 005001. Signed; Schedule 5 applies its own floor at zero."
9602
+ }
9603
+ ].map(({ field, ...rest }) => ({
9604
+ ...rest,
9605
+ line: id$4(field)
9606
+ })),
9607
+ provenance: {
9608
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
9609
+ retrieved: "2026-08-31",
9610
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
9611
+ }
9612
+ };
9613
+ //#endregion
9614
+ //#region src/t2/at1/forms/schedule8.ts
9615
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
9616
+ const id$3 = (field, occurrence = 1) => `008${field}${String(occurrence).padStart(3, "0")}`;
9617
+ const AT1_SCHEDULE_8 = {
9618
+ id: "AT1SCH08",
9619
+ program: "AT1",
9620
+ schedule: "008",
9621
+ title: "Alberta Political Contributions Tax Credit",
9622
+ scheme: "tra-line-item-id",
9623
+ taxYears: { from: 2024 },
9624
+ sections: [{
9625
+ id: "contributions",
9626
+ title: "Political Contribution Details",
9627
+ description: "One occurrence per receipted contribution to a party, constituency association or candidate registered in Alberta."
9628
+ }, {
9629
+ id: "partnership",
9630
+ title: "Alberta Political Contributions Through a Partnership",
9631
+ description: "Sourced from federal T5013 — not derivable from anything else on this schedule."
9632
+ }],
9633
+ fields: [
9634
+ {
9635
+ field: "002",
9636
+ caption: "Name of Party, Constituency Association or Candidate",
9637
+ kind: "text",
9638
+ role: "input",
9639
+ section: "contributions",
9640
+ requirement: "mandatory"
9641
+ },
9642
+ {
9643
+ field: "004",
9644
+ caption: "Official Receipt Number",
9645
+ kind: "code",
9646
+ role: "input",
9647
+ section: "contributions",
9648
+ requirement: "mandatory"
9649
+ },
9650
+ {
9651
+ field: "006",
9652
+ caption: "Date of Donation",
9653
+ kind: "date",
9654
+ role: "input",
9655
+ section: "contributions",
9656
+ requirement: "mandatory",
9657
+ note: "The spec requires one for every receipted contribution — never left blank."
9658
+ },
9659
+ {
9660
+ field: "008",
9661
+ caption: "Donation Amount",
9662
+ kind: "money",
9663
+ role: "input",
9664
+ section: "contributions",
9665
+ requirement: "mandatory"
9666
+ },
9667
+ {
9668
+ field: "012",
9669
+ caption: "Alberta political contributions from a partnership made in 2003 or earlier",
9670
+ kind: "money",
9671
+ role: "input",
9672
+ section: "partnership",
9673
+ requirement: "optional",
9674
+ note: "Federal T5013 box 37."
9675
+ },
9676
+ {
9677
+ field: "013",
9678
+ caption: "Alberta political contributions from a partnership made in 2004 or later",
9679
+ kind: "money",
9680
+ role: "input",
9681
+ section: "partnership",
9682
+ requirement: "optional",
9683
+ note: "Federal T5013."
9684
+ }
9685
+ ].map(({ field, ...rest }) => ({
9686
+ ...rest,
9687
+ line: id$3(field)
9688
+ })),
9689
+ provenance: {
9690
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
9691
+ retrieved: "2026-08-31",
9692
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule"
9693
+ }
9694
+ };
9695
+ //#endregion
9696
+ //#region src/t2/at1/forms/schedule9.ts
9697
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
9698
+ const id$2 = (field, occurrence = 1) => `009${field}${String(occurrence).padStart(3, "0")}`;
9699
+ const AT1_SCHEDULE_9 = {
9700
+ id: "AT1SCH09",
9701
+ program: "AT1",
9702
+ schedule: "009",
9703
+ title: "Alberta Scientific Research & Experimental Development Tax Credit",
9704
+ scheme: "tra-line-item-id",
9705
+ taxYears: { from: 2024 },
9706
+ sections: [
9707
+ {
9708
+ id: "expenditures",
9709
+ title: "Eligible Expenditures",
9710
+ description: "The credit is wound down — no expenditures carried out in Alberta on or after 2020-01-01 are eligible."
9711
+ },
9712
+ {
9713
+ id: "limit",
9714
+ title: "Expenditure Limit and Credit"
9715
+ },
9716
+ {
9717
+ id: "group",
9718
+ title: "Allocation of the Maximum Expenditure Limit",
9719
+ description: "Required whenever line 100 is Yes. Each occurrence, and the group total, capped at $4,000,000 × (line 206 / 365)."
9720
+ }
9721
+ ],
9722
+ fields: [
9723
+ {
9724
+ field: "003",
9725
+ caption: "Federal amount of total qualified SR&ED expenditures",
9726
+ kind: "money",
9727
+ role: "input",
9728
+ section: "expenditures",
9729
+ requirement: "mandatory",
9730
+ note: "Must equal fed T661 line 559."
9731
+ },
9732
+ {
9733
+ field: "005",
9734
+ caption: "Portion of line 559 incurred in Alberta",
9735
+ kind: "money",
9736
+ role: "input",
9737
+ section: "expenditures",
9738
+ note: "Must not exceed line 003. Excludes spending on or after 2020-01-01."
9739
+ },
9740
+ {
9741
+ field: "007",
9742
+ caption: "Deduct: federal prescribed proxy amount included in the Alberta portion",
9743
+ kind: "money",
9744
+ role: "input",
9745
+ section: "expenditures"
9746
+ },
9747
+ {
9748
+ field: "009",
9749
+ caption: "Add: Alberta proxy amount",
9750
+ kind: "money",
9751
+ role: "input",
9752
+ section: "expenditures"
9753
+ },
9754
+ {
9755
+ field: "011",
9756
+ caption: "Add: Alberta SR&ED credit that reduced the federal expense in the taxation year",
9757
+ kind: "money",
9758
+ role: "input",
9759
+ section: "expenditures",
9760
+ note: "Calculation deferred by the spec to the Guide to Claiming the Alberta SR&ED Tax Credit."
9761
+ },
9762
+ {
9763
+ field: "015",
9764
+ caption: "Federal Investment Tax Credit received in the immediately preceding taxation year",
9765
+ kind: "money",
9766
+ role: "input",
9767
+ section: "expenditures",
9768
+ note: "Fed T661 line 435."
9769
+ },
9770
+ {
9771
+ field: "017",
9772
+ caption: "Total Alberta-eligible expenditures for years in which incurred",
9773
+ kind: "money",
9774
+ role: "input",
9775
+ section: "expenditures"
9776
+ },
9777
+ {
9778
+ field: "019",
9779
+ caption: "Total federal expenditures for those same years",
9780
+ kind: "money",
9781
+ role: "input",
9782
+ section: "expenditures",
9783
+ note: "Fed T661 line 570."
9784
+ },
9785
+ {
9786
+ field: "023",
9787
+ caption: "Deduct: Alberta portion of the prior-year federal ITC",
9788
+ kind: "money",
9789
+ role: "computed",
9790
+ section: "expenditures",
9791
+ note: "= 015 × 017 / 019."
9792
+ },
9793
+ {
9794
+ field: "025",
9795
+ caption: "Add: Alberta portion of any repayment of assistance and contract payments",
9796
+ kind: "money",
9797
+ role: "input",
9798
+ section: "expenditures"
9799
+ },
9800
+ {
9801
+ field: "031",
9802
+ caption: "Eligible expenditures for Alberta purposes",
9803
+ kind: "money",
9804
+ role: "computed",
9805
+ section: "expenditures",
9806
+ note: "No confirmed formula/caption of its own in the spec — filed alongside 106, same figure. Derived as 005 − 007 + 009 + 011 − 023 + 025 unless overridden."
9807
+ },
9808
+ {
9809
+ field: "040",
9810
+ caption: "Primary field of science or technology",
9811
+ kind: "code",
9812
+ role: "input",
9813
+ section: "limit",
9814
+ requirement: "mandatory",
9815
+ note: "1-4."
9816
+ },
9817
+ {
9818
+ field: "100",
9819
+ caption: "Is the corporation associated with one or more corporations for SR&ED purposes?",
9820
+ kind: "flag",
9821
+ role: "input",
9822
+ section: "limit",
9823
+ requirement: "mandatory"
9824
+ },
9825
+ {
9826
+ field: "102",
9827
+ caption: "Allocated amount from line 240 on page 3",
9828
+ kind: "money",
9829
+ role: "computed",
9830
+ section: "limit",
9831
+ requirement: "conditional",
9832
+ note: "Filed only when line 100 = Yes."
9833
+ },
9834
+ {
9835
+ field: "104",
9836
+ caption: "Maximum Expenditure Limit",
9837
+ kind: "money",
9838
+ role: "computed",
9839
+ section: "limit",
9840
+ requirement: "conditional",
9841
+ note: "Filed only when line 100 = No. = $4,000,000 × (days in tax year / 365)."
9842
+ },
9843
+ {
9844
+ field: "106",
9845
+ caption: "Eligible expenditures for Alberta purposes",
9846
+ kind: "money",
9847
+ role: "computed",
9848
+ section: "limit",
9849
+ note: "Must equal line 031."
9850
+ },
9851
+ {
9852
+ field: "108",
9853
+ caption: "Maximum Expenditure Limit for the year",
9854
+ kind: "money",
9855
+ role: "computed",
9856
+ section: "limit",
9857
+ note: "= line 102 or 104, whichever applies."
9858
+ },
9859
+ {
9860
+ field: "112",
9861
+ caption: "Recapture on disposal (or deemed disposal) of Alberta SR&ED property",
9862
+ kind: "money",
9863
+ role: "input",
9864
+ section: "limit",
9865
+ requirement: "optional"
9866
+ },
9867
+ {
9868
+ field: "116",
9869
+ caption: "Less: Alberta portion of prior year federal investment tax credit",
9870
+ kind: "money",
9871
+ role: "input",
9872
+ section: "limit",
9873
+ requirement: "optional",
9874
+ note: "Schedule 9 Supplemental line 428 — only when the taxation year end is on or before 2012-03-31."
9875
+ },
9876
+ {
9877
+ field: "120",
9878
+ caption: "Net Alberta SR&ED Tax Credit (Repayment)",
9879
+ kind: "money",
9880
+ role: "computed",
9881
+ section: "limit",
9882
+ note: "= (lesser of 031 and 108 × 10%) − 112 − 116. Signed — may be negative. To AT1 page 2 line 081."
9883
+ },
9884
+ {
9885
+ field: "200",
9886
+ caption: "Alberta CAN of the associated corporation with the longest taxation year",
9887
+ kind: "code",
9888
+ role: "input",
9889
+ section: "group",
9890
+ requirement: "conditional"
9891
+ },
9892
+ {
9893
+ field: "202",
9894
+ caption: "Taxation Year Beginning",
9895
+ kind: "date",
9896
+ role: "input",
9897
+ section: "group",
9898
+ requirement: "conditional"
9899
+ },
9900
+ {
9901
+ field: "204",
9902
+ caption: "Taxation Year Ending",
9903
+ kind: "date",
9904
+ role: "input",
9905
+ section: "group",
9906
+ requirement: "conditional"
9907
+ },
9908
+ {
9909
+ field: "206",
9910
+ caption: "Number of days in the longest year",
9911
+ kind: "text",
9912
+ role: "input",
9913
+ section: "group",
9914
+ requirement: "conditional",
9915
+ note: "Max 365 (366 across a February 29). Spec Type N — not money; matches the same field's kind on schedule29.ts."
9916
+ },
9917
+ {
9918
+ field: "220",
9919
+ caption: "Name of Corporation",
9920
+ kind: "text",
9921
+ role: "input",
9922
+ section: "group",
9923
+ note: "One occurrence per associated corporation, claimant first."
9924
+ },
9925
+ {
9926
+ field: "230",
9927
+ caption: "Alberta Corporate Account Number",
9928
+ kind: "code",
9929
+ role: "input",
9930
+ section: "group",
9931
+ requirement: "optional"
9932
+ },
9933
+ {
9934
+ field: "240",
9935
+ caption: "Allocated Amount",
9936
+ kind: "money",
9937
+ role: "input",
9938
+ section: "group",
9939
+ note: "Capped at $4,000,000 × (line 206 / 365), aggregate across all occurrences."
9940
+ }
9941
+ ].map(({ field, ...rest }) => ({
9942
+ ...rest,
9943
+ line: id$2(field)
9944
+ })),
9945
+ provenance: {
9946
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
9947
+ retrieved: "2026-08-31",
9948
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule; wound down, no post-2019 expenditures eligible"
9949
+ }
9950
+ };
9951
+ //#endregion
9952
+ //#region src/t2/at1/forms/schedule11.ts
9953
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
9954
+ const id$1 = (field, occurrence = 1) => `011${field}${String(occurrence).padStart(3, "0")}`;
9955
+ const AT1_SCHEDULE_11 = {
9956
+ id: "AT1SCH11",
9957
+ program: "AT1",
9958
+ schedule: "011",
9959
+ title: "Alberta Manufacturing and Processing Profits Deduction",
9960
+ scheme: "tra-line-item-id",
9961
+ taxYears: { from: 2024 },
9962
+ sections: [
9963
+ {
9964
+ id: "adjubi",
9965
+ title: "ADJUBI",
9966
+ description: "Line 001 = fed 027130 (federal ADJUBI) by default, or Schedule 12 lines 112 + 114 when Alberta calculates ADJUBI differently — neither Schedule 12 line, nor the federal ADJUBI itself, is an AT1 line on THIS schedule."
9967
+ },
9968
+ {
9969
+ id: "ccpc",
9970
+ title: "CCPC-only: Aggregate Investment Income",
9971
+ description: "Disclosure only — the transcribed spec does not use this figure in the line 042 proration."
9972
+ },
9973
+ {
9974
+ id: "capitalAndLabour",
9975
+ title: "Cost of Capital and Cost of Labour",
9976
+ description: "Must not exist for a small manufacturing corp — see line 042."
9977
+ },
9978
+ {
9979
+ id: "profits",
9980
+ title: "Alberta Manufacturing and Processing Profits"
9981
+ }
9982
+ ],
9983
+ fields: [
9984
+ {
9985
+ field: "001",
9986
+ caption: "AMPPD — ADJUBI for Alberta purposes",
9987
+ kind: "money",
9988
+ role: "computed",
9989
+ section: "adjubi",
9990
+ note: "= fed 027130, or Schedule 12 lines 112 + 114 when Alberta calculates ADJUBI differently."
9991
+ },
9992
+ {
9993
+ field: "013",
9994
+ caption: "Canadian-controlled Private Corporations Only: Aggregate investment income for the year",
9995
+ kind: "money",
9996
+ role: "computed",
9997
+ section: "ccpc",
9998
+ requirement: "conditional",
9999
+ note: "CCPC only. = Alberta figure when Schedule 12 exists, otherwise fed 200440. Omitted entirely for a non-CCPC."
10000
+ },
10001
+ {
10002
+ field: "031",
10003
+ caption: "Cost of Capital",
10004
+ kind: "money",
10005
+ role: "input",
10006
+ section: "capitalAndLabour",
10007
+ note: "Must equal fed 027140 for a corp other than a small manufacturer."
10008
+ },
10009
+ {
10010
+ field: "033",
10011
+ caption: "Alberta Cost of Manufacturing and Processing Capital",
10012
+ kind: "money",
10013
+ role: "input",
10014
+ section: "capitalAndLabour",
10015
+ note: "Cannot exceed line 031."
10016
+ },
10017
+ {
10018
+ field: "037",
10019
+ caption: "Cost of Labour",
10020
+ kind: "money",
10021
+ role: "input",
10022
+ section: "capitalAndLabour",
10023
+ note: "Must equal fed 027160 for a corp other than a small manufacturer."
10024
+ },
10025
+ {
10026
+ field: "039",
10027
+ caption: "Alberta Cost of Manufacturing and Processing Labour",
10028
+ kind: "money",
10029
+ role: "input",
10030
+ section: "capitalAndLabour",
10031
+ note: "Cannot exceed line 037."
10032
+ },
10033
+ {
10034
+ field: "042",
10035
+ caption: "Alberta Manufacturing and Processing Profits",
10036
+ kind: "money",
10037
+ role: "input",
10038
+ section: "profits",
10039
+ note: "Computed from lines 001/031/033/037/039 in the general case; a direct entry for a small manufacturing corp, since the spec gives no proration formula for that case. Nil whenever the historical eligibility test fails, regardless of the workings."
10040
+ }
10041
+ ].map(({ field, ...rest }) => ({
10042
+ ...rest,
10043
+ line: id$1(field)
10044
+ })),
10045
+ provenance: {
10046
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
10047
+ retrieved: "2026-08-31",
10048
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule; historical, pre-2001-04-01 only"
10049
+ }
10050
+ };
10051
+ //#endregion
10052
+ //#region src/t2/at1/forms/schedule15.ts
10053
+ /** `SSSFFFOOO` — schedule, field, occurrence. */
10054
+ const id = (field, occurrence = 1) => `015${field}${String(occurrence).padStart(3, "0")}`;
10055
+ //#endregion
10056
+ //#region src/forms/registry.ts
10057
+ /**
10058
+ * THE FORM REGISTRY — every form definition, and the links between them.
10059
+ *
10060
+ * A return is not a bag of independent schedules. Amount A of one becomes amount
10061
+ * C of another; the Alberta reconciliation starts from line 300 of the federal
10062
+ * jacket; a capital cost allowance figure computed on Schedule 8 lands on line
10063
+ * 403 of Schedule 1 and nowhere else. Those seams are where returns go wrong,
10064
+ * because each schedule is individually correct and the figure is carried to the
10065
+ * wrong destination.
10066
+ *
10067
+ * Holding every definition in one place makes the seams checkable: a link that
10068
+ * names a form nobody defines, or a line that form does not have, is findable
10069
+ * without filing anything.
10070
+ *
10071
+ * Registration is explicit rather than by directory scan — the engine must stay
10072
+ * a pure module graph with no filesystem access, and an explicit list is what a
10073
+ * reviewer can read.
10074
+ */
10075
+ /** Every form defined in this package. */
10076
+ const FORMS = [
10077
+ T2_JACKET,
10078
+ T2_SCHEDULE_1,
10079
+ T2_SCHEDULE_2,
10080
+ T2_SCHEDULE_3,
10081
+ T2_SCHEDULE_5,
10082
+ T2_SCHEDULE_24,
10083
+ CO17_RETURN,
10084
+ T2_SCHEDULE_21,
10085
+ T2_SCHEDULE_4,
10086
+ T2_SCHEDULE_6,
10087
+ T2_SCHEDULE_7,
10088
+ T2_SCHEDULE_8,
10089
+ T2_SCHEDULE_13,
10090
+ T2_SCHEDULE_130,
10091
+ T2_SCHEDULE_23,
10092
+ T2_SCHEDULE_31,
10093
+ T2_SCHEDULE_33,
10094
+ T2_SCHEDULE_43,
10095
+ T2_SCHEDULE_50,
10096
+ T2_SCHEDULE_53,
10097
+ T2_SCHEDULE_55,
10098
+ AT1_JACKET,
10099
+ AT1_SCHEDULE_1,
10100
+ AT1_SCHEDULE_2,
10101
+ AT1_SCHEDULE_3,
10102
+ AT1_SCHEDULE_10,
10103
+ AT1_SCHEDULE_12,
10104
+ AT1_SCHEDULE_13,
10105
+ {
10106
+ id: "AT1SCH15",
10107
+ program: "AT1",
10108
+ schedule: "015",
10109
+ title: "Alberta Resource Related Deductions",
10110
+ scheme: "tra-line-item-id",
10111
+ taxYears: { from: 2024 },
10112
+ sections: [{
10113
+ id: "sfede",
10114
+ title: "SFEDE — Specified Foreign Exploration and Development Expenses, per country"
10115
+ }, {
10116
+ id: "cfre",
10117
+ title: "CFRE — Cumulative Foreign Resource Expenses, per country"
10118
+ }],
10119
+ fields: [
10120
+ {
10121
+ field: "241",
10122
+ caption: "SFEDE regular — country code",
10123
+ kind: "code",
10124
+ role: "input",
10125
+ section: "sfede",
10126
+ note: "Must equal the federal country code (fed 012601)."
10127
+ },
10128
+ {
10129
+ field: "261",
10130
+ caption: "SFEDE successor — country code",
10131
+ kind: "code",
10132
+ role: "input",
10133
+ section: "sfede",
10134
+ note: "Must equal the federal country code (fed 012651)."
10135
+ },
10136
+ {
10137
+ field: "281",
10138
+ caption: "CFRE regular — country code",
10139
+ kind: "code",
10140
+ role: "input",
10141
+ section: "cfre",
10142
+ note: "Must equal the federal country code (fed 012701)."
10143
+ },
10144
+ {
10145
+ field: "293",
10146
+ caption: "CFRE regular — amount claimed this year",
10147
+ kind: "money",
10148
+ role: "input",
10149
+ section: "cfre",
10150
+ 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."
10151
+ },
10152
+ {
10153
+ field: "301",
10154
+ caption: "CFRE successor — country code",
10155
+ kind: "code",
10156
+ role: "input",
10157
+ section: "cfre",
10158
+ note: "Must equal the federal country code (fed 012751)."
10159
+ }
10160
+ ].map(({ field, ...rest }) => ({
10161
+ ...rest,
10162
+ line: id(field)
10163
+ })).sort((a, b) => a.line.localeCompare(b.line)),
10164
+ provenance: {
10165
+ document: "research/sources/tra-spec/AT1-Chapter3-2025.2-full.txt",
10166
+ retrieved: "2026-08-29",
10167
+ revision: "AT1 Chapter 3, 2025.2 — no fillable PDF exists for this schedule; partial (SFEDE/CFRE per-country lines only)"
10168
+ }
10169
+ },
8210
10170
  AT1_SCHEDULE_16,
8211
10171
  AT1_SCHEDULE_17,
8212
10172
  AT1_SCHEDULE_18,
8213
10173
  AT1_SCHEDULE_20,
8214
10174
  AT1_SCHEDULE_21,
8215
10175
  AT1_SCHEDULE_29,
10176
+ AT1_SCHEDULE_8,
10177
+ AT1_SCHEDULE_4,
10178
+ AT1_SCHEDULE_11,
10179
+ AT1_SCHEDULE_6,
10180
+ AT1_SCHEDULE_7,
10181
+ AT1_SCHEDULE_5,
10182
+ AT1_SCHEDULE_9,
8216
10183
  AT4970
8217
10184
  ];
8218
10185
  const BY_ID = new Map(FORMS.map((f) => [f.id, f]));
@@ -8260,4 +10227,4 @@ function findBrokenLinks() {
8260
10227
  return problems;
8261
10228
  }
8262
10229
  //#endregion
8263
- 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 };
10230
+ export { SCHEDULE_2_CARRYFORWARD_YEARS as $, AT1_TAX_PAYABLE_LINE as $t, SCHEDULE_8_CCA_LINE as A, CONTINUITY_CAPTIONS as At, SCHEDULE_5_JURISDICTIONS as B, AT1_SCHEDULE_17_RESERVES 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_SCHEDULE_20_POOLS as Ft, SCHEDULE_4_LPP_CARRYFORWARD_YEARS as G, AT1_SCHEDULE_12 as Gt, SCHEDULE_5_SALARIES_OFFSET as H, AT1_SCHEDULE_16_CARRYFORWARD_LINE as Ht, SCHEDULE_7_PASSIVE_INCOME_THRESHOLD as I, AT1_SCHEDULE_18 as It, UnclassifiedLineError as J, AT1_SCHEDULE_2 as Jt, SCHEDULE_4_NON_CAPITAL_CARRYFORWARD_YEARS as K, AT1_SCHEDULE_12_PAIRS as Kt, T2_SCHEDULE_7 as L, AT1_SCHEDULE_18_CATEGORIES as Lt, SCHEDULE_8_RECAPTURE_LINE as M, scheduleTwentyOneLineId as Mt, SCHEDULE_8_TERMINAL_LOSS_LINE as N, AT1_DONATION_CARRYFORWARD_YEARS as Nt, SCHEDULE_13_RESERVE_ROWS as O, AT1_SCHEDULE_21 as Ot, T2_SCHEDULE_8 as P, AT1_SCHEDULE_20 as Pt, T2_SCHEDULE_3 as Q, AT1_JACKET as Qt, SCHEDULE_6_GRIDS as R, AT1_SECTION_34_2_GROSS_UP 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_13 as Ut, SCHEDULE_5_REVENUE_OFFSET as V, AT1_SCHEDULE_16 as Vt, SCHEDULE_4_CARRYBACK_YEARS as W, AT1_SCHEDULE_13_COLUMNS as Wt, SCHEDULE_3_ELIGIBLE_PAID_LINE as X, AT1_BALANCE_CREDIT_LINES as Xt, buildFields as Y, AT1_SCHEDULE_1 as Yt, SCHEDULE_3_TAXABLE_PAID_LINE as Z, AT1_BALANCE_LINE as Zt, 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, AT4970 as en, 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, CONTINUITY_ORDER 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_SCHEDULE_10 as qt, findBrokenLinks as r, SCHEDULE_1_LINE_BY_NUMBER as rt, T2_SCHEDULE_130 as s, fieldsInSection as st, FORMS as t, AT4970_JURISDICTIONS as tn, 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_17 as zt };