@retiregolden/engine 0.1.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 (199) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +79 -0
  3. package/dist/allocation/assetClasses.d.ts +94 -0
  4. package/dist/allocation/assetClasses.js +215 -0
  5. package/dist/decisions/annuitization.d.ts +72 -0
  6. package/dist/decisions/annuitization.js +184 -0
  7. package/dist/decisions/decisionFixtures.d.ts +48 -0
  8. package/dist/decisions/decisionFixtures.js +253 -0
  9. package/dist/decisions/evaluateCandidate.d.ts +61 -0
  10. package/dist/decisions/evaluateCandidate.js +193 -0
  11. package/dist/decisions/generators.d.ts +110 -0
  12. package/dist/decisions/generators.js +667 -0
  13. package/dist/decisions/index.d.ts +17 -0
  14. package/dist/decisions/index.js +17 -0
  15. package/dist/decisions/insightsAdapter.d.ts +27 -0
  16. package/dist/decisions/insightsAdapter.js +51 -0
  17. package/dist/decisions/objectives.d.ts +96 -0
  18. package/dist/decisions/objectives.js +319 -0
  19. package/dist/decisions/pensionElection.d.ts +112 -0
  20. package/dist/decisions/pensionElection.js +239 -0
  21. package/dist/decisions/search.d.ts +51 -0
  22. package/dist/decisions/search.js +110 -0
  23. package/dist/decisions/spendingSolver.d.ts +70 -0
  24. package/dist/decisions/spendingSolver.js +180 -0
  25. package/dist/decisions/spiaQuotes.d.ts +21 -0
  26. package/dist/decisions/spiaQuotes.js +43 -0
  27. package/dist/decisions/stochastic.d.ts +11 -0
  28. package/dist/decisions/stochastic.js +66 -0
  29. package/dist/decisions/swrComparator.d.ts +54 -0
  30. package/dist/decisions/swrComparator.js +89 -0
  31. package/dist/decisions/tournament.d.ts +53 -0
  32. package/dist/decisions/tournament.js +104 -0
  33. package/dist/decisions/types.d.ts +125 -0
  34. package/dist/decisions/types.js +12 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.js +12 -0
  37. package/dist/insights/detectors/annuitizationHeadroom.d.ts +11 -0
  38. package/dist/insights/detectors/annuitizationHeadroom.js +77 -0
  39. package/dist/insights/detectors/assetLocation.d.ts +9 -0
  40. package/dist/insights/detectors/assetLocation.js +86 -0
  41. package/dist/insights/detectors/hecmBufferCandidate.d.ts +12 -0
  42. package/dist/insights/detectors/hecmBufferCandidate.js +76 -0
  43. package/dist/insights/detectors/incomeFloorFunded.d.ts +8 -0
  44. package/dist/insights/detectors/incomeFloorFunded.js +52 -0
  45. package/dist/insights/detectors/irmaaTierEdge.d.ts +2 -0
  46. package/dist/insights/detectors/irmaaTierEdge.js +102 -0
  47. package/dist/insights/detectors/pensionElectionPending.d.ts +11 -0
  48. package/dist/insights/detectors/pensionElectionPending.js +62 -0
  49. package/dist/insights/detectors/qcdEfficiency.d.ts +2 -0
  50. package/dist/insights/detectors/qcdEfficiency.js +62 -0
  51. package/dist/insights/detectors/rothBridgeHeadroom.d.ts +2 -0
  52. package/dist/insights/detectors/rothBridgeHeadroom.js +77 -0
  53. package/dist/insights/detectors/spendingGuardrails.d.ts +2 -0
  54. package/dist/insights/detectors/spendingGuardrails.js +77 -0
  55. package/dist/insights/detectors/spendingHeadroom.d.ts +12 -0
  56. package/dist/insights/detectors/spendingHeadroom.js +92 -0
  57. package/dist/insights/detectors/ssBridgeGap.d.ts +9 -0
  58. package/dist/insights/detectors/ssBridgeGap.js +92 -0
  59. package/dist/insights/detectors/stateRelocation.d.ts +12 -0
  60. package/dist/insights/detectors/stateRelocation.js +99 -0
  61. package/dist/insights/detectors/widowsPenalty.d.ts +12 -0
  62. package/dist/insights/detectors/widowsPenalty.js +145 -0
  63. package/dist/insights/registry.d.ts +4 -0
  64. package/dist/insights/registry.js +62 -0
  65. package/dist/insights/runInsights.d.ts +6 -0
  66. package/dist/insights/runInsights.js +15 -0
  67. package/dist/insights/types.d.ts +70 -0
  68. package/dist/insights/types.js +1 -0
  69. package/dist/ladder/bridge.d.ts +72 -0
  70. package/dist/ladder/bridge.js +59 -0
  71. package/dist/ladder/fedInvest.d.ts +55 -0
  72. package/dist/ladder/fedInvest.js +77 -0
  73. package/dist/ladder/fundedRatio.d.ts +41 -0
  74. package/dist/ladder/fundedRatio.js +46 -0
  75. package/dist/ladder/ladderMath.d.ts +88 -0
  76. package/dist/ladder/ladderMath.js +140 -0
  77. package/dist/longevity/ssaPeriod2022.d.ts +10 -0
  78. package/dist/longevity/ssaPeriod2022.js +51 -0
  79. package/dist/longevity/types.d.ts +39 -0
  80. package/dist/longevity/types.js +1 -0
  81. package/dist/model/migrations.d.ts +20 -0
  82. package/dist/model/migrations.js +67 -0
  83. package/dist/model/plan.d.ts +3108 -0
  84. package/dist/model/plan.js +1514 -0
  85. package/dist/montecarlo/frontiers.d.ts +22 -0
  86. package/dist/montecarlo/frontiers.js +61 -0
  87. package/dist/montecarlo/historicalReturns.d.ts +27 -0
  88. package/dist/montecarlo/historicalReturns.js +124 -0
  89. package/dist/montecarlo/historicalSuites.d.ts +45 -0
  90. package/dist/montecarlo/historicalSuites.js +102 -0
  91. package/dist/montecarlo/ltcShock.d.ts +42 -0
  92. package/dist/montecarlo/ltcShock.js +62 -0
  93. package/dist/montecarlo/marketModels.d.ts +248 -0
  94. package/dist/montecarlo/marketModels.js +672 -0
  95. package/dist/montecarlo/mortality.d.ts +31 -0
  96. package/dist/montecarlo/mortality.js +61 -0
  97. package/dist/montecarlo/riskBasedGuardrails.d.ts +93 -0
  98. package/dist/montecarlo/riskBasedGuardrails.js +200 -0
  99. package/dist/montecarlo/rng.d.ts +18 -0
  100. package/dist/montecarlo/rng.js +44 -0
  101. package/dist/montecarlo/run.d.ts +210 -0
  102. package/dist/montecarlo/run.js +353 -0
  103. package/dist/montecarlo/sharedPaths.d.ts +43 -0
  104. package/dist/montecarlo/sharedPaths.js +28 -0
  105. package/dist/montecarlo/survival.d.ts +49 -0
  106. package/dist/montecarlo/survival.js +126 -0
  107. package/dist/params/data/realYieldCurve2026.d.ts +17 -0
  108. package/dist/params/data/realYieldCurve2026.js +26 -0
  109. package/dist/params/data/year2026.d.ts +14 -0
  110. package/dist/params/data/year2026.js +199 -0
  111. package/dist/params/index.d.ts +63 -0
  112. package/dist/params/index.js +134 -0
  113. package/dist/params/provenance.d.ts +29 -0
  114. package/dist/params/provenance.js +123 -0
  115. package/dist/params/state/data/year2026.d.ts +18 -0
  116. package/dist/params/state/data/year2026.js +581 -0
  117. package/dist/params/state/index.d.ts +13 -0
  118. package/dist/params/state/index.js +26 -0
  119. package/dist/params/state/types.d.ts +73 -0
  120. package/dist/params/state/types.js +10 -0
  121. package/dist/params/types.d.ts +201 -0
  122. package/dist/params/types.js +7 -0
  123. package/dist/projection/annuityForms.d.ts +62 -0
  124. package/dist/projection/annuityForms.js +87 -0
  125. package/dist/projection/compare.d.ts +96 -0
  126. package/dist/projection/compare.js +216 -0
  127. package/dist/projection/flatTax.d.ts +7 -0
  128. package/dist/projection/flatTax.js +14 -0
  129. package/dist/projection/optimizePlan.d.ts +328 -0
  130. package/dist/projection/optimizePlan.js +1039 -0
  131. package/dist/projection/relocation.d.ts +149 -0
  132. package/dist/projection/relocation.js +317 -0
  133. package/dist/projection/simulate.d.ts +61 -0
  134. package/dist/projection/simulate.js +2754 -0
  135. package/dist/projection/types.d.ts +381 -0
  136. package/dist/projection/types.js +9 -0
  137. package/dist/rmd/jointLifeTable.d.ts +8 -0
  138. package/dist/rmd/jointLifeTable.js +663 -0
  139. package/dist/rmd/rmd.d.ts +29 -0
  140. package/dist/rmd/rmd.js +34 -0
  141. package/dist/scenarios/scenarios.d.ts +70 -0
  142. package/dist/scenarios/scenarios.js +130 -0
  143. package/dist/socialSecurity/benefitFactor.d.ts +13 -0
  144. package/dist/socialSecurity/benefitFactor.js +40 -0
  145. package/dist/socialSecurity/claimFactor.d.ts +33 -0
  146. package/dist/socialSecurity/claimFactor.js +58 -0
  147. package/dist/socialSecurity/disability.d.ts +36 -0
  148. package/dist/socialSecurity/disability.js +42 -0
  149. package/dist/socialSecurity/familyMaximum.d.ts +38 -0
  150. package/dist/socialSecurity/familyMaximum.js +48 -0
  151. package/dist/socialSecurity/maritalBenefits.d.ts +57 -0
  152. package/dist/socialSecurity/maritalBenefits.js +87 -0
  153. package/dist/socialSecurity/nra.d.ts +30 -0
  154. package/dist/socialSecurity/nra.js +83 -0
  155. package/dist/socialSecurity/piaFromEarnings.d.ts +100 -0
  156. package/dist/socialSecurity/piaFromEarnings.js +202 -0
  157. package/dist/socialSecurity/ssaWageData.d.ts +68 -0
  158. package/dist/socialSecurity/ssaWageData.js +306 -0
  159. package/dist/socialSecurity/survivorBenefit.d.ts +61 -0
  160. package/dist/socialSecurity/survivorBenefit.js +61 -0
  161. package/dist/spending/abw.d.ts +57 -0
  162. package/dist/spending/abw.js +80 -0
  163. package/dist/spending/flexibleGoals.d.ts +62 -0
  164. package/dist/spending/flexibleGoals.js +136 -0
  165. package/dist/spending/guardrails.d.ts +78 -0
  166. package/dist/spending/guardrails.js +100 -0
  167. package/dist/spending/layers.d.ts +81 -0
  168. package/dist/spending/layers.js +67 -0
  169. package/dist/spending/shapePresets.d.ts +42 -0
  170. package/dist/spending/shapePresets.js +77 -0
  171. package/dist/strategies/accountEligibility.d.ts +81 -0
  172. package/dist/strategies/accountEligibility.js +98 -0
  173. package/dist/strategies/inheritedIra.d.ts +45 -0
  174. package/dist/strategies/inheritedIra.js +43 -0
  175. package/dist/strategies/iraBasis.d.ts +48 -0
  176. package/dist/strategies/iraBasis.js +46 -0
  177. package/dist/strategies/optimizer.d.ts +307 -0
  178. package/dist/strategies/optimizer.js +551 -0
  179. package/dist/strategies/rothBasis.d.ts +67 -0
  180. package/dist/strategies/rothBasis.js +83 -0
  181. package/dist/strategies/rothConversion.d.ts +55 -0
  182. package/dist/strategies/rothConversion.js +83 -0
  183. package/dist/strategies/sepp.d.ts +38 -0
  184. package/dist/strategies/sepp.js +53 -0
  185. package/dist/tax/aca.d.ts +40 -0
  186. package/dist/tax/aca.js +82 -0
  187. package/dist/tax/federalTax.d.ts +110 -0
  188. package/dist/tax/federalTax.js +249 -0
  189. package/dist/tax/medicare.d.ts +20 -0
  190. package/dist/tax/medicare.js +36 -0
  191. package/dist/tax/propertySale.d.ts +46 -0
  192. package/dist/tax/propertySale.js +35 -0
  193. package/dist/tax/stateTax.d.ts +66 -0
  194. package/dist/tax/stateTax.js +198 -0
  195. package/dist/testing/money.d.ts +7 -0
  196. package/dist/testing/money.js +17 -0
  197. package/dist/testing/planFixtures.d.ts +29 -0
  198. package/dist/testing/planFixtures.js +141 -0
  199. package/package.json +75 -0
