@markcolabs/mcp 0.3.0 → 0.4.0

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.
Files changed (114) hide show
  1. package/dist/index.d.ts +9 -35
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +52 -285
  4. package/dist/index.js.map +1 -1
  5. package/package.json +7 -12
  6. package/LICENSE-API.md +0 -111
  7. package/dist/disclaimers/ymyl.d.ts +0 -16
  8. package/dist/disclaimers/ymyl.d.ts.map +0 -1
  9. package/dist/disclaimers/ymyl.js +0 -20
  10. package/dist/disclaimers/ymyl.js.map +0 -1
  11. package/dist/engines/compoundInterest.d.ts +0 -75
  12. package/dist/engines/compoundInterest.d.ts.map +0 -1
  13. package/dist/engines/compoundInterest.js +0 -74
  14. package/dist/engines/compoundInterest.js.map +0 -1
  15. package/dist/engines/data/federalTax.d.ts +0 -47
  16. package/dist/engines/data/federalTax.d.ts.map +0 -1
  17. package/dist/engines/data/federalTax.js +0 -111
  18. package/dist/engines/data/federalTax.js.map +0 -1
  19. package/dist/engines/data/irs2026.d.ts +0 -137
  20. package/dist/engines/data/irs2026.d.ts.map +0 -1
  21. package/dist/engines/data/irs2026.js +0 -113
  22. package/dist/engines/data/irs2026.js.map +0 -1
  23. package/dist/engines/data/rmd2026.d.ts +0 -59
  24. package/dist/engines/data/rmd2026.d.ts.map +0 -1
  25. package/dist/engines/data/rmd2026.js +0 -75
  26. package/dist/engines/data/rmd2026.js.map +0 -1
  27. package/dist/engines/data/ssa.d.ts +0 -39
  28. package/dist/engines/data/ssa.d.ts.map +0 -1
  29. package/dist/engines/data/ssa.js +0 -55
  30. package/dist/engines/data/ssa.js.map +0 -1
  31. package/dist/engines/data/stateTax2026.d.ts +0 -114
  32. package/dist/engines/data/stateTax2026.d.ts.map +0 -1
  33. package/dist/engines/data/stateTax2026.js +0 -348
  34. package/dist/engines/data/stateTax2026.js.map +0 -1
  35. package/dist/engines/hsa.d.ts +0 -110
  36. package/dist/engines/hsa.d.ts.map +0 -1
  37. package/dist/engines/hsa.js +0 -83
  38. package/dist/engines/hsa.js.map +0 -1
  39. package/dist/engines/ira.d.ts +0 -115
  40. package/dist/engines/ira.d.ts.map +0 -1
  41. package/dist/engines/ira.js +0 -127
  42. package/dist/engines/ira.js.map +0 -1
  43. package/dist/engines/mortgage.d.ts +0 -70
  44. package/dist/engines/mortgage.d.ts.map +0 -1
  45. package/dist/engines/mortgage.js +0 -60
  46. package/dist/engines/mortgage.js.map +0 -1
  47. package/dist/engines/paycheck.d.ts +0 -128
  48. package/dist/engines/paycheck.d.ts.map +0 -1
  49. package/dist/engines/paycheck.js +0 -142
  50. package/dist/engines/paycheck.js.map +0 -1
  51. package/dist/engines/retirement401k.d.ts +0 -109
  52. package/dist/engines/retirement401k.d.ts.map +0 -1
  53. package/dist/engines/retirement401k.js +0 -130
  54. package/dist/engines/retirement401k.js.map +0 -1
  55. package/dist/engines/rmd.d.ts +0 -107
  56. package/dist/engines/rmd.d.ts.map +0 -1
  57. package/dist/engines/rmd.js +0 -109
  58. package/dist/engines/rmd.js.map +0 -1
  59. package/dist/engines/rothConversion.d.ts +0 -124
  60. package/dist/engines/rothConversion.d.ts.map +0 -1
  61. package/dist/engines/rothConversion.js +0 -145
  62. package/dist/engines/rothConversion.js.map +0 -1
  63. package/dist/engines/socialSecurity.d.ts +0 -63
  64. package/dist/engines/socialSecurity.d.ts.map +0 -1
  65. package/dist/engines/socialSecurity.js +0 -139
  66. package/dist/engines/socialSecurity.js.map +0 -1
  67. package/dist/envelope.d.ts +0 -76
  68. package/dist/envelope.d.ts.map +0 -1
  69. package/dist/envelope.js +0 -34
  70. package/dist/envelope.js.map +0 -1
  71. package/dist/shared/bounds.d.ts +0 -133
  72. package/dist/shared/bounds.d.ts.map +0 -1
  73. package/dist/shared/bounds.js +0 -206
  74. package/dist/shared/bounds.js.map +0 -1
  75. package/dist/tools/compoundInterest.d.ts +0 -48
  76. package/dist/tools/compoundInterest.d.ts.map +0 -1
  77. package/dist/tools/compoundInterest.js +0 -107
  78. package/dist/tools/compoundInterest.js.map +0 -1
  79. package/dist/tools/hsa.d.ts +0 -58
  80. package/dist/tools/hsa.d.ts.map +0 -1
  81. package/dist/tools/hsa.js +0 -129
  82. package/dist/tools/hsa.js.map +0 -1
  83. package/dist/tools/ira.d.ts +0 -55
  84. package/dist/tools/ira.d.ts.map +0 -1
  85. package/dist/tools/ira.js +0 -117
  86. package/dist/tools/ira.js.map +0 -1
  87. package/dist/tools/mortgage.d.ts +0 -51
  88. package/dist/tools/mortgage.d.ts.map +0 -1
  89. package/dist/tools/mortgage.js +0 -112
  90. package/dist/tools/mortgage.js.map +0 -1
  91. package/dist/tools/paycheck.d.ts +0 -61
  92. package/dist/tools/paycheck.d.ts.map +0 -1
  93. package/dist/tools/paycheck.js +0 -135
  94. package/dist/tools/paycheck.js.map +0 -1
  95. package/dist/tools/retirement401k.d.ts +0 -85
  96. package/dist/tools/retirement401k.d.ts.map +0 -1
  97. package/dist/tools/retirement401k.js +0 -141
  98. package/dist/tools/retirement401k.js.map +0 -1
  99. package/dist/tools/rmd.d.ts +0 -60
  100. package/dist/tools/rmd.d.ts.map +0 -1
  101. package/dist/tools/rmd.js +0 -130
  102. package/dist/tools/rmd.js.map +0 -1
  103. package/dist/tools/rothConversion.d.ts +0 -66
  104. package/dist/tools/rothConversion.d.ts.map +0 -1
  105. package/dist/tools/rothConversion.js +0 -141
  106. package/dist/tools/rothConversion.js.map +0 -1
  107. package/dist/tools/socialSecurity.d.ts +0 -51
  108. package/dist/tools/socialSecurity.d.ts.map +0 -1
  109. package/dist/tools/socialSecurity.js +0 -117
  110. package/dist/tools/socialSecurity.js.map +0 -1
  111. package/dist/util/zod-to-json-schema.d.ts +0 -28
  112. package/dist/util/zod-to-json-schema.d.ts.map +0 -1
  113. package/dist/util/zod-to-json-schema.js +0 -98
  114. package/dist/util/zod-to-json-schema.js.map +0 -1
