pigeongov 0.2.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 (571) hide show
  1. package/AGENTS.md +258 -0
  2. package/LICENSE +21 -0
  3. package/PRIVACY.md +38 -0
  4. package/README.md +234 -0
  5. package/agents.json +72 -0
  6. package/dist/bin/pigeongov.d.ts +2 -0
  7. package/dist/bin/pigeongov.js +4 -0
  8. package/dist/bin/pigeongov.js.map +1 -0
  9. package/dist/src/advisory/decision-support/contribution-optimizer.d.ts +36 -0
  10. package/dist/src/advisory/decision-support/contribution-optimizer.js +88 -0
  11. package/dist/src/advisory/decision-support/contribution-optimizer.js.map +1 -0
  12. package/dist/src/advisory/decision-support/deduction-optimizer.d.ts +31 -0
  13. package/dist/src/advisory/decision-support/deduction-optimizer.js +96 -0
  14. package/dist/src/advisory/decision-support/deduction-optimizer.js.map +1 -0
  15. package/dist/src/advisory/life-events/events.d.ts +4 -0
  16. package/dist/src/advisory/life-events/events.js +156 -0
  17. package/dist/src/advisory/life-events/events.js.map +1 -0
  18. package/dist/src/advisory/life-events/planner.d.ts +19 -0
  19. package/dist/src/advisory/life-events/planner.js +72 -0
  20. package/dist/src/advisory/life-events/planner.js.map +1 -0
  21. package/dist/src/advisory/screener/engine.d.ts +4 -0
  22. package/dist/src/advisory/screener/engine.js +368 -0
  23. package/dist/src/advisory/screener/engine.js.map +1 -0
  24. package/dist/src/advisory/screener/intake.d.ts +68 -0
  25. package/dist/src/advisory/screener/intake.js +93 -0
  26. package/dist/src/advisory/screener/intake.js.map +1 -0
  27. package/dist/src/analytics/stats.d.ts +18 -0
  28. package/dist/src/analytics/stats.js +158 -0
  29. package/dist/src/analytics/stats.js.map +1 -0
  30. package/dist/src/api/handlers/deadlines.d.ts +2 -0
  31. package/dist/src/api/handlers/deadlines.js +7 -0
  32. package/dist/src/api/handlers/deadlines.js.map +1 -0
  33. package/dist/src/api/handlers/openapi.d.ts +2 -0
  34. package/dist/src/api/handlers/openapi.js +7 -0
  35. package/dist/src/api/handlers/openapi.js.map +1 -0
  36. package/dist/src/api/handlers/workflows.d.ts +5 -0
  37. package/dist/src/api/handlers/workflows.js +73 -0
  38. package/dist/src/api/handlers/workflows.js.map +1 -0
  39. package/dist/src/api/index.d.ts +20 -0
  40. package/dist/src/api/index.js +70 -0
  41. package/dist/src/api/index.js.map +1 -0
  42. package/dist/src/api/openapi.d.ts +5 -0
  43. package/dist/src/api/openapi.js +384 -0
  44. package/dist/src/api/openapi.js.map +1 -0
  45. package/dist/src/api/router.d.ts +19 -0
  46. package/dist/src/api/router.js +57 -0
  47. package/dist/src/api/router.js.map +1 -0
  48. package/dist/src/cli/commands/completions.d.ts +2 -0
  49. package/dist/src/cli/commands/completions.js +396 -0
  50. package/dist/src/cli/commands/completions.js.map +1 -0
  51. package/dist/src/cli/commands/deadlines.d.ts +2 -0
  52. package/dist/src/cli/commands/deadlines.js +47 -0
  53. package/dist/src/cli/commands/deadlines.js.map +1 -0
  54. package/dist/src/cli/commands/doctor.d.ts +2 -0
  55. package/dist/src/cli/commands/doctor.js +50 -0
  56. package/dist/src/cli/commands/doctor.js.map +1 -0
  57. package/dist/src/cli/commands/drafts.d.ts +2 -0
  58. package/dist/src/cli/commands/drafts.js +75 -0
  59. package/dist/src/cli/commands/drafts.js.map +1 -0
  60. package/dist/src/cli/commands/extract.d.ts +2 -0
  61. package/dist/src/cli/commands/extract.js +17 -0
  62. package/dist/src/cli/commands/extract.js.map +1 -0
  63. package/dist/src/cli/commands/fees.d.ts +2 -0
  64. package/dist/src/cli/commands/fees.js +40 -0
  65. package/dist/src/cli/commands/fees.js.map +1 -0
  66. package/dist/src/cli/commands/fill.d.ts +25 -0
  67. package/dist/src/cli/commands/fill.js +354 -0
  68. package/dist/src/cli/commands/fill.js.map +1 -0
  69. package/dist/src/cli/commands/glossary.d.ts +2 -0
  70. package/dist/src/cli/commands/glossary.js +90 -0
  71. package/dist/src/cli/commands/glossary.js.map +1 -0
  72. package/dist/src/cli/commands/life-event.d.ts +2 -0
  73. package/dist/src/cli/commands/life-event.js +41 -0
  74. package/dist/src/cli/commands/life-event.js.map +1 -0
  75. package/dist/src/cli/commands/list.d.ts +2 -0
  76. package/dist/src/cli/commands/list.js +19 -0
  77. package/dist/src/cli/commands/list.js.map +1 -0
  78. package/dist/src/cli/commands/machine.d.ts +2 -0
  79. package/dist/src/cli/commands/machine.js +100 -0
  80. package/dist/src/cli/commands/machine.js.map +1 -0
  81. package/dist/src/cli/commands/merge.d.ts +2 -0
  82. package/dist/src/cli/commands/merge.js +24 -0
  83. package/dist/src/cli/commands/merge.js.map +1 -0
  84. package/dist/src/cli/commands/plugin.d.ts +2 -0
  85. package/dist/src/cli/commands/plugin.js +119 -0
  86. package/dist/src/cli/commands/plugin.js.map +1 -0
  87. package/dist/src/cli/commands/profile.d.ts +2 -0
  88. package/dist/src/cli/commands/profile.js +125 -0
  89. package/dist/src/cli/commands/profile.js.map +1 -0
  90. package/dist/src/cli/commands/review.d.ts +2 -0
  91. package/dist/src/cli/commands/review.js +25 -0
  92. package/dist/src/cli/commands/review.js.map +1 -0
  93. package/dist/src/cli/commands/scaffold.d.ts +2 -0
  94. package/dist/src/cli/commands/scaffold.js +304 -0
  95. package/dist/src/cli/commands/scaffold.js.map +1 -0
  96. package/dist/src/cli/commands/schemas.d.ts +2 -0
  97. package/dist/src/cli/commands/schemas.js +14 -0
  98. package/dist/src/cli/commands/schemas.js.map +1 -0
  99. package/dist/src/cli/commands/screen.d.ts +2 -0
  100. package/dist/src/cli/commands/screen.js +89 -0
  101. package/dist/src/cli/commands/screen.js.map +1 -0
  102. package/dist/src/cli/commands/serve.d.ts +2 -0
  103. package/dist/src/cli/commands/serve.js +46 -0
  104. package/dist/src/cli/commands/serve.js.map +1 -0
  105. package/dist/src/cli/commands/start.d.ts +2 -0
  106. package/dist/src/cli/commands/start.js +16 -0
  107. package/dist/src/cli/commands/start.js.map +1 -0
  108. package/dist/src/cli/commands/stats.d.ts +2 -0
  109. package/dist/src/cli/commands/stats.js +17 -0
  110. package/dist/src/cli/commands/stats.js.map +1 -0
  111. package/dist/src/cli/commands/testdata.d.ts +2 -0
  112. package/dist/src/cli/commands/testdata.js +60 -0
  113. package/dist/src/cli/commands/testdata.js.map +1 -0
  114. package/dist/src/cli/commands/tui.d.ts +2 -0
  115. package/dist/src/cli/commands/tui.js +26 -0
  116. package/dist/src/cli/commands/tui.js.map +1 -0
  117. package/dist/src/cli/commands/validate.d.ts +2 -0
  118. package/dist/src/cli/commands/validate.js +22 -0
  119. package/dist/src/cli/commands/validate.js.map +1 -0
  120. package/dist/src/cli/commands/vault.d.ts +2 -0
  121. package/dist/src/cli/commands/vault.js +73 -0
  122. package/dist/src/cli/commands/vault.js.map +1 -0
  123. package/dist/src/cli/commands/workflows.d.ts +2 -0
  124. package/dist/src/cli/commands/workflows.js +23 -0
  125. package/dist/src/cli/commands/workflows.js.map +1 -0
  126. package/dist/src/cli/display/review.d.ts +2 -0
  127. package/dist/src/cli/display/review.js +4 -0
  128. package/dist/src/cli/display/review.js.map +1 -0
  129. package/dist/src/cli/display/summary.d.ts +2 -0
  130. package/dist/src/cli/display/summary.js +19 -0
  131. package/dist/src/cli/display/summary.js.map +1 -0
  132. package/dist/src/cli/display/validation.d.ts +2 -0
  133. package/dist/src/cli/display/validation.js +16 -0
  134. package/dist/src/cli/display/validation.js.map +1 -0
  135. package/dist/src/cli/index.d.ts +1 -0
  136. package/dist/src/cli/index.js +83 -0
  137. package/dist/src/cli/index.js.map +1 -0
  138. package/dist/src/cli/output.d.ts +21 -0
  139. package/dist/src/cli/output.js +107 -0
  140. package/dist/src/cli/output.js.map +1 -0
  141. package/dist/src/cli/prompts/common.d.ts +21 -0
  142. package/dist/src/cli/prompts/common.js +53 -0
  143. package/dist/src/cli/prompts/common.js.map +1 -0
  144. package/dist/src/cli/prompts/credits.d.ts +3 -0
  145. package/dist/src/cli/prompts/credits.js +23 -0
  146. package/dist/src/cli/prompts/credits.js.map +1 -0
  147. package/dist/src/cli/prompts/deductions.d.ts +12 -0
  148. package/dist/src/cli/prompts/deductions.js +26 -0
  149. package/dist/src/cli/prompts/deductions.js.map +1 -0
  150. package/dist/src/cli/prompts/identity.d.ts +8 -0
  151. package/dist/src/cli/prompts/identity.js +36 -0
  152. package/dist/src/cli/prompts/identity.js.map +1 -0
  153. package/dist/src/cli/prompts/income.d.ts +15 -0
  154. package/dist/src/cli/prompts/income.js +61 -0
  155. package/dist/src/cli/prompts/income.js.map +1 -0
  156. package/dist/src/cli/prompts/workflow.d.ts +3 -0
  157. package/dist/src/cli/prompts/workflow.js +74 -0
  158. package/dist/src/cli/prompts/workflow.js.map +1 -0
  159. package/dist/src/cli/support.d.ts +53 -0
  160. package/dist/src/cli/support.js +80 -0
  161. package/dist/src/cli/support.js.map +1 -0
  162. package/dist/src/cli/tui.d.ts +22 -0
  163. package/dist/src/cli/tui.js +122 -0
  164. package/dist/src/cli/tui.js.map +1 -0
  165. package/dist/src/engine/audit-risk/scorer.d.ts +36 -0
  166. package/dist/src/engine/audit-risk/scorer.js +132 -0
  167. package/dist/src/engine/audit-risk/scorer.js.map +1 -0
  168. package/dist/src/engine/crypto/cost-basis.d.ts +19 -0
  169. package/dist/src/engine/crypto/cost-basis.js +115 -0
  170. package/dist/src/engine/crypto/cost-basis.js.map +1 -0
  171. package/dist/src/engine/crypto/transaction-parser.d.ts +36 -0
  172. package/dist/src/engine/crypto/transaction-parser.js +124 -0
  173. package/dist/src/engine/crypto/transaction-parser.js.map +1 -0
  174. package/dist/src/engine/crypto/wash-sale.d.ts +25 -0
  175. package/dist/src/engine/crypto/wash-sale.js +51 -0
  176. package/dist/src/engine/crypto/wash-sale.js.map +1 -0
  177. package/dist/src/engine/equity/espp.d.ts +41 -0
  178. package/dist/src/engine/equity/espp.js +90 -0
  179. package/dist/src/engine/equity/espp.js.map +1 -0
  180. package/dist/src/engine/equity/iso.d.ts +42 -0
  181. package/dist/src/engine/equity/iso.js +94 -0
  182. package/dist/src/engine/equity/iso.js.map +1 -0
  183. package/dist/src/engine/equity/nso.d.ts +35 -0
  184. package/dist/src/engine/equity/nso.js +63 -0
  185. package/dist/src/engine/equity/nso.js.map +1 -0
  186. package/dist/src/engine/equity/rsu.d.ts +33 -0
  187. package/dist/src/engine/equity/rsu.js +64 -0
  188. package/dist/src/engine/equity/rsu.js.map +1 -0
  189. package/dist/src/engine/field-mapper.d.ts +26 -0
  190. package/dist/src/engine/field-mapper.js +119 -0
  191. package/dist/src/engine/field-mapper.js.map +1 -0
  192. package/dist/src/engine/forms/core-1040.d.ts +2 -0
  193. package/dist/src/engine/forms/core-1040.js +124 -0
  194. package/dist/src/engine/forms/core-1040.js.map +1 -0
  195. package/dist/src/engine/forms/form-8949.d.ts +21 -0
  196. package/dist/src/engine/forms/form-8949.js +96 -0
  197. package/dist/src/engine/forms/form-8949.js.map +1 -0
  198. package/dist/src/engine/forms/index.d.ts +7 -0
  199. package/dist/src/engine/forms/index.js +6 -0
  200. package/dist/src/engine/forms/index.js.map +1 -0
  201. package/dist/src/engine/forms/schedule-b.d.ts +15 -0
  202. package/dist/src/engine/forms/schedule-b.js +78 -0
  203. package/dist/src/engine/forms/schedule-b.js.map +1 -0
  204. package/dist/src/engine/forms/schedule-d.d.ts +9 -0
  205. package/dist/src/engine/forms/schedule-d.js +86 -0
  206. package/dist/src/engine/forms/schedule-d.js.map +1 -0
  207. package/dist/src/engine/fpl.d.ts +70 -0
  208. package/dist/src/engine/fpl.js +127 -0
  209. package/dist/src/engine/fpl.js.map +1 -0
  210. package/dist/src/engine/gig/home-office.d.ts +34 -0
  211. package/dist/src/engine/gig/home-office.js +53 -0
  212. package/dist/src/engine/gig/home-office.js.map +1 -0
  213. package/dist/src/engine/gig/mileage.d.ts +30 -0
  214. package/dist/src/engine/gig/mileage.js +45 -0
  215. package/dist/src/engine/gig/mileage.js.map +1 -0
  216. package/dist/src/engine/gig/multi-1099.d.ts +19 -0
  217. package/dist/src/engine/gig/multi-1099.js +28 -0
  218. package/dist/src/engine/gig/multi-1099.js.map +1 -0
  219. package/dist/src/engine/multiyear/carryforward.d.ts +31 -0
  220. package/dist/src/engine/multiyear/carryforward.js +77 -0
  221. package/dist/src/engine/multiyear/carryforward.js.map +1 -0
  222. package/dist/src/engine/multiyear/compare.d.ts +25 -0
  223. package/dist/src/engine/multiyear/compare.js +94 -0
  224. package/dist/src/engine/multiyear/compare.js.map +1 -0
  225. package/dist/src/engine/multiyear/import.d.ts +23 -0
  226. package/dist/src/engine/multiyear/import.js +193 -0
  227. package/dist/src/engine/multiyear/import.js.map +1 -0
  228. package/dist/src/engine/optimizer/filing-status.d.ts +29 -0
  229. package/dist/src/engine/optimizer/filing-status.js +66 -0
  230. package/dist/src/engine/optimizer/filing-status.js.map +1 -0
  231. package/dist/src/engine/orchestrator.d.ts +14 -0
  232. package/dist/src/engine/orchestrator.js +135 -0
  233. package/dist/src/engine/orchestrator.js.map +1 -0
  234. package/dist/src/engine/scenarios/whatif.d.ts +34 -0
  235. package/dist/src/engine/scenarios/whatif.js +70 -0
  236. package/dist/src/engine/scenarios/whatif.js.map +1 -0
  237. package/dist/src/engine/state/ca/calculator.d.ts +3 -0
  238. package/dist/src/engine/state/ca/calculator.js +107 -0
  239. package/dist/src/engine/state/ca/calculator.js.map +1 -0
  240. package/dist/src/engine/state/common.d.ts +39 -0
  241. package/dist/src/engine/state/common.js +115 -0
  242. package/dist/src/engine/state/common.js.map +1 -0
  243. package/dist/src/engine/state/ga/calculator.d.ts +3 -0
  244. package/dist/src/engine/state/ga/calculator.js +82 -0
  245. package/dist/src/engine/state/ga/calculator.js.map +1 -0
  246. package/dist/src/engine/state/il/calculator.d.ts +3 -0
  247. package/dist/src/engine/state/il/calculator.js +49 -0
  248. package/dist/src/engine/state/il/calculator.js.map +1 -0
  249. package/dist/src/engine/state/mi/calculator.d.ts +3 -0
  250. package/dist/src/engine/state/mi/calculator.js +60 -0
  251. package/dist/src/engine/state/mi/calculator.js.map +1 -0
  252. package/dist/src/engine/state/nc/calculator.d.ts +3 -0
  253. package/dist/src/engine/state/nc/calculator.js +54 -0
  254. package/dist/src/engine/state/nc/calculator.js.map +1 -0
  255. package/dist/src/engine/state/nj/calculator.d.ts +3 -0
  256. package/dist/src/engine/state/nj/calculator.js +90 -0
  257. package/dist/src/engine/state/nj/calculator.js.map +1 -0
  258. package/dist/src/engine/state/ny/calculator.d.ts +3 -0
  259. package/dist/src/engine/state/ny/calculator.js +103 -0
  260. package/dist/src/engine/state/ny/calculator.js.map +1 -0
  261. package/dist/src/engine/state/oh/calculator.d.ts +3 -0
  262. package/dist/src/engine/state/oh/calculator.js +79 -0
  263. package/dist/src/engine/state/oh/calculator.js.map +1 -0
  264. package/dist/src/engine/state/pa/calculator.d.ts +3 -0
  265. package/dist/src/engine/state/pa/calculator.js +58 -0
  266. package/dist/src/engine/state/pa/calculator.js.map +1 -0
  267. package/dist/src/engine/state/registry.d.ts +9 -0
  268. package/dist/src/engine/state/registry.js +67 -0
  269. package/dist/src/engine/state/registry.js.map +1 -0
  270. package/dist/src/engine/state/types.d.ts +57 -0
  271. package/dist/src/engine/state/types.js +2 -0
  272. package/dist/src/engine/state/types.js.map +1 -0
  273. package/dist/src/engine/state/va/calculator.d.ts +3 -0
  274. package/dist/src/engine/state/va/calculator.js +76 -0
  275. package/dist/src/engine/state/va/calculator.js.map +1 -0
  276. package/dist/src/engine/suggestions/missed-deductions.d.ts +43 -0
  277. package/dist/src/engine/suggestions/missed-deductions.js +128 -0
  278. package/dist/src/engine/suggestions/missed-deductions.js.map +1 -0
  279. package/dist/src/engine/tax-calculator.d.ts +55 -0
  280. package/dist/src/engine/tax-calculator.js +156 -0
  281. package/dist/src/engine/tax-calculator.js.map +1 -0
  282. package/dist/src/engine/tax-constants-2025.d.ts +56 -0
  283. package/dist/src/engine/tax-constants-2025.js +138 -0
  284. package/dist/src/engine/tax-constants-2025.js.map +1 -0
  285. package/dist/src/engine/types.d.ts +77 -0
  286. package/dist/src/engine/types.js +2 -0
  287. package/dist/src/engine/types.js.map +1 -0
  288. package/dist/src/engine/va-math.d.ts +24 -0
  289. package/dist/src/engine/va-math.js +90 -0
  290. package/dist/src/engine/va-math.js.map +1 -0
  291. package/dist/src/engine/validator.d.ts +7 -0
  292. package/dist/src/engine/validator.js +108 -0
  293. package/dist/src/engine/validator.js.map +1 -0
  294. package/dist/src/glossary/entries/healthcare.d.ts +2 -0
  295. package/dist/src/glossary/entries/healthcare.js +78 -0
  296. package/dist/src/glossary/entries/healthcare.js.map +1 -0
  297. package/dist/src/glossary/entries/immigration.d.ts +2 -0
  298. package/dist/src/glossary/entries/immigration.js +112 -0
  299. package/dist/src/glossary/entries/immigration.js.map +1 -0
  300. package/dist/src/glossary/entries/tax.d.ts +2 -0
  301. package/dist/src/glossary/entries/tax.js +149 -0
  302. package/dist/src/glossary/entries/tax.js.map +1 -0
  303. package/dist/src/glossary/entries/unemployment.d.ts +2 -0
  304. package/dist/src/glossary/entries/unemployment.js +52 -0
  305. package/dist/src/glossary/entries/unemployment.js.map +1 -0
  306. package/dist/src/glossary/index.d.ts +19 -0
  307. package/dist/src/glossary/index.js +39 -0
  308. package/dist/src/glossary/index.js.map +1 -0
  309. package/dist/src/i18n/index.d.ts +21 -0
  310. package/dist/src/i18n/index.js +92 -0
  311. package/dist/src/i18n/index.js.map +1 -0
  312. package/dist/src/mcp/result.d.ts +3 -0
  313. package/dist/src/mcp/result.js +7 -0
  314. package/dist/src/mcp/result.js.map +1 -0
  315. package/dist/src/mcp/return-bundle.d.ts +19 -0
  316. package/dist/src/mcp/return-bundle.js +49 -0
  317. package/dist/src/mcp/return-bundle.js.map +1 -0
  318. package/dist/src/mcp/shared.d.ts +49102 -0
  319. package/dist/src/mcp/shared.js +354 -0
  320. package/dist/src/mcp/shared.js.map +1 -0
  321. package/dist/src/mcp/tools/build-packet.d.ts +7 -0
  322. package/dist/src/mcp/tools/build-packet.js +23 -0
  323. package/dist/src/mcp/tools/build-packet.js.map +1 -0
  324. package/dist/src/mcp/tools/calculate-tax.d.ts +40 -0
  325. package/dist/src/mcp/tools/calculate-tax.js +17 -0
  326. package/dist/src/mcp/tools/calculate-tax.js.map +1 -0
  327. package/dist/src/mcp/tools/deadlines.d.ts +7 -0
  328. package/dist/src/mcp/tools/deadlines.js +23 -0
  329. package/dist/src/mcp/tools/deadlines.js.map +1 -0
  330. package/dist/src/mcp/tools/describe-form.d.ts +14 -0
  331. package/dist/src/mcp/tools/describe-form.js +23 -0
  332. package/dist/src/mcp/tools/describe-form.js.map +1 -0
  333. package/dist/src/mcp/tools/describe-workflow.d.ts +6 -0
  334. package/dist/src/mcp/tools/describe-workflow.js +16 -0
  335. package/dist/src/mcp/tools/describe-workflow.js.map +1 -0
  336. package/dist/src/mcp/tools/explain-flag.d.ts +7 -0
  337. package/dist/src/mcp/tools/explain-flag.js +19 -0
  338. package/dist/src/mcp/tools/explain-flag.js.map +1 -0
  339. package/dist/src/mcp/tools/extract-document.d.ts +13 -0
  340. package/dist/src/mcp/tools/extract-document.js +20 -0
  341. package/dist/src/mcp/tools/extract-document.js.map +1 -0
  342. package/dist/src/mcp/tools/fees.d.ts +7 -0
  343. package/dist/src/mcp/tools/fees.js +24 -0
  344. package/dist/src/mcp/tools/fees.js.map +1 -0
  345. package/dist/src/mcp/tools/fill-form.d.ts +56 -0
  346. package/dist/src/mcp/tools/fill-form.js +47 -0
  347. package/dist/src/mcp/tools/fill-form.js.map +1 -0
  348. package/dist/src/mcp/tools/fill-workflow.d.ts +7 -0
  349. package/dist/src/mcp/tools/fill-workflow.js +24 -0
  350. package/dist/src/mcp/tools/fill-workflow.js.map +1 -0
  351. package/dist/src/mcp/tools/glossary.d.ts +8 -0
  352. package/dist/src/mcp/tools/glossary.js +54 -0
  353. package/dist/src/mcp/tools/glossary.js.map +1 -0
  354. package/dist/src/mcp/tools/list-forms.d.ts +6 -0
  355. package/dist/src/mcp/tools/list-forms.js +15 -0
  356. package/dist/src/mcp/tools/list-forms.js.map +1 -0
  357. package/dist/src/mcp/tools/list-workflows.d.ts +6 -0
  358. package/dist/src/mcp/tools/list-workflows.js +16 -0
  359. package/dist/src/mcp/tools/list-workflows.js.map +1 -0
  360. package/dist/src/mcp/tools/plan-life-event.d.ts +59 -0
  361. package/dist/src/mcp/tools/plan-life-event.js +41 -0
  362. package/dist/src/mcp/tools/plan-life-event.js.map +1 -0
  363. package/dist/src/mcp/tools/review-form.d.ts +40 -0
  364. package/dist/src/mcp/tools/review-form.js +26 -0
  365. package/dist/src/mcp/tools/review-form.js.map +1 -0
  366. package/dist/src/mcp/tools/review-workflow.d.ts +7 -0
  367. package/dist/src/mcp/tools/review-workflow.js +27 -0
  368. package/dist/src/mcp/tools/review-workflow.js.map +1 -0
  369. package/dist/src/mcp/tools/screen-eligibility.d.ts +53 -0
  370. package/dist/src/mcp/tools/screen-eligibility.js +44 -0
  371. package/dist/src/mcp/tools/screen-eligibility.js.map +1 -0
  372. package/dist/src/mcp/tools/start-workflow.d.ts +6 -0
  373. package/dist/src/mcp/tools/start-workflow.js +17 -0
  374. package/dist/src/mcp/tools/start-workflow.js.map +1 -0
  375. package/dist/src/mcp/tools/validate-form.d.ts +48 -0
  376. package/dist/src/mcp/tools/validate-form.js +30 -0
  377. package/dist/src/mcp/tools/validate-form.js.map +1 -0
  378. package/dist/src/mcp/tools/validate-workflow.d.ts +7 -0
  379. package/dist/src/mcp/tools/validate-workflow.js +24 -0
  380. package/dist/src/mcp/tools/validate-workflow.js.map +1 -0
  381. package/dist/src/pdf/batch.d.ts +8 -0
  382. package/dist/src/pdf/batch.js +15 -0
  383. package/dist/src/pdf/batch.js.map +1 -0
  384. package/dist/src/pdf/merge.d.ts +10 -0
  385. package/dist/src/pdf/merge.js +62 -0
  386. package/dist/src/pdf/merge.js.map +1 -0
  387. package/dist/src/pdf/ocr.d.ts +22 -0
  388. package/dist/src/pdf/ocr.js +52 -0
  389. package/dist/src/pdf/ocr.js.map +1 -0
  390. package/dist/src/pdf/reader.d.ts +2 -0
  391. package/dist/src/pdf/reader.js +354 -0
  392. package/dist/src/pdf/reader.js.map +1 -0
  393. package/dist/src/pdf/shared.d.ts +89 -0
  394. package/dist/src/pdf/shared.js +137 -0
  395. package/dist/src/pdf/shared.js.map +1 -0
  396. package/dist/src/pdf/writer.d.ts +7 -0
  397. package/dist/src/pdf/writer.js +311 -0
  398. package/dist/src/pdf/writer.js.map +1 -0
  399. package/dist/src/plugins/loader.d.ts +15 -0
  400. package/dist/src/plugins/loader.js +86 -0
  401. package/dist/src/plugins/loader.js.map +1 -0
  402. package/dist/src/plugins/sandbox.d.ts +14 -0
  403. package/dist/src/plugins/sandbox.js +88 -0
  404. package/dist/src/plugins/sandbox.js.map +1 -0
  405. package/dist/src/plugins/types.d.ts +17 -0
  406. package/dist/src/plugins/types.js +13 -0
  407. package/dist/src/plugins/types.js.map +1 -0
  408. package/dist/src/schemas/2025/f1040.d.ts +127 -0
  409. package/dist/src/schemas/2025/f1040.js +104 -0
  410. package/dist/src/schemas/2025/f1040.js.map +1 -0
  411. package/dist/src/schemas/2025/f1099-int.d.ts +53 -0
  412. package/dist/src/schemas/2025/f1099-int.js +51 -0
  413. package/dist/src/schemas/2025/f1099-int.js.map +1 -0
  414. package/dist/src/schemas/2025/f1099-nec.d.ts +47 -0
  415. package/dist/src/schemas/2025/f1099-nec.js +45 -0
  416. package/dist/src/schemas/2025/f1099-nec.js.map +1 -0
  417. package/dist/src/schemas/2025/form-8949.d.ts +46 -0
  418. package/dist/src/schemas/2025/form-8949.js +71 -0
  419. package/dist/src/schemas/2025/form-8949.js.map +1 -0
  420. package/dist/src/schemas/2025/index.d.ts +1004 -0
  421. package/dist/src/schemas/2025/index.js +60 -0
  422. package/dist/src/schemas/2025/index.js.map +1 -0
  423. package/dist/src/schemas/2025/schedule-1.d.ts +44 -0
  424. package/dist/src/schemas/2025/schedule-1.js +56 -0
  425. package/dist/src/schemas/2025/schedule-1.js.map +1 -0
  426. package/dist/src/schemas/2025/schedule-b.d.ts +32 -0
  427. package/dist/src/schemas/2025/schedule-b.js +53 -0
  428. package/dist/src/schemas/2025/schedule-b.js.map +1 -0
  429. package/dist/src/schemas/2025/schedule-c.d.ts +58 -0
  430. package/dist/src/schemas/2025/schedule-c.js +46 -0
  431. package/dist/src/schemas/2025/schedule-c.js.map +1 -0
  432. package/dist/src/schemas/2025/schedule-d.d.ts +36 -0
  433. package/dist/src/schemas/2025/schedule-d.js +52 -0
  434. package/dist/src/schemas/2025/schedule-d.js.map +1 -0
  435. package/dist/src/schemas/2025/shared.d.ts +98 -0
  436. package/dist/src/schemas/2025/shared.js +161 -0
  437. package/dist/src/schemas/2025/shared.js.map +1 -0
  438. package/dist/src/schemas/2025/w2.d.ts +57 -0
  439. package/dist/src/schemas/2025/w2.js +62 -0
  440. package/dist/src/schemas/2025/w2.js.map +1 -0
  441. package/dist/src/storage/drafts.d.ts +25 -0
  442. package/dist/src/storage/drafts.js +117 -0
  443. package/dist/src/storage/drafts.js.map +1 -0
  444. package/dist/src/storage/paths.d.ts +15 -0
  445. package/dist/src/storage/paths.js +33 -0
  446. package/dist/src/storage/paths.js.map +1 -0
  447. package/dist/src/storage/profile.d.ts +17 -0
  448. package/dist/src/storage/profile.js +59 -0
  449. package/dist/src/storage/profile.js.map +1 -0
  450. package/dist/src/storage/vault.d.ts +38 -0
  451. package/dist/src/storage/vault.js +187 -0
  452. package/dist/src/storage/vault.js.map +1 -0
  453. package/dist/src/testing/synthetic.d.ts +13 -0
  454. package/dist/src/testing/synthetic.js +164 -0
  455. package/dist/src/testing/synthetic.js.map +1 -0
  456. package/dist/src/types.d.ts +362 -0
  457. package/dist/src/types.js +2 -0
  458. package/dist/src/types.js.map +1 -0
  459. package/dist/src/workflows/deadlines.d.ts +13 -0
  460. package/dist/src/workflows/deadlines.js +88 -0
  461. package/dist/src/workflows/deadlines.js.map +1 -0
  462. package/dist/src/workflows/domains/benefits.d.ts +409 -0
  463. package/dist/src/workflows/domains/benefits.js +744 -0
  464. package/dist/src/workflows/domains/benefits.js.map +1 -0
  465. package/dist/src/workflows/domains/business.d.ts +65 -0
  466. package/dist/src/workflows/domains/business.js +76 -0
  467. package/dist/src/workflows/domains/business.js.map +1 -0
  468. package/dist/src/workflows/domains/education.d.ts +251 -0
  469. package/dist/src/workflows/domains/education.js +504 -0
  470. package/dist/src/workflows/domains/education.js.map +1 -0
  471. package/dist/src/workflows/domains/estate.d.ts +217 -0
  472. package/dist/src/workflows/domains/estate.js +407 -0
  473. package/dist/src/workflows/domains/estate.js.map +1 -0
  474. package/dist/src/workflows/domains/healthcare-ext.d.ts +88 -0
  475. package/dist/src/workflows/domains/healthcare-ext.js +150 -0
  476. package/dist/src/workflows/domains/healthcare-ext.js.map +1 -0
  477. package/dist/src/workflows/domains/healthcare.d.ts +92 -0
  478. package/dist/src/workflows/domains/healthcare.js +126 -0
  479. package/dist/src/workflows/domains/healthcare.js.map +1 -0
  480. package/dist/src/workflows/domains/identity-domain.d.ts +291 -0
  481. package/dist/src/workflows/domains/identity-domain.js +541 -0
  482. package/dist/src/workflows/domains/identity-domain.js.map +1 -0
  483. package/dist/src/workflows/domains/immigration-ext.d.ts +282 -0
  484. package/dist/src/workflows/domains/immigration-ext.js +590 -0
  485. package/dist/src/workflows/domains/immigration-ext.js.map +1 -0
  486. package/dist/src/workflows/domains/immigration.d.ts +121 -0
  487. package/dist/src/workflows/domains/immigration.js +152 -0
  488. package/dist/src/workflows/domains/immigration.js.map +1 -0
  489. package/dist/src/workflows/domains/legal.d.ts +235 -0
  490. package/dist/src/workflows/domains/legal.js +380 -0
  491. package/dist/src/workflows/domains/legal.js.map +1 -0
  492. package/dist/src/workflows/domains/permits.d.ts +65 -0
  493. package/dist/src/workflows/domains/permits.js +74 -0
  494. package/dist/src/workflows/domains/permits.js.map +1 -0
  495. package/dist/src/workflows/domains/retirement.d.ts +59 -0
  496. package/dist/src/workflows/domains/retirement.js +155 -0
  497. package/dist/src/workflows/domains/retirement.js.map +1 -0
  498. package/dist/src/workflows/domains/tax.d.ts +133 -0
  499. package/dist/src/workflows/domains/tax.js +187 -0
  500. package/dist/src/workflows/domains/tax.js.map +1 -0
  501. package/dist/src/workflows/domains/unemployment.d.ts +105 -0
  502. package/dist/src/workflows/domains/unemployment.js +122 -0
  503. package/dist/src/workflows/domains/unemployment.js.map +1 -0
  504. package/dist/src/workflows/domains/veterans.d.ts +189 -0
  505. package/dist/src/workflows/domains/veterans.js +380 -0
  506. package/dist/src/workflows/domains/veterans.js.map +1 -0
  507. package/dist/src/workflows/fees.d.ts +15 -0
  508. package/dist/src/workflows/fees.js +93 -0
  509. package/dist/src/workflows/fees.js.map +1 -0
  510. package/dist/src/workflows/helpers.d.ts +8 -0
  511. package/dist/src/workflows/helpers.js +66 -0
  512. package/dist/src/workflows/helpers.js.map +1 -0
  513. package/dist/src/workflows/io.d.ts +3 -0
  514. package/dist/src/workflows/io.js +38 -0
  515. package/dist/src/workflows/io.js.map +1 -0
  516. package/dist/src/workflows/registry.d.ts +51355 -0
  517. package/dist/src/workflows/registry.js +140 -0
  518. package/dist/src/workflows/registry.js.map +1 -0
  519. package/dist/src/workflows/schemas/benefits.d.ts +78 -0
  520. package/dist/src/workflows/schemas/benefits.js +91 -0
  521. package/dist/src/workflows/schemas/benefits.js.map +1 -0
  522. package/dist/src/workflows/schemas/common.d.ts +27 -0
  523. package/dist/src/workflows/schemas/common.js +28 -0
  524. package/dist/src/workflows/schemas/common.js.map +1 -0
  525. package/dist/src/workflows/schemas/education.d.ts +70 -0
  526. package/dist/src/workflows/schemas/education.js +85 -0
  527. package/dist/src/workflows/schemas/education.js.map +1 -0
  528. package/dist/src/workflows/schemas/estate.d.ts +64 -0
  529. package/dist/src/workflows/schemas/estate.js +85 -0
  530. package/dist/src/workflows/schemas/estate.js.map +1 -0
  531. package/dist/src/workflows/schemas/healthcare-ext.d.ts +15 -0
  532. package/dist/src/workflows/schemas/healthcare-ext.js +17 -0
  533. package/dist/src/workflows/schemas/healthcare-ext.js.map +1 -0
  534. package/dist/src/workflows/schemas/healthcare.d.ts +33 -0
  535. package/dist/src/workflows/schemas/healthcare.js +20 -0
  536. package/dist/src/workflows/schemas/healthcare.js.map +1 -0
  537. package/dist/src/workflows/schemas/identity-domain.d.ts +64 -0
  538. package/dist/src/workflows/schemas/identity-domain.js +87 -0
  539. package/dist/src/workflows/schemas/identity-domain.js.map +1 -0
  540. package/dist/src/workflows/schemas/immigration-ext.d.ts +63 -0
  541. package/dist/src/workflows/schemas/immigration-ext.js +58 -0
  542. package/dist/src/workflows/schemas/immigration-ext.js.map +1 -0
  543. package/dist/src/workflows/schemas/immigration.d.ts +48 -0
  544. package/dist/src/workflows/schemas/immigration.js +27 -0
  545. package/dist/src/workflows/schemas/immigration.js.map +1 -0
  546. package/dist/src/workflows/schemas/legal.d.ts +45 -0
  547. package/dist/src/workflows/schemas/legal.js +45 -0
  548. package/dist/src/workflows/schemas/legal.js.map +1 -0
  549. package/dist/src/workflows/schemas/planning.d.ts +23 -0
  550. package/dist/src/workflows/schemas/planning.js +15 -0
  551. package/dist/src/workflows/schemas/planning.js.map +1 -0
  552. package/dist/src/workflows/schemas/retirement.d.ts +14 -0
  553. package/dist/src/workflows/schemas/retirement.js +22 -0
  554. package/dist/src/workflows/schemas/retirement.js.map +1 -0
  555. package/dist/src/workflows/schemas/tax.d.ts +58 -0
  556. package/dist/src/workflows/schemas/tax.js +51 -0
  557. package/dist/src/workflows/schemas/tax.js.map +1 -0
  558. package/dist/src/workflows/schemas/unemployment.d.ts +33 -0
  559. package/dist/src/workflows/schemas/unemployment.js +19 -0
  560. package/dist/src/workflows/schemas/unemployment.js.map +1 -0
  561. package/dist/src/workflows/schemas/veterans.d.ts +47 -0
  562. package/dist/src/workflows/schemas/veterans.js +51 -0
  563. package/dist/src/workflows/schemas/veterans.js.map +1 -0
  564. package/dist/src/workflows/types.d.ts +9 -0
  565. package/dist/src/workflows/types.js +2 -0
  566. package/dist/src/workflows/types.js.map +1 -0
  567. package/dist/xmcp.config.d.ts +3 -0
  568. package/dist/xmcp.config.js +29 -0
  569. package/dist/xmcp.config.js.map +1 -0
  570. package/llms.txt +48 -0
  571. package/package.json +82 -0