@@ -0,0 +1,3108 @@
1
+ /**
2
+ * Plan schema v1 — the v2 domain model of a household's finances.
3
+ *
4
+ * Zod schemas are the source of truth: types are inferred from them, and the
5
+ * same schemas validate IndexedDB reads, JSON imports, and migration output.
6
+ * Forward-looking fields (strategies, scenarios) are schema-complete before
7
+ * their engines exist so early plans survive later phases via migrations.
8
+ *
9
+ * @see DOCS/architecture.md (data model)
10
+ * @see DOCS/features/README.md
11
+ */
12
+ import { z } from 'zod';
13
+ export declare const CURRENT_PLAN_SCHEMA_VERSION = 1;
14
+ export declare const personSchema: z.ZodObject<{
15
+ id: z.ZodString;
16
+ name: z.ZodString;
17
+ dob: z.ZodString;
18
+ sex: z.ZodEnum<{
19
+ female: "female";
20
+ male: "male";
21
+ average: "average";
22
+ }>;
23
+ retirementAge: z.ZodNullable<z.ZodNumber>;
24
+ longevity: z.ZodObject<{
25
+ planningAge: z.ZodNumber;
26
+ source: z.ZodEnum<{
27
+ model: "model";
28
+ manual: "manual";
29
+ percentile: "percentile";
30
+ }>;
31
+ percentile: z.ZodOptional<z.ZodObject<{
32
+ pct: z.ZodNumber;
33
+ joint: z.ZodBoolean;
34
+ healthMultiplier: z.ZodOptional<z.ZodNumber>;
35
+ partnerHealthMultiplier: z.ZodOptional<z.ZodNumber>;
36
+ }, z.core.$strip>>;
37
+ }, z.core.$strip>;
38
+ }, z.core.$strip>;
39
+ export type Person = z.infer<typeof personSchema>;
40
+ /** Relocation to a new state of residence starting in `fromYear`. */
41
+ export declare const stateMoveSchema: z.ZodObject<{
42
+ fromYear: z.ZodNumber;
43
+ fromMonth: z.ZodDefault<z.ZodNumber>;
44
+ state: z.ZodString;
45
+ }, z.core.$strip>;
46
+ export type StateMove = z.infer<typeof stateMoveSchema>;
47
+ export declare const householdSchema: z.ZodObject<{
48
+ filingStatus: z.ZodEnum<{
49
+ single: "single";
50
+ marriedFilingJointly: "marriedFilingJointly";
51
+ }>;
52
+ hasQualifyingDependent: z.ZodDefault<z.ZodBoolean>;
53
+ state: z.ZodString;
54
+ stateMoves: z.ZodDefault<z.ZodArray<z.ZodObject<{
55
+ fromYear: z.ZodNumber;
56
+ fromMonth: z.ZodDefault<z.ZodNumber>;
57
+ state: z.ZodString;
58
+ }, z.core.$strip>>>;
59
+ capitalLossCarryforward: z.ZodDefault<z.ZodNumber>;
60
+ people: z.ZodArray<z.ZodObject<{
61
+ id: z.ZodString;
62
+ name: z.ZodString;
63
+ dob: z.ZodString;
64
+ sex: z.ZodEnum<{
65
+ female: "female";
66
+ male: "male";
67
+ average: "average";
68
+ }>;
69
+ retirementAge: z.ZodNullable<z.ZodNumber>;
70
+ longevity: z.ZodObject<{
71
+ planningAge: z.ZodNumber;
72
+ source: z.ZodEnum<{
73
+ model: "model";
74
+ manual: "manual";
75
+ percentile: "percentile";
76
+ }>;
77
+ percentile: z.ZodOptional<z.ZodObject<{
78
+ pct: z.ZodNumber;
79
+ joint: z.ZodBoolean;
80
+ healthMultiplier: z.ZodOptional<z.ZodNumber>;
81
+ partnerHealthMultiplier: z.ZodOptional<z.ZodNumber>;
82
+ }, z.core.$strip>>;
83
+ }, z.core.$strip>;
84
+ }, z.core.$strip>>;
85
+ }, z.core.$strip>;
86
+ export type Household = z.infer<typeof householdSchema>;
87
+ /** State of residence in a given year: the latest move at/Before `year`, else the base state. */
88
+ export declare function stateForYear(household: Household, year: number): string;
89
+ export interface StateResidencySegment {
90
+ state: string;
91
+ months: number;
92
+ }
93
+ /** State residency allocation in a tax year, splitting the move year by month. */
94
+ export declare function stateResidencySegmentsForYear(household: Household, year: number): StateResidencySegment[];
95
+ /** The v1 class set; alternatives arrive later. Order matters (weight vectors + correlation matrix). */
96
+ export declare const ASSET_CLASS_IDS: readonly ["usStocks", "intlStocks", "bonds", "cash"];
97
+ export type AssetClassId = (typeof ASSET_CLASS_IDS)[number];
98
+ /**
99
+ * Percent of the account in each class, summing to 100. Kept as percents (not
100
+ * fractions) to match every other UI-facing rate in the schema.
101
+ */
102
+ export declare const allocationWeightsSchema: z.ZodObject<{
103
+ usStocks: z.ZodDefault<z.ZodNumber>;
104
+ intlStocks: z.ZodDefault<z.ZodNumber>;
105
+ bonds: z.ZodDefault<z.ZodNumber>;
106
+ cash: z.ZodDefault<z.ZodNumber>;
107
+ }, z.core.$strip>;
108
+ export type AllocationWeights = z.infer<typeof allocationWeightsSchema>;
109
+ /**
110
+ * Opt-in per-account allocation policy (account-level; household roll-up is
111
+ * derived). Absent = today's single-return behavior, unchanged. When present,
112
+ * it supersedes the account's `annualReturnPct`: growth is the class blend
113
+ * from Assumptions-level class parameters. Glidepaths compile to per-year
114
+ * target weights: 'linear' interpolates from → to between its years, 'staged'
115
+ * is a step function, 'custom' interpolates between explicit year targets.
116
+ */
117
+ export declare const assetAllocationPolicySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
118
+ weights: z.ZodObject<{
119
+ usStocks: z.ZodDefault<z.ZodNumber>;
120
+ intlStocks: z.ZodDefault<z.ZodNumber>;
121
+ bonds: z.ZodDefault<z.ZodNumber>;
122
+ cash: z.ZodDefault<z.ZodNumber>;
123
+ }, z.core.$strip>;
124
+ rebalancing: z.ZodDefault<z.ZodEnum<{
125
+ annual: "annual";
126
+ none: "none";
127
+ }>>;
128
+ mode: z.ZodLiteral<"static">;
129
+ }, z.core.$strip>, z.ZodObject<{
130
+ from: z.ZodObject<{
131
+ usStocks: z.ZodDefault<z.ZodNumber>;
132
+ intlStocks: z.ZodDefault<z.ZodNumber>;
133
+ bonds: z.ZodDefault<z.ZodNumber>;
134
+ cash: z.ZodDefault<z.ZodNumber>;
135
+ }, z.core.$strip>;
136
+ to: z.ZodObject<{
137
+ usStocks: z.ZodDefault<z.ZodNumber>;
138
+ intlStocks: z.ZodDefault<z.ZodNumber>;
139
+ bonds: z.ZodDefault<z.ZodNumber>;
140
+ cash: z.ZodDefault<z.ZodNumber>;
141
+ }, z.core.$strip>;
142
+ startYear: z.ZodNumber;
143
+ endYear: z.ZodNumber;
144
+ rebalancing: z.ZodDefault<z.ZodEnum<{
145
+ annual: "annual";
146
+ none: "none";
147
+ }>>;
148
+ mode: z.ZodLiteral<"linear">;
149
+ }, z.core.$strip>, z.ZodObject<{
150
+ stages: z.ZodArray<z.ZodObject<{
151
+ fromYear: z.ZodNumber;
152
+ weights: z.ZodObject<{
153
+ usStocks: z.ZodDefault<z.ZodNumber>;
154
+ intlStocks: z.ZodDefault<z.ZodNumber>;
155
+ bonds: z.ZodDefault<z.ZodNumber>;
156
+ cash: z.ZodDefault<z.ZodNumber>;
157
+ }, z.core.$strip>;
158
+ }, z.core.$strip>>;
159
+ rebalancing: z.ZodDefault<z.ZodEnum<{
160
+ annual: "annual";
161
+ none: "none";
162
+ }>>;
163
+ mode: z.ZodLiteral<"staged">;
164
+ }, z.core.$strip>, z.ZodObject<{
165
+ targets: z.ZodArray<z.ZodObject<{
166
+ year: z.ZodNumber;
167
+ weights: z.ZodObject<{
168
+ usStocks: z.ZodDefault<z.ZodNumber>;
169
+ intlStocks: z.ZodDefault<z.ZodNumber>;
170
+ bonds: z.ZodDefault<z.ZodNumber>;
171
+ cash: z.ZodDefault<z.ZodNumber>;
172
+ }, z.core.$strip>;
173
+ }, z.core.$strip>>;
174
+ rebalancing: z.ZodDefault<z.ZodEnum<{
175
+ annual: "annual";
176
+ none: "none";
177
+ }>>;
178
+ mode: z.ZodLiteral<"custom">;
179
+ }, z.core.$strip>], "mode">;
180
+ export type AssetAllocationPolicy = z.infer<typeof assetAllocationPolicySchema>;
181
+ export declare const assetClassParamOverridesSchema: z.ZodObject<{
182
+ usStocks: z.ZodOptional<z.ZodObject<{
183
+ returnPct: z.ZodOptional<z.ZodNumber>;
184
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
185
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
186
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
187
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
188
+ }, z.core.$strip>>;
189
+ intlStocks: z.ZodOptional<z.ZodObject<{
190
+ returnPct: z.ZodOptional<z.ZodNumber>;
191
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
192
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
193
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
194
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
195
+ }, z.core.$strip>>;
196
+ bonds: z.ZodOptional<z.ZodObject<{
197
+ returnPct: z.ZodOptional<z.ZodNumber>;
198
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
199
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
200
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
201
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
202
+ }, z.core.$strip>>;
203
+ cash: z.ZodOptional<z.ZodObject<{
204
+ returnPct: z.ZodOptional<z.ZodNumber>;
205
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
206
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
207
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
208
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
209
+ }, z.core.$strip>>;
210
+ }, z.core.$strip>;
211
+ export type AssetClassParamOverrides = z.infer<typeof assetClassParamOverridesSchema>;
212
+ /**
213
+ * Where an account passes at the end of the plan, for the after-tax estate
214
+ * metric. Absent = the legacy default: pre-tax (traditional) and non-spouse HSA
215
+ * balances are taxed at the flat heir rate, everything else passes untaxed.
216
+ * When set:
217
+ * - 'spouse' — passes to a surviving spouse untaxed (rollover); no heir tax.
218
+ * - 'nonSpouse' — a non-spouse heir; pre-tax balances (traditional, non-spouse
219
+ * HSA) are taxed at the account class's heir rate, while Roth,
220
+ * taxable (stepped-up at death), and cash pass untaxed.
221
+ * - 'charity' — `charityPct` of the ending balance passes to charity fully
222
+ * untaxed (a charitable bequest / IRA-to-charity effect); the
223
+ * remainder follows the non-spouse heir rules.
224
+ * The HSA's older `beneficiary` field remains a shorthand for spouse/nonSpouse;
225
+ * when both are present this field wins.
226
+ */
227
+ export declare const estateBeneficiarySchema: z.ZodObject<{
228
+ destination: z.ZodEnum<{
229
+ spouse: "spouse";
230
+ nonSpouse: "nonSpouse";
231
+ charity: "charity";
232
+ }>;
233
+ charityPct: z.ZodOptional<z.ZodNumber>;
234
+ }, z.core.$strip>;
235
+ export type EstateBeneficiary = z.infer<typeof estateBeneficiarySchema>;
236
+ export declare const contributionPhaseSchema: z.ZodObject<{
237
+ annualAmount: z.ZodNumber;
238
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
239
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
240
+ escalationPct: z.ZodDefault<z.ZodNumber>;
241
+ }, z.core.$strip>;
242
+ export type ContributionPhase = z.infer<typeof contributionPhaseSchema>;
243
+ export declare const employerMatchSchema: z.ZodObject<{
244
+ matchPct: z.ZodNumber;
245
+ capPctOfPay: z.ZodNumber;
246
+ }, z.core.$strip>;
247
+ export type EmployerMatch = z.infer<typeof employerMatchSchema>;
248
+ export declare const taxableAccountSchema: z.ZodObject<{
249
+ type: z.ZodLiteral<"taxable">;
250
+ balance: z.ZodNumber;
251
+ costBasis: z.ZodNumber;
252
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
253
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
254
+ qualifiedRatio: z.ZodOptional<z.ZodNumber>;
255
+ reinvestDividends: z.ZodOptional<z.ZodBoolean>;
256
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
257
+ weights: z.ZodObject<{
258
+ usStocks: z.ZodDefault<z.ZodNumber>;
259
+ intlStocks: z.ZodDefault<z.ZodNumber>;
260
+ bonds: z.ZodDefault<z.ZodNumber>;
261
+ cash: z.ZodDefault<z.ZodNumber>;
262
+ }, z.core.$strip>;
263
+ rebalancing: z.ZodDefault<z.ZodEnum<{
264
+ annual: "annual";
265
+ none: "none";
266
+ }>>;
267
+ mode: z.ZodLiteral<"static">;
268
+ }, z.core.$strip>, z.ZodObject<{
269
+ from: z.ZodObject<{
270
+ usStocks: z.ZodDefault<z.ZodNumber>;
271
+ intlStocks: z.ZodDefault<z.ZodNumber>;
272
+ bonds: z.ZodDefault<z.ZodNumber>;
273
+ cash: z.ZodDefault<z.ZodNumber>;
274
+ }, z.core.$strip>;
275
+ to: z.ZodObject<{
276
+ usStocks: z.ZodDefault<z.ZodNumber>;
277
+ intlStocks: z.ZodDefault<z.ZodNumber>;
278
+ bonds: z.ZodDefault<z.ZodNumber>;
279
+ cash: z.ZodDefault<z.ZodNumber>;
280
+ }, z.core.$strip>;
281
+ startYear: z.ZodNumber;
282
+ endYear: z.ZodNumber;
283
+ rebalancing: z.ZodDefault<z.ZodEnum<{
284
+ annual: "annual";
285
+ none: "none";
286
+ }>>;
287
+ mode: z.ZodLiteral<"linear">;
288
+ }, z.core.$strip>, z.ZodObject<{
289
+ stages: z.ZodArray<z.ZodObject<{
290
+ fromYear: z.ZodNumber;
291
+ weights: z.ZodObject<{
292
+ usStocks: z.ZodDefault<z.ZodNumber>;
293
+ intlStocks: z.ZodDefault<z.ZodNumber>;
294
+ bonds: z.ZodDefault<z.ZodNumber>;
295
+ cash: z.ZodDefault<z.ZodNumber>;
296
+ }, z.core.$strip>;
297
+ }, z.core.$strip>>;
298
+ rebalancing: z.ZodDefault<z.ZodEnum<{
299
+ annual: "annual";
300
+ none: "none";
301
+ }>>;
302
+ mode: z.ZodLiteral<"staged">;
303
+ }, z.core.$strip>, z.ZodObject<{
304
+ targets: z.ZodArray<z.ZodObject<{
305
+ year: z.ZodNumber;
306
+ weights: z.ZodObject<{
307
+ usStocks: z.ZodDefault<z.ZodNumber>;
308
+ intlStocks: z.ZodDefault<z.ZodNumber>;
309
+ bonds: z.ZodDefault<z.ZodNumber>;
310
+ cash: z.ZodDefault<z.ZodNumber>;
311
+ }, z.core.$strip>;
312
+ }, z.core.$strip>>;
313
+ rebalancing: z.ZodDefault<z.ZodEnum<{
314
+ annual: "annual";
315
+ none: "none";
316
+ }>>;
317
+ mode: z.ZodLiteral<"custom">;
318
+ }, z.core.$strip>], "mode">>;
319
+ annualContribution: z.ZodNumber;
320
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
321
+ annualAmount: z.ZodNumber;
322
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
323
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
324
+ escalationPct: z.ZodDefault<z.ZodNumber>;
325
+ }, z.core.$strip>>>;
326
+ id: z.ZodString;
327
+ name: z.ZodString;
328
+ ownerPersonId: z.ZodNullable<z.ZodString>;
329
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
330
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
331
+ destination: z.ZodEnum<{
332
+ spouse: "spouse";
333
+ nonSpouse: "nonSpouse";
334
+ charity: "charity";
335
+ }>;
336
+ charityPct: z.ZodOptional<z.ZodNumber>;
337
+ }, z.core.$strip>>;
338
+ }, z.core.$strip>;
339
+ export declare const equityCompAccountSchema: z.ZodObject<{
340
+ type: z.ZodLiteral<"equityComp">;
341
+ balance: z.ZodNumber;
342
+ costBasis: z.ZodNumber;
343
+ annualContribution: z.ZodNumber;
344
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
345
+ annualAmount: z.ZodNumber;
346
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
347
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
348
+ escalationPct: z.ZodDefault<z.ZodNumber>;
349
+ }, z.core.$strip>>>;
350
+ vestingMode: z.ZodEnum<{
351
+ final: "final";
352
+ cliff: "cliff";
353
+ }>;
354
+ vestDate: z.ZodNullable<z.ZodString>;
355
+ id: z.ZodString;
356
+ name: z.ZodString;
357
+ ownerPersonId: z.ZodNullable<z.ZodString>;
358
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
359
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
360
+ destination: z.ZodEnum<{
361
+ spouse: "spouse";
362
+ nonSpouse: "nonSpouse";
363
+ charity: "charity";
364
+ }>;
365
+ charityPct: z.ZodOptional<z.ZodNumber>;
366
+ }, z.core.$strip>>;
367
+ }, z.core.$strip>;
368
+ /**
369
+ * 72(t) SEPP election (roadmap V8). Penalty-free substantially-equal periodic
370
+ * payments from this account starting at `startAge`, for the longer of 5 years
371
+ * or until 59½. Optional — omitted means no SEPP, so no migration is needed.
372
+ */
373
+ export declare const seppElectionSchema: z.ZodObject<{
374
+ startAge: z.ZodNumber;
375
+ method: z.ZodEnum<{
376
+ rmd: "rmd";
377
+ amortization: "amortization";
378
+ }>;
379
+ }, z.core.$strip>;
380
+ /**
381
+ * Inherited (beneficiary) account under the SECURE Act 10-year rule (roadmap
382
+ * V8). Optional — omitted means a normal owned account, so no migration needed.
383
+ */
384
+ export declare const inheritedAccountSchema: z.ZodObject<{
385
+ ownerDeathYear: z.ZodNumber;
386
+ decedentHadStartedRmds: z.ZodBoolean;
387
+ }, z.core.$strip>;
388
+ export declare const traditionalAccountSchema: z.ZodObject<{
389
+ type: z.ZodLiteral<"traditional">;
390
+ kind: z.ZodEnum<{
391
+ ira: "ira";
392
+ employer: "employer";
393
+ }>;
394
+ balance: z.ZodNumber;
395
+ annualContribution: z.ZodNumber;
396
+ inherited: z.ZodOptional<z.ZodObject<{
397
+ ownerDeathYear: z.ZodNumber;
398
+ decedentHadStartedRmds: z.ZodBoolean;
399
+ }, z.core.$strip>>;
400
+ nondeductibleBasis: z.ZodOptional<z.ZodNumber>;
401
+ spouseSoleBeneficiary: z.ZodOptional<z.ZodBoolean>;
402
+ sepp: z.ZodOptional<z.ZodObject<{
403
+ startAge: z.ZodNumber;
404
+ method: z.ZodEnum<{
405
+ rmd: "rmd";
406
+ amortization: "amortization";
407
+ }>;
408
+ }, z.core.$strip>>;
409
+ employerMatch: z.ZodOptional<z.ZodObject<{
410
+ matchPct: z.ZodNumber;
411
+ capPctOfPay: z.ZodNumber;
412
+ }, z.core.$strip>>;
413
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
414
+ annualAmount: z.ZodNumber;
415
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
416
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
417
+ escalationPct: z.ZodDefault<z.ZodNumber>;
418
+ }, z.core.$strip>>>;
419
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
420
+ weights: z.ZodObject<{
421
+ usStocks: z.ZodDefault<z.ZodNumber>;
422
+ intlStocks: z.ZodDefault<z.ZodNumber>;
423
+ bonds: z.ZodDefault<z.ZodNumber>;
424
+ cash: z.ZodDefault<z.ZodNumber>;
425
+ }, z.core.$strip>;
426
+ rebalancing: z.ZodDefault<z.ZodEnum<{
427
+ annual: "annual";
428
+ none: "none";
429
+ }>>;
430
+ mode: z.ZodLiteral<"static">;
431
+ }, z.core.$strip>, z.ZodObject<{
432
+ from: z.ZodObject<{
433
+ usStocks: z.ZodDefault<z.ZodNumber>;
434
+ intlStocks: z.ZodDefault<z.ZodNumber>;
435
+ bonds: z.ZodDefault<z.ZodNumber>;
436
+ cash: z.ZodDefault<z.ZodNumber>;
437
+ }, z.core.$strip>;
438
+ to: z.ZodObject<{
439
+ usStocks: z.ZodDefault<z.ZodNumber>;
440
+ intlStocks: z.ZodDefault<z.ZodNumber>;
441
+ bonds: z.ZodDefault<z.ZodNumber>;
442
+ cash: z.ZodDefault<z.ZodNumber>;
443
+ }, z.core.$strip>;
444
+ startYear: z.ZodNumber;
445
+ endYear: z.ZodNumber;
446
+ rebalancing: z.ZodDefault<z.ZodEnum<{
447
+ annual: "annual";
448
+ none: "none";
449
+ }>>;
450
+ mode: z.ZodLiteral<"linear">;
451
+ }, z.core.$strip>, z.ZodObject<{
452
+ stages: z.ZodArray<z.ZodObject<{
453
+ fromYear: z.ZodNumber;
454
+ weights: z.ZodObject<{
455
+ usStocks: z.ZodDefault<z.ZodNumber>;
456
+ intlStocks: z.ZodDefault<z.ZodNumber>;
457
+ bonds: z.ZodDefault<z.ZodNumber>;
458
+ cash: z.ZodDefault<z.ZodNumber>;
459
+ }, z.core.$strip>;
460
+ }, z.core.$strip>>;
461
+ rebalancing: z.ZodDefault<z.ZodEnum<{
462
+ annual: "annual";
463
+ none: "none";
464
+ }>>;
465
+ mode: z.ZodLiteral<"staged">;
466
+ }, z.core.$strip>, z.ZodObject<{
467
+ targets: z.ZodArray<z.ZodObject<{
468
+ year: z.ZodNumber;
469
+ weights: z.ZodObject<{
470
+ usStocks: z.ZodDefault<z.ZodNumber>;
471
+ intlStocks: z.ZodDefault<z.ZodNumber>;
472
+ bonds: z.ZodDefault<z.ZodNumber>;
473
+ cash: z.ZodDefault<z.ZodNumber>;
474
+ }, z.core.$strip>;
475
+ }, z.core.$strip>>;
476
+ rebalancing: z.ZodDefault<z.ZodEnum<{
477
+ annual: "annual";
478
+ none: "none";
479
+ }>>;
480
+ mode: z.ZodLiteral<"custom">;
481
+ }, z.core.$strip>], "mode">>;
482
+ id: z.ZodString;
483
+ name: z.ZodString;
484
+ ownerPersonId: z.ZodNullable<z.ZodString>;
485
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
486
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
487
+ destination: z.ZodEnum<{
488
+ spouse: "spouse";
489
+ nonSpouse: "nonSpouse";
490
+ charity: "charity";
491
+ }>;
492
+ charityPct: z.ZodOptional<z.ZodNumber>;
493
+ }, z.core.$strip>>;
494
+ }, z.core.$strip>;
495
+ export declare const rothAccountSchema: z.ZodObject<{
496
+ type: z.ZodLiteral<"roth">;
497
+ kind: z.ZodEnum<{
498
+ ira: "ira";
499
+ employer: "employer";
500
+ }>;
501
+ balance: z.ZodNumber;
502
+ annualContribution: z.ZodNumber;
503
+ contributionBasis: z.ZodOptional<z.ZodNumber>;
504
+ employerMatch: z.ZodOptional<z.ZodObject<{
505
+ matchPct: z.ZodNumber;
506
+ capPctOfPay: z.ZodNumber;
507
+ }, z.core.$strip>>;
508
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
509
+ annualAmount: z.ZodNumber;
510
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
511
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
512
+ escalationPct: z.ZodDefault<z.ZodNumber>;
513
+ }, z.core.$strip>>>;
514
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
515
+ weights: z.ZodObject<{
516
+ usStocks: z.ZodDefault<z.ZodNumber>;
517
+ intlStocks: z.ZodDefault<z.ZodNumber>;
518
+ bonds: z.ZodDefault<z.ZodNumber>;
519
+ cash: z.ZodDefault<z.ZodNumber>;
520
+ }, z.core.$strip>;
521
+ rebalancing: z.ZodDefault<z.ZodEnum<{
522
+ annual: "annual";
523
+ none: "none";
524
+ }>>;
525
+ mode: z.ZodLiteral<"static">;
526
+ }, z.core.$strip>, z.ZodObject<{
527
+ from: z.ZodObject<{
528
+ usStocks: z.ZodDefault<z.ZodNumber>;
529
+ intlStocks: z.ZodDefault<z.ZodNumber>;
530
+ bonds: z.ZodDefault<z.ZodNumber>;
531
+ cash: z.ZodDefault<z.ZodNumber>;
532
+ }, z.core.$strip>;
533
+ to: z.ZodObject<{
534
+ usStocks: z.ZodDefault<z.ZodNumber>;
535
+ intlStocks: z.ZodDefault<z.ZodNumber>;
536
+ bonds: z.ZodDefault<z.ZodNumber>;
537
+ cash: z.ZodDefault<z.ZodNumber>;
538
+ }, z.core.$strip>;
539
+ startYear: z.ZodNumber;
540
+ endYear: z.ZodNumber;
541
+ rebalancing: z.ZodDefault<z.ZodEnum<{
542
+ annual: "annual";
543
+ none: "none";
544
+ }>>;
545
+ mode: z.ZodLiteral<"linear">;
546
+ }, z.core.$strip>, z.ZodObject<{
547
+ stages: z.ZodArray<z.ZodObject<{
548
+ fromYear: z.ZodNumber;
549
+ weights: z.ZodObject<{
550
+ usStocks: z.ZodDefault<z.ZodNumber>;
551
+ intlStocks: z.ZodDefault<z.ZodNumber>;
552
+ bonds: z.ZodDefault<z.ZodNumber>;
553
+ cash: z.ZodDefault<z.ZodNumber>;
554
+ }, z.core.$strip>;
555
+ }, z.core.$strip>>;
556
+ rebalancing: z.ZodDefault<z.ZodEnum<{
557
+ annual: "annual";
558
+ none: "none";
559
+ }>>;
560
+ mode: z.ZodLiteral<"staged">;
561
+ }, z.core.$strip>, z.ZodObject<{
562
+ targets: z.ZodArray<z.ZodObject<{
563
+ year: z.ZodNumber;
564
+ weights: z.ZodObject<{
565
+ usStocks: z.ZodDefault<z.ZodNumber>;
566
+ intlStocks: z.ZodDefault<z.ZodNumber>;
567
+ bonds: z.ZodDefault<z.ZodNumber>;
568
+ cash: z.ZodDefault<z.ZodNumber>;
569
+ }, z.core.$strip>;
570
+ }, z.core.$strip>>;
571
+ rebalancing: z.ZodDefault<z.ZodEnum<{
572
+ annual: "annual";
573
+ none: "none";
574
+ }>>;
575
+ mode: z.ZodLiteral<"custom">;
576
+ }, z.core.$strip>], "mode">>;
577
+ id: z.ZodString;
578
+ name: z.ZodString;
579
+ ownerPersonId: z.ZodNullable<z.ZodString>;
580
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
581
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
582
+ destination: z.ZodEnum<{
583
+ spouse: "spouse";
584
+ nonSpouse: "nonSpouse";
585
+ charity: "charity";
586
+ }>;
587
+ charityPct: z.ZodOptional<z.ZodNumber>;
588
+ }, z.core.$strip>>;
589
+ }, z.core.$strip>;
590
+ export declare const hsaAccountSchema: z.ZodObject<{
591
+ type: z.ZodLiteral<"hsa">;
592
+ balance: z.ZodNumber;
593
+ annualContribution: z.ZodNumber;
594
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
595
+ annualAmount: z.ZodNumber;
596
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
597
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
598
+ escalationPct: z.ZodDefault<z.ZodNumber>;
599
+ }, z.core.$strip>>>;
600
+ withdrawalTreatment: z.ZodOptional<z.ZodEnum<{
601
+ assumeAllQualified: "assumeAllQualified";
602
+ capByMedicalExpenses: "capByMedicalExpenses";
603
+ }>>;
604
+ reimburseLater: z.ZodOptional<z.ZodBoolean>;
605
+ beneficiary: z.ZodOptional<z.ZodEnum<{
606
+ spouse: "spouse";
607
+ nonSpouse: "nonSpouse";
608
+ }>>;
609
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
610
+ weights: z.ZodObject<{
611
+ usStocks: z.ZodDefault<z.ZodNumber>;
612
+ intlStocks: z.ZodDefault<z.ZodNumber>;
613
+ bonds: z.ZodDefault<z.ZodNumber>;
614
+ cash: z.ZodDefault<z.ZodNumber>;
615
+ }, z.core.$strip>;
616
+ rebalancing: z.ZodDefault<z.ZodEnum<{
617
+ annual: "annual";
618
+ none: "none";
619
+ }>>;
620
+ mode: z.ZodLiteral<"static">;
621
+ }, z.core.$strip>, z.ZodObject<{
622
+ from: z.ZodObject<{
623
+ usStocks: z.ZodDefault<z.ZodNumber>;
624
+ intlStocks: z.ZodDefault<z.ZodNumber>;
625
+ bonds: z.ZodDefault<z.ZodNumber>;
626
+ cash: z.ZodDefault<z.ZodNumber>;
627
+ }, z.core.$strip>;
628
+ to: z.ZodObject<{
629
+ usStocks: z.ZodDefault<z.ZodNumber>;
630
+ intlStocks: z.ZodDefault<z.ZodNumber>;
631
+ bonds: z.ZodDefault<z.ZodNumber>;
632
+ cash: z.ZodDefault<z.ZodNumber>;
633
+ }, z.core.$strip>;
634
+ startYear: z.ZodNumber;
635
+ endYear: z.ZodNumber;
636
+ rebalancing: z.ZodDefault<z.ZodEnum<{
637
+ annual: "annual";
638
+ none: "none";
639
+ }>>;
640
+ mode: z.ZodLiteral<"linear">;
641
+ }, z.core.$strip>, z.ZodObject<{
642
+ stages: z.ZodArray<z.ZodObject<{
643
+ fromYear: z.ZodNumber;
644
+ weights: z.ZodObject<{
645
+ usStocks: z.ZodDefault<z.ZodNumber>;
646
+ intlStocks: z.ZodDefault<z.ZodNumber>;
647
+ bonds: z.ZodDefault<z.ZodNumber>;
648
+ cash: z.ZodDefault<z.ZodNumber>;
649
+ }, z.core.$strip>;
650
+ }, z.core.$strip>>;
651
+ rebalancing: z.ZodDefault<z.ZodEnum<{
652
+ annual: "annual";
653
+ none: "none";
654
+ }>>;
655
+ mode: z.ZodLiteral<"staged">;
656
+ }, z.core.$strip>, z.ZodObject<{
657
+ targets: z.ZodArray<z.ZodObject<{
658
+ year: z.ZodNumber;
659
+ weights: z.ZodObject<{
660
+ usStocks: z.ZodDefault<z.ZodNumber>;
661
+ intlStocks: z.ZodDefault<z.ZodNumber>;
662
+ bonds: z.ZodDefault<z.ZodNumber>;
663
+ cash: z.ZodDefault<z.ZodNumber>;
664
+ }, z.core.$strip>;
665
+ }, z.core.$strip>>;
666
+ rebalancing: z.ZodDefault<z.ZodEnum<{
667
+ annual: "annual";
668
+ none: "none";
669
+ }>>;
670
+ mode: z.ZodLiteral<"custom">;
671
+ }, z.core.$strip>], "mode">>;
672
+ id: z.ZodString;
673
+ name: z.ZodString;
674
+ ownerPersonId: z.ZodNullable<z.ZodString>;
675
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
676
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
677
+ destination: z.ZodEnum<{
678
+ spouse: "spouse";
679
+ nonSpouse: "nonSpouse";
680
+ charity: "charity";
681
+ }>;
682
+ charityPct: z.ZodOptional<z.ZodNumber>;
683
+ }, z.core.$strip>>;
684
+ }, z.core.$strip>;
685
+ export declare const cashAccountSchema: z.ZodObject<{
686
+ type: z.ZodLiteral<"cash">;
687
+ balance: z.ZodNumber;
688
+ annualContribution: z.ZodNumber;
689
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
690
+ annualAmount: z.ZodNumber;
691
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
692
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
693
+ escalationPct: z.ZodDefault<z.ZodNumber>;
694
+ }, z.core.$strip>>>;
695
+ id: z.ZodString;
696
+ name: z.ZodString;
697
+ ownerPersonId: z.ZodNullable<z.ZodString>;
698
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
699
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
700
+ destination: z.ZodEnum<{
701
+ spouse: "spouse";
702
+ nonSpouse: "nonSpouse";
703
+ charity: "charity";
704
+ }>;
705
+ charityPct: z.ZodOptional<z.ZodNumber>;
706
+ }, z.core.$strip>>;
707
+ }, z.core.$strip>;
708
+ /**
709
+ * Optional lump-sum election facts on a pension (annuity-pension-and-home-
710
+ * equity decisions, step 3). `lumpSumOffer` records the offer for the decision
711
+ * view (PV comparison, sensitivity table) and the pension-election insight;
712
+ * it changes nothing in the ledger by itself. `lumpSumElection` commutes the
713
+ * pension: in the election year the offer amount rolls over tax-free into the
714
+ * named traditional account (a direct rollover, so no withholding or income),
715
+ * and the pension never pays its annuity. Both are additive and optional, so
716
+ * pre-existing plans are byte-identical.
717
+ */
718
+ export declare const pensionLumpSumOfferSchema: z.ZodObject<{
719
+ amount: z.ZodNumber;
720
+ electionYear: z.ZodNumber;
721
+ }, z.core.$strip>;
722
+ export type PensionLumpSumOffer = z.infer<typeof pensionLumpSumOfferSchema>;
723
+ export declare const pensionLumpSumElectionSchema: z.ZodObject<{
724
+ rolloverAccountId: z.ZodString;
725
+ }, z.core.$strip>;
726
+ export declare const pensionSchema: z.ZodObject<{
727
+ type: z.ZodLiteral<"pension">;
728
+ source: z.ZodOptional<z.ZodEnum<{
729
+ private: "private";
730
+ public: "public";
731
+ }>>;
732
+ startAge: z.ZodNumber;
733
+ monthlyAmount: z.ZodNumber;
734
+ colaPct: z.ZodNumber;
735
+ survivorPct: z.ZodNumber;
736
+ lumpSumOffer: z.ZodOptional<z.ZodObject<{
737
+ amount: z.ZodNumber;
738
+ electionYear: z.ZodNumber;
739
+ }, z.core.$strip>>;
740
+ lumpSumElection: z.ZodOptional<z.ZodObject<{
741
+ rolloverAccountId: z.ZodString;
742
+ }, z.core.$strip>>;
743
+ id: z.ZodString;
744
+ name: z.ZodString;
745
+ ownerPersonId: z.ZodNullable<z.ZodString>;
746
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
747
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
748
+ destination: z.ZodEnum<{
749
+ spouse: "spouse";
750
+ nonSpouse: "nonSpouse";
751
+ charity: "charity";
752
+ }>;
753
+ charityPct: z.ZodOptional<z.ZodNumber>;
754
+ }, z.core.$strip>>;
755
+ }, z.core.$strip>;
756
+ /**
757
+ * Optional purchase event that funds an annuity by trading a premium out of a
758
+ * liquid or qualified account (guaranteed-income-and-estate-depth). Absent = the
759
+ * annuity is an already-owned income stream (legacy behavior). When present:
760
+ * - the premium is withdrawn from `fundingAccountId` in `year` — a transfer,
761
+ * not spending, so it is never counted against the spending target. Cash and
762
+ * qualified (traditional) sources move at book value; a taxable/equity-comp
763
+ * source liquidates the position and realizes its gains pro-rata (folded into
764
+ * that year's realized capital gains), exactly like any other sale;
765
+ * - 'nonQualified' (cash/taxable-funded): payouts are taxed by the IRS Pub 939
766
+ * exclusion ratio — the premium is the investment in the contract — so the
767
+ * account's `taxablePct` is derived from the ratio and the stored value is a
768
+ * display fallback only;
769
+ * - 'qualified' (traditional-funded): payouts are fully ordinary income, and
770
+ * because the premium leaves the traditional balance, future RMDs shrink
771
+ * automatically. `qlac` marks a deferred-start qualified contract whose
772
+ * premium is held to the QLAC statutory cap (a warning fires above it).
773
+ */
774
+ export declare const annuityPurchaseSchema: z.ZodObject<{
775
+ year: z.ZodNumber;
776
+ premium: z.ZodNumber;
777
+ fundingAccountId: z.ZodString;
778
+ taxQualification: z.ZodEnum<{
779
+ nonQualified: "nonQualified";
780
+ qualified: "qualified";
781
+ }>;
782
+ qlac: z.ZodOptional<z.ZodBoolean>;
783
+ }, z.core.$strip>;
784
+ export type AnnuityPurchase = z.infer<typeof annuityPurchaseSchema>;
785
+ /**
786
+ * Payout form of an annuity contract (annuity-pension-and-home-equity
787
+ * decisions, step 1). Absent = 'lifeOnly', the legacy behavior — payments
788
+ * stop at the owner's death — so pre-existing plans are byte-identical.
789
+ * - 'periodCertain': life annuity with an N-year guarantee measured from the
790
+ * payment start age. If the owner dies inside the guarantee window, the
791
+ * remaining certain payments continue to the household (beneficiary); after
792
+ * the window the annuity is life-contingent as usual.
793
+ * - 'jointSurvivor': payments continue to the other household member at
794
+ * `survivorPct` of the full amount after the owner's death, for the
795
+ * survivor's lifetime. Requires a two-person household.
796
+ * Both forms extend the IRS Pub 939 exclusion-ratio math for a non-qualified
797
+ * purchase (see engine/projection/annuityForms.ts for the method and its
798
+ * documented approximations).
799
+ */
800
+ export declare const annuityPayoutFormSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
801
+ kind: z.ZodLiteral<"lifeOnly">;
802
+ }, z.core.$strip>, z.ZodObject<{
803
+ kind: z.ZodLiteral<"periodCertain">;
804
+ certainYears: z.ZodNumber;
805
+ }, z.core.$strip>, z.ZodObject<{
806
+ kind: z.ZodLiteral<"jointSurvivor">;
807
+ survivorPct: z.ZodNumber;
808
+ }, z.core.$strip>], "kind">;
809
+ export type AnnuityPayoutForm = z.infer<typeof annuityPayoutFormSchema>;
810
+ export declare const annuitySchema: z.ZodObject<{
811
+ type: z.ZodLiteral<"annuity">;
812
+ startAge: z.ZodNumber;
813
+ monthlyAmount: z.ZodNumber;
814
+ colaPct: z.ZodNumber;
815
+ taxablePct: z.ZodNumber;
816
+ purchase: z.ZodOptional<z.ZodObject<{
817
+ year: z.ZodNumber;
818
+ premium: z.ZodNumber;
819
+ fundingAccountId: z.ZodString;
820
+ taxQualification: z.ZodEnum<{
821
+ nonQualified: "nonQualified";
822
+ qualified: "qualified";
823
+ }>;
824
+ qlac: z.ZodOptional<z.ZodBoolean>;
825
+ }, z.core.$strip>>;
826
+ payoutForm: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
827
+ kind: z.ZodLiteral<"lifeOnly">;
828
+ }, z.core.$strip>, z.ZodObject<{
829
+ kind: z.ZodLiteral<"periodCertain">;
830
+ certainYears: z.ZodNumber;
831
+ }, z.core.$strip>, z.ZodObject<{
832
+ kind: z.ZodLiteral<"jointSurvivor">;
833
+ survivorPct: z.ZodNumber;
834
+ }, z.core.$strip>], "kind">>;
835
+ id: z.ZodString;
836
+ name: z.ZodString;
837
+ ownerPersonId: z.ZodNullable<z.ZodString>;
838
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
839
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
840
+ destination: z.ZodEnum<{
841
+ spouse: "spouse";
842
+ nonSpouse: "nonSpouse";
843
+ charity: "charity";
844
+ }>;
845
+ charityPct: z.ZodOptional<z.ZodNumber>;
846
+ }, z.core.$strip>>;
847
+ }, z.core.$strip>;
848
+ /**
849
+ * Opt-in HECM (reverse-mortgage) line of credit on an owned home
850
+ * (annuity-pension-and-home-equity decisions, step 4). Models Pfau's
851
+ * buffer-asset strategy: open the line early, let the unused credit grow, and
852
+ * draw tax-free loan proceeds either after down market years ('coordinated')
853
+ * or only once the portfolio is exhausted ('lastResort'). The loan balance
854
+ * accrues at the same growth rate; payoff at sale or the end of the plan is
855
+ * non-recourse (never more than the home's value). Absent = no HECM — plans
856
+ * without one are unchanged.
857
+ */
858
+ export declare const hecmLineOfCreditSchema: z.ZodObject<{
859
+ openYear: z.ZodNumber;
860
+ principalLimitPct: z.ZodOptional<z.ZodNumber>;
861
+ growthRatePct: z.ZodNumber;
862
+ upfrontCostPct: z.ZodOptional<z.ZodNumber>;
863
+ drawPolicy: z.ZodEnum<{
864
+ coordinated: "coordinated";
865
+ lastResort: "lastResort";
866
+ }>;
867
+ }, z.core.$strip>;
868
+ export type HecmLineOfCredit = z.infer<typeof hecmLineOfCreditSchema>;
869
+ export declare const propertySchema: z.ZodObject<{
870
+ type: z.ZodLiteral<"property">;
871
+ value: z.ZodNumber;
872
+ plannedSaleYear: z.ZodNullable<z.ZodNumber>;
873
+ expectedNetProceeds: z.ZodNullable<z.ZodNumber>;
874
+ costBasis: z.ZodOptional<z.ZodNumber>;
875
+ sellingCostPct: z.ZodOptional<z.ZodNumber>;
876
+ primaryResidence: z.ZodOptional<z.ZodBoolean>;
877
+ depreciationRecapture: z.ZodOptional<z.ZodNumber>;
878
+ propertyTaxAnnual: z.ZodOptional<z.ZodNumber>;
879
+ insuranceAnnual: z.ZodOptional<z.ZodNumber>;
880
+ hecm: z.ZodOptional<z.ZodObject<{
881
+ openYear: z.ZodNumber;
882
+ principalLimitPct: z.ZodOptional<z.ZodNumber>;
883
+ growthRatePct: z.ZodNumber;
884
+ upfrontCostPct: z.ZodOptional<z.ZodNumber>;
885
+ drawPolicy: z.ZodEnum<{
886
+ coordinated: "coordinated";
887
+ lastResort: "lastResort";
888
+ }>;
889
+ }, z.core.$strip>>;
890
+ id: z.ZodString;
891
+ name: z.ZodString;
892
+ ownerPersonId: z.ZodNullable<z.ZodString>;
893
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
894
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
895
+ destination: z.ZodEnum<{
896
+ spouse: "spouse";
897
+ nonSpouse: "nonSpouse";
898
+ charity: "charity";
899
+ }>;
900
+ charityPct: z.ZodOptional<z.ZodNumber>;
901
+ }, z.core.$strip>>;
902
+ }, z.core.$strip>;
903
+ export declare const debtSchema: z.ZodObject<{
904
+ type: z.ZodLiteral<"debt">;
905
+ balance: z.ZodNumber;
906
+ interestPct: z.ZodNumber;
907
+ monthlyPayment: z.ZodNumber;
908
+ payoffYear: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
909
+ id: z.ZodString;
910
+ name: z.ZodString;
911
+ ownerPersonId: z.ZodNullable<z.ZodString>;
912
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
913
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
914
+ destination: z.ZodEnum<{
915
+ spouse: "spouse";
916
+ nonSpouse: "nonSpouse";
917
+ charity: "charity";
918
+ }>;
919
+ charityPct: z.ZodOptional<z.ZodNumber>;
920
+ }, z.core.$strip>>;
921
+ }, z.core.$strip>;
922
+ export declare const accountSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
923
+ type: z.ZodLiteral<"taxable">;
924
+ balance: z.ZodNumber;
925
+ costBasis: z.ZodNumber;
926
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
927
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
928
+ qualifiedRatio: z.ZodOptional<z.ZodNumber>;
929
+ reinvestDividends: z.ZodOptional<z.ZodBoolean>;
930
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
931
+ weights: z.ZodObject<{
932
+ usStocks: z.ZodDefault<z.ZodNumber>;
933
+ intlStocks: z.ZodDefault<z.ZodNumber>;
934
+ bonds: z.ZodDefault<z.ZodNumber>;
935
+ cash: z.ZodDefault<z.ZodNumber>;
936
+ }, z.core.$strip>;
937
+ rebalancing: z.ZodDefault<z.ZodEnum<{
938
+ annual: "annual";
939
+ none: "none";
940
+ }>>;
941
+ mode: z.ZodLiteral<"static">;
942
+ }, z.core.$strip>, z.ZodObject<{
943
+ from: z.ZodObject<{
944
+ usStocks: z.ZodDefault<z.ZodNumber>;
945
+ intlStocks: z.ZodDefault<z.ZodNumber>;
946
+ bonds: z.ZodDefault<z.ZodNumber>;
947
+ cash: z.ZodDefault<z.ZodNumber>;
948
+ }, z.core.$strip>;
949
+ to: z.ZodObject<{
950
+ usStocks: z.ZodDefault<z.ZodNumber>;
951
+ intlStocks: z.ZodDefault<z.ZodNumber>;
952
+ bonds: z.ZodDefault<z.ZodNumber>;
953
+ cash: z.ZodDefault<z.ZodNumber>;
954
+ }, z.core.$strip>;
955
+ startYear: z.ZodNumber;
956
+ endYear: z.ZodNumber;
957
+ rebalancing: z.ZodDefault<z.ZodEnum<{
958
+ annual: "annual";
959
+ none: "none";
960
+ }>>;
961
+ mode: z.ZodLiteral<"linear">;
962
+ }, z.core.$strip>, z.ZodObject<{
963
+ stages: z.ZodArray<z.ZodObject<{
964
+ fromYear: z.ZodNumber;
965
+ weights: z.ZodObject<{
966
+ usStocks: z.ZodDefault<z.ZodNumber>;
967
+ intlStocks: z.ZodDefault<z.ZodNumber>;
968
+ bonds: z.ZodDefault<z.ZodNumber>;
969
+ cash: z.ZodDefault<z.ZodNumber>;
970
+ }, z.core.$strip>;
971
+ }, z.core.$strip>>;
972
+ rebalancing: z.ZodDefault<z.ZodEnum<{
973
+ annual: "annual";
974
+ none: "none";
975
+ }>>;
976
+ mode: z.ZodLiteral<"staged">;
977
+ }, z.core.$strip>, z.ZodObject<{
978
+ targets: z.ZodArray<z.ZodObject<{
979
+ year: z.ZodNumber;
980
+ weights: z.ZodObject<{
981
+ usStocks: z.ZodDefault<z.ZodNumber>;
982
+ intlStocks: z.ZodDefault<z.ZodNumber>;
983
+ bonds: z.ZodDefault<z.ZodNumber>;
984
+ cash: z.ZodDefault<z.ZodNumber>;
985
+ }, z.core.$strip>;
986
+ }, z.core.$strip>>;
987
+ rebalancing: z.ZodDefault<z.ZodEnum<{
988
+ annual: "annual";
989
+ none: "none";
990
+ }>>;
991
+ mode: z.ZodLiteral<"custom">;
992
+ }, z.core.$strip>], "mode">>;
993
+ annualContribution: z.ZodNumber;
994
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
995
+ annualAmount: z.ZodNumber;
996
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
997
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
998
+ escalationPct: z.ZodDefault<z.ZodNumber>;
999
+ }, z.core.$strip>>>;
1000
+ id: z.ZodString;
1001
+ name: z.ZodString;
1002
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1003
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1004
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1005
+ destination: z.ZodEnum<{
1006
+ spouse: "spouse";
1007
+ nonSpouse: "nonSpouse";
1008
+ charity: "charity";
1009
+ }>;
1010
+ charityPct: z.ZodOptional<z.ZodNumber>;
1011
+ }, z.core.$strip>>;
1012
+ }, z.core.$strip>, z.ZodObject<{
1013
+ type: z.ZodLiteral<"equityComp">;
1014
+ balance: z.ZodNumber;
1015
+ costBasis: z.ZodNumber;
1016
+ annualContribution: z.ZodNumber;
1017
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1018
+ annualAmount: z.ZodNumber;
1019
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1020
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1021
+ escalationPct: z.ZodDefault<z.ZodNumber>;
1022
+ }, z.core.$strip>>>;
1023
+ vestingMode: z.ZodEnum<{
1024
+ final: "final";
1025
+ cliff: "cliff";
1026
+ }>;
1027
+ vestDate: z.ZodNullable<z.ZodString>;
1028
+ id: z.ZodString;
1029
+ name: z.ZodString;
1030
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1031
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1032
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1033
+ destination: z.ZodEnum<{
1034
+ spouse: "spouse";
1035
+ nonSpouse: "nonSpouse";
1036
+ charity: "charity";
1037
+ }>;
1038
+ charityPct: z.ZodOptional<z.ZodNumber>;
1039
+ }, z.core.$strip>>;
1040
+ }, z.core.$strip>, z.ZodObject<{
1041
+ type: z.ZodLiteral<"traditional">;
1042
+ kind: z.ZodEnum<{
1043
+ ira: "ira";
1044
+ employer: "employer";
1045
+ }>;
1046
+ balance: z.ZodNumber;
1047
+ annualContribution: z.ZodNumber;
1048
+ inherited: z.ZodOptional<z.ZodObject<{
1049
+ ownerDeathYear: z.ZodNumber;
1050
+ decedentHadStartedRmds: z.ZodBoolean;
1051
+ }, z.core.$strip>>;
1052
+ nondeductibleBasis: z.ZodOptional<z.ZodNumber>;
1053
+ spouseSoleBeneficiary: z.ZodOptional<z.ZodBoolean>;
1054
+ sepp: z.ZodOptional<z.ZodObject<{
1055
+ startAge: z.ZodNumber;
1056
+ method: z.ZodEnum<{
1057
+ rmd: "rmd";
1058
+ amortization: "amortization";
1059
+ }>;
1060
+ }, z.core.$strip>>;
1061
+ employerMatch: z.ZodOptional<z.ZodObject<{
1062
+ matchPct: z.ZodNumber;
1063
+ capPctOfPay: z.ZodNumber;
1064
+ }, z.core.$strip>>;
1065
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1066
+ annualAmount: z.ZodNumber;
1067
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1068
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1069
+ escalationPct: z.ZodDefault<z.ZodNumber>;
1070
+ }, z.core.$strip>>>;
1071
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1072
+ weights: z.ZodObject<{
1073
+ usStocks: z.ZodDefault<z.ZodNumber>;
1074
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1075
+ bonds: z.ZodDefault<z.ZodNumber>;
1076
+ cash: z.ZodDefault<z.ZodNumber>;
1077
+ }, z.core.$strip>;
1078
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1079
+ annual: "annual";
1080
+ none: "none";
1081
+ }>>;
1082
+ mode: z.ZodLiteral<"static">;
1083
+ }, z.core.$strip>, z.ZodObject<{
1084
+ from: z.ZodObject<{
1085
+ usStocks: z.ZodDefault<z.ZodNumber>;
1086
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1087
+ bonds: z.ZodDefault<z.ZodNumber>;
1088
+ cash: z.ZodDefault<z.ZodNumber>;
1089
+ }, z.core.$strip>;
1090
+ to: z.ZodObject<{
1091
+ usStocks: z.ZodDefault<z.ZodNumber>;
1092
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1093
+ bonds: z.ZodDefault<z.ZodNumber>;
1094
+ cash: z.ZodDefault<z.ZodNumber>;
1095
+ }, z.core.$strip>;
1096
+ startYear: z.ZodNumber;
1097
+ endYear: z.ZodNumber;
1098
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1099
+ annual: "annual";
1100
+ none: "none";
1101
+ }>>;
1102
+ mode: z.ZodLiteral<"linear">;
1103
+ }, z.core.$strip>, z.ZodObject<{
1104
+ stages: z.ZodArray<z.ZodObject<{
1105
+ fromYear: z.ZodNumber;
1106
+ weights: z.ZodObject<{
1107
+ usStocks: z.ZodDefault<z.ZodNumber>;
1108
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1109
+ bonds: z.ZodDefault<z.ZodNumber>;
1110
+ cash: z.ZodDefault<z.ZodNumber>;
1111
+ }, z.core.$strip>;
1112
+ }, z.core.$strip>>;
1113
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1114
+ annual: "annual";
1115
+ none: "none";
1116
+ }>>;
1117
+ mode: z.ZodLiteral<"staged">;
1118
+ }, z.core.$strip>, z.ZodObject<{
1119
+ targets: z.ZodArray<z.ZodObject<{
1120
+ year: z.ZodNumber;
1121
+ weights: z.ZodObject<{
1122
+ usStocks: z.ZodDefault<z.ZodNumber>;
1123
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1124
+ bonds: z.ZodDefault<z.ZodNumber>;
1125
+ cash: z.ZodDefault<z.ZodNumber>;
1126
+ }, z.core.$strip>;
1127
+ }, z.core.$strip>>;
1128
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1129
+ annual: "annual";
1130
+ none: "none";
1131
+ }>>;
1132
+ mode: z.ZodLiteral<"custom">;
1133
+ }, z.core.$strip>], "mode">>;
1134
+ id: z.ZodString;
1135
+ name: z.ZodString;
1136
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1137
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1138
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1139
+ destination: z.ZodEnum<{
1140
+ spouse: "spouse";
1141
+ nonSpouse: "nonSpouse";
1142
+ charity: "charity";
1143
+ }>;
1144
+ charityPct: z.ZodOptional<z.ZodNumber>;
1145
+ }, z.core.$strip>>;
1146
+ }, z.core.$strip>, z.ZodObject<{
1147
+ type: z.ZodLiteral<"roth">;
1148
+ kind: z.ZodEnum<{
1149
+ ira: "ira";
1150
+ employer: "employer";
1151
+ }>;
1152
+ balance: z.ZodNumber;
1153
+ annualContribution: z.ZodNumber;
1154
+ contributionBasis: z.ZodOptional<z.ZodNumber>;
1155
+ employerMatch: z.ZodOptional<z.ZodObject<{
1156
+ matchPct: z.ZodNumber;
1157
+ capPctOfPay: z.ZodNumber;
1158
+ }, z.core.$strip>>;
1159
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1160
+ annualAmount: z.ZodNumber;
1161
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1162
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1163
+ escalationPct: z.ZodDefault<z.ZodNumber>;
1164
+ }, z.core.$strip>>>;
1165
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1166
+ weights: z.ZodObject<{
1167
+ usStocks: z.ZodDefault<z.ZodNumber>;
1168
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1169
+ bonds: z.ZodDefault<z.ZodNumber>;
1170
+ cash: z.ZodDefault<z.ZodNumber>;
1171
+ }, z.core.$strip>;
1172
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1173
+ annual: "annual";
1174
+ none: "none";
1175
+ }>>;
1176
+ mode: z.ZodLiteral<"static">;
1177
+ }, z.core.$strip>, z.ZodObject<{
1178
+ from: z.ZodObject<{
1179
+ usStocks: z.ZodDefault<z.ZodNumber>;
1180
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1181
+ bonds: z.ZodDefault<z.ZodNumber>;
1182
+ cash: z.ZodDefault<z.ZodNumber>;
1183
+ }, z.core.$strip>;
1184
+ to: z.ZodObject<{
1185
+ usStocks: z.ZodDefault<z.ZodNumber>;
1186
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1187
+ bonds: z.ZodDefault<z.ZodNumber>;
1188
+ cash: z.ZodDefault<z.ZodNumber>;
1189
+ }, z.core.$strip>;
1190
+ startYear: z.ZodNumber;
1191
+ endYear: z.ZodNumber;
1192
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1193
+ annual: "annual";
1194
+ none: "none";
1195
+ }>>;
1196
+ mode: z.ZodLiteral<"linear">;
1197
+ }, z.core.$strip>, z.ZodObject<{
1198
+ stages: z.ZodArray<z.ZodObject<{
1199
+ fromYear: z.ZodNumber;
1200
+ weights: z.ZodObject<{
1201
+ usStocks: z.ZodDefault<z.ZodNumber>;
1202
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1203
+ bonds: z.ZodDefault<z.ZodNumber>;
1204
+ cash: z.ZodDefault<z.ZodNumber>;
1205
+ }, z.core.$strip>;
1206
+ }, z.core.$strip>>;
1207
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1208
+ annual: "annual";
1209
+ none: "none";
1210
+ }>>;
1211
+ mode: z.ZodLiteral<"staged">;
1212
+ }, z.core.$strip>, z.ZodObject<{
1213
+ targets: z.ZodArray<z.ZodObject<{
1214
+ year: z.ZodNumber;
1215
+ weights: z.ZodObject<{
1216
+ usStocks: z.ZodDefault<z.ZodNumber>;
1217
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1218
+ bonds: z.ZodDefault<z.ZodNumber>;
1219
+ cash: z.ZodDefault<z.ZodNumber>;
1220
+ }, z.core.$strip>;
1221
+ }, z.core.$strip>>;
1222
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1223
+ annual: "annual";
1224
+ none: "none";
1225
+ }>>;
1226
+ mode: z.ZodLiteral<"custom">;
1227
+ }, z.core.$strip>], "mode">>;
1228
+ id: z.ZodString;
1229
+ name: z.ZodString;
1230
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1231
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1232
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1233
+ destination: z.ZodEnum<{
1234
+ spouse: "spouse";
1235
+ nonSpouse: "nonSpouse";
1236
+ charity: "charity";
1237
+ }>;
1238
+ charityPct: z.ZodOptional<z.ZodNumber>;
1239
+ }, z.core.$strip>>;
1240
+ }, z.core.$strip>, z.ZodObject<{
1241
+ type: z.ZodLiteral<"hsa">;
1242
+ balance: z.ZodNumber;
1243
+ annualContribution: z.ZodNumber;
1244
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1245
+ annualAmount: z.ZodNumber;
1246
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1247
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1248
+ escalationPct: z.ZodDefault<z.ZodNumber>;
1249
+ }, z.core.$strip>>>;
1250
+ withdrawalTreatment: z.ZodOptional<z.ZodEnum<{
1251
+ assumeAllQualified: "assumeAllQualified";
1252
+ capByMedicalExpenses: "capByMedicalExpenses";
1253
+ }>>;
1254
+ reimburseLater: z.ZodOptional<z.ZodBoolean>;
1255
+ beneficiary: z.ZodOptional<z.ZodEnum<{
1256
+ spouse: "spouse";
1257
+ nonSpouse: "nonSpouse";
1258
+ }>>;
1259
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1260
+ weights: z.ZodObject<{
1261
+ usStocks: z.ZodDefault<z.ZodNumber>;
1262
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1263
+ bonds: z.ZodDefault<z.ZodNumber>;
1264
+ cash: z.ZodDefault<z.ZodNumber>;
1265
+ }, z.core.$strip>;
1266
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1267
+ annual: "annual";
1268
+ none: "none";
1269
+ }>>;
1270
+ mode: z.ZodLiteral<"static">;
1271
+ }, z.core.$strip>, z.ZodObject<{
1272
+ from: z.ZodObject<{
1273
+ usStocks: z.ZodDefault<z.ZodNumber>;
1274
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1275
+ bonds: z.ZodDefault<z.ZodNumber>;
1276
+ cash: z.ZodDefault<z.ZodNumber>;
1277
+ }, z.core.$strip>;
1278
+ to: z.ZodObject<{
1279
+ usStocks: z.ZodDefault<z.ZodNumber>;
1280
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1281
+ bonds: z.ZodDefault<z.ZodNumber>;
1282
+ cash: z.ZodDefault<z.ZodNumber>;
1283
+ }, z.core.$strip>;
1284
+ startYear: z.ZodNumber;
1285
+ endYear: z.ZodNumber;
1286
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1287
+ annual: "annual";
1288
+ none: "none";
1289
+ }>>;
1290
+ mode: z.ZodLiteral<"linear">;
1291
+ }, z.core.$strip>, z.ZodObject<{
1292
+ stages: z.ZodArray<z.ZodObject<{
1293
+ fromYear: z.ZodNumber;
1294
+ weights: z.ZodObject<{
1295
+ usStocks: z.ZodDefault<z.ZodNumber>;
1296
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1297
+ bonds: z.ZodDefault<z.ZodNumber>;
1298
+ cash: z.ZodDefault<z.ZodNumber>;
1299
+ }, z.core.$strip>;
1300
+ }, z.core.$strip>>;
1301
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1302
+ annual: "annual";
1303
+ none: "none";
1304
+ }>>;
1305
+ mode: z.ZodLiteral<"staged">;
1306
+ }, z.core.$strip>, z.ZodObject<{
1307
+ targets: z.ZodArray<z.ZodObject<{
1308
+ year: z.ZodNumber;
1309
+ weights: z.ZodObject<{
1310
+ usStocks: z.ZodDefault<z.ZodNumber>;
1311
+ intlStocks: z.ZodDefault<z.ZodNumber>;
1312
+ bonds: z.ZodDefault<z.ZodNumber>;
1313
+ cash: z.ZodDefault<z.ZodNumber>;
1314
+ }, z.core.$strip>;
1315
+ }, z.core.$strip>>;
1316
+ rebalancing: z.ZodDefault<z.ZodEnum<{
1317
+ annual: "annual";
1318
+ none: "none";
1319
+ }>>;
1320
+ mode: z.ZodLiteral<"custom">;
1321
+ }, z.core.$strip>], "mode">>;
1322
+ id: z.ZodString;
1323
+ name: z.ZodString;
1324
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1325
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1326
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1327
+ destination: z.ZodEnum<{
1328
+ spouse: "spouse";
1329
+ nonSpouse: "nonSpouse";
1330
+ charity: "charity";
1331
+ }>;
1332
+ charityPct: z.ZodOptional<z.ZodNumber>;
1333
+ }, z.core.$strip>>;
1334
+ }, z.core.$strip>, z.ZodObject<{
1335
+ type: z.ZodLiteral<"cash">;
1336
+ balance: z.ZodNumber;
1337
+ annualContribution: z.ZodNumber;
1338
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1339
+ annualAmount: z.ZodNumber;
1340
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1341
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
1342
+ escalationPct: z.ZodDefault<z.ZodNumber>;
1343
+ }, z.core.$strip>>>;
1344
+ id: z.ZodString;
1345
+ name: z.ZodString;
1346
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1347
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1348
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1349
+ destination: z.ZodEnum<{
1350
+ spouse: "spouse";
1351
+ nonSpouse: "nonSpouse";
1352
+ charity: "charity";
1353
+ }>;
1354
+ charityPct: z.ZodOptional<z.ZodNumber>;
1355
+ }, z.core.$strip>>;
1356
+ }, z.core.$strip>, z.ZodObject<{
1357
+ type: z.ZodLiteral<"pension">;
1358
+ source: z.ZodOptional<z.ZodEnum<{
1359
+ private: "private";
1360
+ public: "public";
1361
+ }>>;
1362
+ startAge: z.ZodNumber;
1363
+ monthlyAmount: z.ZodNumber;
1364
+ colaPct: z.ZodNumber;
1365
+ survivorPct: z.ZodNumber;
1366
+ lumpSumOffer: z.ZodOptional<z.ZodObject<{
1367
+ amount: z.ZodNumber;
1368
+ electionYear: z.ZodNumber;
1369
+ }, z.core.$strip>>;
1370
+ lumpSumElection: z.ZodOptional<z.ZodObject<{
1371
+ rolloverAccountId: z.ZodString;
1372
+ }, z.core.$strip>>;
1373
+ id: z.ZodString;
1374
+ name: z.ZodString;
1375
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1376
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1377
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1378
+ destination: z.ZodEnum<{
1379
+ spouse: "spouse";
1380
+ nonSpouse: "nonSpouse";
1381
+ charity: "charity";
1382
+ }>;
1383
+ charityPct: z.ZodOptional<z.ZodNumber>;
1384
+ }, z.core.$strip>>;
1385
+ }, z.core.$strip>, z.ZodObject<{
1386
+ type: z.ZodLiteral<"annuity">;
1387
+ startAge: z.ZodNumber;
1388
+ monthlyAmount: z.ZodNumber;
1389
+ colaPct: z.ZodNumber;
1390
+ taxablePct: z.ZodNumber;
1391
+ purchase: z.ZodOptional<z.ZodObject<{
1392
+ year: z.ZodNumber;
1393
+ premium: z.ZodNumber;
1394
+ fundingAccountId: z.ZodString;
1395
+ taxQualification: z.ZodEnum<{
1396
+ nonQualified: "nonQualified";
1397
+ qualified: "qualified";
1398
+ }>;
1399
+ qlac: z.ZodOptional<z.ZodBoolean>;
1400
+ }, z.core.$strip>>;
1401
+ payoutForm: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
1402
+ kind: z.ZodLiteral<"lifeOnly">;
1403
+ }, z.core.$strip>, z.ZodObject<{
1404
+ kind: z.ZodLiteral<"periodCertain">;
1405
+ certainYears: z.ZodNumber;
1406
+ }, z.core.$strip>, z.ZodObject<{
1407
+ kind: z.ZodLiteral<"jointSurvivor">;
1408
+ survivorPct: z.ZodNumber;
1409
+ }, z.core.$strip>], "kind">>;
1410
+ id: z.ZodString;
1411
+ name: z.ZodString;
1412
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1413
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1414
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1415
+ destination: z.ZodEnum<{
1416
+ spouse: "spouse";
1417
+ nonSpouse: "nonSpouse";
1418
+ charity: "charity";
1419
+ }>;
1420
+ charityPct: z.ZodOptional<z.ZodNumber>;
1421
+ }, z.core.$strip>>;
1422
+ }, z.core.$strip>, z.ZodObject<{
1423
+ type: z.ZodLiteral<"property">;
1424
+ value: z.ZodNumber;
1425
+ plannedSaleYear: z.ZodNullable<z.ZodNumber>;
1426
+ expectedNetProceeds: z.ZodNullable<z.ZodNumber>;
1427
+ costBasis: z.ZodOptional<z.ZodNumber>;
1428
+ sellingCostPct: z.ZodOptional<z.ZodNumber>;
1429
+ primaryResidence: z.ZodOptional<z.ZodBoolean>;
1430
+ depreciationRecapture: z.ZodOptional<z.ZodNumber>;
1431
+ propertyTaxAnnual: z.ZodOptional<z.ZodNumber>;
1432
+ insuranceAnnual: z.ZodOptional<z.ZodNumber>;
1433
+ hecm: z.ZodOptional<z.ZodObject<{
1434
+ openYear: z.ZodNumber;
1435
+ principalLimitPct: z.ZodOptional<z.ZodNumber>;
1436
+ growthRatePct: z.ZodNumber;
1437
+ upfrontCostPct: z.ZodOptional<z.ZodNumber>;
1438
+ drawPolicy: z.ZodEnum<{
1439
+ coordinated: "coordinated";
1440
+ lastResort: "lastResort";
1441
+ }>;
1442
+ }, z.core.$strip>>;
1443
+ id: z.ZodString;
1444
+ name: z.ZodString;
1445
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1446
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1447
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1448
+ destination: z.ZodEnum<{
1449
+ spouse: "spouse";
1450
+ nonSpouse: "nonSpouse";
1451
+ charity: "charity";
1452
+ }>;
1453
+ charityPct: z.ZodOptional<z.ZodNumber>;
1454
+ }, z.core.$strip>>;
1455
+ }, z.core.$strip>, z.ZodObject<{
1456
+ type: z.ZodLiteral<"debt">;
1457
+ balance: z.ZodNumber;
1458
+ interestPct: z.ZodNumber;
1459
+ monthlyPayment: z.ZodNumber;
1460
+ payoffYear: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1461
+ id: z.ZodString;
1462
+ name: z.ZodString;
1463
+ ownerPersonId: z.ZodNullable<z.ZodString>;
1464
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
1465
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
1466
+ destination: z.ZodEnum<{
1467
+ spouse: "spouse";
1468
+ nonSpouse: "nonSpouse";
1469
+ charity: "charity";
1470
+ }>;
1471
+ charityPct: z.ZodOptional<z.ZodNumber>;
1472
+ }, z.core.$strip>>;
1473
+ }, z.core.$strip>], "type">;
1474
+ export type Account = z.infer<typeof accountSchema>;
1475
+ export type AccountType = Account['type'];
1476
+ export declare const ltcPolicySchema: z.ZodObject<{
1477
+ kind: z.ZodLiteral<"ltc">;
1478
+ id: z.ZodString;
1479
+ name: z.ZodString;
1480
+ owner: z.ZodString;
1481
+ annualPremium: z.ZodNumber;
1482
+ premiumMode: z.ZodEnum<{
1483
+ lifetime: "lifetime";
1484
+ paidUp: "paidUp";
1485
+ untilAge: "untilAge";
1486
+ }>;
1487
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
1488
+ benefitMonthly: z.ZodNumber;
1489
+ benefitPeriodYears: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"lifetime">]>;
1490
+ eliminationPeriodDays: z.ZodNumber;
1491
+ inflationRiderPct: z.ZodOptional<z.ZodNumber>;
1492
+ }, z.core.$strip>;
1493
+ export type LtcPolicy = z.infer<typeof ltcPolicySchema>;
1494
+ export declare const permanentLifePolicySchema: z.ZodObject<{
1495
+ kind: z.ZodLiteral<"permanentLife">;
1496
+ id: z.ZodString;
1497
+ name: z.ZodString;
1498
+ insured: z.ZodString;
1499
+ beneficiary: z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"estate">]>;
1500
+ annualPremium: z.ZodNumber;
1501
+ premiumMode: z.ZodEnum<{
1502
+ lifetime: "lifetime";
1503
+ paidUp: "paidUp";
1504
+ untilAge: "untilAge";
1505
+ }>;
1506
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
1507
+ deathBenefit: z.ZodNumber;
1508
+ cashValue: z.ZodNumber;
1509
+ cashValueMode: z.ZodEnum<{
1510
+ flatRate: "flatRate";
1511
+ schedule: "schedule";
1512
+ }>;
1513
+ cashValueGrowthPct: z.ZodOptional<z.ZodNumber>;
1514
+ cashValueSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1515
+ age: z.ZodNumber;
1516
+ value: z.ZodNumber;
1517
+ }, z.core.$strip>>>;
1518
+ dividendOption: z.ZodOptional<z.ZodEnum<{
1519
+ cash: "cash";
1520
+ reducePremium: "reducePremium";
1521
+ paidUpAdditions: "paidUpAdditions";
1522
+ }>>;
1523
+ }, z.core.$strip>;
1524
+ export type PermanentLifePolicy = z.infer<typeof permanentLifePolicySchema>;
1525
+ export declare const insurancePolicySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1526
+ kind: z.ZodLiteral<"ltc">;
1527
+ id: z.ZodString;
1528
+ name: z.ZodString;
1529
+ owner: z.ZodString;
1530
+ annualPremium: z.ZodNumber;
1531
+ premiumMode: z.ZodEnum<{
1532
+ lifetime: "lifetime";
1533
+ paidUp: "paidUp";
1534
+ untilAge: "untilAge";
1535
+ }>;
1536
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
1537
+ benefitMonthly: z.ZodNumber;
1538
+ benefitPeriodYears: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"lifetime">]>;
1539
+ eliminationPeriodDays: z.ZodNumber;
1540
+ inflationRiderPct: z.ZodOptional<z.ZodNumber>;
1541
+ }, z.core.$strip>, z.ZodObject<{
1542
+ kind: z.ZodLiteral<"permanentLife">;
1543
+ id: z.ZodString;
1544
+ name: z.ZodString;
1545
+ insured: z.ZodString;
1546
+ beneficiary: z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"estate">]>;
1547
+ annualPremium: z.ZodNumber;
1548
+ premiumMode: z.ZodEnum<{
1549
+ lifetime: "lifetime";
1550
+ paidUp: "paidUp";
1551
+ untilAge: "untilAge";
1552
+ }>;
1553
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
1554
+ deathBenefit: z.ZodNumber;
1555
+ cashValue: z.ZodNumber;
1556
+ cashValueMode: z.ZodEnum<{
1557
+ flatRate: "flatRate";
1558
+ schedule: "schedule";
1559
+ }>;
1560
+ cashValueGrowthPct: z.ZodOptional<z.ZodNumber>;
1561
+ cashValueSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
1562
+ age: z.ZodNumber;
1563
+ value: z.ZodNumber;
1564
+ }, z.core.$strip>>>;
1565
+ dividendOption: z.ZodOptional<z.ZodEnum<{
1566
+ cash: "cash";
1567
+ reducePremium: "reducePremium";
1568
+ paidUpAdditions: "paidUpAdditions";
1569
+ }>>;
1570
+ }, z.core.$strip>], "kind">;
1571
+ export type InsurancePolicy = z.infer<typeof insurancePolicySchema>;
1572
+ /**
1573
+ * A deterministic late-life care episode: a spending spike (today's dollars,
1574
+ * additive to baseline spending) that an LTC policy on the same person offsets.
1575
+ * The "de-risking baseline" the policy is measured against (V6 §3).
1576
+ */
1577
+ export declare const careEventSchema: z.ZodObject<{
1578
+ id: z.ZodString;
1579
+ personId: z.ZodString;
1580
+ startAge: z.ZodNumber;
1581
+ durationYears: z.ZodNumber;
1582
+ annualCost: z.ZodNumber;
1583
+ }, z.core.$strip>;
1584
+ export type CareEvent = z.infer<typeof careEventSchema>;
1585
+ /**
1586
+ * A TIPS ladder paying a level real income over a calendar window — the plan
1587
+ * artifact behind a Social Security bridge or an essential-spending floor.
1588
+ * Rungs are solved by the engine from the embedded real-yield curve
1589
+ * (`engine/ladder/ladderMath.ts`); the plan stores only the intent (target
1590
+ * income + window + optional purchase), so a curve refresh re-quotes the same
1591
+ * ladder. Cash flows run through the ledger with TIPS taxation: coupon income
1592
+ * and the annual inflation accretion (phantom OID) are federal ordinary income
1593
+ * but exempt from state tax; maturing principal is a tax-free return of
1594
+ * already-taxed dollars. Planning-grade simplifications (annual coupons, no
1595
+ * lot rounding) are documented in the ladder module.
1596
+ */
1597
+ export declare const tipsLadderSchema: z.ZodObject<{
1598
+ id: z.ZodString;
1599
+ name: z.ZodString;
1600
+ purpose: z.ZodEnum<{
1601
+ bridge: "bridge";
1602
+ floor: "floor";
1603
+ }>;
1604
+ startYear: z.ZodNumber;
1605
+ endYear: z.ZodNumber;
1606
+ annualRealAmount: z.ZodNumber;
1607
+ purchase: z.ZodOptional<z.ZodObject<{
1608
+ year: z.ZodNumber;
1609
+ fundingAccountId: z.ZodString;
1610
+ }, z.core.$strip>>;
1611
+ }, z.core.$strip>;
1612
+ export type TipsLadder = z.infer<typeof tipsLadderSchema>;
1613
+ /**
1614
+ * Safety-first income floor (optional, additive): TIPS ladders whose cash
1615
+ * flows live inside the ledger. Absent = no ladders, byte-identical results.
1616
+ */
1617
+ export declare const incomeFloorSchema: z.ZodObject<{
1618
+ ladders: z.ZodArray<z.ZodObject<{
1619
+ id: z.ZodString;
1620
+ name: z.ZodString;
1621
+ purpose: z.ZodEnum<{
1622
+ bridge: "bridge";
1623
+ floor: "floor";
1624
+ }>;
1625
+ startYear: z.ZodNumber;
1626
+ endYear: z.ZodNumber;
1627
+ annualRealAmount: z.ZodNumber;
1628
+ purchase: z.ZodOptional<z.ZodObject<{
1629
+ year: z.ZodNumber;
1630
+ fundingAccountId: z.ZodString;
1631
+ }, z.core.$strip>>;
1632
+ }, z.core.$strip>>;
1633
+ }, z.core.$strip>;
1634
+ export type IncomeFloor = z.infer<typeof incomeFloorSchema>;
1635
+ export declare const yearEarningSchema: z.ZodObject<{
1636
+ year: z.ZodNumber;
1637
+ amount: z.ZodNumber;
1638
+ }, z.core.$strip>;
1639
+ export declare const wagesIncomeSchema: z.ZodObject<{
1640
+ type: z.ZodLiteral<"wages">;
1641
+ id: z.ZodString;
1642
+ personId: z.ZodString;
1643
+ annualGross: z.ZodNumber;
1644
+ endAge: z.ZodNullable<z.ZodNumber>;
1645
+ realGrowthPct: z.ZodDefault<z.ZodNumber>;
1646
+ }, z.core.$strip>;
1647
+ /**
1648
+ * A former spouse who can unlock a benefit on someone else's record: a living
1649
+ * ex-spouse (divorced-spousal) or a deceased former spouse (survivor). Their PIA
1650
+ * is a simple user estimate, not an earnings import (spec §1.3).
1651
+ */
1652
+ export declare const formerSpouseSchema: z.ZodObject<{
1653
+ id: z.ZodString;
1654
+ relationship: z.ZodEnum<{
1655
+ divorced: "divorced";
1656
+ deceased: "deceased";
1657
+ }>;
1658
+ dob: z.ZodString;
1659
+ piaMonthly: z.ZodNumber;
1660
+ marriageYears: z.ZodNumber;
1661
+ remarriedAtAge: z.ZodNullable<z.ZodNumber>;
1662
+ deceasedClaimAge: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1663
+ years: z.ZodNumber;
1664
+ months: z.ZodNumber;
1665
+ }, z.core.$strip>>>;
1666
+ }, z.core.$strip>;
1667
+ export type FormerSpouse = z.infer<typeof formerSpouseSchema>;
1668
+ export declare const socialSecurityIncomeSchema: z.ZodObject<{
1669
+ type: z.ZodLiteral<"socialSecurity">;
1670
+ id: z.ZodString;
1671
+ personId: z.ZodString;
1672
+ piaMonthly: z.ZodNullable<z.ZodNumber>;
1673
+ earnings: z.ZodNullable<z.ZodArray<z.ZodObject<{
1674
+ year: z.ZodNumber;
1675
+ amount: z.ZodNumber;
1676
+ }, z.core.$strip>>>;
1677
+ earningsProjection: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1678
+ assumedAnnualEarnings: z.ZodNullable<z.ZodNumber>;
1679
+ throughAge: z.ZodNullable<z.ZodNumber>;
1680
+ }, z.core.$strip>>>;
1681
+ coveredQuarters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1682
+ formerSpouses: z.ZodOptional<z.ZodArray<z.ZodObject<{
1683
+ id: z.ZodString;
1684
+ relationship: z.ZodEnum<{
1685
+ divorced: "divorced";
1686
+ deceased: "deceased";
1687
+ }>;
1688
+ dob: z.ZodString;
1689
+ piaMonthly: z.ZodNumber;
1690
+ marriageYears: z.ZodNumber;
1691
+ remarriedAtAge: z.ZodNullable<z.ZodNumber>;
1692
+ deceasedClaimAge: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1693
+ years: z.ZodNumber;
1694
+ months: z.ZodNumber;
1695
+ }, z.core.$strip>>>;
1696
+ }, z.core.$strip>>>;
1697
+ disability: z.ZodOptional<z.ZodObject<{
1698
+ onsetAge: z.ZodNumber;
1699
+ }, z.core.$strip>>;
1700
+ claimAge: z.ZodObject<{
1701
+ years: z.ZodNumber;
1702
+ months: z.ZodNumber;
1703
+ }, z.core.$strip>;
1704
+ }, z.core.$strip>;
1705
+ export declare const recurringIncomeSchema: z.ZodObject<{
1706
+ type: z.ZodLiteral<"recurring">;
1707
+ id: z.ZodString;
1708
+ label: z.ZodString;
1709
+ annualAmount: z.ZodNumber;
1710
+ startYear: z.ZodNullable<z.ZodNumber>;
1711
+ endYear: z.ZodNullable<z.ZodNumber>;
1712
+ inflationAdjusted: z.ZodBoolean;
1713
+ taxTreatment: z.ZodEnum<{
1714
+ none: "none";
1715
+ ordinary: "ordinary";
1716
+ }>;
1717
+ }, z.core.$strip>;
1718
+ export declare const oneTimeIncomeSchema: z.ZodObject<{
1719
+ type: z.ZodLiteral<"oneTime">;
1720
+ id: z.ZodString;
1721
+ label: z.ZodString;
1722
+ year: z.ZodNumber;
1723
+ amount: z.ZodNumber;
1724
+ taxTreatment: z.ZodEnum<{
1725
+ none: "none";
1726
+ ordinary: "ordinary";
1727
+ capitalGain: "capitalGain";
1728
+ }>;
1729
+ }, z.core.$strip>;
1730
+ export declare const incomeStreamSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
1731
+ type: z.ZodLiteral<"wages">;
1732
+ id: z.ZodString;
1733
+ personId: z.ZodString;
1734
+ annualGross: z.ZodNumber;
1735
+ endAge: z.ZodNullable<z.ZodNumber>;
1736
+ realGrowthPct: z.ZodDefault<z.ZodNumber>;
1737
+ }, z.core.$strip>, z.ZodObject<{
1738
+ type: z.ZodLiteral<"socialSecurity">;
1739
+ id: z.ZodString;
1740
+ personId: z.ZodString;
1741
+ piaMonthly: z.ZodNullable<z.ZodNumber>;
1742
+ earnings: z.ZodNullable<z.ZodArray<z.ZodObject<{
1743
+ year: z.ZodNumber;
1744
+ amount: z.ZodNumber;
1745
+ }, z.core.$strip>>>;
1746
+ earningsProjection: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1747
+ assumedAnnualEarnings: z.ZodNullable<z.ZodNumber>;
1748
+ throughAge: z.ZodNullable<z.ZodNumber>;
1749
+ }, z.core.$strip>>>;
1750
+ coveredQuarters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1751
+ formerSpouses: z.ZodOptional<z.ZodArray<z.ZodObject<{
1752
+ id: z.ZodString;
1753
+ relationship: z.ZodEnum<{
1754
+ divorced: "divorced";
1755
+ deceased: "deceased";
1756
+ }>;
1757
+ dob: z.ZodString;
1758
+ piaMonthly: z.ZodNumber;
1759
+ marriageYears: z.ZodNumber;
1760
+ remarriedAtAge: z.ZodNullable<z.ZodNumber>;
1761
+ deceasedClaimAge: z.ZodOptional<z.ZodNullable<z.ZodObject<{
1762
+ years: z.ZodNumber;
1763
+ months: z.ZodNumber;
1764
+ }, z.core.$strip>>>;
1765
+ }, z.core.$strip>>>;
1766
+ disability: z.ZodOptional<z.ZodObject<{
1767
+ onsetAge: z.ZodNumber;
1768
+ }, z.core.$strip>>;
1769
+ claimAge: z.ZodObject<{
1770
+ years: z.ZodNumber;
1771
+ months: z.ZodNumber;
1772
+ }, z.core.$strip>;
1773
+ }, z.core.$strip>, z.ZodObject<{
1774
+ type: z.ZodLiteral<"recurring">;
1775
+ id: z.ZodString;
1776
+ label: z.ZodString;
1777
+ annualAmount: z.ZodNumber;
1778
+ startYear: z.ZodNullable<z.ZodNumber>;
1779
+ endYear: z.ZodNullable<z.ZodNumber>;
1780
+ inflationAdjusted: z.ZodBoolean;
1781
+ taxTreatment: z.ZodEnum<{
1782
+ none: "none";
1783
+ ordinary: "ordinary";
1784
+ }>;
1785
+ }, z.core.$strip>, z.ZodObject<{
1786
+ type: z.ZodLiteral<"oneTime">;
1787
+ id: z.ZodString;
1788
+ label: z.ZodString;
1789
+ year: z.ZodNumber;
1790
+ amount: z.ZodNumber;
1791
+ taxTreatment: z.ZodEnum<{
1792
+ none: "none";
1793
+ ordinary: "ordinary";
1794
+ capitalGain: "capitalGain";
1795
+ }>;
1796
+ }, z.core.$strip>], "type">;
1797
+ export type IncomeStream = z.infer<typeof incomeStreamSchema>;
1798
+ export declare const expensePhaseSchema: z.ZodObject<{
1799
+ fromAge: z.ZodNumber;
1800
+ multiplier: z.ZodNumber;
1801
+ }, z.core.$strip>;
1802
+ export type ExpensePhase = z.infer<typeof expensePhaseSchema>;
1803
+ /**
1804
+ * Flexibility of spending, layered from must-fund to opportunistic. Drives the
1805
+ * required-floor vs target-lifestyle distinction that guardrails act on. Absent
1806
+ * on a goal ⇒ 'target' (the migration default; preserves today's behavior).
1807
+ */
1808
+ export declare const spendingClassificationSchema: z.ZodEnum<{
1809
+ required: "required";
1810
+ target: "target";
1811
+ ideal: "ideal";
1812
+ excess: "excess";
1813
+ }>;
1814
+ export type SpendingClassification = z.infer<typeof spendingClassificationSchema>;
1815
+ /**
1816
+ * How a one-time goal may move under a guardrail policy. 'fixed' funds in its
1817
+ * target year exactly (today's behavior); 'movable' funds in its target year
1818
+ * when spending is not being cut, and is delayed up to `latestYear` while the
1819
+ * guardrail is cutting; if still unaffordable at `latestYear` under a cut, the
1820
+ * unfunded amount is reported as a layer shortfall. 'skippable' is the same but
1821
+ * dropped entirely if it is still unaffordable at `latestYear`. Absent ⇒ 'fixed'.
1822
+ */
1823
+ export declare const goalFlexibilitySchema: z.ZodEnum<{
1824
+ fixed: "fixed";
1825
+ movable: "movable";
1826
+ skippable: "skippable";
1827
+ }>;
1828
+ export type GoalFlexibility = z.infer<typeof goalFlexibilitySchema>;
1829
+ export declare const oneTimeGoalSchema: z.ZodObject<{
1830
+ id: z.ZodString;
1831
+ label: z.ZodString;
1832
+ year: z.ZodNumber;
1833
+ amount: z.ZodNumber;
1834
+ classification: z.ZodOptional<z.ZodEnum<{
1835
+ required: "required";
1836
+ target: "target";
1837
+ ideal: "ideal";
1838
+ excess: "excess";
1839
+ }>>;
1840
+ flexibility: z.ZodOptional<z.ZodEnum<{
1841
+ fixed: "fixed";
1842
+ movable: "movable";
1843
+ skippable: "skippable";
1844
+ }>>;
1845
+ earliestYear: z.ZodOptional<z.ZodNumber>;
1846
+ latestYear: z.ZodOptional<z.ZodNumber>;
1847
+ priority: z.ZodOptional<z.ZodNumber>;
1848
+ minFundingPct: z.ZodOptional<z.ZodNumber>;
1849
+ allowPartialFunding: z.ZodOptional<z.ZodBoolean>;
1850
+ }, z.core.$strip>;
1851
+ export type OneTimeGoal = z.infer<typeof oneTimeGoalSchema>;
1852
+ export declare const healthcareConfigSchema: z.ZodObject<{
1853
+ pre65MonthlyPremiumPerPerson: z.ZodNumber;
1854
+ applyAcaCredit: z.ZodBoolean;
1855
+ medicareExtrasMonthlyPerPerson: z.ZodNumber;
1856
+ ssa44: z.ZodOptional<z.ZodObject<{
1857
+ survivorYears: z.ZodBoolean;
1858
+ retirementYears: z.ZodBoolean;
1859
+ }, z.core.$strip>>;
1860
+ }, z.core.$strip>;
1861
+ /**
1862
+ * Opt-in spending policy layered over the fixed baseline (planning-depth roadmap
1863
+ * §4). 'fixedTarget' (or absent) reproduces today's behavior: the whole spending
1864
+ * stack is funded every year. 'withdrawalRateGuardrails' rations the
1865
+ * discretionary layer (baseAnnual − requiredAnnual, plus flexible goals) path by
1866
+ * path — cutting when the current withdrawal rate runs too far above the
1867
+ * starting rate and restoring when it falls back — while always funding the
1868
+ * required floor. 'riskBasedGuardrails' uses the same rationing machinery but
1869
+ * triggers on the real portfolio balance against solver-derived dollar
1870
+ * thresholds: the balance levels at which the plan's Monte Carlo probability of
1871
+ * success would leave the user's target band (Kitces / risk-based guardrail
1872
+ * methodology). The thresholds are solved on shared Monte Carlo paths
1873
+ * (engine/montecarlo/riskBasedGuardrails.ts) and stored here as percentages of
1874
+ * the starting portfolio; until they are solved the mode adjusts nothing.
1875
+ * @see app/src/engine/spending/guardrails.ts
1876
+ */
1877
+ /**
1878
+ * Amortization-based withdrawal (ABW) parameters — the Bogleheads-formalized
1879
+ * family that VPW, TPAW, and CAPE-based rules are members of. Each year the
1880
+ * ledger recomputes the lifestyle spending target by amortizing the actual
1881
+ * start-of-year investable balance over the remaining horizon at an expected
1882
+ * real return, with an optional spending tilt (payments planned to grow at
1883
+ * `tiltPct` real per year; negative = front-loaded, Blanchett-consistent).
1884
+ * Only used when spendingPolicy.mode = 'abw'. @see engine/spending/abw.ts
1885
+ */
1886
+ export declare const abwPolicySchema: z.ZodObject<{
1887
+ returnSource: z.ZodEnum<{
1888
+ fixed: "fixed";
1889
+ cape: "cape";
1890
+ tips: "tips";
1891
+ }>;
1892
+ fixedRealReturnPct: z.ZodOptional<z.ZodNumber>;
1893
+ startingCape: z.ZodOptional<z.ZodNumber>;
1894
+ equitySharePct: z.ZodOptional<z.ZodNumber>;
1895
+ bondRealYieldPct: z.ZodOptional<z.ZodNumber>;
1896
+ horizon: z.ZodOptional<z.ZodEnum<{
1897
+ planningAge: "planningAge";
1898
+ survival25: "survival25";
1899
+ survival10: "survival10";
1900
+ }>>;
1901
+ tiltPct: z.ZodOptional<z.ZodNumber>;
1902
+ }, z.core.$strip>;
1903
+ export type AbwPolicy = z.infer<typeof abwPolicySchema>;
1904
+ export declare const spendingPolicySchema: z.ZodObject<{
1905
+ mode: z.ZodEnum<{
1906
+ fixedTarget: "fixedTarget";
1907
+ withdrawalRateGuardrails: "withdrawalRateGuardrails";
1908
+ riskBasedGuardrails: "riskBasedGuardrails";
1909
+ abw: "abw";
1910
+ }>;
1911
+ abw: z.ZodOptional<z.ZodObject<{
1912
+ returnSource: z.ZodEnum<{
1913
+ fixed: "fixed";
1914
+ cape: "cape";
1915
+ tips: "tips";
1916
+ }>;
1917
+ fixedRealReturnPct: z.ZodOptional<z.ZodNumber>;
1918
+ startingCape: z.ZodOptional<z.ZodNumber>;
1919
+ equitySharePct: z.ZodOptional<z.ZodNumber>;
1920
+ bondRealYieldPct: z.ZodOptional<z.ZodNumber>;
1921
+ horizon: z.ZodOptional<z.ZodEnum<{
1922
+ planningAge: "planningAge";
1923
+ survival25: "survival25";
1924
+ survival10: "survival10";
1925
+ }>>;
1926
+ tiltPct: z.ZodOptional<z.ZodNumber>;
1927
+ }, z.core.$strip>>;
1928
+ upperGuardrailPct: z.ZodOptional<z.ZodNumber>;
1929
+ lowerGuardrailPct: z.ZodOptional<z.ZodNumber>;
1930
+ targetSuccessLowerPct: z.ZodOptional<z.ZodNumber>;
1931
+ targetSuccessUpperPct: z.ZodOptional<z.ZodNumber>;
1932
+ lowerBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
1933
+ upperBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
1934
+ adjustmentPct: z.ZodOptional<z.ZodNumber>;
1935
+ allowRaisesAboveTarget: z.ZodOptional<z.ZodBoolean>;
1936
+ }, z.core.$strip>;
1937
+ export type SpendingPolicy = z.infer<typeof spendingPolicySchema>;
1938
+ export declare const expensePlanSchema: z.ZodObject<{
1939
+ baseAnnual: z.ZodNumber;
1940
+ requiredAnnual: z.ZodOptional<z.ZodNumber>;
1941
+ idealAnnual: z.ZodOptional<z.ZodNumber>;
1942
+ excessAnnual: z.ZodOptional<z.ZodNumber>;
1943
+ phases: z.ZodArray<z.ZodObject<{
1944
+ fromAge: z.ZodNumber;
1945
+ multiplier: z.ZodNumber;
1946
+ }, z.core.$strip>>;
1947
+ oneTimeGoals: z.ZodArray<z.ZodObject<{
1948
+ id: z.ZodString;
1949
+ label: z.ZodString;
1950
+ year: z.ZodNumber;
1951
+ amount: z.ZodNumber;
1952
+ classification: z.ZodOptional<z.ZodEnum<{
1953
+ required: "required";
1954
+ target: "target";
1955
+ ideal: "ideal";
1956
+ excess: "excess";
1957
+ }>>;
1958
+ flexibility: z.ZodOptional<z.ZodEnum<{
1959
+ fixed: "fixed";
1960
+ movable: "movable";
1961
+ skippable: "skippable";
1962
+ }>>;
1963
+ earliestYear: z.ZodOptional<z.ZodNumber>;
1964
+ latestYear: z.ZodOptional<z.ZodNumber>;
1965
+ priority: z.ZodOptional<z.ZodNumber>;
1966
+ minFundingPct: z.ZodOptional<z.ZodNumber>;
1967
+ allowPartialFunding: z.ZodOptional<z.ZodBoolean>;
1968
+ }, z.core.$strip>>;
1969
+ healthcare: z.ZodObject<{
1970
+ pre65MonthlyPremiumPerPerson: z.ZodNumber;
1971
+ applyAcaCredit: z.ZodBoolean;
1972
+ medicareExtrasMonthlyPerPerson: z.ZodNumber;
1973
+ ssa44: z.ZodOptional<z.ZodObject<{
1974
+ survivorYears: z.ZodBoolean;
1975
+ retirementYears: z.ZodBoolean;
1976
+ }, z.core.$strip>>;
1977
+ }, z.core.$strip>;
1978
+ spendingPolicy: z.ZodOptional<z.ZodObject<{
1979
+ mode: z.ZodEnum<{
1980
+ fixedTarget: "fixedTarget";
1981
+ withdrawalRateGuardrails: "withdrawalRateGuardrails";
1982
+ riskBasedGuardrails: "riskBasedGuardrails";
1983
+ abw: "abw";
1984
+ }>;
1985
+ abw: z.ZodOptional<z.ZodObject<{
1986
+ returnSource: z.ZodEnum<{
1987
+ fixed: "fixed";
1988
+ cape: "cape";
1989
+ tips: "tips";
1990
+ }>;
1991
+ fixedRealReturnPct: z.ZodOptional<z.ZodNumber>;
1992
+ startingCape: z.ZodOptional<z.ZodNumber>;
1993
+ equitySharePct: z.ZodOptional<z.ZodNumber>;
1994
+ bondRealYieldPct: z.ZodOptional<z.ZodNumber>;
1995
+ horizon: z.ZodOptional<z.ZodEnum<{
1996
+ planningAge: "planningAge";
1997
+ survival25: "survival25";
1998
+ survival10: "survival10";
1999
+ }>>;
2000
+ tiltPct: z.ZodOptional<z.ZodNumber>;
2001
+ }, z.core.$strip>>;
2002
+ upperGuardrailPct: z.ZodOptional<z.ZodNumber>;
2003
+ lowerGuardrailPct: z.ZodOptional<z.ZodNumber>;
2004
+ targetSuccessLowerPct: z.ZodOptional<z.ZodNumber>;
2005
+ targetSuccessUpperPct: z.ZodOptional<z.ZodNumber>;
2006
+ lowerBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
2007
+ upperBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
2008
+ adjustmentPct: z.ZodOptional<z.ZodNumber>;
2009
+ allowRaisesAboveTarget: z.ZodOptional<z.ZodBoolean>;
2010
+ }, z.core.$strip>>;
2011
+ survivorSpendingPct: z.ZodOptional<z.ZodNumber>;
2012
+ bequestTargetDollars: z.ZodOptional<z.ZodNumber>;
2013
+ }, z.core.$strip>;
2014
+ export type ExpensePlan = z.infer<typeof expensePlanSchema>;
2015
+ export declare const rothConversionStrategySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
2016
+ mode: z.ZodLiteral<"none">;
2017
+ }, z.core.$strip>, z.ZodObject<{
2018
+ mode: z.ZodLiteral<"manual">;
2019
+ conversions: z.ZodArray<z.ZodObject<{
2020
+ year: z.ZodNumber;
2021
+ amount: z.ZodNumber;
2022
+ }, z.core.$strip>>;
2023
+ }, z.core.$strip>, z.ZodObject<{
2024
+ mode: z.ZodLiteral<"optimized">;
2025
+ conversions: z.ZodArray<z.ZodObject<{
2026
+ year: z.ZodNumber;
2027
+ amount: z.ZodNumber;
2028
+ }, z.core.$strip>>;
2029
+ optimizedAtIso: z.ZodOptional<z.ZodString>;
2030
+ }, z.core.$strip>, z.ZodObject<{
2031
+ mode: z.ZodLiteral<"fillToTarget">;
2032
+ target: z.ZodEnum<{
2033
+ topOfBracket: "topOfBracket";
2034
+ irmaaTier: "irmaaTier";
2035
+ acaCliff: "acaCliff";
2036
+ fixedMagi: "fixedMagi";
2037
+ }>;
2038
+ targetValue: z.ZodNullable<z.ZodNumber>;
2039
+ startYear: z.ZodNumber;
2040
+ endYear: z.ZodNumber;
2041
+ }, z.core.$strip>], "mode">;
2042
+ export declare const withdrawalStrategySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
2043
+ mode: z.ZodLiteral<"sequential">;
2044
+ }, z.core.$strip>, z.ZodObject<{
2045
+ mode: z.ZodLiteral<"proportional">;
2046
+ }, z.core.$strip>, z.ZodObject<{
2047
+ mode: z.ZodLiteral<"bracketTargeted">;
2048
+ bracketPct: z.ZodNumber;
2049
+ }, z.core.$strip>], "mode">;
2050
+ /**
2051
+ * Itemized-deduction components in today's dollars (roadmap V8). Optional — when
2052
+ * present, federal tax uses the greater of the standard deduction and this total
2053
+ * (SALT capped by the pack). SALT is the user's own estimate of deductible
2054
+ * state/local/property tax, kept separate from the engine's computed state tax.
2055
+ */
2056
+ export declare const itemizedDeductionsSchema: z.ZodObject<{
2057
+ stateAndLocalTaxes: z.ZodNumber;
2058
+ mortgageInterest: z.ZodNumber;
2059
+ charitable: z.ZodNumber;
2060
+ }, z.core.$strip>;
2061
+ export type ItemizedDeductions = z.infer<typeof itemizedDeductionsSchema>;
2062
+ export declare const strategiesSchema: z.ZodObject<{
2063
+ withdrawalOrder: z.ZodDiscriminatedUnion<[z.ZodObject<{
2064
+ mode: z.ZodLiteral<"sequential">;
2065
+ }, z.core.$strip>, z.ZodObject<{
2066
+ mode: z.ZodLiteral<"proportional">;
2067
+ }, z.core.$strip>, z.ZodObject<{
2068
+ mode: z.ZodLiteral<"bracketTargeted">;
2069
+ bracketPct: z.ZodNumber;
2070
+ }, z.core.$strip>], "mode">;
2071
+ rothConversion: z.ZodDiscriminatedUnion<[z.ZodObject<{
2072
+ mode: z.ZodLiteral<"none">;
2073
+ }, z.core.$strip>, z.ZodObject<{
2074
+ mode: z.ZodLiteral<"manual">;
2075
+ conversions: z.ZodArray<z.ZodObject<{
2076
+ year: z.ZodNumber;
2077
+ amount: z.ZodNumber;
2078
+ }, z.core.$strip>>;
2079
+ }, z.core.$strip>, z.ZodObject<{
2080
+ mode: z.ZodLiteral<"optimized">;
2081
+ conversions: z.ZodArray<z.ZodObject<{
2082
+ year: z.ZodNumber;
2083
+ amount: z.ZodNumber;
2084
+ }, z.core.$strip>>;
2085
+ optimizedAtIso: z.ZodOptional<z.ZodString>;
2086
+ }, z.core.$strip>, z.ZodObject<{
2087
+ mode: z.ZodLiteral<"fillToTarget">;
2088
+ target: z.ZodEnum<{
2089
+ topOfBracket: "topOfBracket";
2090
+ irmaaTier: "irmaaTier";
2091
+ acaCliff: "acaCliff";
2092
+ fixedMagi: "fixedMagi";
2093
+ }>;
2094
+ targetValue: z.ZodNullable<z.ZodNumber>;
2095
+ startYear: z.ZodNumber;
2096
+ endYear: z.ZodNumber;
2097
+ }, z.core.$strip>], "mode">;
2098
+ qcdAnnual: z.ZodNumber;
2099
+ itemizedDeductions: z.ZodOptional<z.ZodObject<{
2100
+ stateAndLocalTaxes: z.ZodNumber;
2101
+ mortgageInterest: z.ZodNumber;
2102
+ charitable: z.ZodNumber;
2103
+ }, z.core.$strip>>;
2104
+ taxableSafetyNetFloor: z.ZodOptional<z.ZodNumber>;
2105
+ survivorReserveTarget: z.ZodOptional<z.ZodNumber>;
2106
+ }, z.core.$strip>;
2107
+ export type Strategies = z.infer<typeof strategiesSchema>;
2108
+ export declare const assumptionsSchema: z.ZodObject<{
2109
+ inflationPct: z.ZodNumber;
2110
+ healthcareExtraInflationPct: z.ZodNumber;
2111
+ defaultReturnPct: z.ZodNumber;
2112
+ ssCola: z.ZodDiscriminatedUnion<[z.ZodObject<{
2113
+ mode: z.ZodLiteral<"matchInflation">;
2114
+ }, z.core.$strip>, z.ZodObject<{
2115
+ mode: z.ZodLiteral<"fixed">;
2116
+ annualPct: z.ZodNumber;
2117
+ }, z.core.$strip>], "mode">;
2118
+ ssHaircut: z.ZodNullable<z.ZodObject<{
2119
+ fromYear: z.ZodNumber;
2120
+ cutPct: z.ZodNumber;
2121
+ }, z.core.$strip>>;
2122
+ stateEffectiveTaxPct: z.ZodNumber;
2123
+ localIncomeTaxPct: z.ZodDefault<z.ZodNumber>;
2124
+ recentAnnualMagi: z.ZodNumber;
2125
+ heirTaxRatePct: z.ZodDefault<z.ZodNumber>;
2126
+ heirTaxByClass: z.ZodOptional<z.ZodObject<{
2127
+ traditional: z.ZodOptional<z.ZodNumber>;
2128
+ hsa: z.ZodOptional<z.ZodNumber>;
2129
+ }, z.core.$strip>>;
2130
+ safeWithdrawalRatePct: z.ZodDefault<z.ZodNumber>;
2131
+ assetClassParams: z.ZodOptional<z.ZodObject<{
2132
+ usStocks: z.ZodOptional<z.ZodObject<{
2133
+ returnPct: z.ZodOptional<z.ZodNumber>;
2134
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
2135
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
2136
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
2137
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
2138
+ }, z.core.$strip>>;
2139
+ intlStocks: z.ZodOptional<z.ZodObject<{
2140
+ returnPct: z.ZodOptional<z.ZodNumber>;
2141
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
2142
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
2143
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
2144
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
2145
+ }, z.core.$strip>>;
2146
+ bonds: z.ZodOptional<z.ZodObject<{
2147
+ returnPct: z.ZodOptional<z.ZodNumber>;
2148
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
2149
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
2150
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
2151
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
2152
+ }, z.core.$strip>>;
2153
+ cash: z.ZodOptional<z.ZodObject<{
2154
+ returnPct: z.ZodOptional<z.ZodNumber>;
2155
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
2156
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
2157
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
2158
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
2159
+ }, z.core.$strip>>;
2160
+ }, z.core.$strip>>;
2161
+ }, z.core.$strip>;
2162
+ export type Assumptions = z.infer<typeof assumptionsSchema>;
2163
+ export declare const scenarioSchema: z.ZodObject<{
2164
+ id: z.ZodString;
2165
+ name: z.ZodString;
2166
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
2167
+ }, z.core.$strip>;
2168
+ export type Scenario = z.infer<typeof scenarioSchema>;
2169
+ export declare const planOriginSchema: z.ZodDefault<z.ZodEnum<{
2170
+ user: "user";
2171
+ example: "example";
2172
+ }>>;
2173
+ export type PlanOrigin = z.infer<typeof planOriginSchema>;
2174
+ export declare const planSchema: z.ZodObject<{
2175
+ schemaVersion: z.ZodLiteral<1>;
2176
+ id: z.ZodString;
2177
+ name: z.ZodString;
2178
+ origin: z.ZodDefault<z.ZodEnum<{
2179
+ user: "user";
2180
+ example: "example";
2181
+ }>>;
2182
+ exampleSourceId: z.ZodOptional<z.ZodString>;
2183
+ createdAtIso: z.ZodString;
2184
+ updatedAtIso: z.ZodString;
2185
+ household: z.ZodObject<{
2186
+ filingStatus: z.ZodEnum<{
2187
+ single: "single";
2188
+ marriedFilingJointly: "marriedFilingJointly";
2189
+ }>;
2190
+ hasQualifyingDependent: z.ZodDefault<z.ZodBoolean>;
2191
+ state: z.ZodString;
2192
+ stateMoves: z.ZodDefault<z.ZodArray<z.ZodObject<{
2193
+ fromYear: z.ZodNumber;
2194
+ fromMonth: z.ZodDefault<z.ZodNumber>;
2195
+ state: z.ZodString;
2196
+ }, z.core.$strip>>>;
2197
+ capitalLossCarryforward: z.ZodDefault<z.ZodNumber>;
2198
+ people: z.ZodArray<z.ZodObject<{
2199
+ id: z.ZodString;
2200
+ name: z.ZodString;
2201
+ dob: z.ZodString;
2202
+ sex: z.ZodEnum<{
2203
+ female: "female";
2204
+ male: "male";
2205
+ average: "average";
2206
+ }>;
2207
+ retirementAge: z.ZodNullable<z.ZodNumber>;
2208
+ longevity: z.ZodObject<{
2209
+ planningAge: z.ZodNumber;
2210
+ source: z.ZodEnum<{
2211
+ model: "model";
2212
+ manual: "manual";
2213
+ percentile: "percentile";
2214
+ }>;
2215
+ percentile: z.ZodOptional<z.ZodObject<{
2216
+ pct: z.ZodNumber;
2217
+ joint: z.ZodBoolean;
2218
+ healthMultiplier: z.ZodOptional<z.ZodNumber>;
2219
+ partnerHealthMultiplier: z.ZodOptional<z.ZodNumber>;
2220
+ }, z.core.$strip>>;
2221
+ }, z.core.$strip>;
2222
+ }, z.core.$strip>>;
2223
+ }, z.core.$strip>;
2224
+ accounts: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
2225
+ type: z.ZodLiteral<"taxable">;
2226
+ balance: z.ZodNumber;
2227
+ costBasis: z.ZodNumber;
2228
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
2229
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
2230
+ qualifiedRatio: z.ZodOptional<z.ZodNumber>;
2231
+ reinvestDividends: z.ZodOptional<z.ZodBoolean>;
2232
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2233
+ weights: z.ZodObject<{
2234
+ usStocks: z.ZodDefault<z.ZodNumber>;
2235
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2236
+ bonds: z.ZodDefault<z.ZodNumber>;
2237
+ cash: z.ZodDefault<z.ZodNumber>;
2238
+ }, z.core.$strip>;
2239
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2240
+ annual: "annual";
2241
+ none: "none";
2242
+ }>>;
2243
+ mode: z.ZodLiteral<"static">;
2244
+ }, z.core.$strip>, z.ZodObject<{
2245
+ from: z.ZodObject<{
2246
+ usStocks: z.ZodDefault<z.ZodNumber>;
2247
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2248
+ bonds: z.ZodDefault<z.ZodNumber>;
2249
+ cash: z.ZodDefault<z.ZodNumber>;
2250
+ }, z.core.$strip>;
2251
+ to: z.ZodObject<{
2252
+ usStocks: z.ZodDefault<z.ZodNumber>;
2253
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2254
+ bonds: z.ZodDefault<z.ZodNumber>;
2255
+ cash: z.ZodDefault<z.ZodNumber>;
2256
+ }, z.core.$strip>;
2257
+ startYear: z.ZodNumber;
2258
+ endYear: z.ZodNumber;
2259
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2260
+ annual: "annual";
2261
+ none: "none";
2262
+ }>>;
2263
+ mode: z.ZodLiteral<"linear">;
2264
+ }, z.core.$strip>, z.ZodObject<{
2265
+ stages: z.ZodArray<z.ZodObject<{
2266
+ fromYear: z.ZodNumber;
2267
+ weights: z.ZodObject<{
2268
+ usStocks: z.ZodDefault<z.ZodNumber>;
2269
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2270
+ bonds: z.ZodDefault<z.ZodNumber>;
2271
+ cash: z.ZodDefault<z.ZodNumber>;
2272
+ }, z.core.$strip>;
2273
+ }, z.core.$strip>>;
2274
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2275
+ annual: "annual";
2276
+ none: "none";
2277
+ }>>;
2278
+ mode: z.ZodLiteral<"staged">;
2279
+ }, z.core.$strip>, z.ZodObject<{
2280
+ targets: z.ZodArray<z.ZodObject<{
2281
+ year: z.ZodNumber;
2282
+ weights: z.ZodObject<{
2283
+ usStocks: z.ZodDefault<z.ZodNumber>;
2284
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2285
+ bonds: z.ZodDefault<z.ZodNumber>;
2286
+ cash: z.ZodDefault<z.ZodNumber>;
2287
+ }, z.core.$strip>;
2288
+ }, z.core.$strip>>;
2289
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2290
+ annual: "annual";
2291
+ none: "none";
2292
+ }>>;
2293
+ mode: z.ZodLiteral<"custom">;
2294
+ }, z.core.$strip>], "mode">>;
2295
+ annualContribution: z.ZodNumber;
2296
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2297
+ annualAmount: z.ZodNumber;
2298
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2299
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2300
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2301
+ }, z.core.$strip>>>;
2302
+ id: z.ZodString;
2303
+ name: z.ZodString;
2304
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2305
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2306
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2307
+ destination: z.ZodEnum<{
2308
+ spouse: "spouse";
2309
+ nonSpouse: "nonSpouse";
2310
+ charity: "charity";
2311
+ }>;
2312
+ charityPct: z.ZodOptional<z.ZodNumber>;
2313
+ }, z.core.$strip>>;
2314
+ }, z.core.$strip>, z.ZodObject<{
2315
+ type: z.ZodLiteral<"equityComp">;
2316
+ balance: z.ZodNumber;
2317
+ costBasis: z.ZodNumber;
2318
+ annualContribution: z.ZodNumber;
2319
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2320
+ annualAmount: z.ZodNumber;
2321
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2322
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2323
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2324
+ }, z.core.$strip>>>;
2325
+ vestingMode: z.ZodEnum<{
2326
+ final: "final";
2327
+ cliff: "cliff";
2328
+ }>;
2329
+ vestDate: z.ZodNullable<z.ZodString>;
2330
+ id: z.ZodString;
2331
+ name: z.ZodString;
2332
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2333
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2334
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2335
+ destination: z.ZodEnum<{
2336
+ spouse: "spouse";
2337
+ nonSpouse: "nonSpouse";
2338
+ charity: "charity";
2339
+ }>;
2340
+ charityPct: z.ZodOptional<z.ZodNumber>;
2341
+ }, z.core.$strip>>;
2342
+ }, z.core.$strip>, z.ZodObject<{
2343
+ type: z.ZodLiteral<"traditional">;
2344
+ kind: z.ZodEnum<{
2345
+ ira: "ira";
2346
+ employer: "employer";
2347
+ }>;
2348
+ balance: z.ZodNumber;
2349
+ annualContribution: z.ZodNumber;
2350
+ inherited: z.ZodOptional<z.ZodObject<{
2351
+ ownerDeathYear: z.ZodNumber;
2352
+ decedentHadStartedRmds: z.ZodBoolean;
2353
+ }, z.core.$strip>>;
2354
+ nondeductibleBasis: z.ZodOptional<z.ZodNumber>;
2355
+ spouseSoleBeneficiary: z.ZodOptional<z.ZodBoolean>;
2356
+ sepp: z.ZodOptional<z.ZodObject<{
2357
+ startAge: z.ZodNumber;
2358
+ method: z.ZodEnum<{
2359
+ rmd: "rmd";
2360
+ amortization: "amortization";
2361
+ }>;
2362
+ }, z.core.$strip>>;
2363
+ employerMatch: z.ZodOptional<z.ZodObject<{
2364
+ matchPct: z.ZodNumber;
2365
+ capPctOfPay: z.ZodNumber;
2366
+ }, z.core.$strip>>;
2367
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2368
+ annualAmount: z.ZodNumber;
2369
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2370
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2371
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2372
+ }, z.core.$strip>>>;
2373
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2374
+ weights: z.ZodObject<{
2375
+ usStocks: z.ZodDefault<z.ZodNumber>;
2376
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2377
+ bonds: z.ZodDefault<z.ZodNumber>;
2378
+ cash: z.ZodDefault<z.ZodNumber>;
2379
+ }, z.core.$strip>;
2380
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2381
+ annual: "annual";
2382
+ none: "none";
2383
+ }>>;
2384
+ mode: z.ZodLiteral<"static">;
2385
+ }, z.core.$strip>, z.ZodObject<{
2386
+ from: z.ZodObject<{
2387
+ usStocks: z.ZodDefault<z.ZodNumber>;
2388
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2389
+ bonds: z.ZodDefault<z.ZodNumber>;
2390
+ cash: z.ZodDefault<z.ZodNumber>;
2391
+ }, z.core.$strip>;
2392
+ to: z.ZodObject<{
2393
+ usStocks: z.ZodDefault<z.ZodNumber>;
2394
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2395
+ bonds: z.ZodDefault<z.ZodNumber>;
2396
+ cash: z.ZodDefault<z.ZodNumber>;
2397
+ }, z.core.$strip>;
2398
+ startYear: z.ZodNumber;
2399
+ endYear: z.ZodNumber;
2400
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2401
+ annual: "annual";
2402
+ none: "none";
2403
+ }>>;
2404
+ mode: z.ZodLiteral<"linear">;
2405
+ }, z.core.$strip>, z.ZodObject<{
2406
+ stages: z.ZodArray<z.ZodObject<{
2407
+ fromYear: z.ZodNumber;
2408
+ weights: z.ZodObject<{
2409
+ usStocks: z.ZodDefault<z.ZodNumber>;
2410
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2411
+ bonds: z.ZodDefault<z.ZodNumber>;
2412
+ cash: z.ZodDefault<z.ZodNumber>;
2413
+ }, z.core.$strip>;
2414
+ }, z.core.$strip>>;
2415
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2416
+ annual: "annual";
2417
+ none: "none";
2418
+ }>>;
2419
+ mode: z.ZodLiteral<"staged">;
2420
+ }, z.core.$strip>, z.ZodObject<{
2421
+ targets: z.ZodArray<z.ZodObject<{
2422
+ year: z.ZodNumber;
2423
+ weights: z.ZodObject<{
2424
+ usStocks: z.ZodDefault<z.ZodNumber>;
2425
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2426
+ bonds: z.ZodDefault<z.ZodNumber>;
2427
+ cash: z.ZodDefault<z.ZodNumber>;
2428
+ }, z.core.$strip>;
2429
+ }, z.core.$strip>>;
2430
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2431
+ annual: "annual";
2432
+ none: "none";
2433
+ }>>;
2434
+ mode: z.ZodLiteral<"custom">;
2435
+ }, z.core.$strip>], "mode">>;
2436
+ id: z.ZodString;
2437
+ name: z.ZodString;
2438
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2439
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2440
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2441
+ destination: z.ZodEnum<{
2442
+ spouse: "spouse";
2443
+ nonSpouse: "nonSpouse";
2444
+ charity: "charity";
2445
+ }>;
2446
+ charityPct: z.ZodOptional<z.ZodNumber>;
2447
+ }, z.core.$strip>>;
2448
+ }, z.core.$strip>, z.ZodObject<{
2449
+ type: z.ZodLiteral<"roth">;
2450
+ kind: z.ZodEnum<{
2451
+ ira: "ira";
2452
+ employer: "employer";
2453
+ }>;
2454
+ balance: z.ZodNumber;
2455
+ annualContribution: z.ZodNumber;
2456
+ contributionBasis: z.ZodOptional<z.ZodNumber>;
2457
+ employerMatch: z.ZodOptional<z.ZodObject<{
2458
+ matchPct: z.ZodNumber;
2459
+ capPctOfPay: z.ZodNumber;
2460
+ }, z.core.$strip>>;
2461
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2462
+ annualAmount: z.ZodNumber;
2463
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2464
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2465
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2466
+ }, z.core.$strip>>>;
2467
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2468
+ weights: z.ZodObject<{
2469
+ usStocks: z.ZodDefault<z.ZodNumber>;
2470
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2471
+ bonds: z.ZodDefault<z.ZodNumber>;
2472
+ cash: z.ZodDefault<z.ZodNumber>;
2473
+ }, z.core.$strip>;
2474
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2475
+ annual: "annual";
2476
+ none: "none";
2477
+ }>>;
2478
+ mode: z.ZodLiteral<"static">;
2479
+ }, z.core.$strip>, z.ZodObject<{
2480
+ from: z.ZodObject<{
2481
+ usStocks: z.ZodDefault<z.ZodNumber>;
2482
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2483
+ bonds: z.ZodDefault<z.ZodNumber>;
2484
+ cash: z.ZodDefault<z.ZodNumber>;
2485
+ }, z.core.$strip>;
2486
+ to: z.ZodObject<{
2487
+ usStocks: z.ZodDefault<z.ZodNumber>;
2488
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2489
+ bonds: z.ZodDefault<z.ZodNumber>;
2490
+ cash: z.ZodDefault<z.ZodNumber>;
2491
+ }, z.core.$strip>;
2492
+ startYear: z.ZodNumber;
2493
+ endYear: z.ZodNumber;
2494
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2495
+ annual: "annual";
2496
+ none: "none";
2497
+ }>>;
2498
+ mode: z.ZodLiteral<"linear">;
2499
+ }, z.core.$strip>, z.ZodObject<{
2500
+ stages: z.ZodArray<z.ZodObject<{
2501
+ fromYear: z.ZodNumber;
2502
+ weights: z.ZodObject<{
2503
+ usStocks: z.ZodDefault<z.ZodNumber>;
2504
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2505
+ bonds: z.ZodDefault<z.ZodNumber>;
2506
+ cash: z.ZodDefault<z.ZodNumber>;
2507
+ }, z.core.$strip>;
2508
+ }, z.core.$strip>>;
2509
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2510
+ annual: "annual";
2511
+ none: "none";
2512
+ }>>;
2513
+ mode: z.ZodLiteral<"staged">;
2514
+ }, z.core.$strip>, z.ZodObject<{
2515
+ targets: z.ZodArray<z.ZodObject<{
2516
+ year: z.ZodNumber;
2517
+ weights: z.ZodObject<{
2518
+ usStocks: z.ZodDefault<z.ZodNumber>;
2519
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2520
+ bonds: z.ZodDefault<z.ZodNumber>;
2521
+ cash: z.ZodDefault<z.ZodNumber>;
2522
+ }, z.core.$strip>;
2523
+ }, z.core.$strip>>;
2524
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2525
+ annual: "annual";
2526
+ none: "none";
2527
+ }>>;
2528
+ mode: z.ZodLiteral<"custom">;
2529
+ }, z.core.$strip>], "mode">>;
2530
+ id: z.ZodString;
2531
+ name: z.ZodString;
2532
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2533
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2534
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2535
+ destination: z.ZodEnum<{
2536
+ spouse: "spouse";
2537
+ nonSpouse: "nonSpouse";
2538
+ charity: "charity";
2539
+ }>;
2540
+ charityPct: z.ZodOptional<z.ZodNumber>;
2541
+ }, z.core.$strip>>;
2542
+ }, z.core.$strip>, z.ZodObject<{
2543
+ type: z.ZodLiteral<"hsa">;
2544
+ balance: z.ZodNumber;
2545
+ annualContribution: z.ZodNumber;
2546
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2547
+ annualAmount: z.ZodNumber;
2548
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2549
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2550
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2551
+ }, z.core.$strip>>>;
2552
+ withdrawalTreatment: z.ZodOptional<z.ZodEnum<{
2553
+ assumeAllQualified: "assumeAllQualified";
2554
+ capByMedicalExpenses: "capByMedicalExpenses";
2555
+ }>>;
2556
+ reimburseLater: z.ZodOptional<z.ZodBoolean>;
2557
+ beneficiary: z.ZodOptional<z.ZodEnum<{
2558
+ spouse: "spouse";
2559
+ nonSpouse: "nonSpouse";
2560
+ }>>;
2561
+ allocation: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2562
+ weights: z.ZodObject<{
2563
+ usStocks: z.ZodDefault<z.ZodNumber>;
2564
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2565
+ bonds: z.ZodDefault<z.ZodNumber>;
2566
+ cash: z.ZodDefault<z.ZodNumber>;
2567
+ }, z.core.$strip>;
2568
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2569
+ annual: "annual";
2570
+ none: "none";
2571
+ }>>;
2572
+ mode: z.ZodLiteral<"static">;
2573
+ }, z.core.$strip>, z.ZodObject<{
2574
+ from: z.ZodObject<{
2575
+ usStocks: z.ZodDefault<z.ZodNumber>;
2576
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2577
+ bonds: z.ZodDefault<z.ZodNumber>;
2578
+ cash: z.ZodDefault<z.ZodNumber>;
2579
+ }, z.core.$strip>;
2580
+ to: z.ZodObject<{
2581
+ usStocks: z.ZodDefault<z.ZodNumber>;
2582
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2583
+ bonds: z.ZodDefault<z.ZodNumber>;
2584
+ cash: z.ZodDefault<z.ZodNumber>;
2585
+ }, z.core.$strip>;
2586
+ startYear: z.ZodNumber;
2587
+ endYear: z.ZodNumber;
2588
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2589
+ annual: "annual";
2590
+ none: "none";
2591
+ }>>;
2592
+ mode: z.ZodLiteral<"linear">;
2593
+ }, z.core.$strip>, z.ZodObject<{
2594
+ stages: z.ZodArray<z.ZodObject<{
2595
+ fromYear: z.ZodNumber;
2596
+ weights: z.ZodObject<{
2597
+ usStocks: z.ZodDefault<z.ZodNumber>;
2598
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2599
+ bonds: z.ZodDefault<z.ZodNumber>;
2600
+ cash: z.ZodDefault<z.ZodNumber>;
2601
+ }, z.core.$strip>;
2602
+ }, z.core.$strip>>;
2603
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2604
+ annual: "annual";
2605
+ none: "none";
2606
+ }>>;
2607
+ mode: z.ZodLiteral<"staged">;
2608
+ }, z.core.$strip>, z.ZodObject<{
2609
+ targets: z.ZodArray<z.ZodObject<{
2610
+ year: z.ZodNumber;
2611
+ weights: z.ZodObject<{
2612
+ usStocks: z.ZodDefault<z.ZodNumber>;
2613
+ intlStocks: z.ZodDefault<z.ZodNumber>;
2614
+ bonds: z.ZodDefault<z.ZodNumber>;
2615
+ cash: z.ZodDefault<z.ZodNumber>;
2616
+ }, z.core.$strip>;
2617
+ }, z.core.$strip>>;
2618
+ rebalancing: z.ZodDefault<z.ZodEnum<{
2619
+ annual: "annual";
2620
+ none: "none";
2621
+ }>>;
2622
+ mode: z.ZodLiteral<"custom">;
2623
+ }, z.core.$strip>], "mode">>;
2624
+ id: z.ZodString;
2625
+ name: z.ZodString;
2626
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2627
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2628
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2629
+ destination: z.ZodEnum<{
2630
+ spouse: "spouse";
2631
+ nonSpouse: "nonSpouse";
2632
+ charity: "charity";
2633
+ }>;
2634
+ charityPct: z.ZodOptional<z.ZodNumber>;
2635
+ }, z.core.$strip>>;
2636
+ }, z.core.$strip>, z.ZodObject<{
2637
+ type: z.ZodLiteral<"cash">;
2638
+ balance: z.ZodNumber;
2639
+ annualContribution: z.ZodNumber;
2640
+ contributionSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2641
+ annualAmount: z.ZodNumber;
2642
+ fromAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2643
+ toAge: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
2644
+ escalationPct: z.ZodDefault<z.ZodNumber>;
2645
+ }, z.core.$strip>>>;
2646
+ id: z.ZodString;
2647
+ name: z.ZodString;
2648
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2649
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2650
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2651
+ destination: z.ZodEnum<{
2652
+ spouse: "spouse";
2653
+ nonSpouse: "nonSpouse";
2654
+ charity: "charity";
2655
+ }>;
2656
+ charityPct: z.ZodOptional<z.ZodNumber>;
2657
+ }, z.core.$strip>>;
2658
+ }, z.core.$strip>, z.ZodObject<{
2659
+ type: z.ZodLiteral<"pension">;
2660
+ source: z.ZodOptional<z.ZodEnum<{
2661
+ private: "private";
2662
+ public: "public";
2663
+ }>>;
2664
+ startAge: z.ZodNumber;
2665
+ monthlyAmount: z.ZodNumber;
2666
+ colaPct: z.ZodNumber;
2667
+ survivorPct: z.ZodNumber;
2668
+ lumpSumOffer: z.ZodOptional<z.ZodObject<{
2669
+ amount: z.ZodNumber;
2670
+ electionYear: z.ZodNumber;
2671
+ }, z.core.$strip>>;
2672
+ lumpSumElection: z.ZodOptional<z.ZodObject<{
2673
+ rolloverAccountId: z.ZodString;
2674
+ }, z.core.$strip>>;
2675
+ id: z.ZodString;
2676
+ name: z.ZodString;
2677
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2678
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2679
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2680
+ destination: z.ZodEnum<{
2681
+ spouse: "spouse";
2682
+ nonSpouse: "nonSpouse";
2683
+ charity: "charity";
2684
+ }>;
2685
+ charityPct: z.ZodOptional<z.ZodNumber>;
2686
+ }, z.core.$strip>>;
2687
+ }, z.core.$strip>, z.ZodObject<{
2688
+ type: z.ZodLiteral<"annuity">;
2689
+ startAge: z.ZodNumber;
2690
+ monthlyAmount: z.ZodNumber;
2691
+ colaPct: z.ZodNumber;
2692
+ taxablePct: z.ZodNumber;
2693
+ purchase: z.ZodOptional<z.ZodObject<{
2694
+ year: z.ZodNumber;
2695
+ premium: z.ZodNumber;
2696
+ fundingAccountId: z.ZodString;
2697
+ taxQualification: z.ZodEnum<{
2698
+ nonQualified: "nonQualified";
2699
+ qualified: "qualified";
2700
+ }>;
2701
+ qlac: z.ZodOptional<z.ZodBoolean>;
2702
+ }, z.core.$strip>>;
2703
+ payoutForm: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2704
+ kind: z.ZodLiteral<"lifeOnly">;
2705
+ }, z.core.$strip>, z.ZodObject<{
2706
+ kind: z.ZodLiteral<"periodCertain">;
2707
+ certainYears: z.ZodNumber;
2708
+ }, z.core.$strip>, z.ZodObject<{
2709
+ kind: z.ZodLiteral<"jointSurvivor">;
2710
+ survivorPct: z.ZodNumber;
2711
+ }, z.core.$strip>], "kind">>;
2712
+ id: z.ZodString;
2713
+ name: z.ZodString;
2714
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2715
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2716
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2717
+ destination: z.ZodEnum<{
2718
+ spouse: "spouse";
2719
+ nonSpouse: "nonSpouse";
2720
+ charity: "charity";
2721
+ }>;
2722
+ charityPct: z.ZodOptional<z.ZodNumber>;
2723
+ }, z.core.$strip>>;
2724
+ }, z.core.$strip>, z.ZodObject<{
2725
+ type: z.ZodLiteral<"property">;
2726
+ value: z.ZodNumber;
2727
+ plannedSaleYear: z.ZodNullable<z.ZodNumber>;
2728
+ expectedNetProceeds: z.ZodNullable<z.ZodNumber>;
2729
+ costBasis: z.ZodOptional<z.ZodNumber>;
2730
+ sellingCostPct: z.ZodOptional<z.ZodNumber>;
2731
+ primaryResidence: z.ZodOptional<z.ZodBoolean>;
2732
+ depreciationRecapture: z.ZodOptional<z.ZodNumber>;
2733
+ propertyTaxAnnual: z.ZodOptional<z.ZodNumber>;
2734
+ insuranceAnnual: z.ZodOptional<z.ZodNumber>;
2735
+ hecm: z.ZodOptional<z.ZodObject<{
2736
+ openYear: z.ZodNumber;
2737
+ principalLimitPct: z.ZodOptional<z.ZodNumber>;
2738
+ growthRatePct: z.ZodNumber;
2739
+ upfrontCostPct: z.ZodOptional<z.ZodNumber>;
2740
+ drawPolicy: z.ZodEnum<{
2741
+ coordinated: "coordinated";
2742
+ lastResort: "lastResort";
2743
+ }>;
2744
+ }, z.core.$strip>>;
2745
+ id: z.ZodString;
2746
+ name: z.ZodString;
2747
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2748
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2749
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2750
+ destination: z.ZodEnum<{
2751
+ spouse: "spouse";
2752
+ nonSpouse: "nonSpouse";
2753
+ charity: "charity";
2754
+ }>;
2755
+ charityPct: z.ZodOptional<z.ZodNumber>;
2756
+ }, z.core.$strip>>;
2757
+ }, z.core.$strip>, z.ZodObject<{
2758
+ type: z.ZodLiteral<"debt">;
2759
+ balance: z.ZodNumber;
2760
+ interestPct: z.ZodNumber;
2761
+ monthlyPayment: z.ZodNumber;
2762
+ payoffYear: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2763
+ id: z.ZodString;
2764
+ name: z.ZodString;
2765
+ ownerPersonId: z.ZodNullable<z.ZodString>;
2766
+ annualReturnPct: z.ZodNullable<z.ZodNumber>;
2767
+ estateBeneficiary: z.ZodOptional<z.ZodObject<{
2768
+ destination: z.ZodEnum<{
2769
+ spouse: "spouse";
2770
+ nonSpouse: "nonSpouse";
2771
+ charity: "charity";
2772
+ }>;
2773
+ charityPct: z.ZodOptional<z.ZodNumber>;
2774
+ }, z.core.$strip>>;
2775
+ }, z.core.$strip>], "type">>;
2776
+ insurance: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
2777
+ kind: z.ZodLiteral<"ltc">;
2778
+ id: z.ZodString;
2779
+ name: z.ZodString;
2780
+ owner: z.ZodString;
2781
+ annualPremium: z.ZodNumber;
2782
+ premiumMode: z.ZodEnum<{
2783
+ lifetime: "lifetime";
2784
+ paidUp: "paidUp";
2785
+ untilAge: "untilAge";
2786
+ }>;
2787
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
2788
+ benefitMonthly: z.ZodNumber;
2789
+ benefitPeriodYears: z.ZodUnion<readonly [z.ZodNumber, z.ZodLiteral<"lifetime">]>;
2790
+ eliminationPeriodDays: z.ZodNumber;
2791
+ inflationRiderPct: z.ZodOptional<z.ZodNumber>;
2792
+ }, z.core.$strip>, z.ZodObject<{
2793
+ kind: z.ZodLiteral<"permanentLife">;
2794
+ id: z.ZodString;
2795
+ name: z.ZodString;
2796
+ insured: z.ZodString;
2797
+ beneficiary: z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"estate">]>;
2798
+ annualPremium: z.ZodNumber;
2799
+ premiumMode: z.ZodEnum<{
2800
+ lifetime: "lifetime";
2801
+ paidUp: "paidUp";
2802
+ untilAge: "untilAge";
2803
+ }>;
2804
+ premiumEndAge: z.ZodOptional<z.ZodNumber>;
2805
+ deathBenefit: z.ZodNumber;
2806
+ cashValue: z.ZodNumber;
2807
+ cashValueMode: z.ZodEnum<{
2808
+ flatRate: "flatRate";
2809
+ schedule: "schedule";
2810
+ }>;
2811
+ cashValueGrowthPct: z.ZodOptional<z.ZodNumber>;
2812
+ cashValueSchedule: z.ZodOptional<z.ZodArray<z.ZodObject<{
2813
+ age: z.ZodNumber;
2814
+ value: z.ZodNumber;
2815
+ }, z.core.$strip>>>;
2816
+ dividendOption: z.ZodOptional<z.ZodEnum<{
2817
+ cash: "cash";
2818
+ reducePremium: "reducePremium";
2819
+ paidUpAdditions: "paidUpAdditions";
2820
+ }>>;
2821
+ }, z.core.$strip>], "kind">>>;
2822
+ careEvents: z.ZodDefault<z.ZodArray<z.ZodObject<{
2823
+ id: z.ZodString;
2824
+ personId: z.ZodString;
2825
+ startAge: z.ZodNumber;
2826
+ durationYears: z.ZodNumber;
2827
+ annualCost: z.ZodNumber;
2828
+ }, z.core.$strip>>>;
2829
+ incomes: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
2830
+ type: z.ZodLiteral<"wages">;
2831
+ id: z.ZodString;
2832
+ personId: z.ZodString;
2833
+ annualGross: z.ZodNumber;
2834
+ endAge: z.ZodNullable<z.ZodNumber>;
2835
+ realGrowthPct: z.ZodDefault<z.ZodNumber>;
2836
+ }, z.core.$strip>, z.ZodObject<{
2837
+ type: z.ZodLiteral<"socialSecurity">;
2838
+ id: z.ZodString;
2839
+ personId: z.ZodString;
2840
+ piaMonthly: z.ZodNullable<z.ZodNumber>;
2841
+ earnings: z.ZodNullable<z.ZodArray<z.ZodObject<{
2842
+ year: z.ZodNumber;
2843
+ amount: z.ZodNumber;
2844
+ }, z.core.$strip>>>;
2845
+ earningsProjection: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2846
+ assumedAnnualEarnings: z.ZodNullable<z.ZodNumber>;
2847
+ throughAge: z.ZodNullable<z.ZodNumber>;
2848
+ }, z.core.$strip>>>;
2849
+ coveredQuarters: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
2850
+ formerSpouses: z.ZodOptional<z.ZodArray<z.ZodObject<{
2851
+ id: z.ZodString;
2852
+ relationship: z.ZodEnum<{
2853
+ divorced: "divorced";
2854
+ deceased: "deceased";
2855
+ }>;
2856
+ dob: z.ZodString;
2857
+ piaMonthly: z.ZodNumber;
2858
+ marriageYears: z.ZodNumber;
2859
+ remarriedAtAge: z.ZodNullable<z.ZodNumber>;
2860
+ deceasedClaimAge: z.ZodOptional<z.ZodNullable<z.ZodObject<{
2861
+ years: z.ZodNumber;
2862
+ months: z.ZodNumber;
2863
+ }, z.core.$strip>>>;
2864
+ }, z.core.$strip>>>;
2865
+ disability: z.ZodOptional<z.ZodObject<{
2866
+ onsetAge: z.ZodNumber;
2867
+ }, z.core.$strip>>;
2868
+ claimAge: z.ZodObject<{
2869
+ years: z.ZodNumber;
2870
+ months: z.ZodNumber;
2871
+ }, z.core.$strip>;
2872
+ }, z.core.$strip>, z.ZodObject<{
2873
+ type: z.ZodLiteral<"recurring">;
2874
+ id: z.ZodString;
2875
+ label: z.ZodString;
2876
+ annualAmount: z.ZodNumber;
2877
+ startYear: z.ZodNullable<z.ZodNumber>;
2878
+ endYear: z.ZodNullable<z.ZodNumber>;
2879
+ inflationAdjusted: z.ZodBoolean;
2880
+ taxTreatment: z.ZodEnum<{
2881
+ none: "none";
2882
+ ordinary: "ordinary";
2883
+ }>;
2884
+ }, z.core.$strip>, z.ZodObject<{
2885
+ type: z.ZodLiteral<"oneTime">;
2886
+ id: z.ZodString;
2887
+ label: z.ZodString;
2888
+ year: z.ZodNumber;
2889
+ amount: z.ZodNumber;
2890
+ taxTreatment: z.ZodEnum<{
2891
+ none: "none";
2892
+ ordinary: "ordinary";
2893
+ capitalGain: "capitalGain";
2894
+ }>;
2895
+ }, z.core.$strip>], "type">>;
2896
+ incomeFloor: z.ZodOptional<z.ZodObject<{
2897
+ ladders: z.ZodArray<z.ZodObject<{
2898
+ id: z.ZodString;
2899
+ name: z.ZodString;
2900
+ purpose: z.ZodEnum<{
2901
+ bridge: "bridge";
2902
+ floor: "floor";
2903
+ }>;
2904
+ startYear: z.ZodNumber;
2905
+ endYear: z.ZodNumber;
2906
+ annualRealAmount: z.ZodNumber;
2907
+ purchase: z.ZodOptional<z.ZodObject<{
2908
+ year: z.ZodNumber;
2909
+ fundingAccountId: z.ZodString;
2910
+ }, z.core.$strip>>;
2911
+ }, z.core.$strip>>;
2912
+ }, z.core.$strip>>;
2913
+ expenses: z.ZodObject<{
2914
+ baseAnnual: z.ZodNumber;
2915
+ requiredAnnual: z.ZodOptional<z.ZodNumber>;
2916
+ idealAnnual: z.ZodOptional<z.ZodNumber>;
2917
+ excessAnnual: z.ZodOptional<z.ZodNumber>;
2918
+ phases: z.ZodArray<z.ZodObject<{
2919
+ fromAge: z.ZodNumber;
2920
+ multiplier: z.ZodNumber;
2921
+ }, z.core.$strip>>;
2922
+ oneTimeGoals: z.ZodArray<z.ZodObject<{
2923
+ id: z.ZodString;
2924
+ label: z.ZodString;
2925
+ year: z.ZodNumber;
2926
+ amount: z.ZodNumber;
2927
+ classification: z.ZodOptional<z.ZodEnum<{
2928
+ required: "required";
2929
+ target: "target";
2930
+ ideal: "ideal";
2931
+ excess: "excess";
2932
+ }>>;
2933
+ flexibility: z.ZodOptional<z.ZodEnum<{
2934
+ fixed: "fixed";
2935
+ movable: "movable";
2936
+ skippable: "skippable";
2937
+ }>>;
2938
+ earliestYear: z.ZodOptional<z.ZodNumber>;
2939
+ latestYear: z.ZodOptional<z.ZodNumber>;
2940
+ priority: z.ZodOptional<z.ZodNumber>;
2941
+ minFundingPct: z.ZodOptional<z.ZodNumber>;
2942
+ allowPartialFunding: z.ZodOptional<z.ZodBoolean>;
2943
+ }, z.core.$strip>>;
2944
+ healthcare: z.ZodObject<{
2945
+ pre65MonthlyPremiumPerPerson: z.ZodNumber;
2946
+ applyAcaCredit: z.ZodBoolean;
2947
+ medicareExtrasMonthlyPerPerson: z.ZodNumber;
2948
+ ssa44: z.ZodOptional<z.ZodObject<{
2949
+ survivorYears: z.ZodBoolean;
2950
+ retirementYears: z.ZodBoolean;
2951
+ }, z.core.$strip>>;
2952
+ }, z.core.$strip>;
2953
+ spendingPolicy: z.ZodOptional<z.ZodObject<{
2954
+ mode: z.ZodEnum<{
2955
+ fixedTarget: "fixedTarget";
2956
+ withdrawalRateGuardrails: "withdrawalRateGuardrails";
2957
+ riskBasedGuardrails: "riskBasedGuardrails";
2958
+ abw: "abw";
2959
+ }>;
2960
+ abw: z.ZodOptional<z.ZodObject<{
2961
+ returnSource: z.ZodEnum<{
2962
+ fixed: "fixed";
2963
+ cape: "cape";
2964
+ tips: "tips";
2965
+ }>;
2966
+ fixedRealReturnPct: z.ZodOptional<z.ZodNumber>;
2967
+ startingCape: z.ZodOptional<z.ZodNumber>;
2968
+ equitySharePct: z.ZodOptional<z.ZodNumber>;
2969
+ bondRealYieldPct: z.ZodOptional<z.ZodNumber>;
2970
+ horizon: z.ZodOptional<z.ZodEnum<{
2971
+ planningAge: "planningAge";
2972
+ survival25: "survival25";
2973
+ survival10: "survival10";
2974
+ }>>;
2975
+ tiltPct: z.ZodOptional<z.ZodNumber>;
2976
+ }, z.core.$strip>>;
2977
+ upperGuardrailPct: z.ZodOptional<z.ZodNumber>;
2978
+ lowerGuardrailPct: z.ZodOptional<z.ZodNumber>;
2979
+ targetSuccessLowerPct: z.ZodOptional<z.ZodNumber>;
2980
+ targetSuccessUpperPct: z.ZodOptional<z.ZodNumber>;
2981
+ lowerBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
2982
+ upperBalanceThresholdPct: z.ZodOptional<z.ZodNumber>;
2983
+ adjustmentPct: z.ZodOptional<z.ZodNumber>;
2984
+ allowRaisesAboveTarget: z.ZodOptional<z.ZodBoolean>;
2985
+ }, z.core.$strip>>;
2986
+ survivorSpendingPct: z.ZodOptional<z.ZodNumber>;
2987
+ bequestTargetDollars: z.ZodOptional<z.ZodNumber>;
2988
+ }, z.core.$strip>;
2989
+ strategies: z.ZodObject<{
2990
+ withdrawalOrder: z.ZodDiscriminatedUnion<[z.ZodObject<{
2991
+ mode: z.ZodLiteral<"sequential">;
2992
+ }, z.core.$strip>, z.ZodObject<{
2993
+ mode: z.ZodLiteral<"proportional">;
2994
+ }, z.core.$strip>, z.ZodObject<{
2995
+ mode: z.ZodLiteral<"bracketTargeted">;
2996
+ bracketPct: z.ZodNumber;
2997
+ }, z.core.$strip>], "mode">;
2998
+ rothConversion: z.ZodDiscriminatedUnion<[z.ZodObject<{
2999
+ mode: z.ZodLiteral<"none">;
3000
+ }, z.core.$strip>, z.ZodObject<{
3001
+ mode: z.ZodLiteral<"manual">;
3002
+ conversions: z.ZodArray<z.ZodObject<{
3003
+ year: z.ZodNumber;
3004
+ amount: z.ZodNumber;
3005
+ }, z.core.$strip>>;
3006
+ }, z.core.$strip>, z.ZodObject<{
3007
+ mode: z.ZodLiteral<"optimized">;
3008
+ conversions: z.ZodArray<z.ZodObject<{
3009
+ year: z.ZodNumber;
3010
+ amount: z.ZodNumber;
3011
+ }, z.core.$strip>>;
3012
+ optimizedAtIso: z.ZodOptional<z.ZodString>;
3013
+ }, z.core.$strip>, z.ZodObject<{
3014
+ mode: z.ZodLiteral<"fillToTarget">;
3015
+ target: z.ZodEnum<{
3016
+ topOfBracket: "topOfBracket";
3017
+ irmaaTier: "irmaaTier";
3018
+ acaCliff: "acaCliff";
3019
+ fixedMagi: "fixedMagi";
3020
+ }>;
3021
+ targetValue: z.ZodNullable<z.ZodNumber>;
3022
+ startYear: z.ZodNumber;
3023
+ endYear: z.ZodNumber;
3024
+ }, z.core.$strip>], "mode">;
3025
+ qcdAnnual: z.ZodNumber;
3026
+ itemizedDeductions: z.ZodOptional<z.ZodObject<{
3027
+ stateAndLocalTaxes: z.ZodNumber;
3028
+ mortgageInterest: z.ZodNumber;
3029
+ charitable: z.ZodNumber;
3030
+ }, z.core.$strip>>;
3031
+ taxableSafetyNetFloor: z.ZodOptional<z.ZodNumber>;
3032
+ survivorReserveTarget: z.ZodOptional<z.ZodNumber>;
3033
+ }, z.core.$strip>;
3034
+ assumptions: z.ZodObject<{
3035
+ inflationPct: z.ZodNumber;
3036
+ healthcareExtraInflationPct: z.ZodNumber;
3037
+ defaultReturnPct: z.ZodNumber;
3038
+ ssCola: z.ZodDiscriminatedUnion<[z.ZodObject<{
3039
+ mode: z.ZodLiteral<"matchInflation">;
3040
+ }, z.core.$strip>, z.ZodObject<{
3041
+ mode: z.ZodLiteral<"fixed">;
3042
+ annualPct: z.ZodNumber;
3043
+ }, z.core.$strip>], "mode">;
3044
+ ssHaircut: z.ZodNullable<z.ZodObject<{
3045
+ fromYear: z.ZodNumber;
3046
+ cutPct: z.ZodNumber;
3047
+ }, z.core.$strip>>;
3048
+ stateEffectiveTaxPct: z.ZodNumber;
3049
+ localIncomeTaxPct: z.ZodDefault<z.ZodNumber>;
3050
+ recentAnnualMagi: z.ZodNumber;
3051
+ heirTaxRatePct: z.ZodDefault<z.ZodNumber>;
3052
+ heirTaxByClass: z.ZodOptional<z.ZodObject<{
3053
+ traditional: z.ZodOptional<z.ZodNumber>;
3054
+ hsa: z.ZodOptional<z.ZodNumber>;
3055
+ }, z.core.$strip>>;
3056
+ safeWithdrawalRatePct: z.ZodDefault<z.ZodNumber>;
3057
+ assetClassParams: z.ZodOptional<z.ZodObject<{
3058
+ usStocks: z.ZodOptional<z.ZodObject<{
3059
+ returnPct: z.ZodOptional<z.ZodNumber>;
3060
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
3061
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
3062
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
3063
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
3064
+ }, z.core.$strip>>;
3065
+ intlStocks: z.ZodOptional<z.ZodObject<{
3066
+ returnPct: z.ZodOptional<z.ZodNumber>;
3067
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
3068
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
3069
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
3070
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
3071
+ }, z.core.$strip>>;
3072
+ bonds: z.ZodOptional<z.ZodObject<{
3073
+ returnPct: z.ZodOptional<z.ZodNumber>;
3074
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
3075
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
3076
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
3077
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
3078
+ }, z.core.$strip>>;
3079
+ cash: z.ZodOptional<z.ZodObject<{
3080
+ returnPct: z.ZodOptional<z.ZodNumber>;
3081
+ volatilityPct: z.ZodOptional<z.ZodNumber>;
3082
+ interestYieldPct: z.ZodOptional<z.ZodNumber>;
3083
+ dividendYieldPct: z.ZodOptional<z.ZodNumber>;
3084
+ qualifiedRatioPct: z.ZodOptional<z.ZodNumber>;
3085
+ }, z.core.$strip>>;
3086
+ }, z.core.$strip>>;
3087
+ }, z.core.$strip>;
3088
+ scenarios: z.ZodArray<z.ZodObject<{
3089
+ id: z.ZodString;
3090
+ name: z.ZodString;
3091
+ patch: z.ZodRecord<z.ZodString, z.ZodUnknown>;
3092
+ }, z.core.$strip>>;
3093
+ }, z.core.$strip>;
3094
+ export type Plan = z.infer<typeof planSchema>;
3095
+ export type ParsePlanResult = {
3096
+ ok: true;
3097
+ plan: Plan;
3098
+ } | {
3099
+ ok: false;
3100
+ issues: string[];
3101
+ };
3102
+ export declare function parsePlan(input: unknown): ParsePlanResult;
3103
+ export interface CreatePlanOptions {
3104
+ newId?: () => string;
3105
+ now?: () => Date;
3106
+ name?: string;
3107
+ }
3108
+ export declare function createEmptyPlan(opts?: CreatePlanOptions): Plan;