@@ -1,75 +0,0 @@
1
- /**
2
- * Compound-interest engine — lifted from
3
- * site/src/pages/compound-interest-calculator/compound-interest-calculator.js
4
- * (function `calculateFutureValue`).
5
- *
6
- * Per ADR-0039 § 5: pure synchronous functions, ENGINE_VERSION constant,
7
- * parity test against the site source as the gate.
8
- *
9
- * Math reference:
10
- * FV_principal = P * (1 + r/n)^(nt)
11
- * FV_contributions = PMT_per_period * [((1 + r/n)^(nt) - 1) / (r/n)] (if r > 0)
12
- * FV_contributions = PMT_per_period * (n * t) (if r == 0)
13
- * where:
14
- * P = initial principal
15
- * PMT_per_period = monthlyContribution * (12 / n)
16
- * r = annual rate as decimal (e.g., 0.07 for 7%)
17
- * n = compounding periods per year
18
- * t = years
19
- *
20
- * The engine accepts the rate as a percent and compounding as a label
21
- * (per ADR-0039 § 2 Percent-suffix convention + sprint prompt enum).
22
- */
23
- import { type CompoundingFrequencyLabel } from "../shared/bounds.js";
24
- /**
25
- * SemVer of the compound-interest engine math. Per ADR-0039 § 5 (reaffirmed in
26
- * ADR-0041 Position #4a): major bump = math change; minor = additive output;
27
- * patch = numerical correction. NOT bumped for cosmetic refactors.
28
- * - 0.1.0: initial v1 lift from compound-interest-calculator.js (S135 Item 5).
29
- * - 0.2.0 (v0.1.0 publish): out-of-policy package-surface bump — superseded.
30
- * - 1.0.0 (v0.2.0 publish): one-time reset to align with ADR-0039 § 5 per ADR-0041 D4a.
31
- * Math unchanged from 0.1.0 / 0.2.0.
32
- */
33
- export declare const ENGINE_VERSION = "1.0.0";
34
- /**
35
- * Inputs to the compound-interest future-value engine.
36
- *
37
- * Per ADR-0039 § 2:
38
- * - Monetary fields are bare USD numbers.
39
- * - Percentage fields use whole-number-percent units (e.g., 7 for 7%).
40
- * - Optional fields default to 0 inside the engine.
41
- */
42
- export interface CompoundInterestFutureValueInput {
43
- /** Initial principal in USD. */
44
- principal: number;
45
- /** Annual interest rate as whole-number percent (e.g., 7 for 7%). */
46
- annualRatePercent: number;
47
- /** Investment period in years. May be 0 (returns principal alone). */
48
- years: number;
49
- /** Compounding frequency label. */
50
- compoundingFrequency: CompoundingFrequencyLabel;
51
- /** Monthly contribution in USD. Optional — defaults to 0. */
52
- monthlyContribution?: number;
53
- }
54
- /**
55
- * Result payload (what goes inside ToolResult.result).
56
- */
57
- export interface CompoundInterestFutureValueResult {
58
- /** Future value (principal + contributions + interest), in USD. */
59
- futureValue: number;
60
- /** Total contributed (principal + sum of monthly contributions over the period), in USD. */
61
- totalContributions: number;
62
- /** Interest earned (futureValue - totalContributions), in USD. */
63
- interestEarned: number;
64
- }
65
- /**
66
- * Compute the future value of a compound-interest investment with optional
67
- * regular monthly contributions.
68
- *
69
- * 1-to-1 port of site/src/pages/compound-interest-calculator/compound-interest-calculator.js
70
- * function `calculateFutureValue`. Site uses `annualRate` as decimal; this engine
71
- * accepts whole-number percent and converts internally so the contract is
72
- * Percent-suffix consistent (ADR-0039).
73
- */
74
- export declare function futureValue(input: CompoundInterestFutureValueInput): CompoundInterestFutureValueResult;
75
- //# sourceMappingURL=compoundInterest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compoundInterest.d.ts","sourceRoot":"","sources":["../../src/engines/compoundInterest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC;;;;;;;GAOG;AACH,MAAM,WAAW,gCAAgC;IAC/C,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,oBAAoB,EAAE,yBAAyB,CAAC;IAChD,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,gCAAgC,GACtC,iCAAiC,CAyCnC"}
@@ -1,74 +0,0 @@
1
- /**
2
- * Compound-interest engine — lifted from
3
- * site/src/pages/compound-interest-calculator/compound-interest-calculator.js
4
- * (function `calculateFutureValue`).
5
- *
6
- * Per ADR-0039 § 5: pure synchronous functions, ENGINE_VERSION constant,
7
- * parity test against the site source as the gate.
8
- *
9
- * Math reference:
10
- * FV_principal = P * (1 + r/n)^(nt)
11
- * FV_contributions = PMT_per_period * [((1 + r/n)^(nt) - 1) / (r/n)] (if r > 0)
12
- * FV_contributions = PMT_per_period * (n * t) (if r == 0)
13
- * where:
14
- * P = initial principal
15
- * PMT_per_period = monthlyContribution * (12 / n)
16
- * r = annual rate as decimal (e.g., 0.07 for 7%)
17
- * n = compounding periods per year
18
- * t = years
19
- *
20
- * The engine accepts the rate as a percent and compounding as a label
21
- * (per ADR-0039 § 2 Percent-suffix convention + sprint prompt enum).
22
- */
23
- import { COMPOUNDING_FREQUENCY, } from "../shared/bounds.js";
24
- /**
25
- * SemVer of the compound-interest engine math. Per ADR-0039 § 5 (reaffirmed in
26
- * ADR-0041 Position #4a): major bump = math change; minor = additive output;
27
- * patch = numerical correction. NOT bumped for cosmetic refactors.
28
- * - 0.1.0: initial v1 lift from compound-interest-calculator.js (S135 Item 5).
29
- * - 0.2.0 (v0.1.0 publish): out-of-policy package-surface bump — superseded.
30
- * - 1.0.0 (v0.2.0 publish): one-time reset to align with ADR-0039 § 5 per ADR-0041 D4a.
31
- * Math unchanged from 0.1.0 / 0.2.0.
32
- */
33
- export const ENGINE_VERSION = "1.0.0";
34
- /**
35
- * Compute the future value of a compound-interest investment with optional
36
- * regular monthly contributions.
37
- *
38
- * 1-to-1 port of site/src/pages/compound-interest-calculator/compound-interest-calculator.js
39
- * function `calculateFutureValue`. Site uses `annualRate` as decimal; this engine
40
- * accepts whole-number percent and converts internally so the contract is
41
- * Percent-suffix consistent (ADR-0039).
42
- */
43
- export function futureValue(input) {
44
- const { principal, annualRatePercent, years, compoundingFrequency, monthlyContribution = 0, } = input;
45
- // Percent → decimal at the engine boundary.
46
- const r = annualRatePercent / 100;
47
- const n = COMPOUNDING_FREQUENCY[compoundingFrequency];
48
- const t = years;
49
- const periods = n * t;
50
- const periodicRate = r / n;
51
- // FV of principal.
52
- const fvPrincipal = principal * Math.pow(1 + periodicRate, periods);
53
- // FV of regular contributions (annuity-due-like, contributions split per period).
54
- const contributionPerPeriod = monthlyContribution * (12 / n);
55
- let fvContributions = 0;
56
- if (periodicRate > 0 && contributionPerPeriod > 0) {
57
- fvContributions =
58
- contributionPerPeriod *
59
- ((Math.pow(1 + periodicRate, periods) - 1) / periodicRate);
60
- }
61
- else if (contributionPerPeriod > 0) {
62
- // 0% rate: contributions just sum.
63
- fvContributions = contributionPerPeriod * periods;
64
- }
65
- const futureValueTotal = fvPrincipal + fvContributions;
66
- const totalContributions = principal + monthlyContribution * 12 * t;
67
- const interestEarned = futureValueTotal - totalContributions;
68
- return {
69
- futureValue: futureValueTotal,
70
- totalContributions,
71
- interestEarned,
72
- };
73
- }
74
- //# sourceMappingURL=compoundInterest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compoundInterest.js","sourceRoot":"","sources":["../../src/engines/compoundInterest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EACL,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAmCtC;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CACzB,KAAuC;IAEvC,MAAM,EACJ,SAAS,EACT,iBAAiB,EACjB,KAAK,EACL,oBAAoB,EACpB,mBAAmB,GAAG,CAAC,GACxB,GAAG,KAAK,CAAC;IAEV,4CAA4C;IAC5C,MAAM,CAAC,GAAG,iBAAiB,GAAG,GAAG,CAAC;IAClC,MAAM,CAAC,GAAG,qBAAqB,CAAC,oBAAoB,CAAC,CAAC;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC;IAEhB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;IAE3B,mBAAmB;IACnB,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,CAAC;IAEpE,kFAAkF;IAClF,MAAM,qBAAqB,GAAG,mBAAmB,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,YAAY,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;QAClD,eAAe;YACb,qBAAqB;gBACrB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,qBAAqB,GAAG,CAAC,EAAE,CAAC;QACrC,mCAAmC;QACnC,eAAe,GAAG,qBAAqB,GAAG,OAAO,CAAC;IACpD,CAAC;IAED,MAAM,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;IACvD,MAAM,kBAAkB,GAAG,SAAS,GAAG,mBAAmB,GAAG,EAAE,GAAG,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;IAE7D,OAAO;QACL,WAAW,EAAE,gBAAgB;QAC7B,kBAAkB;QAClB,cAAc;KACf,CAAC;AACJ,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Self-contained 2026 federal tax data subset for the @markcolabs/mcp
3
- * package's paycheck engine.
4
- *
5
- * Mirrored from site/src/data/annual-limits.js. See engines/data/ssa.ts for the
6
- * full rationale on the mirror pattern (npm consumers cannot reach site/src/).
7
- *
8
- * Filing status keys mirror the paycheck engine's camelCase convention:
9
- * "single" | "married" | "marriedSeparate" | "headOfHousehold"
10
- *
11
- * Source of truth: IRS Rev. Proc. 2025-32 (2026 inflation adjustments).
12
- * Last verified: 2026-05-09.
13
- */
14
- import { SS_WAGE_BASE } from "./ssa.js";
15
- export type FilingStatus = "single" | "married" | "marriedSeparate" | "headOfHousehold";
16
- /** FICA statutory rates (unchanged since 1990 / ACA 2013). */
17
- export declare const FICA_RATES: {
18
- readonly socialSecurityRate: 0.062;
19
- readonly medicareRate: 0.0145;
20
- readonly additionalMedicareRate: 0.009;
21
- };
22
- /** Additional Medicare Tax 0.9% kicks in above these wage thresholds (filing-status keyed). */
23
- export declare const ADDITIONAL_MEDICARE_THRESHOLDS_2026: Record<FilingStatus, number>;
24
- /** 2026 standard deductions (IRS Rev. Proc. 2025-32). */
25
- export declare const STANDARD_DEDUCTIONS_2026: Record<FilingStatus, number>;
26
- /** Tax bracket entry. `max: null` indicates the top open-ended bracket. */
27
- export interface TaxBracket {
28
- min: number;
29
- max: number | null;
30
- rate: number;
31
- /** Cumulative tax at this bracket's floor (Percentage Method). */
32
- baseTax: number;
33
- }
34
- /**
35
- * 2026 federal tax brackets (IRS Rev. Proc. 2025-32; verified AL-2026-001 S134).
36
- * Filing-status keyed; values match site/src/data/annual-limits.js TAX_BRACKETS[2026].
37
- */
38
- export declare const FEDERAL_TAX_BRACKETS_2026: Record<FilingStatus, TaxBracket[]>;
39
- /** Pay periods per year. Matches site/src/utils/paycheck-tax-engine.js PAY_PERIODS. */
40
- export declare const PAY_PERIODS_PER_YEAR: Record<"weekly" | "biweekly" | "semimonthly" | "monthly" | "quarterly" | "annual", number>;
41
- export type PayFrequencyLabel = keyof typeof PAY_PERIODS_PER_YEAR;
42
- /** US states with no income tax (paycheck engine NO_TAX_STATES). */
43
- export declare const NO_TAX_STATES: readonly ["AK", "FL", "NV", "NH", "SD", "TN", "TX", "WA", "WY"];
44
- export type NoTaxStateCode = (typeof NO_TAX_STATES)[number];
45
- /** Re-export SS wage base for paycheck engine (FICA SS cap). */
46
- export { SS_WAGE_BASE };
47
- //# sourceMappingURL=federalTax.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"federalTax.d.ts","sourceRoot":"","sources":["../../../src/engines/data/federalTax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAExF,8DAA8D;AAC9D,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,+FAA+F;AAC/F,eAAO,MAAM,mCAAmC,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAK5E,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAKjE,CAAC;AAEF,2EAA2E;AAC3E,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CAqCxE,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,EAC1E,MAAM,CAQP,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAElE,oEAAoE;AACpE,eAAO,MAAM,aAAa,iEAUhB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,gEAAgE;AAChE,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -1,111 +0,0 @@
1
- /**
2
- * Self-contained 2026 federal tax data subset for the @markcolabs/mcp
3
- * package's paycheck engine.
4
- *
5
- * Mirrored from site/src/data/annual-limits.js. See engines/data/ssa.ts for the
6
- * full rationale on the mirror pattern (npm consumers cannot reach site/src/).
7
- *
8
- * Filing status keys mirror the paycheck engine's camelCase convention:
9
- * "single" | "married" | "marriedSeparate" | "headOfHousehold"
10
- *
11
- * Source of truth: IRS Rev. Proc. 2025-32 (2026 inflation adjustments).
12
- * Last verified: 2026-05-09.
13
- */
14
- import { SS_WAGE_BASE } from "./ssa.js";
15
- /** FICA statutory rates (unchanged since 1990 / ACA 2013). */
16
- export const FICA_RATES = {
17
- socialSecurityRate: 0.062,
18
- medicareRate: 0.0145,
19
- additionalMedicareRate: 0.009,
20
- };
21
- /** Additional Medicare Tax 0.9% kicks in above these wage thresholds (filing-status keyed). */
22
- export const ADDITIONAL_MEDICARE_THRESHOLDS_2026 = {
23
- single: 200_000,
24
- married: 250_000,
25
- marriedSeparate: 125_000,
26
- headOfHousehold: 200_000,
27
- };
28
- /** 2026 standard deductions (IRS Rev. Proc. 2025-32). */
29
- export const STANDARD_DEDUCTIONS_2026 = {
30
- single: 15_750,
31
- married: 31_500,
32
- marriedSeparate: 15_750,
33
- headOfHousehold: 23_625,
34
- };
35
- /** Build cumulative `baseTax` for each bracket (used by the Percentage Method). */
36
- function withBaseTax(brackets) {
37
- let cumulative = 0;
38
- return brackets.map((b) => {
39
- const baseTax = cumulative;
40
- if (b.max !== null) {
41
- cumulative += (b.max - b.min) * b.rate;
42
- }
43
- return { min: b.min, max: b.max, rate: b.rate, baseTax };
44
- });
45
- }
46
- /**
47
- * 2026 federal tax brackets (IRS Rev. Proc. 2025-32; verified AL-2026-001 S134).
48
- * Filing-status keyed; values match site/src/data/annual-limits.js TAX_BRACKETS[2026].
49
- */
50
- export const FEDERAL_TAX_BRACKETS_2026 = {
51
- single: withBaseTax([
52
- { min: 0, max: 12_400, rate: 0.10 },
53
- { min: 12_400, max: 50_400, rate: 0.12 },
54
- { min: 50_400, max: 105_700, rate: 0.22 },
55
- { min: 105_700, max: 201_775, rate: 0.24 },
56
- { min: 201_775, max: 256_225, rate: 0.32 },
57
- { min: 256_225, max: 640_600, rate: 0.35 },
58
- { min: 640_600, max: null, rate: 0.37 },
59
- ]),
60
- married: withBaseTax([
61
- { min: 0, max: 24_800, rate: 0.10 },
62
- { min: 24_800, max: 100_800, rate: 0.12 },
63
- { min: 100_800, max: 211_400, rate: 0.22 },
64
- { min: 211_400, max: 403_550, rate: 0.24 },
65
- { min: 403_550, max: 512_450, rate: 0.32 },
66
- { min: 512_450, max: 768_700, rate: 0.35 },
67
- { min: 768_700, max: null, rate: 0.37 },
68
- ]),
69
- marriedSeparate: withBaseTax([
70
- { min: 0, max: 12_400, rate: 0.10 },
71
- { min: 12_400, max: 50_400, rate: 0.12 },
72
- { min: 50_400, max: 105_700, rate: 0.22 },
73
- { min: 105_700, max: 201_775, rate: 0.24 },
74
- { min: 201_775, max: 256_225, rate: 0.32 },
75
- { min: 256_225, max: 384_350, rate: 0.35 },
76
- { min: 384_350, max: null, rate: 0.37 },
77
- ]),
78
- headOfHousehold: withBaseTax([
79
- { min: 0, max: 17_700, rate: 0.10 },
80
- { min: 17_700, max: 67_450, rate: 0.12 },
81
- { min: 67_450, max: 105_700, rate: 0.22 },
82
- { min: 105_700, max: 201_775, rate: 0.24 },
83
- { min: 201_775, max: 256_200, rate: 0.32 },
84
- { min: 256_200, max: 640_600, rate: 0.35 },
85
- { min: 640_600, max: null, rate: 0.37 },
86
- ]),
87
- };
88
- /** Pay periods per year. Matches site/src/utils/paycheck-tax-engine.js PAY_PERIODS. */
89
- export const PAY_PERIODS_PER_YEAR = {
90
- weekly: 52,
91
- biweekly: 26,
92
- semimonthly: 24,
93
- monthly: 12,
94
- quarterly: 4,
95
- annual: 1,
96
- };
97
- /** US states with no income tax (paycheck engine NO_TAX_STATES). */
98
- export const NO_TAX_STATES = [
99
- "AK",
100
- "FL",
101
- "NV",
102
- "NH",
103
- "SD",
104
- "TN",
105
- "TX",
106
- "WA",
107
- "WY",
108
- ];
109
- /** Re-export SS wage base for paycheck engine (FICA SS cap). */
110
- export { SS_WAGE_BASE };
111
- //# sourceMappingURL=federalTax.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"federalTax.js","sourceRoot":"","sources":["../../../src/engines/data/federalTax.ts"],"names":[],"mappings":"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"}
@@ -1,137 +0,0 @@
1
- /**
2
- * Self-contained 2026 IRS retirement-plan limits subset for the MCP package's
3
- * retirement engines (401k, IRA, Roth conversion).
4
- *
5
- * Mirrored from site/src/data/annual-limits.js LIMITS_401K_2026 / LIMITS_IRA_2026
6
- * / ROTH_PHASE_OUT_2026 / TRADITIONAL_PHASE_OUT_2026. See engines/data/ssa.ts
7
- * for full rationale on the mirror pattern.
8
- *
9
- * Source: IRS Notice 2025-67 (2026 retirement-plan limits) +
10
- * SECURE 2.0 Act §109 (super catch-up provision for ages 60-63).
11
- * IRA limits re-affirmed AL-2026-001 / ARCH-BRIEF-20260504.
12
- * Last verified: 2026-05-09.
13
- */
14
- export declare const LIMITS_401K_2026: {
15
- /** Base employee deferral limit. */
16
- readonly base: 24500;
17
- /** Regular catch-up amount for ages 50-59 or 64+. */
18
- readonly catchUp: 8000;
19
- /** Super catch-up amount for ages 60-63 (SECURE 2.0). */
20
- readonly superCatchUp: 11250;
21
- /** Total deferral limit with regular catch-up. */
22
- readonly totalWithCatchUp: 32500;
23
- /** Total deferral limit with super catch-up. */
24
- readonly totalWithSuperCatchUp: 35750;
25
- /** Minimum age for any catch-up. */
26
- readonly catchUpAge: 50;
27
- /** Start of super catch-up window. */
28
- readonly superCatchUpAgeStart: 60;
29
- /** End of super catch-up window. */
30
- readonly superCatchUpAgeEnd: 63;
31
- };
32
- /**
33
- * 2026 IRA Contribution Limits.
34
- * Mirrored from site/src/data/annual-limits.js `LIMITS_IRA_2026`.
35
- *
36
- * Source: IRS Notice 2025-67 (2026 retirement plan limits); SECURE 2.0 Act §107
37
- * (catch-up indexing). Re-affirmed AL-2026-001 / ARCH-BRIEF-20260504.
38
- */
39
- export declare const LIMITS_IRA_2026: {
40
- /** Base IRA contribution limit (under age 50). */
41
- readonly standard: 7500;
42
- /** Catch-up amount for age 50+ (SECURE 2.0 indexed). */
43
- readonly catchUp: 1100;
44
- /** Total contribution limit for age 50+ (standard + catchUp). */
45
- readonly total50Plus: 8600;
46
- /** Minimum age for catch-up eligibility. */
47
- readonly catchUpAge: 50;
48
- };
49
- /**
50
- * 2026 Roth IRA Income (MAGI) Phase-Out Thresholds.
51
- * Mirrored from site/src/data/annual-limits.js `ROTH_PHASE_OUT_2026`.
52
- *
53
- * Source: IRS Notice 2025-67; IRC §408A(c)(3) phase-out methodology.
54
- * Filing-status keys are camelCase to match the MCP package's `FilingStatus`
55
- * convention; mapping vs. site keys: single=single, mfj=marriedFilingJointly,
56
- * mfs=marriedFilingSeparately. (Head-of-household uses the single thresholds
57
- * per IRS rules.)
58
- */
59
- export declare const ROTH_PHASE_OUT_2026: {
60
- readonly single: {
61
- readonly start: 153000;
62
- readonly end: 168000;
63
- };
64
- readonly marriedFilingJointly: {
65
- readonly start: 242000;
66
- readonly end: 252000;
67
- };
68
- readonly marriedFilingSeparately: {
69
- readonly start: 0;
70
- readonly end: 10000;
71
- };
72
- readonly headOfHousehold: {
73
- readonly start: 153000;
74
- readonly end: 168000;
75
- };
76
- };
77
- /**
78
- * 2026 Traditional IRA Deduction Phase-Out (contributor covered by workplace plan).
79
- * Mirrored from site/src/data/annual-limits.js `TRADITIONAL_PHASE_OUT_2026`.
80
- *
81
- * Source: IRS Notice 2025-67; IRC §219(g) deduction phase-out methodology.
82
- * NOTE: This phase-out governs the DEDUCTIBILITY of traditional IRA
83
- * contributions, not the contribution limit itself. The IRA contributionLimit
84
- * tool returns the eligibleContribution (= base limit for Traditional regardless
85
- * of MAGI, since non-deductible contributions are always permitted). The
86
- * Traditional phase-out is exposed via a separate field for clients that need
87
- * the deduction-phase-out signal.
88
- */
89
- export declare const TRADITIONAL_PHASE_OUT_2026: {
90
- readonly single: {
91
- readonly start: 81000;
92
- readonly end: 91000;
93
- };
94
- readonly marriedFilingJointly: {
95
- readonly start: 129000;
96
- readonly end: 149000;
97
- };
98
- readonly marriedFilingSeparately: {
99
- readonly start: 0;
100
- readonly end: 10000;
101
- };
102
- readonly headOfHousehold: {
103
- readonly start: 81000;
104
- readonly end: 91000;
105
- };
106
- };
107
- /**
108
- * 2026 HSA Contribution Limits.
109
- * Mirrored from site/src/data/annual-limits.js `LIMITS_HSA_2026`.
110
- *
111
- * Source: IRS Rev. Proc. 2025-19 (2026 HSA inflation adjustments under IRC §223);
112
- * IRC §223(b)(3)(B) ($1,000 catch-up is statutory and NOT inflation-indexed).
113
- * Last verified: 2026-05-27 (mirrored from site/src/data/annual-limits.js,
114
- * site _meta.last_verified_date: 2026-05-07).
115
- *
116
- * Notes:
117
- * - `medicareAge`: HSA contributions are prohibited once enrolled in Medicare
118
- * (typically age 65). Surfaced as an informational threshold; the HSA
119
- * contribution-limit tool does not zero out the limit at this age, it just
120
- * reports it (parallel to how the site shows a Medicare warning badge).
121
- * - Employer contributions REDUCE the employee's eligible payroll deduction
122
- * dollar-for-dollar because the IRS limit is a TOTAL annual limit, not a
123
- * per-source limit. See engines/hsa.ts for the clamp.
124
- */
125
- export declare const LIMITS_HSA_2026: {
126
- /** Self-only HDHP coverage base limit. */
127
- readonly selfOnly: 4400;
128
- /** Family HDHP coverage base limit. */
129
- readonly family: 8750;
130
- /** Catch-up amount for age 55+ (statutory, not indexed). */
131
- readonly catchUp: 1000;
132
- /** Minimum age for catch-up eligibility. */
133
- readonly catchUpAge: 55;
134
- /** Age at which Medicare enrollment typically begins (informational only). */
135
- readonly medicareAge: 65;
136
- };
137
- //# sourceMappingURL=irs2026.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"irs2026.d.ts","sourceRoot":"","sources":["../../../src/engines/data/irs2026.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,gBAAgB;IAC3B,oCAAoC;;IAEpC,qDAAqD;;IAErD,yDAAyD;;IAEzD,kDAAkD;;IAElD,gDAAgD;;IAEhD,oCAAoC;;IAEpC,sCAAsC;;IAEtC,oCAAoC;;CAE5B,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,eAAe;IAC1B,kDAAkD;;IAElD,wDAAwD;;IAExD,iEAAiE;;IAEjE,4CAA4C;;CAEpC,CAAC;AAEX;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAKtB,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;CAK7B,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe;IAC1B,0CAA0C;;IAE1C,uCAAuC;;IAEvC,4DAA4D;;IAE5D,4CAA4C;;IAE5C,8EAA8E;;CAEtE,CAAC"}
@@ -1,113 +0,0 @@
1
- /**
2
- * Self-contained 2026 IRS retirement-plan limits subset for the MCP package's
3
- * retirement engines (401k, IRA, Roth conversion).
4
- *
5
- * Mirrored from site/src/data/annual-limits.js LIMITS_401K_2026 / LIMITS_IRA_2026
6
- * / ROTH_PHASE_OUT_2026 / TRADITIONAL_PHASE_OUT_2026. See engines/data/ssa.ts
7
- * for full rationale on the mirror pattern.
8
- *
9
- * Source: IRS Notice 2025-67 (2026 retirement-plan limits) +
10
- * SECURE 2.0 Act §109 (super catch-up provision for ages 60-63).
11
- * IRA limits re-affirmed AL-2026-001 / ARCH-BRIEF-20260504.
12
- * Last verified: 2026-05-09.
13
- */
14
- export const LIMITS_401K_2026 = {
15
- /** Base employee deferral limit. */
16
- base: 24_500,
17
- /** Regular catch-up amount for ages 50-59 or 64+. */
18
- catchUp: 8_000,
19
- /** Super catch-up amount for ages 60-63 (SECURE 2.0). */
20
- superCatchUp: 11_250,
21
- /** Total deferral limit with regular catch-up. */
22
- totalWithCatchUp: 32_500,
23
- /** Total deferral limit with super catch-up. */
24
- totalWithSuperCatchUp: 35_750,
25
- /** Minimum age for any catch-up. */
26
- catchUpAge: 50,
27
- /** Start of super catch-up window. */
28
- superCatchUpAgeStart: 60,
29
- /** End of super catch-up window. */
30
- superCatchUpAgeEnd: 63,
31
- };
32
- /**
33
- * 2026 IRA Contribution Limits.
34
- * Mirrored from site/src/data/annual-limits.js `LIMITS_IRA_2026`.
35
- *
36
- * Source: IRS Notice 2025-67 (2026 retirement plan limits); SECURE 2.0 Act §107
37
- * (catch-up indexing). Re-affirmed AL-2026-001 / ARCH-BRIEF-20260504.
38
- */
39
- export const LIMITS_IRA_2026 = {
40
- /** Base IRA contribution limit (under age 50). */
41
- standard: 7_500,
42
- /** Catch-up amount for age 50+ (SECURE 2.0 indexed). */
43
- catchUp: 1_100,
44
- /** Total contribution limit for age 50+ (standard + catchUp). */
45
- total50Plus: 8_600,
46
- /** Minimum age for catch-up eligibility. */
47
- catchUpAge: 50,
48
- };
49
- /**
50
- * 2026 Roth IRA Income (MAGI) Phase-Out Thresholds.
51
- * Mirrored from site/src/data/annual-limits.js `ROTH_PHASE_OUT_2026`.
52
- *
53
- * Source: IRS Notice 2025-67; IRC §408A(c)(3) phase-out methodology.
54
- * Filing-status keys are camelCase to match the MCP package's `FilingStatus`
55
- * convention; mapping vs. site keys: single=single, mfj=marriedFilingJointly,
56
- * mfs=marriedFilingSeparately. (Head-of-household uses the single thresholds
57
- * per IRS rules.)
58
- */
59
- export const ROTH_PHASE_OUT_2026 = {
60
- single: { start: 153_000, end: 168_000 },
61
- marriedFilingJointly: { start: 242_000, end: 252_000 },
62
- marriedFilingSeparately: { start: 0, end: 10_000 },
63
- headOfHousehold: { start: 153_000, end: 168_000 },
64
- };
65
- /**
66
- * 2026 Traditional IRA Deduction Phase-Out (contributor covered by workplace plan).
67
- * Mirrored from site/src/data/annual-limits.js `TRADITIONAL_PHASE_OUT_2026`.
68
- *
69
- * Source: IRS Notice 2025-67; IRC §219(g) deduction phase-out methodology.
70
- * NOTE: This phase-out governs the DEDUCTIBILITY of traditional IRA
71
- * contributions, not the contribution limit itself. The IRA contributionLimit
72
- * tool returns the eligibleContribution (= base limit for Traditional regardless
73
- * of MAGI, since non-deductible contributions are always permitted). The
74
- * Traditional phase-out is exposed via a separate field for clients that need
75
- * the deduction-phase-out signal.
76
- */
77
- export const TRADITIONAL_PHASE_OUT_2026 = {
78
- single: { start: 81_000, end: 91_000 },
79
- marriedFilingJointly: { start: 129_000, end: 149_000 },
80
- marriedFilingSeparately: { start: 0, end: 10_000 },
81
- headOfHousehold: { start: 81_000, end: 91_000 },
82
- };
83
- /**
84
- * 2026 HSA Contribution Limits.
85
- * Mirrored from site/src/data/annual-limits.js `LIMITS_HSA_2026`.
86
- *
87
- * Source: IRS Rev. Proc. 2025-19 (2026 HSA inflation adjustments under IRC §223);
88
- * IRC §223(b)(3)(B) ($1,000 catch-up is statutory and NOT inflation-indexed).
89
- * Last verified: 2026-05-27 (mirrored from site/src/data/annual-limits.js,
90
- * site _meta.last_verified_date: 2026-05-07).
91
- *
92
- * Notes:
93
- * - `medicareAge`: HSA contributions are prohibited once enrolled in Medicare
94
- * (typically age 65). Surfaced as an informational threshold; the HSA
95
- * contribution-limit tool does not zero out the limit at this age, it just
96
- * reports it (parallel to how the site shows a Medicare warning badge).
97
- * - Employer contributions REDUCE the employee's eligible payroll deduction
98
- * dollar-for-dollar because the IRS limit is a TOTAL annual limit, not a
99
- * per-source limit. See engines/hsa.ts for the clamp.
100
- */
101
- export const LIMITS_HSA_2026 = {
102
- /** Self-only HDHP coverage base limit. */
103
- selfOnly: 4_400,
104
- /** Family HDHP coverage base limit. */
105
- family: 8_750,
106
- /** Catch-up amount for age 55+ (statutory, not indexed). */
107
- catchUp: 1_000,
108
- /** Minimum age for catch-up eligibility. */
109
- catchUpAge: 55,
110
- /** Age at which Medicare enrollment typically begins (informational only). */
111
- medicareAge: 65,
112
- };
113
- //# sourceMappingURL=irs2026.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"irs2026.js","sourceRoot":"","sources":["../../../src/engines/data/irs2026.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,oCAAoC;IACpC,IAAI,EAAE,MAAM;IACZ,qDAAqD;IACrD,OAAO,EAAE,KAAK;IACd,yDAAyD;IACzD,YAAY,EAAE,MAAM;IACpB,kDAAkD;IAClD,gBAAgB,EAAE,MAAM;IACxB,gDAAgD;IAChD,qBAAqB,EAAE,MAAM;IAC7B,oCAAoC;IACpC,UAAU,EAAE,EAAE;IACd,sCAAsC;IACtC,oBAAoB,EAAE,EAAE;IACxB,oCAAoC;IACpC,kBAAkB,EAAE,EAAE;CACd,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kDAAkD;IAClD,QAAQ,EAAE,KAAK;IACf,wDAAwD;IACxD,OAAO,EAAE,KAAK;IACd,iEAAiE;IACjE,WAAW,EAAE,KAAK;IAClB,4CAA4C;IAC5C,UAAU,EAAE,EAAE;CACN,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC1D,oBAAoB,EAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC1D,uBAAuB,EAAG,EAAE,KAAK,EAAE,CAAC,EAAQ,GAAG,EAAE,MAAM,EAAG;IAC1D,eAAe,EAAW,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;CAClD,CAAC;AAEX;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,MAAM,EAAoB,EAAE,KAAK,EAAE,MAAM,EAAG,GAAG,EAAE,MAAM,EAAG;IAC1D,oBAAoB,EAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;IAC1D,uBAAuB,EAAG,EAAE,KAAK,EAAE,CAAC,EAAQ,GAAG,EAAE,MAAM,EAAG;IAC1D,eAAe,EAAW,EAAE,KAAK,EAAE,MAAM,EAAG,GAAG,EAAE,MAAM,EAAG;CAClD,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,0CAA0C;IAC1C,QAAQ,EAAE,KAAK;IACf,uCAAuC;IACvC,MAAM,EAAI,KAAK;IACf,4DAA4D;IAC5D,OAAO,EAAG,KAAK;IACf,4CAA4C;IAC5C,UAAU,EAAE,EAAE;IACd,8EAA8E;IAC9E,WAAW,EAAE,EAAE;CACP,CAAC"}
@@ -1,59 +0,0 @@
1
- /**
2
- * IRS Uniform Lifetime Table (Pub. 590-B Table III, post-2022 version) and
3
- * SECURE 2.0 RMD-start-age tiers for the MCP `rmd` engine.
4
- *
5
- * Mirrored from site/src/utils/rmd-engine.js — `UNIFORM_LIFETIME_TABLE` and
6
- * `getRMDStartAge`. Following the same mirror pattern as other data modules
7
- * (engines/data/ssa.ts, engines/data/irs2026.ts): keep self-contained so the
8
- * npm package has no runtime dependency on the site `src/` tree.
9
- *
10
- * NOTE: The site rmd-engine.js currently uses ONLY the Uniform Lifetime
11
- * Table — the Joint Life Expectancy Table (Pub. 590-B Table II, applied
12
- * when spouse is sole beneficiary AND 10+ years younger) is NOT implemented
13
- * in the site source. To stay 1:1 with the site for parity-test correctness,
14
- * the MCP RMD tool also exposes ONLY the Uniform Lifetime path. The
15
- * `tableUsed` field in the result is always `"uniform-lifetime"` for v1.
16
- * If Joint Life is added to the site engine later, both sides bump in
17
- * lockstep.
18
- *
19
- * Source: IRS Publication 590-B (2024/2025) + SECURE 2.0 Act §107 (RMD age
20
- * tier: pre-1951 → 70.5, 1951-1959 → 73, 1960+ → 75).
21
- * SECURE 2.0 §302 reduced the missed-RMD excise tax from 50% to 25%
22
- * (and to 10% if corrected within the IRS correction window).
23
- * Last verified: 2026-05-27.
24
- */
25
- /**
26
- * IRS Uniform Lifetime Table (Table III) — post-2022 version per Pub. 590-B.
27
- * Keys are integer ages 72-120; values are distribution-period factors (years).
28
- * RMD = balance / distributionPeriod.
29
- */
30
- export declare const UNIFORM_LIFETIME_TABLE_2026: Readonly<Record<number, number>>;
31
- /**
32
- * Lowest age in the Uniform Lifetime Table. RMD requests below this age are
33
- * either pre-RMD (caller error) or use the lower bound (72) clamp matching
34
- * the site's `getDistributionPeriod` behavior. The MCP tool prefers an
35
- * INPUT_VALIDATION error for ages below the SECURE-2.0 floor (73 for the
36
- * common 1951-1959 cohort).
37
- */
38
- export declare const UNIFORM_LIFETIME_MIN_AGE = 72;
39
- /** Highest age in the Uniform Lifetime Table — clamps lookups for age > 120. */
40
- export declare const UNIFORM_LIFETIME_MAX_AGE = 120;
41
- /**
42
- * SECURE 2.0 RMD-start-age tiers (verbatim port of site `getRMDStartAge`).
43
- * - Born ≤ 1950 → 70.5 (legacy, pre-SECURE-Act)
44
- * - Born 1951-1959 → 73 (SECURE 2.0 §107 phase 1)
45
- * - Born ≥ 1960 → 75 (SECURE 2.0 §107 phase 2, effective 2033)
46
- */
47
- export declare function getRmdStartAge(birthYear: number): number;
48
- /**
49
- * SECURE 2.0 §302 missed-RMD excise tax (reduced from 50% pre-2023).
50
- * - 25% on the under-distributed amount (default)
51
- * - 10% if corrected within the IRS correction window (typically 2 years)
52
- * Surfaced as an informational field in the RMD result so callers can warn
53
- * users about the cost of missing the deadline.
54
- */
55
- export declare const RMD_MISSED_EXCISE_RATE = 0.25;
56
- export declare const RMD_MISSED_EXCISE_RATE_IF_CORRECTED = 0.1;
57
- /** Stable provenance string for `result.meta.source`. */
58
- export declare const RMD_TABLE_SOURCE = "IRS Publication 590-B (Uniform Lifetime Table III, post-2022); SECURE 2.0 Act \u00A7107 (RMD age tiers); \u00A7302 (25% excise tax)";
59
- //# sourceMappingURL=rmd2026.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rmd2026.d.ts","sourceRoot":"","sources":["../../../src/engines/data/rmd2026.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU/D,CAAC;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,mCAAmC,MAAO,CAAC;AAExD,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,wIACgG,CAAC"}