@@ -0,0 +1,504 @@
1
+ import { buildEvidenceItem, buildGenericSummary, currency, genericArtifacts, makeCheck, makeFlag, } from "../helpers.js";
2
+ import { fafsaInputSchema, studentLoanRepaymentInputSchema, plan529InputSchema, } from "../schemas/education.js";
3
+ // ---------------------------------------------------------------------------
4
+ // FPL 2025 values for IDR calculations
5
+ // ---------------------------------------------------------------------------
6
+ function federalPovertyLevel(householdSize) {
7
+ return 15_650 + Math.max(0, householdSize - 1) * 5_580;
8
+ }
9
+ function discretionaryIncome(annualIncome, householdSize) {
10
+ return Math.max(0, annualIncome - 1.5 * federalPovertyLevel(householdSize));
11
+ }
12
+ /** Standard amortisation payment over `months` at monthly rate `r`. */
13
+ function amortise(principal, annualRate, months) {
14
+ if (principal <= 0)
15
+ return 0;
16
+ const r = annualRate / 12;
17
+ if (r === 0)
18
+ return principal / months;
19
+ return (principal * r * Math.pow(1 + r, months)) / (Math.pow(1 + r, months) - 1);
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // education/fafsa
23
+ // ---------------------------------------------------------------------------
24
+ const fafsaWorkflow = {
25
+ summary: {
26
+ id: "education/fafsa",
27
+ domain: "education",
28
+ title: "FAFSA readiness planner",
29
+ summary: "Organise student identity, dependency status, and financial evidence for FAFSA filing.",
30
+ status: "active",
31
+ audience: "individual",
32
+ tags: ["fafsa", "financial-aid", "education", "student"],
33
+ },
34
+ inputSchema: fafsaInputSchema,
35
+ starterData: {
36
+ studentInfo: {
37
+ name: "",
38
+ dob: "",
39
+ ssn: "000-00-0000",
40
+ citizenshipStatus: "us_citizen",
41
+ },
42
+ dependencyStatus: "dependent",
43
+ studentIncome: 0,
44
+ studentAssets: 0,
45
+ schoolCodes: [],
46
+ filingStatus: "single",
47
+ hasCompletedTaxReturn: false,
48
+ },
49
+ sections: [
50
+ {
51
+ id: "student-identity",
52
+ title: "Student Identity",
53
+ fields: [
54
+ { key: "studentInfo.name", label: "Student full name", type: "text" },
55
+ { key: "studentInfo.dob", label: "Date of birth", type: "date" },
56
+ { key: "studentInfo.ssn", label: "SSN", type: "text" },
57
+ {
58
+ key: "studentInfo.citizenshipStatus",
59
+ label: "Citizenship status",
60
+ type: "select",
61
+ options: [
62
+ { label: "US Citizen", value: "us_citizen" },
63
+ { label: "Eligible non-citizen", value: "eligible_noncitizen" },
64
+ { label: "Other", value: "other" },
65
+ ],
66
+ },
67
+ ],
68
+ },
69
+ {
70
+ id: "dependency-status",
71
+ title: "Dependency Status",
72
+ fields: [
73
+ {
74
+ key: "dependencyStatus",
75
+ label: "Dependency status",
76
+ type: "select",
77
+ options: [
78
+ { label: "Dependent", value: "dependent" },
79
+ { label: "Independent", value: "independent" },
80
+ ],
81
+ },
82
+ ],
83
+ },
84
+ {
85
+ id: "financial-information",
86
+ title: "Financial Information",
87
+ fields: [
88
+ { key: "studentIncome", label: "Student income", type: "currency" },
89
+ { key: "studentAssets", label: "Student assets", type: "currency" },
90
+ {
91
+ key: "filingStatus",
92
+ label: "Filing status",
93
+ type: "select",
94
+ options: [
95
+ { label: "Single", value: "single" },
96
+ { label: "Married filing jointly", value: "married_filing_jointly" },
97
+ { label: "Head of household", value: "head_of_household" },
98
+ ],
99
+ },
100
+ { key: "hasCompletedTaxReturn", label: "Tax return completed", type: "confirm" },
101
+ ],
102
+ },
103
+ {
104
+ id: "school-selection",
105
+ title: "School Selection",
106
+ fields: [
107
+ {
108
+ key: "schoolCodes",
109
+ label: "School codes",
110
+ type: "text",
111
+ helpText: "Comma-separated federal school codes.",
112
+ },
113
+ ],
114
+ },
115
+ ],
116
+ buildBundle(input) {
117
+ const evidence = [
118
+ buildEvidenceItem("tax-return", "Federal tax return (IRS DRT preferred)", true, input.hasCompletedTaxReturn),
119
+ buildEvidenceItem("bank-statements", "Bank statements for asset verification", true, input.studentAssets > 0),
120
+ buildEvidenceItem("w2", "W-2 forms", input.studentIncome > 0, input.studentIncome > 0),
121
+ buildEvidenceItem("citizenship-proof", "Birth certificate or citizenship proof", true, input.studentInfo.citizenshipStatus === "us_citizen", input.studentInfo.citizenshipStatus === "other"
122
+ ? "Non-eligible citizenship status may prevent FAFSA filing."
123
+ : undefined),
124
+ ];
125
+ if (input.dependencyStatus === "dependent" && input.parentInfo) {
126
+ evidence.push(buildEvidenceItem("parent-tax-return", "Parent tax return", true, input.hasCompletedTaxReturn), buildEvidenceItem("parent-bank-statements", "Parent bank statements", true, input.parentInfo.assets > 0));
127
+ }
128
+ const flags = [];
129
+ // High assets with low income is a review trigger
130
+ const totalAssets = input.studentAssets + (input.parentInfo?.assets ?? 0);
131
+ const totalIncome = input.studentIncome + (input.parentInfo?.income ?? 0);
132
+ if (totalAssets > 50_000 && totalIncome < 30_000) {
133
+ flags.push(makeFlag("studentAssets", "review", "High assets relative to low income may trigger verification — ensure documentation is thorough."));
134
+ }
135
+ // Dependency override situations
136
+ if (input.dependencyStatus === "independent" &&
137
+ input.studentIncome < 10_000 &&
138
+ input.studentAssets < 5_000) {
139
+ flags.push(makeFlag("dependencyStatus", "review", "Independent status with very low income/assets — school may request dependency override documentation."));
140
+ }
141
+ if (input.studentInfo.citizenshipStatus === "other") {
142
+ flags.push(makeFlag("studentInfo.citizenshipStatus", "error", "Only US citizens and eligible non-citizens may file FAFSA."));
143
+ }
144
+ // Simplified SAI calculation
145
+ // Real formula is vastly more complex; this is a directional estimate
146
+ const incomeContribution = totalIncome * 0.22;
147
+ const assetContribution = totalAssets * 0.05;
148
+ const estimatedSAI = Math.max(-1_500, Math.round(incomeContribution + assetContribution - 6_000));
149
+ const checks = [
150
+ makeCheck("tax-return", "Tax return available", input.hasCompletedTaxReturn, "warning", "Complete your federal tax return before filing FAFSA for best accuracy."),
151
+ makeCheck("school-codes", "At least one school selected", input.schoolCodes.length > 0, "error", "Add at least one school code so aid can be sent."),
152
+ makeCheck("citizenship", "Eligible citizenship status", input.studentInfo.citizenshipStatus !== "other", "error", "FAFSA requires US citizenship or eligible non-citizen status."),
153
+ ];
154
+ return {
155
+ workflowId: "education/fafsa",
156
+ domain: "education",
157
+ title: "FAFSA readiness planner",
158
+ summary: "FAFSA readiness bundle. PigeonGov does not submit your FAFSA.",
159
+ applicant: undefined,
160
+ household: input.dependencyStatus === "dependent" && input.parentInfo
161
+ ? [{ name: "Parent/guardian", relationship: "parent", notes: `Household size: ${input.parentInfo.householdSize}` }]
162
+ : [],
163
+ evidence,
164
+ answers: input,
165
+ derived: {
166
+ estimatedSAI,
167
+ totalIncome,
168
+ totalAssets,
169
+ schoolCount: input.schoolCodes.length,
170
+ dependencyStatus: input.dependencyStatus,
171
+ },
172
+ validation: { checks, flaggedFields: flags },
173
+ review: buildGenericSummary("FAFSA readiness", `estimated SAI: ${currency(estimatedSAI)}`, evidence, flags, [
174
+ `${evidence.filter((e) => e.status === "provided").length} evidence items provided, estimated SAI: ${currency(estimatedSAI)}.`,
175
+ `Schools selected: ${input.schoolCodes.length}.`,
176
+ `Dependency status: ${input.dependencyStatus}.`,
177
+ ]),
178
+ outputArtifacts: genericArtifacts("education-fafsa", evidence),
179
+ provenance: ["workflow-registry"],
180
+ };
181
+ },
182
+ };
183
+ function computeRepaymentPlans(input) {
184
+ const federalLoans = input.loans.filter((l) => l.type === "federal");
185
+ const totalFederalBalance = federalLoans.reduce((s, l) => s + l.balance, 0);
186
+ const weightedRate = totalFederalBalance > 0
187
+ ? federalLoans.reduce((s, l) => s + l.rate * l.balance, 0) / totalFederalBalance
188
+ : 0.05;
189
+ const di = discretionaryIncome(input.annualIncome, input.householdSize);
190
+ const monthlyDI = di / 12;
191
+ const plans = [];
192
+ // Standard 10-year (120 month) amortisation
193
+ const standardMonthly = amortise(totalFederalBalance, weightedRate, 120);
194
+ plans.push({
195
+ name: "Standard",
196
+ monthlyPayment: Math.round(standardMonthly * 100) / 100,
197
+ totalPaid: Math.round(standardMonthly * 120 * 100) / 100,
198
+ termMonths: 120,
199
+ eligible: totalFederalBalance > 0,
200
+ });
201
+ // SAVE: 10% of discretionary income, 20-25 year forgiveness (use 240 for undergrad)
202
+ const saveMonthly = Math.round(monthlyDI * 0.1 * 100) / 100;
203
+ const saveTerm = 240;
204
+ plans.push({
205
+ name: "SAVE",
206
+ monthlyPayment: saveMonthly,
207
+ totalPaid: Math.round(saveMonthly * saveTerm * 100) / 100,
208
+ termMonths: saveTerm,
209
+ eligible: totalFederalBalance > 0,
210
+ note: "Replaces REPAYE. Lowest payment for most borrowers.",
211
+ });
212
+ // PAYE: 10% of discretionary income, 20-year forgiveness
213
+ const payeMonthly = Math.round(monthlyDI * 0.1 * 100) / 100;
214
+ const payeTerm = 240;
215
+ plans.push({
216
+ name: "PAYE",
217
+ monthlyPayment: payeMonthly,
218
+ totalPaid: Math.round(payeMonthly * payeTerm * 100) / 100,
219
+ termMonths: payeTerm,
220
+ eligible: totalFederalBalance > 0,
221
+ note: "Capped at Standard payment amount.",
222
+ });
223
+ // IBR: 15% of discretionary income, 25-year forgiveness
224
+ const ibrMonthly = Math.round(monthlyDI * 0.15 * 100) / 100;
225
+ const ibrTerm = 300;
226
+ plans.push({
227
+ name: "IBR",
228
+ monthlyPayment: ibrMonthly,
229
+ totalPaid: Math.round(ibrMonthly * ibrTerm * 100) / 100,
230
+ termMonths: ibrTerm,
231
+ eligible: totalFederalBalance > 0,
232
+ note: "New borrowers after 2014 get 10% / 20-year terms.",
233
+ });
234
+ // ICR: 20% of discretionary income or fixed 12-year payment, whichever is lower
235
+ const icrOptionA = Math.round(monthlyDI * 0.2 * 100) / 100;
236
+ const icrOptionB = amortise(totalFederalBalance, weightedRate, 144);
237
+ const icrMonthly = Math.round(Math.min(icrOptionA, icrOptionB) * 100) / 100;
238
+ const icrTerm = 300;
239
+ plans.push({
240
+ name: "ICR",
241
+ monthlyPayment: icrMonthly,
242
+ totalPaid: Math.round(icrMonthly * icrTerm * 100) / 100,
243
+ termMonths: icrTerm,
244
+ eligible: totalFederalBalance > 0,
245
+ note: "Only IDR plan available for Parent PLUS (via consolidation).",
246
+ });
247
+ return plans;
248
+ }
249
+ const studentLoanRepaymentWorkflow = {
250
+ summary: {
251
+ id: "education/student-loan-repayment",
252
+ domain: "education",
253
+ title: "Student loan repayment planner",
254
+ summary: "Compare IDR plans (SAVE, PAYE, IBR, ICR) and standard repayment across your federal loan portfolio.",
255
+ status: "active",
256
+ audience: "individual",
257
+ tags: ["student-loans", "idr", "pslf", "repayment", "education"],
258
+ },
259
+ inputSchema: studentLoanRepaymentInputSchema,
260
+ starterData: {
261
+ loans: [
262
+ {
263
+ servicer: "",
264
+ balance: 0,
265
+ rate: 0.05,
266
+ type: "federal",
267
+ originalAmount: 0,
268
+ },
269
+ ],
270
+ annualIncome: 0,
271
+ filingStatus: "single",
272
+ householdSize: 1,
273
+ employerType: "private",
274
+ monthsOfQualifyingPayments: 0,
275
+ },
276
+ sections: [
277
+ {
278
+ id: "loan-inventory",
279
+ title: "Loan Inventory",
280
+ fields: [
281
+ { key: "loans", label: "Loan details", type: "textarea", helpText: "Enter each loan's servicer, balance, rate, and type." },
282
+ ],
283
+ },
284
+ {
285
+ id: "income-employment",
286
+ title: "Income & Employment",
287
+ fields: [
288
+ { key: "annualIncome", label: "Annual income", type: "currency" },
289
+ {
290
+ key: "filingStatus",
291
+ label: "Filing status",
292
+ type: "select",
293
+ options: [
294
+ { label: "Single", value: "single" },
295
+ { label: "Married filing jointly", value: "married_filing_jointly" },
296
+ { label: "Married filing separately", value: "married_filing_separately" },
297
+ ],
298
+ },
299
+ { key: "householdSize", label: "Household size", type: "number" },
300
+ {
301
+ key: "employerType",
302
+ label: "Employer type",
303
+ type: "select",
304
+ options: [
305
+ { label: "Public sector", value: "public" },
306
+ { label: "Private sector", value: "private" },
307
+ { label: "Non-profit", value: "nonprofit" },
308
+ ],
309
+ },
310
+ {
311
+ key: "monthsOfQualifyingPayments",
312
+ label: "Months of qualifying PSLF payments",
313
+ type: "number",
314
+ },
315
+ ],
316
+ },
317
+ {
318
+ id: "repayment-goals",
319
+ title: "Repayment Goals",
320
+ description: "PigeonGov will compare repayment plans automatically.",
321
+ fields: [],
322
+ },
323
+ ],
324
+ buildBundle(input) {
325
+ const federalLoans = input.loans.filter((l) => l.type === "federal");
326
+ const privateLoans = input.loans.filter((l) => l.type === "private");
327
+ const totalBalance = input.loans.reduce((s, l) => s + l.balance, 0);
328
+ const totalFederalBalance = federalLoans.reduce((s, l) => s + l.balance, 0);
329
+ const evidence = [
330
+ buildEvidenceItem("loan-statements", "Loan statements", true, totalBalance > 0),
331
+ buildEvidenceItem("income-verification", "Income verification (pay stubs / tax return)", true, input.annualIncome > 0),
332
+ buildEvidenceItem("employer-certification", "Employer certification for PSLF (ECF)", input.employerType !== "private", input.employerType !== "private" && input.monthsOfQualifyingPayments > 0, input.employerType !== "private" ? "Submit ECF annually to track PSLF progress." : undefined),
333
+ ];
334
+ const flags = [];
335
+ if (privateLoans.length > 0) {
336
+ flags.push(makeFlag("loans", "warning", `${privateLoans.length} private loan(s) totalling ${currency(privateLoans.reduce((s, l) => s + l.balance, 0))} are not eligible for IDR or PSLF.`));
337
+ }
338
+ const pslf = input.employerType === "public" || input.employerType === "nonprofit";
339
+ if (!pslf && input.monthsOfQualifyingPayments > 0) {
340
+ flags.push(makeFlag("employerType", "warning", "PSLF requires employment with a public-sector or non-profit employer. Current employer type does not qualify."));
341
+ }
342
+ const plans = computeRepaymentPlans(input);
343
+ const eligiblePlans = plans.filter((p) => p.eligible);
344
+ const lowestPayment = eligiblePlans.length > 0
345
+ ? eligiblePlans.reduce((min, p) => (p.monthlyPayment < min.monthlyPayment ? p : min), eligiblePlans[0])
346
+ : null;
347
+ const pslMonthsRemaining = pslf ? Math.max(0, 120 - input.monthsOfQualifyingPayments) : null;
348
+ const checks = [
349
+ makeCheck("federal-loans", "Federal loans present", federalLoans.length > 0, "warning", "IDR plans are only available for federal student loans."),
350
+ makeCheck("income-provided", "Income information provided", input.annualIncome > 0, "error", "Income is required to calculate IDR payments."),
351
+ ];
352
+ return {
353
+ workflowId: "education/student-loan-repayment",
354
+ domain: "education",
355
+ title: "Student loan repayment planner",
356
+ summary: "IDR comparison for federal student loans. PigeonGov does not change your repayment plan.",
357
+ applicant: undefined,
358
+ household: [],
359
+ evidence,
360
+ answers: input,
361
+ derived: {
362
+ plans,
363
+ lowestPlan: lowestPayment?.name ?? "N/A",
364
+ lowestMonthlyPayment: lowestPayment?.monthlyPayment ?? 0,
365
+ totalBalance,
366
+ totalFederalBalance,
367
+ pslf,
368
+ pslMonthsRemaining,
369
+ discretionaryIncome: discretionaryIncome(input.annualIncome, input.householdSize),
370
+ fpl: federalPovertyLevel(input.householdSize),
371
+ },
372
+ validation: { checks, flaggedFields: flags },
373
+ review: buildGenericSummary("Student loan repayment", lowestPayment
374
+ ? `lowest monthly: ${lowestPayment.name} at ${currency(lowestPayment.monthlyPayment)}/mo`
375
+ : "no federal loans for IDR", evidence, flags, [
376
+ `Total balance: ${currency(totalBalance)} (${currency(totalFederalBalance)} federal).`,
377
+ lowestPayment
378
+ ? `Lowest monthly payment: ${lowestPayment.name} at ${currency(lowestPayment.monthlyPayment)}/month.`
379
+ : "No eligible IDR plans.",
380
+ `PSLF eligible: ${pslf ? "yes" : "no"}.${pslf && pslMonthsRemaining !== null ? ` ${pslMonthsRemaining} qualifying months remaining.` : ""}`,
381
+ ]),
382
+ outputArtifacts: genericArtifacts("education-student-loan-repayment", evidence),
383
+ provenance: ["workflow-registry"],
384
+ };
385
+ },
386
+ };
387
+ // ---------------------------------------------------------------------------
388
+ // education/529-planner
389
+ // ---------------------------------------------------------------------------
390
+ const plan529Workflow = {
391
+ summary: {
392
+ id: "education/529-planner",
393
+ domain: "education",
394
+ title: "529 savings planner",
395
+ summary: "Project 529 plan growth and explore state tax deduction benefits.",
396
+ status: "active",
397
+ audience: "household",
398
+ tags: ["529", "education-savings", "tax-deduction", "investment"],
399
+ },
400
+ inputSchema: plan529InputSchema,
401
+ starterData: {
402
+ state: "CA",
403
+ annualContribution: 0,
404
+ beneficiaryAge: 0,
405
+ investmentTimeline: 18,
406
+ currentBalance: 0,
407
+ },
408
+ sections: [
409
+ {
410
+ id: "plan-details",
411
+ title: "Plan Details",
412
+ fields: [
413
+ { key: "state", label: "State", type: "text" },
414
+ { key: "currentBalance", label: "Current 529 balance", type: "currency" },
415
+ { key: "beneficiaryAge", label: "Beneficiary current age", type: "number" },
416
+ ],
417
+ },
418
+ {
419
+ id: "contribution-planning",
420
+ title: "Contribution Planning",
421
+ fields: [
422
+ { key: "annualContribution", label: "Annual contribution", type: "currency" },
423
+ { key: "investmentTimeline", label: "Investment timeline (years)", type: "number" },
424
+ ],
425
+ },
426
+ ],
427
+ buildBundle(input) {
428
+ // Project balance at beneficiary age 18 (or end of timeline) at 7% annual return
429
+ const yearsUntil18 = Math.max(0, 18 - input.beneficiaryAge);
430
+ const projectionYears = Math.min(input.investmentTimeline, yearsUntil18);
431
+ const growthRate = 0.07;
432
+ let projectedBalance = input.currentBalance;
433
+ for (let year = 0; year < projectionYears; year++) {
434
+ projectedBalance = (projectedBalance + input.annualContribution) * (1 + growthRate);
435
+ }
436
+ projectedBalance = Math.round(projectedBalance * 100) / 100;
437
+ // State tax deduction mapping (simplified — many states offer some deduction)
438
+ const statesWithFullDeduction = new Set([
439
+ "AZ", "AR", "CO", "CT", "GA", "ID", "IL", "IN", "IA", "KS",
440
+ "LA", "MD", "MI", "MN", "MS", "MO", "MT", "NE", "NM", "NY",
441
+ "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "UT", "VA",
442
+ "VT", "WV", "WI", "DC",
443
+ ]);
444
+ const noIncomeTaxStates = new Set(["AK", "FL", "NV", "NH", "SD", "TN", "TX", "WA", "WY"]);
445
+ let stateTaxBenefit;
446
+ if (noIncomeTaxStates.has(input.state)) {
447
+ stateTaxBenefit = "No state income tax — no deduction benefit, but earnings still grow tax-free.";
448
+ }
449
+ else if (statesWithFullDeduction.has(input.state)) {
450
+ stateTaxBenefit = "State offers a tax deduction or credit for 529 contributions.";
451
+ }
452
+ else {
453
+ stateTaxBenefit = "State may not offer a 529 tax deduction — verify with your state tax authority.";
454
+ }
455
+ const totalContributions = input.currentBalance + input.annualContribution * projectionYears;
456
+ const estimatedGrowth = projectedBalance - totalContributions;
457
+ const evidence = [];
458
+ const flags = [];
459
+ const checks = [
460
+ makeCheck("contribution", "Annual contribution set", input.annualContribution > 0, "warning", "Set an annual contribution amount to see projections."),
461
+ ];
462
+ return {
463
+ workflowId: "education/529-planner",
464
+ domain: "education",
465
+ title: "529 savings planner",
466
+ summary: "529 plan projection tool. PigeonGov does not manage investments.",
467
+ applicant: undefined,
468
+ household: [],
469
+ evidence,
470
+ answers: input,
471
+ derived: {
472
+ projectedBalance,
473
+ projectionYears,
474
+ totalContributions,
475
+ estimatedGrowth,
476
+ growthRate,
477
+ stateTaxBenefit,
478
+ },
479
+ validation: { checks, flaggedFields: flags },
480
+ review: {
481
+ headline: `529 planner: projected balance ${currency(projectedBalance)} in ${projectionYears} years`,
482
+ notes: [
483
+ `Current balance: ${currency(input.currentBalance)}.`,
484
+ `Annual contribution: ${currency(input.annualContribution)}.`,
485
+ `Projected balance at beneficiary age 18: ${currency(projectedBalance)}.`,
486
+ `Estimated growth: ${currency(estimatedGrowth)}.`,
487
+ stateTaxBenefit,
488
+ ],
489
+ flaggedFields: flags,
490
+ },
491
+ outputArtifacts: genericArtifacts("education-529-planner", evidence),
492
+ provenance: ["workflow-registry"],
493
+ };
494
+ },
495
+ };
496
+ // ---------------------------------------------------------------------------
497
+ // Export
498
+ // ---------------------------------------------------------------------------
499
+ export const educationWorkflows = {
500
+ "education/fafsa": fafsaWorkflow,
501
+ "education/student-loan-repayment": studentLoanRepaymentWorkflow,
502
+ "education/529-planner": plan529Workflow,
503
+ };
504
+ //# sourceMappingURL=education.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"education.js","sourceRoot":"","sources":["../../../../src/workflows/domains/education.ts"],"names":[],"mappings":"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"}