@classytic/ca-tax 0.0.20 → 0.0.22

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/index.d.mts CHANGED
@@ -144,6 +144,26 @@ interface FormField {
144
144
  from?: FormLineRef;
145
145
  /** Where the figure goes, when the form says to enter it elsewhere. */
146
146
  to?: FormLineRef;
147
+ /**
148
+ * What the form itself prints over the box to say where the figure is taken
149
+ * from, verbatim — `'Federal Schedule 1 line 403'`,
150
+ * `'Schedule 15 lines 007 + 019 +031'`, `'Schedule 16 line 016 OR line 20'`.
151
+ *
152
+ * Distinct from both neighbours, and it needs to be:
153
+ *
154
+ * `from` is the STRUCTURED link, and can only exist where the print names
155
+ * exactly one line. Roughly a quarter of AT1 Schedule 12's sources
156
+ * are sums, a conditional, or a multiplier — no single ref states
157
+ * them, and picking one line out of a sum states a source the form
158
+ * does not.
159
+ * `note` is THIS codebase's own explanation, as its own doc says. Putting
160
+ * the page's words there mixes the two, and leaves a renderer no
161
+ * way to show the printed source as the source.
162
+ *
163
+ * So: set `sourceText` for every box the form annotates, and `from` as well
164
+ * for the subset that names one line.
165
+ */
166
+ sourceText?: string;
147
167
  /**
148
168
  * Anything a reader needs that the caption does not say — a cap, a statutory
149
169
  * reference, a trap. This is the field that stops knowledge decaying into
@@ -168,12 +188,122 @@ interface FormSection {
168
188
  page?: number;
169
189
  /** Shown under the heading — the guidance a preparer needs at that point. */
170
190
  description?: string;
191
+ /**
192
+ * Text the form prints immediately BEFORE this section's heading, verbatim.
193
+ *
194
+ * Distinct from `description` for the same reason `FormField.sourceText` is
195
+ * distinct from `FormField.note`: that is this codebase's own guidance, this
196
+ * is the page's own words.
197
+ *
198
+ * AT1 Schedule 20 is why it exists. Between the gifts continuity and the
199
+ * carryforward-by-year-of-origin block, the page sets a paragraph in bold
200
+ * telling a preparer where to enter a medicine-gift claim — on Schedule 12,
201
+ * not here. It belongs to neither block; it is not a footnote (nothing marks
202
+ * it, and it is set inline rather than in the margin); and it is not a line,
203
+ * so no `FormField` can hold it. Put in `description` it would read as our
204
+ * advice about the block beneath it, which it is not about at all.
205
+ */
206
+ printedBefore?: string;
207
+ /**
208
+ * Text the form prints inside this box, AFTER its last numbered line.
209
+ *
210
+ * The mirror of `printedBefore`, and needed for the same reason: it is the
211
+ * page's own words, so it cannot go in `description`, and it is not a line,
212
+ * so no `FormField` can hold it.
213
+ *
214
+ * AT1 Schedule 1's first box is why. It contains one line — 001, "Is the
215
+ * corporation associated with one or more Canadian-controlled private
216
+ * corporations?" — and then, in bold beneath it, `If "Yes", complete AREA A
217
+ * on page 2.` That instruction is the entire reason the question is asked,
218
+ * and {@link PrintedBlockHeading} cannot carry it: `aboveLine` needs a line
219
+ * BELOW the text, and there is none — 001 is the last line in the box. (On
220
+ * AT1 Schedule 29 the equivalent instruction does have a line beneath it,
221
+ * line 102, so that one is a block heading.)
222
+ */
223
+ printedAfter?: string;
171
224
  /**
172
225
  * Continuation and overflow sections a typical return leaves empty. The
173
226
  * interface may collapse these; the data still transmits.
174
227
  */
175
228
  secondary?: boolean;
176
229
  }
230
+ /**
231
+ * A heading the page prints INSIDE a section, above the lines it governs.
232
+ *
233
+ * `FormSection` cannot hold this: a section is a titled box, and these are
234
+ * headings *within* one box. Inventing a section per heading is the wrong fix —
235
+ * it draws a boundary the page does not, and doing it on AT1 Schedule 18 had to
236
+ * be reverted (see the note on that file's `SECTIONS`).
237
+ *
238
+ * Lives here rather than beside the first schedule that needed it, because the
239
+ * second one proved it general. Two quite different pages print these:
240
+ *
241
+ * AT1 Schedule 18 one line of bold text over lines 077-079, naming the
242
+ * flow-through-share case the pair exists for — without it
243
+ * neither caption says WHICH property.
244
+ * AT1 Schedule 29 the grant calculation's own structure. "Part I calculation:
245
+ * Non-Associated and Associated at 8%", then "Part II
246
+ * calculation: ... at 12%" with "(a) Non-Associated" and
247
+ * "(b) Associated" beneath it. Lines 112 and 125 are two
248
+ * mutually exclusive formulas for the same credit, and these
249
+ * four headings are the only thing on the page that says so.
250
+ *
251
+ * Two headings may share an `aboveLine` — Schedule 29 stacks "Part II
252
+ * calculation" and "(a) Non-Associated" over line 112 — so a renderer prints
253
+ * every match, in array order.
254
+ */
255
+ interface PrintedBlockHeading {
256
+ /** The printed line the heading stands immediately above. */
257
+ aboveLine: string;
258
+ /** Verbatim, including any trailing colon the page sets. */
259
+ text: string;
260
+ /**
261
+ * Which of `FormDefinition.footnotes` the page marks inside THIS text.
262
+ *
263
+ * A footnote's anchor is not always a numbered box. AT1 Schedule 1's Area A
264
+ * opens with a paragraph reading `the "base amount"* of $200,000`, and that
265
+ * asterisk is the only thing on the page pointing at the note which states
266
+ * the Alberta Small Business Threshold history. Without this the glyph has
267
+ * nowhere to be drawn, and the note renders at the foot of the box with
268
+ * nothing leading to it.
269
+ */
270
+ footnoteMarks?: readonly number[];
271
+ }
272
+ /**
273
+ * Where on the page a footnote is printed, and the glyph that marks it.
274
+ *
275
+ * `FormDefinition.footnotes` is a flat list, and a renderer given only that can
276
+ * do one thing with it: print all of them at the bottom. Most forms print them
277
+ * at the foot of the BOX they belong to, mid-page — AT1 Schedule 1 sets its
278
+ * partnership note directly under line 015, and its three Area A notes directly
279
+ * under the Area A table, a page away from each other.
280
+ *
281
+ * ── Why the glyph is data and not derivable ─────────────────────────────────
282
+ *
283
+ * Because the asterisk runs RESTART at every box. On AT1 Schedule 29 page 2 the
284
+ * expenditure-limit box runs "*" then "**" and the grant-calculation box below
285
+ * it starts over at "*" — so one footnote index is "*" and a later one is "*"
286
+ * again, meaning a leap-year rule and a Base Amount rule respectively. Nothing
287
+ * about a footnote's position in the array tells you that. Numbering them 1..n
288
+ * instead would be legible and would not be the page.
289
+ *
290
+ * `mark` is absent where the page anchors a note WITHOUT a glyph: Schedule 29
291
+ * page 3 prints a "Notes" block whose entries open with the line they govern
292
+ * ("Line 270: total must not exceed line 208"). Same relationship, no asterisk
293
+ * to print, and inventing one sends a reader hunting the page for it.
294
+ *
295
+ * A footnote with no placement entry is an unmarked instruction block — the
296
+ * header text a form prints above its first heading, which belongs at the foot
297
+ * of the rendering with nothing pointing at it.
298
+ */
299
+ interface FormFootnotePlacement {
300
+ /** Index into {@link FormDefinition.footnotes}. */
301
+ footnote: number;
302
+ /** The {@link FormSection} id at whose foot the page prints it. */
303
+ section: string;
304
+ /** The glyph the page prints — `'*'`, `'**'`, `'***'`. */
305
+ mark?: string;
306
+ }
177
307
  /** Where a definition came from, so a reader can check it against the original. */
178
308
  interface FormProvenance {
179
309
  /** Repository-relative path to the primary document. */
@@ -209,8 +339,22 @@ interface FormDefinition {
209
339
  * `research/field-maps/*.md` doc where one exists — those are already
210
340
  * verified against the live form and often name the trap, not just the
211
341
  * rule — rather than re-transcribing the PDF from scratch.
342
+ *
343
+ * Order is load-bearing: {@link FormField.footnoteMarks} and
344
+ * {@link footnotePlacement} both index into this array by POSITION, so
345
+ * inserting one silently repoints every mark after it. Put the marked ones
346
+ * first, in page order, and say so in a comment beside the array.
212
347
  */
213
348
  footnotes?: readonly string[];
349
+ /**
350
+ * Which box the page prints each footnote at the foot of, and with what
351
+ * glyph — see {@link FormFootnotePlacement}.
352
+ *
353
+ * Optional, and its absence means what it always meant: a renderer prints
354
+ * the whole list at the bottom. Supply it for any form whose notes are set
355
+ * mid-page, which is most of them.
356
+ */
357
+ footnotePlacement?: readonly FormFootnotePlacement[];
214
358
  }
215
359
  /** Index a definition's fields by line number. */
216
360
  declare function indexByLine(form: FormDefinition): ReadonlyMap<string, FormField>;
@@ -234,7 +378,120 @@ declare const AT4970: FormDefinition;
234
378
  declare const AT4970_JURISDICTIONS: readonly ["alberta", "britishColumbia", "manitoba", "newBrunswick", "newfoundlandAndLabrador", "northwestTerritories", "novaScotia", "nunavut", "ontario", "princeEdwardIsland", "quebec", "saskatchewan", "yukon", "other"];
235
379
  //#endregion
236
380
  //#region src/t2/at1/forms/jacket.d.ts
381
+ /**
382
+ * Nine lines the RSI still carries and the printed AT1 no longer shows.
383
+ *
384
+ * Four are closed programmes (064, 071, 074, 081) and five are contact details
385
+ * the current form dropped (018-024 assessment address, 027 fax, 093 NOA fax).
386
+ * Every one keeps being emitted where the specification marks it mandatory —
387
+ * the RSI format stays stable across reassessment years — and every one needs
388
+ * a reader to know it is not on the page they are holding, which is what the
389
+ * notes below say.
390
+ *
391
+ * Stated here AND derivable from {@link PRINTED_ORDER} (a field absent from
392
+ * that list has no printed position), which is deliberate: a test asserts the
393
+ * two agree, so transcribing a line into the printed order without striking it
394
+ * from this list — or the reverse — fails rather than leaving the definition
395
+ * quietly self-contradictory.
396
+ */
397
+ declare const AT1_JACKET_LINES_NOT_PRINTED: readonly string[];
398
+ /**
399
+ * The coded answers behind the printed tick boxes.
400
+ *
401
+ * Six of the jacket's fields are `kind: 'code'`, and a code field with no code
402
+ * list is unusable in both directions: an interface cannot offer the choices,
403
+ * and a reader given a filed "3" at line 051 cannot tell whether the
404
+ * corporation went bankrupt or amalgamated. The page prints every option with
405
+ * its number beside a tick box; nothing else in this package held them.
406
+ *
407
+ * 028 is `code` too and is NOT here: its value is a four-digit SIC code from a
408
+ * published classification of hundreds of entries, not a printed list of five.
409
+ */
410
+ interface At1JacketCodeOption {
411
+ /** The digit the page prints beside the tick box, and the value transmitted. */
412
+ code: string;
413
+ /** The option's label, verbatim. */
414
+ label: string;
415
+ }
416
+ declare const AT1_JACKET_CODE_OPTIONS: Readonly<Record<string, readonly At1JacketCodeOption[]>>;
417
+ /**
418
+ * "Basic Alberta Tax Payable" — the six day counts, lettered (A) to (F).
419
+ *
420
+ * The page does not apply one rate to the year. It asks for the number of days
421
+ * the tax year spent in each of five rate bands, and then prorates. None of
422
+ * the six boxes has a line number, so no `FormField` can hold them, and
423
+ * without them line 068's caption — "Total (line G + line H + line I + line J
424
+ * + line K)" — names five letters defined nowhere.
425
+ */
426
+ interface At1JacketDayBand {
427
+ /** The letter the page prints beside the box, parentheses included. */
428
+ letter: string;
429
+ /** The date range, verbatim. */
430
+ label: string;
431
+ }
432
+ declare const AT1_JACKET_DAY_BANDS: readonly At1JacketDayBand[];
433
+ /**
434
+ * The five prorated tax amounts, lettered (G) to (K), that total to line 068.
435
+ *
436
+ * `rate` is not on the page as a number — the page prints it inside the
437
+ * formula, as `.100` — and it is carried separately for one reason: it makes
438
+ * this table a CHECK on `AB_GENERAL_RATE_BANDS` rather than a second copy of
439
+ * it. A test asserts the five multipliers printed here are the five rates that
440
+ * module holds, in band order. That is the same arrangement as
441
+ * `AT1_SCHEDULE_1_RATE_PERIODS`, and it earned its keep there.
442
+ */
443
+ interface At1JacketRateRow {
444
+ /** The letter the page prints beside the box, parentheses included. */
445
+ letter: string;
446
+ /** The arithmetic, verbatim, trailing "=" and capital X included. */
447
+ formula: string;
448
+ /** Which {@link AT1_JACKET_DAY_BANDS} letter the formula divides by (F). */
449
+ daysLetter: string;
450
+ /** The multiplier the formula states, as a number. */
451
+ rate: number;
452
+ }
453
+ declare const AT1_JACKET_RATE_ROWS: readonly At1JacketRateRow[];
454
+ /**
455
+ * The headings and instruction blocks the page prints INSIDE a box.
456
+ *
457
+ * Three of these carry routing a preparer cannot get from any caption. The two
458
+ * stacked over line 062 decide whether Schedule 12 is required at all and
459
+ * which federal lines 062 must equal; the paragraph over 101 is the
460
+ * certification itself, and it is the sentence the signature attests to.
461
+ *
462
+ * Two share `aboveLine: '062'` — the page sets the Schedule 12 warning, then
463
+ * the box heading, then the federal-equality instruction. A renderer prints
464
+ * every match, in array order.
465
+ */
466
+ declare const AT1_JACKET_BLOCK_HEADINGS: readonly PrintedBlockHeading[];
237
467
  declare const AT1_JACKET: FormDefinition;
468
+ /**
469
+ * The "For Department Use" box, and the one printed number this file does not
470
+ * model.
471
+ *
472
+ * Page 1 opens with a bordered box headed "For Department Use" holding three
473
+ * numbered fields — 001, 004 and 005 — and a pre-printed "01RT". Two of them
474
+ * are known: 005 is the Software Approval Code the specification tabulates,
475
+ * and 001 is the association answer four accepted certification samples file
476
+ * as the first value under Schedule 000.
477
+ *
478
+ * **004 is printed and is not here.** The specification's cross-reference
479
+ * tables (as extracted) have no row for it, no certification sample files it,
480
+ * and the page gives it no caption — the box heading is the only text near it.
481
+ * So there is nothing to transcribe: a field captioned "For Department Use"
482
+ * would be this codebase guessing, and the package's first rule is that a
483
+ * caption comes from the primary document or the line does not go in. A wrong
484
+ * line is worse than a missing one.
485
+ *
486
+ * Recorded here rather than left silent so the gap is findable. What would
487
+ * close it: a row for 000004 in §3.2.3.1, or a sample that files it.
488
+ */
489
+ declare const AT1_JACKET_DEPARTMENT_USE: Readonly<{
490
+ heading: "For Department Use"; /** Printed beside 005, pre-filled on the form. */
491
+ preprinted: "01RT"; /** The three numbered boxes inside it, in printed order. */
492
+ lines: readonly string[]; /** The one with no caption anywhere, and therefore no field. */
493
+ unmodelled: readonly string[];
494
+ }>;
238
495
  /** 000080001 — Alberta tax payable, before credits. */
239
496
  declare const AT1_TAX_PAYABLE_LINE: string;
240
497
  /** 000090001 — the balance, signed. Negative is an overpayment. */
@@ -249,6 +506,11 @@ declare const AT1_BALANCE_LINE: string;
249
506
  * 088 = 129 + 082 + 085 + 086 + 115 + 087
250
507
  * 090 = 080 − 088
251
508
  *
509
+ * Both of those are now line 088's and line 090's own captions in this
510
+ * definition, verbatim, and a test asserts this array names the same six lines
511
+ * the 088 caption does — so the claim below is checked against the page
512
+ * instead of resting on this comment.
513
+ *
252
514
  * The Net File specification (AT1-Chapter3 §3.2.3.1, line 090) instead says
253
515
  * `000080 - (000081 + 000082 + 00085 + 000086 + 000087)` — which includes 081,
254
516
  * the Alberta SR&ED tax credit, and omits BOTH 129 (Innovation Employment
@@ -272,21 +534,342 @@ declare const AT1_BALANCE_LINE: string;
272
534
  * so a preparer sees the disagreement before transmitting rather than
273
535
  * discovering it on assessment.
274
536
  *
275
- * 088 itself is NOT in this list and is not filed: it exists only on the
276
- * printed page. The RSI carries the parts and 090.
537
+ * 088 is in the form DEFINITION (it is printed, and page-2 arithmetic does not
538
+ * close without it) but is not filed and is not in this list: the RSI carries
539
+ * the parts and 090.
277
540
  */
278
541
  declare const AT1_BALANCE_CREDIT_LINES: readonly string[];
542
+ /**
543
+ * What {@link AT1_BALANCE_CREDIT_LINES} would be under the specification's own
544
+ * line-090 rule. Kept so the review layer can compute both and report the
545
+ * difference rather than asserting one is right in silence.
546
+ */
547
+ declare const AT1_BALANCE_CREDIT_LINES_PER_SPEC: readonly string[];
548
+ /**
549
+ * The deductions 080 subtracts, per the PRINTED AT1's line 079.
550
+ *
551
+ * Three lines, where §3.2.3.1's own 080 formula subtracts five: it adds 071
552
+ * and 074, both always nil and both absent from the printed page. The two
553
+ * therefore agree for every filable year, and `at1TaxPayableDeductions`
554
+ * deliberately follows the SPECIFICATION rather than this — a mandatory field
555
+ * must be output even when nil, and the filing layer reconciles against the
556
+ * formula TRA recomputes with. This exists so the printed subtotal can be
557
+ * rendered from the same data, and so the difference is stated once rather
558
+ * than rediscovered.
559
+ */
560
+ declare const AT1_PRINTED_DEDUCTION_LINES: readonly string[];
279
561
  //#endregion
280
562
  //#region src/t2/at1/forms/schedule1.d.ts
563
+ /**
564
+ * One column of the "Calculation of the Alberta Small Business Deduction" table.
565
+ *
566
+ * The page numbers none of the seven — only the total at 031 below them — so
567
+ * they carry a letter and a heading and nothing else, the same arrangement as
568
+ * {@link AT1_SCHEDULE_4_COLUMNS} and {@link AT1_SCHEDULE_18_COLUMNS}.
569
+ */
570
+ interface AlbertaSbdColumn {
571
+ column: 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G';
572
+ /** The heading printed beneath the letter, verbatim, arithmetic included. */
573
+ heading: string;
574
+ /** Which of `AT1_SCHEDULE_1.footnotes` the page marks against this column. */
575
+ footnoteMarks?: readonly number[];
576
+ }
577
+ declare const AT1_SCHEDULE_1_COLUMNS: readonly AlbertaSbdColumn[];
578
+ /**
579
+ * The six rate periods the table PRE-PRINTS, with their percentage and rate.
580
+ *
581
+ * These are not preparer input and not engine input — they are printed cell
582
+ * content on revision 2023-04, and a view that draws the table without them
583
+ * draws six blank rows. Transcribed here for that reason, and for no other: the
584
+ * engine does not read them (`at1-tax.ts` works from `AB_GENERAL_RATE_BANDS` and
585
+ * `SMALL_BUSINESS_RATE`, and derives the deduction as a residual — see line
586
+ * 031's note). A test cross-checks every `sbdRate` below against those two, so
587
+ * this table is a CHECK on the rate book rather than a second copy of it.
588
+ *
589
+ * ── The sixth band, and what it settles ─────────────────────────────────────
590
+ *
591
+ * There are six rows here and only five general-rate bands, because Alberta cut
592
+ * the general rate at 2015-07-01, 2019-07-01, 2020-01-01 and 2020-07-01 but cut
593
+ * the SMALL BUSINESS rate at 2017-01-01 — a date the general table has no
594
+ * reason to know about. Subtracting the two gives this column exactly:
595
+ *
596
+ * 2009-04-01 10% − 3% = 7% 2019-07-01 11% − 2% = 9%
597
+ * 2015-07-01 12% − 3% = 9% 2020-01-01 10% − 2% = 8%
598
+ * 2017-01-01 12% − 2% = 10% 2020-07-01 8% − 2% = 6%
599
+ *
600
+ * That is worth more than the table: `alberta-rates.ts` records
601
+ * SMALL_BUSINESS_RATE (2%) as a GAP, appearing "in NO vendored source" because
602
+ * the AT1 spec states no small-business rate at all. This page is a vendored
603
+ * primary source, and its column F pins the rate to 2% after 2016-12-31 and 3%
604
+ * before — see that module's own `@statutory-data` block, now updated.
605
+ */
606
+ interface AlbertaSbdRatePeriod {
607
+ /** The period label printed in column A's row, verbatim. */
608
+ label: string;
609
+ /** Column B, verbatim — the same on every row of this revision. */
610
+ percentage: string;
611
+ /** Column F, as printed: a three-decimal rate. */
612
+ sbdRate: number;
613
+ }
614
+ declare const AT1_SCHEDULE_1_RATE_PERIODS: readonly AlbertaSbdRatePeriod[];
615
+ /** The row label the page prints beneath column A's six periods. */
616
+ declare const AT1_SCHEDULE_1_TOTAL_DAYS_LABEL = "Total Days in the Taxation Year:";
617
+ /**
618
+ * Area A's four printed columns.
619
+ *
620
+ * 044 was absent entirely — the percentage of the business limit, which the
621
+ * page's own `**` note says MUST equal the federal Schedule 23 split and which
622
+ * column 045 is computed from ("$200,000 X % in Col 044"). Without it the
623
+ * agreement table showed the allocated dollars with nothing saying where the
624
+ * split came from.
625
+ */
626
+ interface SbdAgreementColumn {
627
+ line: string;
628
+ /** The heading printed above the column, verbatim. */
629
+ heading: string;
630
+ kind: 'text' | 'code' | 'rate' | 'money';
631
+ /** What the page prints in this column's cell of the "Totals:" row. */
632
+ total?: string;
633
+ }
634
+ declare const AT1_SCHEDULE_1_AGREEMENT_COLUMNS: readonly SbdAgreementColumn[];
635
+ /** The label the page prints on Area A's totals row. */
636
+ declare const AT1_SCHEDULE_1_AGREEMENT_TOTALS_LABEL = "Totals:";
637
+ /**
638
+ * AREA B — "Determination of the Value for Line 015".
639
+ *
640
+ * ── Why this is a companion export and not a section ────────────────────────
641
+ *
642
+ * Because none of it is numbered. Area B is a worksheet of ELEVEN lettered
643
+ * amounts, (a) through (k), and a `FormField` needs a line: under the
644
+ * `tra-line-item-id` scheme `validateFormDefinition` requires nine digits, and
645
+ * `(c)` is not a line number in any scheme. A `FormSection` is no use either —
646
+ * one with no fields is itself a validation error. So the page's own letters
647
+ * stay the identifiers, exactly as {@link AT1_SCHEDULE_2_FORMULAS} keeps its
648
+ * A/B/C/D column letters.
649
+ *
650
+ * ── Not modelling it was the same mistake twice ─────────────────────────────
651
+ *
652
+ * This module's doc comment said Area B was "numbered only (a)-(k), so none of
653
+ * it has a line to file against" and left it out. AT1 Schedule 2's doc comment
654
+ * already answers that, about its own Area B, in as many words: *"That is a
655
+ * reason not to COMPUTE them. It was not a reason to leave them out of the form
656
+ * definition, and treating the two as the same thing is why the schedule
657
+ * reached the interface looking like a four-line form."*
658
+ *
659
+ * A preparer with a short taxation year or an associated group over $10,000,000
660
+ * of taxable capital MUST work this cascade to get line 015, and line 015 feeds
661
+ * column C, which feeds the deduction. Leaving it out made the schedule look as
662
+ * though it ended at line 013 and 015 came from nowhere.
663
+ *
664
+ * ── The cascade has three exits, and that is the whole difficulty ───────────
665
+ *
666
+ * Area B is not a formula; it is a decision tree with three places a preparer
667
+ * may stop, and the page marks each in bold:
668
+ *
669
+ * (a) no adjustment required → enter (a)
670
+ * (b) short year, group under $10,000,000 → enter (b)
671
+ * (k) everything else → enter (j) or (k)
672
+ *
673
+ * Getting the exit wrong is how a return claims the wrong small business
674
+ * threshold, so `exitTo015` carries each instruction verbatim on the step it
675
+ * follows rather than being flattened into prose.
676
+ *
677
+ * ── Two printed collisions, both preserved ─────────────────────────────────
678
+ *
679
+ * The page labels TWO different amounts `(c)` — one for taxation years starting
680
+ * before 2022-04-07 and one for after, with different divisors ($11,250 vs
681
+ * $90,000). And it uses `(i)` for both a section number ("(i) Prorated Base
682
+ * Amount…") and, further down, an amount ("Business Limit the CCPC assigns per
683
+ * line 515 of the federal T2 divided by 2.5 … (i)"). Neither is a transcription
684
+ * error; de-duplicating either would make this stop matching the page.
685
+ */
686
+ interface AlbertaBaseAmountStep {
687
+ /** The letter the page labels this amount with, in its own parentheses. */
688
+ letter: string;
689
+ /** The text printed to the left of the box, verbatim. */
690
+ label: string;
691
+ /** The arithmetic the page sets beside the label, where it sets any. */
692
+ formula?: string;
693
+ /** A sub-heading the page prints immediately above this step. */
694
+ heading?: string;
695
+ /**
696
+ * The bold instruction printed after this amount, naming it as a place the
697
+ * cascade may STOP and line 015 be taken from. Absent on intermediate steps.
698
+ */
699
+ exitTo015?: string;
700
+ }
701
+ /** The heading the page gives this box. */
702
+ declare const AT1_SCHEDULE_1_AREA_B_TITLE = "Area B - Determination of the Value for Line 015";
703
+ /**
704
+ * What the page prints between the heading and the first amount: the rule, then
705
+ * the two adjustments by name. Both are conditions, and a preparer who reads
706
+ * only the worksheet below cannot tell whether either applies to them.
707
+ */
708
+ declare const AT1_SCHEDULE_1_AREA_B_PREAMBLE: readonly string[];
709
+ declare const AT1_SCHEDULE_1_AREA_B_STEPS: readonly AlbertaBaseAmountStep[];
710
+ /**
711
+ * The "Large Corporations" block — what A and B mean in the two (c) formulas.
712
+ *
713
+ * Printed between the (c) amounts and the passive-income block, and without it
714
+ * the (c) rows read "Small business threshold A X B / $11,250" against two
715
+ * letters defined nowhere. B has three mutually exclusive cases turning on the
716
+ * association history across TWO years, which is the part a preparer is most
717
+ * likely to get wrong: cases 1 and 2 differ only in which year's taxable
718
+ * capital is used.
719
+ */
720
+ declare const AT1_SCHEDULE_1_AREA_B_LARGE_CORPORATIONS: readonly string[];
721
+ /**
722
+ * The headings and instructions the page prints INSIDE a box.
723
+ *
724
+ * Six of them, and not one was here. Three carry real routing: "Corporations
725
+ * with permanent establishments only in Alberta, ignore lines 019, 020 and 021
726
+ * and go directly to the table below" is the difference between three boxes a
727
+ * preparer must fill and three they must skip, and nothing in 019/020/021's own
728
+ * captions says so.
729
+ *
730
+ * Two stack over line 041 — "Allocation Agreement:" then the $200,000
731
+ * paragraph, which is where the page's first "*" is anchored (on the words
732
+ * "base amount"). A renderer prints every match, in array order.
733
+ */
734
+ declare const AT1_SCHEDULE_1_BLOCK_HEADINGS: readonly PrintedBlockHeading[];
281
735
  declare const AT1_SCHEDULE_1: FormDefinition;
282
736
  //#endregion
283
737
  //#region src/t2/at1/forms/schedule2.d.ts
738
+ /**
739
+ * Column I — the Alberta Allocation Factor, one per formula.
740
+ *
741
+ * Every row on both pages has an I cell and NONE of them carries a line
742
+ * number: the `▪` marking a transmitted box is absent throughout that column.
743
+ * There is one factor per return whatever formula produced it, and it is filed
744
+ * once, on the jacket at 000065. A `FormField` per I cell would invent nine
745
+ * lines the form does not have.
746
+ *
747
+ * But the cell is still on the page, and a preparer reading the grid needs to
748
+ * see the arithmetic that turns their four inputs into the factor. So it is
749
+ * carried here instead — beside the `FormDefinition` rather than inside it,
750
+ * the same way {@link AT1_SCHEDULE_21_POOLS} and `AT1_SCHEDULE_13_COLUMNS`
751
+ * carry grid shapes that `FormField` has no room for.
752
+ *
753
+ * `factor` is the page's own notation, verbatim — "x 1/2", not "× ½".
754
+ */
755
+ interface AlbertaAllocationFormula {
756
+ /** The matching `FormSection.id` on {@link AT1_SCHEDULE_2}. */
757
+ section: string;
758
+ /** The regulation the page names for this type of operation. */
759
+ regulation: string;
760
+ /** Column I as printed, in the page's own letters. */
761
+ factor: string;
762
+ /**
763
+ * Which field each letter in {@link factor} refers to, as the printed
764
+ * three-digit number.
765
+ *
766
+ * The page heads its columns A, B, C, D — but those letters appear nowhere
767
+ * except the column headings, and a consumer that lists the fields by line
768
+ * number (as every one of ours does) renders "(A/B + C/D) x 1/2" against
769
+ * rows labelled 002, 004, 006 and 008. The formula then names nothing the
770
+ * reader can see.
771
+ *
772
+ * So the letters stay — they are what the form prints — and this says what
773
+ * they stand for, leaving the substitution to whoever is displaying it.
774
+ */
775
+ columns: Readonly<Record<string, string>>;
776
+ /** Extra wording the page prints under the factor, where it prints any. */
777
+ note?: string;
778
+ }
779
+ /** Where every factor goes, whichever formula produced it — printed above the I column on both pages. */
780
+ declare const AT1_SCHEDULE_2_FACTOR_DESTINATION: FormLineRef;
781
+ declare const AT1_SCHEDULE_2_FORMULAS: readonly AlbertaAllocationFormula[];
284
782
  declare const AT1_SCHEDULE_2: FormDefinition;
285
783
  //#endregion
286
784
  //#region src/t2/at1/forms/schedule3.d.ts
785
+ /**
786
+ * One column of a carry-forward-by-year-of-origin table.
787
+ *
788
+ * Pages 2 and 3 carry three of these tables — one per credit — and none of it
789
+ * was modelled. `computeSchedule3`'s own doc comment explains why the ENGINE
790
+ * does not compute the ITC/CITC split (the spec gives no allocation rule, and
791
+ * every business rule on those lines reconciles back to aggregates it already
792
+ * produces), and that reasoning stands. It is not a reason to leave two printed
793
+ * pages out of a transcription of the form, which is the same mistake AT1
794
+ * Schedules 1 and 29 had to be corrected for.
795
+ */
796
+ interface VintageColumn {
797
+ /** The printed line. Each row of the table is one OCCURRENCE of it. */
798
+ line: string;
799
+ /** The column heading, verbatim, including any arithmetic it states. */
800
+ heading: string;
801
+ kind: 'code' | 'date' | 'money';
802
+ role: 'input' | 'computed';
803
+ /**
804
+ * Year-of-origin indexes the page SHADES OUT for this column — 0 is
805
+ * "Current", 1 the 1st preceding taxation year, and so on.
806
+ *
807
+ * Half of what these tables say is which cells do not apply, and a flat
808
+ * field list cannot hold it. A shaded cell is not an empty one: the page is
809
+ * stating that the quantity does not exist for that vintage.
810
+ */
811
+ shadedYears?: readonly number[];
812
+ /** True where the page prints a cell for this column in the "Totals:" row. */
813
+ totalled?: boolean;
814
+ /** Which of `AT1_SCHEDULE_3.footnotes` the page marks against this heading. */
815
+ footnoteMarks?: readonly number[];
816
+ }
817
+ interface VintageTable {
818
+ /** Matches the `FormSection` id its columns belong to. */
819
+ section: 'itc-vintage' | 'citc-vintage' | 'apitc-vintage';
820
+ /** The heading printed above the table, verbatim. */
821
+ title: string;
822
+ /**
823
+ * The highest preceding-year row the table prints.
824
+ *
825
+ * FOUR for the Investor Tax Credit and TEN for the other two — the ITC
826
+ * carries forward five years including the current one, the CITC and APITC
827
+ * eleven. Rendering all three at the same depth would invent five ITC
828
+ * vintages the form has no rows for.
829
+ */
830
+ maxPrecedingYear: number;
831
+ columns: readonly VintageColumn[];
832
+ }
833
+ declare const AT1_SCHEDULE_3_VINTAGE_TABLES: readonly VintageTable[];
834
+ /** The label the page prints on each table's totals row. */
835
+ declare const AT1_SCHEDULE_3_VINTAGE_TOTALS_LABEL = "Totals:";
836
+ /**
837
+ * The row label for one year-of-origin index, as the page prints it.
838
+ *
839
+ * "Current", then "1st preceding taxation year" upward. The page sets the
840
+ * ordinal and the words "preceding taxation year" on separate lines; joined
841
+ * here, since nothing downstream can reproduce a two-line table cell.
842
+ */
843
+ declare function albertaVintageRowLabel(yearIndex: number): string;
287
844
  declare const AT1_SCHEDULE_3: FormDefinition;
288
845
  //#endregion
289
846
  //#region src/t2/at1/forms/schedule4.d.ts
847
+ /**
848
+ * The eight printed columns, A-H.
849
+ *
850
+ * THREE of them have no line number — C, D and G — and they are the whole
851
+ * derivation: C is the Alberta allocation factor, D prorates the income by it
852
+ * and by the jacket's own 068/066 ratio, and G nets the foreign tax against
853
+ * the federal credit and scales it the same way. H is then the lesser of D and
854
+ * G. Modelling only the five numbered boxes leaves the form showing an
855
+ * "Allowable Credit" with nothing behind it, which is how this definition
856
+ * stood: a reader could see 002/004/006/008/012 and not one of the three
857
+ * quantities that turns them into 012.
858
+ *
859
+ * `FormField` cannot hold an unnumbered column, so they live here — the same
860
+ * arrangement as `AT1_SCHEDULE_18_COLUMNS` and `AT1_SCHEDULE_2_FORMULAS`.
861
+ * Headings are the page's own, including its capital "X" for multiplication.
862
+ */
863
+ interface ForeignCreditColumn {
864
+ column: 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H';
865
+ /** The heading printed beneath the letter, verbatim. */
866
+ heading: string;
867
+ /** The printed line — absent on C, D and G, which the page does not number. */
868
+ line?: string;
869
+ /** Which of `AT1_SCHEDULE_4.footnotes` the page marks against this column. */
870
+ footnoteMarks?: readonly number[];
871
+ }
872
+ declare const AT1_SCHEDULE_4_COLUMNS: readonly ForeignCreditColumn[];
290
873
  declare const AT1_SCHEDULE_4: FormDefinition;
291
874
  //#endregion
292
875
  //#region src/t2/at1/forms/schedule10.d.ts
@@ -313,6 +896,38 @@ interface AlbertaReconcilingPair {
313
896
  */
314
897
  emitOnlyWhenDifferent: boolean;
315
898
  note?: string;
899
+ /**
900
+ * What the form prints in small type ABOVE each box — where that figure is
901
+ * to be taken from. Verbatim, including the page's own spacing quirks
902
+ * (`'Schedule 15 lines 007 + 019 +031'`) and its arithmetic.
903
+ *
904
+ * This is the only place the page says where a reconciling amount comes
905
+ * from, and it was not recorded anywhere: every pair reached the interface
906
+ * with a bare box, so a preparer had no way to know that line 004 is
907
+ * Schedule 13 line 027 without going back to the paper form.
908
+ *
909
+ * Not every source names a single line — several are sums
910
+ * (`'Schedule 15 lines 061 + 081'`), one is conditional
911
+ * (`'Schedule 16 line 016 OR line 20'`), one carries a multiplier
912
+ * (`'Schedule 21 line 061 x Inclusion Rate'`), and two are four-part
913
+ * composites. A string states all of them exactly; {@link federalFrom} /
914
+ * {@link albertaFrom} add the machine-readable link for the subset that
915
+ * does name exactly one line. Absent where the form prints nothing — the
916
+ * four farming-inventory rows have no Alberta source.
917
+ */
918
+ federalSource?: string;
919
+ albertaSource?: string;
920
+ /**
921
+ * The structured half of {@link federalSource} / {@link albertaSource},
922
+ * set ONLY where the printed text names exactly one line. The registry
923
+ * checks these against the target form, so a renumbered line fails the
924
+ * suite instead of shipping a citation that points nowhere — which a
925
+ * string alone cannot give us. Deliberately omitted for the sums and
926
+ * conditionals rather than picking one line out of them and implying the
927
+ * others do not matter.
928
+ */
929
+ federalFrom?: FormLineRef;
930
+ albertaFrom?: FormLineRef;
316
931
  }
317
932
  declare const AT1_SCHEDULE_12_PAIRS: readonly AlbertaReconcilingPair[];
318
933
  declare const AT1_SCHEDULE_12: FormDefinition;
@@ -353,7 +968,192 @@ declare const AT1_SCHEDULE_13_COLUMNS: readonly AlbertaCcaColumn[];
353
968
  declare const AT1_SCHEDULE_13: FormDefinition;
354
969
  //#endregion
355
970
  //#region src/t2/at1/forms/schedule15.d.ts
971
+ /**
972
+ * One labelled row of a two-column continuity table.
973
+ *
974
+ * `regular` and `successor` are each absent in two distinct cases the renderer
975
+ * must tell apart, which is what {@link shaded} exists for: the page either
976
+ * SHADES the cell out (the quantity does not exist on that side) or prints an
977
+ * open box with no number beside it (the "Amount Available" rows). Both look
978
+ * like "no line" in the data and mean opposite things on paper.
979
+ */
980
+ interface ResourceContinuityRow {
981
+ /** The row label, verbatim, as the page prints it once for both columns. */
982
+ label: string;
983
+ /** The printed line in the Regular Expenses column. */
984
+ regular?: string;
985
+ /** The printed line in the Successor Expenses column. */
986
+ successor?: string;
987
+ /**
988
+ * Which columns the page SHADES OUT on this row — the quantity does not
989
+ * exist for that side. Distinct from a cell that is simply unnumbered.
990
+ */
991
+ shaded?: readonly ('regular' | 'successor')[];
992
+ /**
993
+ * The page prints an open box in both columns and numbers neither — the
994
+ * "Amount Available" subtotal rows. Where each area anchors its
995
+ * negative-balance footnote, so it is load-bearing rather than decorative.
996
+ */
997
+ unnumbered?: boolean;
998
+ /**
999
+ * The page prints this row in a BOX OF ITS OWN, below the area's footnotes,
1000
+ * repeating the two column headings above it.
1001
+ *
1002
+ * One row on the whole schedule does this: "Foreign-source resource income"
1003
+ * (231 / 233) under Area F. It is not a continuity row — it neither adds to
1004
+ * nor deducts from the pool — it is the income figure that CAPS the Area F
1005
+ * claim, which is why the page sets it apart. Modelled as a row of Area F
1006
+ * rather than an area of its own because the page gives that box no heading,
1007
+ * and inventing one would be this codebase's words on a form definition.
1008
+ */
1009
+ separateBox?: boolean;
1010
+ /** Which of `AT1_SCHEDULE_15.footnotes` the page marks against this row. */
1011
+ footnoteMarks?: readonly number[];
1012
+ }
1013
+ /** One of the page's lettered AREA boxes. */
1014
+ interface ResourceContinuityArea {
1015
+ /** Matches the {@link FormSection} id its lines belong to. */
1016
+ section: string;
1017
+ /** The box heading, verbatim — 'AREA A - CONTINUITY OF EARNED DEPLETION BASE'. */
1018
+ title: string;
1019
+ /**
1020
+ * The line the page prints immediately under the box heading, verbatim.
1021
+ *
1022
+ * Area F's is routing, not description: "Foreign exploration and development
1023
+ * expenses are those that are not in respect of a country. If they are in
1024
+ * respect of a country, complete AREA G or H." A preparer who fills in Area
1025
+ * F for country-specific expenses has completed the wrong box, and nothing
1026
+ * in any caption says so.
1027
+ */
1028
+ subtitle?: string;
1029
+ /**
1030
+ * The two column headings, verbatim. **Absent on Area B**, which prints one
1031
+ * unheaded column — it has no successor side at all, and heading it
1032
+ * "Regular Expenses ($)" would invent a distinction the page does not draw.
1033
+ */
1034
+ columnHeadings?: readonly [string, string];
1035
+ rows: readonly ResourceContinuityRow[];
1036
+ /**
1037
+ * The bold instruction the page prints under the table, verbatim.
1038
+ *
1039
+ * Not a footnote and not a caption: it states the arithmetic that carries
1040
+ * the area's claim to AT1 Schedule 12, and AT1 Schedule 12's own definition
1041
+ * records the mirror of it in `albertaSource`. A test asserts the two agree,
1042
+ * so these strings are checked against a second page rather than trusted.
1043
+ */
1044
+ carryForward?: string;
1045
+ /**
1046
+ * The same instruction as structured data — the claim lines it names, and
1047
+ * the AT1 Schedule 12 line they total to.
1048
+ *
1049
+ * Stated rather than parsed out of {@link carryForward}: "Total lines 007 +
1050
+ * 019 + 031 and carry this amount forward to Schedule 12, line 022" holds
1051
+ * four three-digit numbers and only three of them are claims. A regex over
1052
+ * the printed sentence would have to know which, which is the knowledge
1053
+ * this field exists to hold. A test asserts every line named here appears in
1054
+ * the printed text, so the two cannot drift apart.
1055
+ */
1056
+ carryForwardTo?: {
1057
+ line: string;
1058
+ claims: readonly string[];
1059
+ };
1060
+ }
1061
+ /**
1062
+ * One column of a per-country table.
1063
+ *
1064
+ * Pages 5 and 6 are a different shape from every area before them. Areas A-F
1065
+ * are labelled ROWS with two columns; these are labelled COLUMNS with one row
1066
+ * per COUNTRY, so a printed line is a column and each row is one occurrence of
1067
+ * it — the same arrangement as {@link AT1_SCHEDULE_3_VINTAGE_TABLES}, where
1068
+ * the rows are years rather than countries.
1069
+ *
1070
+ * The page heads each column with a LETTER, and those letters are the only
1071
+ * vocabulary its footnotes and its own arithmetic have: "Amount available
1072
+ * (A+B+C-D)", "If an amount in column E is negative…", "the greater of the
1073
+ * total of all amounts in column H and 10% of the total of all amounts
1074
+ * available in column E". Drop the letters and none of that text resolves.
1075
+ */
1076
+ interface PerCountryColumn {
1077
+ /** The letter the page heads this column with. Absent on the country stub. */
1078
+ letter?: string;
1079
+ /** The heading, verbatim, including any arithmetic it states. */
1080
+ heading: string;
1081
+ /**
1082
+ * The printed line. **Absent on the four "Amount available" columns** (E, N,
1083
+ * FF, OO), which the page computes and numbers nowhere — and which are
1084
+ * exactly the columns its negative-balance footnotes are about.
1085
+ */
1086
+ line?: string;
1087
+ kind: 'code' | 'money';
1088
+ role: 'input' | 'computed';
1089
+ footnoteMarks?: readonly number[];
1090
+ }
1091
+ /** The regular or successor half of one per-country area. */
1092
+ interface PerCountryTable {
1093
+ /** The page's own sub-heading — 'Regular Expenses' / 'Successor Expenses'. */
1094
+ title: string;
1095
+ columns: readonly PerCountryColumn[];
1096
+ /**
1097
+ * The grand total the page prints under the table: a box with a LETTER and
1098
+ * no line number, totalling the claim column across every country.
1099
+ *
1100
+ * These four — I, R, JJ and SS — are named in the schedule's closing
1101
+ * instruction ("Enter the total of lines 209, 221, I, R, JJ, and SS at line
1102
+ * 030 of Schedule 12") alongside two real line numbers. Four of the six
1103
+ * terms that reach AT1 Schedule 12 line 030 are therefore letters, which is
1104
+ * why {@link AT1_SCHEDULE_15_CLOSING_INSTRUCTION} keeps them apart from the
1105
+ * lines rather than pretending they are lines.
1106
+ */
1107
+ grandTotal: {
1108
+ letter: string;
1109
+ ofColumn: string;
1110
+ };
1111
+ }
1112
+ /** One of the two per-country areas, each with a regular and a successor table. */
1113
+ interface PerCountryArea {
1114
+ /** Matches the {@link FormSection} id its lines belong to. */
1115
+ section: string;
1116
+ /** The box heading, verbatim. */
1117
+ title: string;
1118
+ /** The paragraph the page prints under the heading, verbatim. */
1119
+ subtitle: string;
1120
+ tables: readonly PerCountryTable[];
1121
+ }
1122
+ declare const AT1_SCHEDULE_15_PER_COUNTRY: readonly PerCountryArea[];
1123
+ /**
1124
+ * The instruction the page closes with, verbatim.
1125
+ *
1126
+ * It belongs to no area: it is printed in bold at the foot of page 6, below
1127
+ * Area H, and it totals Area F's two claims with the four per-country grand
1128
+ * totals. Four of its six terms are LETTERS — I, R, JJ and SS — boxes the page
1129
+ * numbers nowhere, which is why `lines` and `letters` are separate fields
1130
+ * rather than one list of "terms". A caller that treated the letters as line
1131
+ * numbers would look for 015I00001.
1132
+ *
1133
+ * AT1 Schedule 12's own definition records the mirror from its side, on its
1134
+ * line 030: `albertaSource: 'Schedule 15 lines 209 +221 + I + R + JJ + SS'`.
1135
+ * A test asserts the two pages agree.
1136
+ */
1137
+ declare const AT1_SCHEDULE_15_CLOSING_INSTRUCTION: Readonly<{
1138
+ text: "Enter the total of lines 209, 221, I, R, JJ, and SS at line 030 of Schedule 12."; /** AT1 Schedule 12's line, as `SSSFFFOOO`. */
1139
+ to: "012030001"; /** The two real line numbers it names. */
1140
+ lines: readonly string[]; /** The four unnumbered grand totals it names, by printed letter. */
1141
+ letters: readonly string[];
1142
+ }>;
1143
+ declare const AT1_SCHEDULE_15_AREAS: readonly ResourceContinuityArea[];
356
1144
  declare const AT1_SCHEDULE_15: FormDefinition;
1145
+ /**
1146
+ * The claim lines each carry-forward instruction names, by AT1 Schedule 12
1147
+ * destination.
1148
+ *
1149
+ * Derived from the areas, so there is one declaration of it. Exists as its own
1150
+ * export because AT1 Schedule 12's definition records the MIRROR of the same
1151
+ * fact in `albertaSource` — its line 022 reads `Schedule 15 lines 007 + 019
1152
+ * +031`, transcribed from Schedule 12's own page, spurious missing space and
1153
+ * all. A test asserts the two pages name the same lines, which is what makes
1154
+ * either one worth trusting.
1155
+ */
1156
+ declare const AT1_SCHEDULE_15_CARRY_FORWARD: Readonly<Record<string, readonly string[]>>;
357
1157
  //#endregion
358
1158
  //#region src/t2/at1/forms/schedule16.d.ts
359
1159
  declare const AT1_SCHEDULE_16: FormDefinition;
@@ -389,18 +1189,189 @@ declare const AT1_SCHEDULE_17: FormDefinition;
389
1189
  /** One category of disposed property, and its four columns. */
390
1190
  interface DispositionCategory {
391
1191
  label: string;
1192
+ /**
1193
+ * Which of the page's TWO grids prints this row.
1194
+ *
1195
+ * The form does not lay the six categories out as one table. Shares get a
1196
+ * grid of their own, and between the two grids sit lines 053 and 054 — see
1197
+ * {@link AT1_SCHEDULE_18_GRIDS}.
1198
+ */
1199
+ grid: 'shares' | 'properties';
392
1200
  /** A — proceeds of disposition. */
393
1201
  proceeds: string;
394
1202
  /** B — adjusted cost base. */
395
1203
  adjustedCostBase: string;
396
1204
  /** C — outlays and expenses. */
397
1205
  outlays: string;
398
- /** D — the resulting gain or loss. */
399
- gainOrLoss: string;
1206
+ /**
1207
+ * D — the resulting gain or loss, where the grid numbers that cell.
1208
+ *
1209
+ * ABSENT on shares, and that absence is the point: the shares grid leaves
1210
+ * its column D **unnumbered**. The shares gain is not filed from inside the
1211
+ * grid — it is struck below it at line 054, *after* line 053 has added
1212
+ * federal Schedule 6 line 160 into it. Treating 054 as the shares row's
1213
+ * column D drops 053 from the return entirely.
1214
+ */
1215
+ gainOrLoss?: string;
400
1216
  /** Losses on this category are not deductible against ordinary gains. */
401
1217
  lossRestricted?: boolean;
1218
+ /**
1219
+ * Which of `AT1_SCHEDULE_18.footnotes` the page marks against this ROW.
1220
+ *
1221
+ * The page prints the mark once, on the row's description cell — this model
1222
+ * has no field for a description, so every cell of the row carries it, the
1223
+ * same reasoning as {@link DispositionCategory.restrictionNote} below.
1224
+ */
1225
+ footnoteMarks?: readonly number[];
1226
+ /**
1227
+ * Why this category's losses are restricted, in its own terms — carried on
1228
+ * every one of its four columns, because the rule governs the whole row.
1229
+ *
1230
+ * The two restricted categories are restricted for DIFFERENT reasons, and a
1231
+ * shared "losses are not deductible" flattens them: a personal-use loss is
1232
+ * simply denied, while a listed personal property loss is deductible — but
1233
+ * only against listed personal property gains, which is why line 060 exists
1234
+ * to apply it and why it has its own cap. One sentence for both said
1235
+ * neither.
1236
+ */
1237
+ restrictionNote?: string;
402
1238
  }
403
1239
  declare const AT1_SCHEDULE_18_CATEGORIES: readonly DispositionCategory[];
1240
+ /**
1241
+ * The four printed columns, and the prefix §3.2.3.19 puts on each column's own
1242
+ * Line Name — "Adjusted cost base: Total of all shares", not "Shares — B".
1243
+ * Column A carries no prefix at all in the spec, which is why its entry is empty.
1244
+ *
1245
+ * The personal-use and listed-personal-property rows word column D as "Gain:"
1246
+ * rather than "Gain or (loss):", because a loss on those categories is not
1247
+ * deductible — the page says so twice ("Report gain only", "Note: losses are not
1248
+ * deductible"), and 018058's own rule is "if amount is negative, default to
1249
+ * zero". See `gainColumnPrefix` below.
1250
+ */
1251
+ /**
1252
+ * The four columns the grid is laid out in, with the letter the page heads
1253
+ * each one with and the heading it prints under that letter.
1254
+ *
1255
+ * Kept BESIDE the captions rather than folded into them. The captions above
1256
+ * are §3.2.3.19's transmittal Line Names verbatim — which is why column A's
1257
+ * prefix is empty, that column having no prefix in the spec — and a renderer
1258
+ * that wants "A" has no business rewriting a filed Line Name to get it. It
1259
+ * reads this instead, the same arrangement as
1260
+ * {@link AT1_SCHEDULE_2_FORMULAS} and `AT1_SCHEDULE_13_COLUMNS`.
1261
+ *
1262
+ * The headings are the grid's own, read off the XFA template — the page heads
1263
+ * each column with its letter on one line and the heading beneath it, which is
1264
+ * why they are two values here and not one string. Note the capital E in
1265
+ * "Outlays and Expenses": the grid capitalises it, the ABIL part below does
1266
+ * not, and both are reproduced as printed rather than normalised to each other.
1267
+ *
1268
+ * The ABIL table stacks its letters the same way — see
1269
+ * {@link AT1_SCHEDULE_18_ABIL_COLUMNS}, and the correction recorded there.
1270
+ */
1271
+ interface DispositionColumn {
1272
+ column: 'A' | 'B' | 'C' | 'D';
1273
+ heading: string;
1274
+ /** Which {@link DispositionCategory} key holds this column's line. */
1275
+ key: 'proceeds' | 'adjustedCostBase' | 'outlays' | 'gainOrLoss';
1276
+ }
1277
+ declare const AT1_SCHEDULE_18_COLUMNS: readonly DispositionColumn[];
1278
+ /**
1279
+ * The page's two grids, and the only thing that differs between them.
1280
+ *
1281
+ * Columns A, B and C are headed identically in both. Column D is not: the
1282
+ * shares grid heads it with the arithmetic alone, the properties grid puts
1283
+ * "Gain or (loss)" above the same arithmetic. A renderer that draws one table
1284
+ * for all six categories prints one of those two headings over the other
1285
+ * grid's rows.
1286
+ *
1287
+ * The rows themselves come from {@link AT1_SCHEDULE_18_CATEGORIES}, filtered
1288
+ * on `grid` — kept there rather than nested here so the six categories stay
1289
+ * one list in one order, which is how every consumer but the paper view reads
1290
+ * them.
1291
+ */
1292
+ interface DispositionGridSpec {
1293
+ id: DispositionCategory['grid'];
1294
+ /** Column D's heading on this grid, verbatim. */
1295
+ gainHeading: string;
1296
+ }
1297
+ declare const AT1_SCHEDULE_18_GRIDS: readonly DispositionGridSpec[];
1298
+ /**
1299
+ * The ABIL table's printed columns.
1300
+ *
1301
+ * Unlike the two grids on page 1, this one REPEATS: one row per small business
1302
+ * corporation, so 082-092 each carry an occurrence and column D is struck per
1303
+ * row. The page numbers column D nowhere and totals it in a row captioned only
1304
+ * "Totals:", whose total is what line 094 applies the inclusion rate to.
1305
+ *
1306
+ * ── The letters are column headings here too ────────────────────────────────
1307
+ *
1308
+ * A comment in this file used to say the ABIL part "genuinely prints its column
1309
+ * letters in the caption — 088 reads 'A - Proceeds of disposition' on the
1310
+ * page". The XFA template says otherwise: A/B/C/D sit at y=85 and the headings
1311
+ * at y=94-115, stacked in the column exactly as page 1 stacks them. So the
1312
+ * `A - ` on those captions is §3.2.3.19's transmittal Line Name, not the page,
1313
+ * and a view that wants to LOOK like the form reads the letters from here —
1314
+ * the same arrangement as {@link AT1_SCHEDULE_18_COLUMNS}. The captions are
1315
+ * left as the spec writes them; only the claim about where they come from was
1316
+ * wrong.
1317
+ *
1318
+ * Note the bracketing on column D: this part prints "Cols. A - (B + C)" where
1319
+ * the dispositions grid prints "Col. A - (Cols. B + C)". Same arithmetic, two
1320
+ * printings, both verbatim.
1321
+ */
1322
+ interface AbilColumn {
1323
+ /** The letter the page heads this column with, where it heads one at all. */
1324
+ column?: 'A' | 'B' | 'C' | 'D';
1325
+ /** The heading printed beneath that letter, verbatim. */
1326
+ heading: string;
1327
+ /** The printed line — absent on column D, which the page does not number. */
1328
+ line?: string;
1329
+ }
1330
+ declare const AT1_SCHEDULE_18_ABIL_COLUMNS: readonly AbilColumn[];
1331
+ /** The label the page prints on the row that totals the ABIL column D. */
1332
+ declare const AT1_SCHEDULE_18_ABIL_TOTALS_LABEL = "Totals:";
1333
+ /**
1334
+ * The one heading this page prints inside a section.
1335
+ *
1336
+ * The dispositions block has exactly one printed heading of its own —
1337
+ * "CAPITAL PROPERTY DISPOSITIONS" — and the tail of the page runs on beneath it
1338
+ * without a second one, which is why an earlier attempt to invent an
1339
+ * "Adjustments to the total gain" section was reverted (see the note on
1340
+ * SECTIONS). But the page DOES set one line of bold text mid-block, over lines
1341
+ * 077-079, and it is not a heading a reader can do without: 077 and 078 are
1342
+ * captioned "Add: Exemption threshold at time of disposal" and "Add: Total of
1343
+ * all capital gains from the disposition of the actual property", neither of
1344
+ * which says WHICH property, or that the pair exists only for a donated
1345
+ * flow-through share. That was recorded as a six-word `note` on 077; the page
1346
+ * gives it a line of its own.
1347
+ *
1348
+ * {@link PrintedBlockHeading} was declared here, then moved to the shared form
1349
+ * model when AT1 Schedule 29's "Part I / Part II (a) / (b)" headings turned out
1350
+ * to be the same shape. It is still re-exported from this module so nothing
1351
+ * importing it from here breaks.
1352
+ */
1353
+ declare const AT1_SCHEDULE_18_BLOCK_HEADINGS: readonly PrintedBlockHeading[];
1354
+ /**
1355
+ * Lines the page prints somewhere other than where their NUMBER would put them.
1356
+ *
1357
+ * Line 076 is the last figure on the schedule — the taxable capital gain,
1358
+ * struck from 099 below the two carry-forward sentences — but it numbers lower
1359
+ * than 077-099, so anything ordering by line number prints the answer six rows
1360
+ * ABOVE the arithmetic that produces it, captioned "Line 099 X 50%" while 099
1361
+ * is still further down the page. Numeric order is the right default for every
1362
+ * other line here; this records the one place the page departs from it.
1363
+ *
1364
+ * Keyed line → the line it is printed after.
1365
+ */
1366
+ declare const AT1_SCHEDULE_18_PRINTED_AFTER: Readonly<Record<string, string>>;
1367
+ /**
1368
+ * Column D's arithmetic, in the page's own column letters.
1369
+ *
1370
+ * Every category computes D the same way; only the lines differ. Each D field
1371
+ * additionally carries the sum in ITS OWN line numbers as a note, because a
1372
+ * reader looking at a list of numbered rows cannot see a column letter.
1373
+ */
1374
+ declare const AT1_SCHEDULE_18_GAIN_FORMULA = "Col. A - (Cols. B + C)";
404
1375
  declare const AT1_SCHEDULE_18: FormDefinition;
405
1376
  /** Lines 096 and 098 gross the federal Schedule 73 figures back up. */
406
1377
  declare const AT1_SECTION_34_2_GROSS_UP = 2;
@@ -553,6 +1524,50 @@ declare const CONTINUITY_ORDER: (keyof typeof CONTINUITY_CAPTIONS)[];
553
1524
  declare const AT1_SCHEDULE_21: FormDefinition;
554
1525
  //#endregion
555
1526
  //#region src/t2/at1/forms/schedule29.d.ts
1527
+ /**
1528
+ * The five headings the page prints inside a box, above the lines they govern.
1529
+ *
1530
+ * Four of them carry the grant calculation's entire structure, and none was
1531
+ * here before. Without them a reader meets lines 110, 112 and 125 as three
1532
+ * numbered rows that each multiply something by a rate, with nothing saying
1533
+ * that 112 and 125 are MUTUALLY EXCLUSIVE — one per return, chosen by whether
1534
+ * the corporation is associated. Each field's `note` now says so too, but the
1535
+ * page says it structurally, which is how a preparer actually reads it.
1536
+ *
1537
+ * The fifth is the instruction the expenditure-limit box sets between lines 100
1538
+ * and 102. It is genuinely a heading over 102-104: both of those lines open
1539
+ * "If the corporation is associated…" / "If the corporation is not
1540
+ * associated…", and page 3 is what the Yes branch requires.
1541
+ */
1542
+ declare const AT1_SCHEDULE_29_BLOCK_HEADINGS: readonly PrintedBlockHeading[];
1543
+ /**
1544
+ * One column of page 3's allocation grid.
1545
+ *
1546
+ * The grid is the shape a flat field list cannot hold, for the same reason AT1
1547
+ * Schedules 4, 13 and 18 each needed one of these: which cells share a row,
1548
+ * what each column is headed, and — here uniquely — which line the page prints
1549
+ * in that column's cell of the "Totals" row. Three of the ten columns are not
1550
+ * totalled at all (there is no sum of a business number), and a renderer that
1551
+ * lays seven totals across ten columns puts every one of them under the wrong
1552
+ * heading.
1553
+ */
1554
+ interface IegAllocationColumn {
1555
+ /** The printed line for each MEMBER's own cell in this column. */
1556
+ line: string;
1557
+ /** The heading printed above the column, verbatim. */
1558
+ heading: string;
1559
+ kind: 'text' | 'date' | 'money';
1560
+ /** Whether the preparer fills this column, or the page derives it. */
1561
+ role: 'input' | 'computed';
1562
+ /**
1563
+ * The line the page prints in this column's cell of the Totals row — absent
1564
+ * on the three columns the page leaves untotalled.
1565
+ */
1566
+ totalsLine?: string;
1567
+ }
1568
+ declare const AT1_SCHEDULE_29_ALLOCATION_COLUMNS: readonly IegAllocationColumn[];
1569
+ /** The label the page prints on the row that totals the allocation grid. */
1570
+ declare const AT1_SCHEDULE_29_ALLOCATION_TOTALS_LABEL = "Totals";
556
1571
  declare const AT1_SCHEDULE_29: FormDefinition;
557
1572
  /** Eight per cent, on the full capped eligible expenditures. */
558
1573
  declare const AT1_IEG_BASE_RATE = 0.08;
@@ -886,4 +1901,4 @@ declare function describeLine(formId: string, line: string): string;
886
1901
  */
887
1902
  declare function findBrokenLinks(): string[];
888
1903
  //#endregion
889
- export { SCHEDULE_5_REVENUE_OFFSET as $, AT1_SCHEDULE_16 as $t, T2_SCHEDULE_24 as A, indexByLine as An, AT1_IEG_MAX_EXPENDITURE as At, SCHEDULE_8_CCA_LINE as B, AT1_SCHEDULE_20 as Bt, T2_SCHEDULE_43 as C, FormFieldRole as Cn, CO17_QUEBEC_PROPORTION_BOX as Ct, SCHEDULE_31_GENERAL_SRED_RATE as D, FormSection as Dn, AT1_IEG_BASE_RATE as Dt, SCHEDULE_31_ENHANCED_SRED_RATE as E, FormProvenance as En, CO17_TAX_PAYABLE_BOX as Et, T2_SCHEDULE_21 as F, AlbertaLossPool as Ft, SCHEDULE_7_ADJUSTED_AII_LINE as G, DonationPool as Gt, SCHEDULE_8_RECAPTURE_LINE as H, COMPUTED_CONTINUITY_ROWS as Ht, ReserveRow as I, CONTINUITY_CAPTIONS as It, DispositionGrid as J, AT1_SECTION_34_2_GROSS_UP as Jt, SCHEDULE_7_PASSIVE_INCOME_THRESHOLD as K, AT1_SCHEDULE_18 as Kt, SCHEDULE_13_RESERVE_ROWS as L, CONTINUITY_ORDER as Lt, T2_SCHEDULE_23 as M, isEnterableLine as Mn, AT1_SCHEDULE_29 as Mt, SCHEDULE_21_BUSINESS_CREDIT_LINE as N, validateFormDefinition as Nn, AT1_SCHEDULE_21 as Nt, T2_SCHEDULE_31 as O, LineNumberScheme as On, AT1_IEG_ENHANCED_RATE as Ot, SCHEDULE_21_NON_BUSINESS_CREDIT_LINE as P, AT1_SCHEDULE_21_POOLS as Pt, SCHEDULE_5_JURISDICTIONS as Q, AlbertaReserveKind as Qt, T2_SCHEDULE_13 as R, scheduleTwentyOneLineId as Rt, SCHEDULE_43_DIVIDEND_ALLOWANCE as S, FormFieldRequirement as Sn, T2_TOTAL_TAX_PAYABLE_LINE as St, T2_SCHEDULE_33 as T, FormLineRef as Tn, CO17_TAXABLE_INCOME_BOX as Tt, SCHEDULE_8_TERMINAL_LOSS_LINE as U, CONTINUITY_ROWS as Ut, SCHEDULE_8_COLUMNS as V, AT1_SCHEDULE_20_POOLS as Vt, T2_SCHEDULE_8 as W, ContinuityRow as Wt, T2_SCHEDULE_6 as X, AT1_SCHEDULE_17 as Xt, SCHEDULE_6_GRIDS as Y, DispositionCategory as Yt, AllocationJurisdiction as Z, AT1_SCHEDULE_17_RESERVES as Zt, SCHEDULE_53_CLOSING_GRIP_LINE as _, AT4970 as _n, T2_BASE_PART_I_RATE as _t, getField as a, AT1_SCHEDULE_12 as an, T2_SCHEDULE_4 as at, SCHEDULE_50_DISCLOSURE_THRESHOLD as b, FormField as bn, T2_SMALL_BUSINESS_DEDUCTION_RATE as bt, CaptionRow as c, AT1_SCHEDULE_10 as cn, T2_SCHEDULE_3 as ct, buildFields as d, AT1_SCHEDULE_2 as dn, T2_SCHEDULE_2 as dt, AT1_SCHEDULE_16_CARRYFORWARD_LINE as en, SCHEDULE_5_SALARIES_OFFSET as et, SCHEDULE_141_PREPARER_IDENTIFIED_LINE as f, AT1_SCHEDULE_1 as fn, SCHEDULE_1_LINES as ft, T2_SCHEDULE_55 as g, AT1_TAX_PAYABLE_LINE as gn, T2_SCHEDULE_1 as gt, T2_SCHEDULE_130 as h, AT1_JACKET as hn, SCHEDULE_1_TOTAL_DEDUCTIONS_LINE as ht, formsForProgram as i, AlbertaCcaColumn as in, SCHEDULE_4_NON_CAPITAL_CARRYFORWARD_YEARS as it, SCHEDULE_23_GROUP_BUSINESS_LIMIT as j, inputFields as jn, AT1_IEG_PRIOR_YEARS as jt, SCHEDULE_24_OPERATION_TYPE_LINE as k, fieldsInSection as kn, AT1_IEG_JACKET_LINE as kt, LineBand as l, AT1_SCHEDULE_4 as ln, SCHEDULE_2_CARRYFORWARD_YEARS as lt, T2_SCHEDULE_141 as m, AT1_BALANCE_LINE as mn, SCHEDULE_1_TOTAL_ADDITIONS_LINE as mt, describeLine as n, AT1_SCHEDULE_13 as nn, SCHEDULE_4_CARRYBACK_YEARS as nt, getForm as o, AT1_SCHEDULE_12_PAIRS as on, SCHEDULE_3_ELIGIBLE_PAID_LINE as ot, SCHEDULE_141_RESERVATION_LINE as p, AT1_BALANCE_CREDIT_LINES as pn, SCHEDULE_1_LINE_BY_NUMBER as pt, T2_SCHEDULE_7 as q, AT1_SCHEDULE_18_CATEGORIES as qt, findBrokenLinks as r, AT1_SCHEDULE_13_COLUMNS as rn, SCHEDULE_4_LPP_CARRYFORWARD_YEARS as rt, BuildFieldsSpec as s, AlbertaReconcilingPair as sn, SCHEDULE_3_TAXABLE_PAID_LINE as st, FORMS as t, AT1_SCHEDULE_15 as tn, T2_SCHEDULE_5 as tt, UnclassifiedLineError as u, AT1_SCHEDULE_3 as un, SCHEDULE_2_CHARITABLE_CURRENT_LINE as ut, SCHEDULE_53_GENERAL_RATE_FACTOR as v, AT4970_JURISDICTIONS as vn, T2_JACKET as vt, SCHEDULE_33_TAXABLE_CAPITAL_IN_CANADA_LINE as w, FormFieldSide as wn, CO17_RETURN as wt, T2_SCHEDULE_50 as x, FormFieldKind as xn, T2_TAXABLE_INCOME_LINE as xt, T2_SCHEDULE_53 as y, FormDefinition as yn, T2_NET_INCOME_FOR_TAX_LINE as yt, CcaColumn as z, AT1_DONATION_CARRYFORWARD_YEARS as zt };
1904
+ export { SCHEDULE_5_REVENUE_OFFSET as $, AT1_SCHEDULE_1_COLUMNS as $n, AT1_SCHEDULE_18_BLOCK_HEADINGS as $t, T2_SCHEDULE_24 as A, AlbertaReconcilingPair as An, FormLineRef as Ar, AT1_IEG_MAX_EXPENDITURE as At, SCHEDULE_8_CCA_LINE as B, albertaVintageRowLabel as Bn, CONTINUITY_CAPTIONS as Bt, T2_SCHEDULE_43 as C, ResourceContinuityArea as Cn, FormDefinition as Cr, CO17_QUEBEC_PROPORTION_BOX as Ct, SCHEDULE_31_GENERAL_SRED_RATE as D, AlbertaCcaColumn as Dn, FormFieldRole as Dr, AT1_IEG_BASE_RATE as Dt, SCHEDULE_31_ENHANCED_SRED_RATE as E, AT1_SCHEDULE_13_COLUMNS as En, FormFieldRequirement as Er, CO17_TAX_PAYABLE_BOX as Et, T2_SCHEDULE_21 as F, AT1_SCHEDULE_3 as Fn, fieldsInSection as Fr, AT1_SCHEDULE_29_BLOCK_HEADINGS as Ft, SCHEDULE_7_ADJUSTED_AII_LINE as G, AT1_SCHEDULE_1 as Gn, AT1_SCHEDULE_20_POOLS as Gt, SCHEDULE_8_RECAPTURE_LINE as H, AT1_SCHEDULE_2_FACTOR_DESTINATION as Hn, scheduleTwentyOneLineId as Ht, ReserveRow as I, AT1_SCHEDULE_3_VINTAGE_TABLES as In, indexByLine as Ir, IegAllocationColumn as It, DispositionGrid as J, AT1_SCHEDULE_1_AREA_B_LARGE_CORPORATIONS as Jn, ContinuityRow as Jt, SCHEDULE_7_PASSIVE_INCOME_THRESHOLD as K, AT1_SCHEDULE_1_AGREEMENT_COLUMNS as Kn, COMPUTED_CONTINUITY_ROWS as Kt, SCHEDULE_13_RESERVE_ROWS as L, AT1_SCHEDULE_3_VINTAGE_TOTALS_LABEL as Ln, inputFields as Lr, AT1_SCHEDULE_21 as Lt, T2_SCHEDULE_23 as M, AT1_SCHEDULE_4 as Mn, FormSection as Mr, AT1_SCHEDULE_29 as Mt, SCHEDULE_21_BUSINESS_CREDIT_LINE as N, AT1_SCHEDULE_4_COLUMNS as Nn, LineNumberScheme as Nr, AT1_SCHEDULE_29_ALLOCATION_COLUMNS as Nt, T2_SCHEDULE_31 as O, AT1_SCHEDULE_12 as On, FormFieldSide as Or, AT1_IEG_ENHANCED_RATE as Ot, SCHEDULE_21_NON_BUSINESS_CREDIT_LINE as P, ForeignCreditColumn as Pn, PrintedBlockHeading as Pr, AT1_SCHEDULE_29_ALLOCATION_TOTALS_LABEL as Pt, SCHEDULE_5_JURISDICTIONS as Q, AT1_SCHEDULE_1_BLOCK_HEADINGS as Qn, AT1_SCHEDULE_18_ABIL_TOTALS_LABEL as Qt, T2_SCHEDULE_13 as R, VintageColumn as Rn, isEnterableLine as Rr, AT1_SCHEDULE_21_POOLS as Rt, SCHEDULE_43_DIVIDEND_ALLOWANCE as S, PerCountryTable as Sn, AT4970_JURISDICTIONS as Sr, T2_TOTAL_TAX_PAYABLE_LINE as St, T2_SCHEDULE_33 as T, AT1_SCHEDULE_13 as Tn, FormFieldKind as Tr, CO17_TAXABLE_INCOME_BOX as Tt, SCHEDULE_8_TERMINAL_LOSS_LINE as U, AT1_SCHEDULE_2_FORMULAS as Un, AT1_DONATION_CARRYFORWARD_YEARS as Ut, SCHEDULE_8_COLUMNS as V, AT1_SCHEDULE_2 as Vn, CONTINUITY_ORDER as Vt, T2_SCHEDULE_8 as W, AlbertaAllocationFormula as Wn, AT1_SCHEDULE_20 as Wt, T2_SCHEDULE_6 as X, AT1_SCHEDULE_1_AREA_B_STEPS as Xn, AT1_SCHEDULE_18 as Xt, SCHEDULE_6_GRIDS as Y, AT1_SCHEDULE_1_AREA_B_PREAMBLE as Yn, DonationPool as Yt, AllocationJurisdiction as Z, AT1_SCHEDULE_1_AREA_B_TITLE as Zn, AT1_SCHEDULE_18_ABIL_COLUMNS as Zt, SCHEDULE_53_CLOSING_GRIP_LINE as _, AT1_SCHEDULE_15_CARRY_FORWARD as _n, AT1_TAX_PAYABLE_LINE as _r, T2_BASE_PART_I_RATE as _t, getField as a, AT1_SECTION_34_2_GROSS_UP as an, SbdAgreementColumn as ar, T2_SCHEDULE_4 as at, SCHEDULE_50_DISCLOSURE_THRESHOLD as b, PerCountryArea as bn, At1JacketRateRow as br, T2_SMALL_BUSINESS_DEDUCTION_RATE as bt, CaptionRow as c, DispositionColumn as cn, AT1_BALANCE_LINE as cr, T2_SCHEDULE_3 as ct, buildFields as d, AT1_SCHEDULE_17_RESERVES as dn, AT1_JACKET_CODE_OPTIONS as dr, T2_SCHEDULE_2 as dt, AT1_SCHEDULE_18_CATEGORIES as en, AT1_SCHEDULE_1_RATE_PERIODS as er, SCHEDULE_5_SALARIES_OFFSET as et, SCHEDULE_141_PREPARER_IDENTIFIED_LINE as f, AlbertaReserveKind as fn, AT1_JACKET_DAY_BANDS as fr, SCHEDULE_1_LINES as ft, T2_SCHEDULE_55 as g, AT1_SCHEDULE_15_AREAS as gn, AT1_PRINTED_DEDUCTION_LINES as gr, T2_SCHEDULE_1 as gt, T2_SCHEDULE_130 as h, AT1_SCHEDULE_15 as hn, AT1_JACKET_RATE_ROWS as hr, SCHEDULE_1_TOTAL_DEDUCTIONS_LINE as ht, formsForProgram as i, AT1_SCHEDULE_18_PRINTED_AFTER as in, AlbertaSbdRatePeriod as ir, SCHEDULE_4_NON_CAPITAL_CARRYFORWARD_YEARS as it, SCHEDULE_23_GROUP_BUSINESS_LIMIT as j, AT1_SCHEDULE_10 as jn, FormProvenance as jr, AT1_IEG_PRIOR_YEARS as jt, SCHEDULE_24_OPERATION_TYPE_LINE as k, AT1_SCHEDULE_12_PAIRS as kn, FormFootnotePlacement as kr, AT1_IEG_JACKET_LINE as kt, LineBand as l, DispositionGridSpec as ln, AT1_JACKET as lr, SCHEDULE_2_CARRYFORWARD_YEARS as lt, T2_SCHEDULE_141 as m, AT1_SCHEDULE_16_CARRYFORWARD_LINE as mn, AT1_JACKET_LINES_NOT_PRINTED as mr, SCHEDULE_1_TOTAL_ADDITIONS_LINE as mt, describeLine as n, AT1_SCHEDULE_18_GAIN_FORMULA as nn, AlbertaBaseAmountStep as nr, SCHEDULE_4_CARRYBACK_YEARS as nt, getForm as o, AbilColumn as on, AT1_BALANCE_CREDIT_LINES as or, SCHEDULE_3_ELIGIBLE_PAID_LINE as ot, SCHEDULE_141_RESERVATION_LINE as p, AT1_SCHEDULE_16 as pn, AT1_JACKET_DEPARTMENT_USE as pr, SCHEDULE_1_LINE_BY_NUMBER as pt, T2_SCHEDULE_7 as q, AT1_SCHEDULE_1_AGREEMENT_TOTALS_LABEL as qn, CONTINUITY_ROWS as qt, findBrokenLinks as r, AT1_SCHEDULE_18_GRIDS as rn, AlbertaSbdColumn as rr, SCHEDULE_4_LPP_CARRYFORWARD_YEARS as rt, BuildFieldsSpec as s, DispositionCategory as sn, AT1_BALANCE_CREDIT_LINES_PER_SPEC as sr, SCHEDULE_3_TAXABLE_PAID_LINE as st, FORMS as t, AT1_SCHEDULE_18_COLUMNS as tn, AT1_SCHEDULE_1_TOTAL_DAYS_LABEL as tr, T2_SCHEDULE_5 as tt, UnclassifiedLineError as u, AT1_SCHEDULE_17 as un, AT1_JACKET_BLOCK_HEADINGS as ur, SCHEDULE_2_CHARITABLE_CURRENT_LINE as ut, SCHEDULE_53_GENERAL_RATE_FACTOR as v, AT1_SCHEDULE_15_CLOSING_INSTRUCTION as vn, At1JacketCodeOption as vr, T2_JACKET as vt, SCHEDULE_33_TAXABLE_CAPITAL_IN_CANADA_LINE as w, ResourceContinuityRow as wn, FormField as wr, CO17_RETURN as wt, T2_SCHEDULE_50 as x, PerCountryColumn as xn, AT4970 as xr, T2_TAXABLE_INCOME_LINE as xt, T2_SCHEDULE_53 as y, AT1_SCHEDULE_15_PER_COUNTRY as yn, At1JacketDayBand as yr, T2_NET_INCOME_FOR_TAX_LINE as yt, CcaColumn as z, VintageTable as zn, validateFormDefinition as zr, AlbertaLossPool as zt };