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.
- package/AGENTS.md +258 -0
- package/LICENSE +21 -0
- package/PRIVACY.md +38 -0
- package/README.md +234 -0
- package/agents.json +72 -0
- package/dist/bin/pigeongov.d.ts +2 -0
- package/dist/bin/pigeongov.js +4 -0
- package/dist/bin/pigeongov.js.map +1 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.d.ts +36 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.js +88 -0
- package/dist/src/advisory/decision-support/contribution-optimizer.js.map +1 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.d.ts +31 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.js +96 -0
- package/dist/src/advisory/decision-support/deduction-optimizer.js.map +1 -0
- package/dist/src/advisory/life-events/events.d.ts +4 -0
- package/dist/src/advisory/life-events/events.js +156 -0
- package/dist/src/advisory/life-events/events.js.map +1 -0
- package/dist/src/advisory/life-events/planner.d.ts +19 -0
- package/dist/src/advisory/life-events/planner.js +72 -0
- package/dist/src/advisory/life-events/planner.js.map +1 -0
- package/dist/src/advisory/screener/engine.d.ts +4 -0
- package/dist/src/advisory/screener/engine.js +368 -0
- package/dist/src/advisory/screener/engine.js.map +1 -0
- package/dist/src/advisory/screener/intake.d.ts +68 -0
- package/dist/src/advisory/screener/intake.js +93 -0
- package/dist/src/advisory/screener/intake.js.map +1 -0
- package/dist/src/analytics/stats.d.ts +18 -0
- package/dist/src/analytics/stats.js +158 -0
- package/dist/src/analytics/stats.js.map +1 -0
- package/dist/src/api/handlers/deadlines.d.ts +2 -0
- package/dist/src/api/handlers/deadlines.js +7 -0
- package/dist/src/api/handlers/deadlines.js.map +1 -0
- package/dist/src/api/handlers/openapi.d.ts +2 -0
- package/dist/src/api/handlers/openapi.js +7 -0
- package/dist/src/api/handlers/openapi.js.map +1 -0
- package/dist/src/api/handlers/workflows.d.ts +5 -0
- package/dist/src/api/handlers/workflows.js +73 -0
- package/dist/src/api/handlers/workflows.js.map +1 -0
- package/dist/src/api/index.d.ts +20 -0
- package/dist/src/api/index.js +70 -0
- package/dist/src/api/index.js.map +1 -0
- package/dist/src/api/openapi.d.ts +5 -0
- package/dist/src/api/openapi.js +384 -0
- package/dist/src/api/openapi.js.map +1 -0
- package/dist/src/api/router.d.ts +19 -0
- package/dist/src/api/router.js +57 -0
- package/dist/src/api/router.js.map +1 -0
- package/dist/src/cli/commands/completions.d.ts +2 -0
- package/dist/src/cli/commands/completions.js +396 -0
- package/dist/src/cli/commands/completions.js.map +1 -0
- package/dist/src/cli/commands/deadlines.d.ts +2 -0
- package/dist/src/cli/commands/deadlines.js +47 -0
- package/dist/src/cli/commands/deadlines.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.js +50 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/drafts.d.ts +2 -0
- package/dist/src/cli/commands/drafts.js +75 -0
- package/dist/src/cli/commands/drafts.js.map +1 -0
- package/dist/src/cli/commands/extract.d.ts +2 -0
- package/dist/src/cli/commands/extract.js +17 -0
- package/dist/src/cli/commands/extract.js.map +1 -0
- package/dist/src/cli/commands/fees.d.ts +2 -0
- package/dist/src/cli/commands/fees.js +40 -0
- package/dist/src/cli/commands/fees.js.map +1 -0
- package/dist/src/cli/commands/fill.d.ts +25 -0
- package/dist/src/cli/commands/fill.js +354 -0
- package/dist/src/cli/commands/fill.js.map +1 -0
- package/dist/src/cli/commands/glossary.d.ts +2 -0
- package/dist/src/cli/commands/glossary.js +90 -0
- package/dist/src/cli/commands/glossary.js.map +1 -0
- package/dist/src/cli/commands/life-event.d.ts +2 -0
- package/dist/src/cli/commands/life-event.js +41 -0
- package/dist/src/cli/commands/life-event.js.map +1 -0
- package/dist/src/cli/commands/list.d.ts +2 -0
- package/dist/src/cli/commands/list.js +19 -0
- package/dist/src/cli/commands/list.js.map +1 -0
- package/dist/src/cli/commands/machine.d.ts +2 -0
- package/dist/src/cli/commands/machine.js +100 -0
- package/dist/src/cli/commands/machine.js.map +1 -0
- package/dist/src/cli/commands/merge.d.ts +2 -0
- package/dist/src/cli/commands/merge.js +24 -0
- package/dist/src/cli/commands/merge.js.map +1 -0
- package/dist/src/cli/commands/plugin.d.ts +2 -0
- package/dist/src/cli/commands/plugin.js +119 -0
- package/dist/src/cli/commands/plugin.js.map +1 -0
- package/dist/src/cli/commands/profile.d.ts +2 -0
- package/dist/src/cli/commands/profile.js +125 -0
- package/dist/src/cli/commands/profile.js.map +1 -0
- package/dist/src/cli/commands/review.d.ts +2 -0
- package/dist/src/cli/commands/review.js +25 -0
- package/dist/src/cli/commands/review.js.map +1 -0
- package/dist/src/cli/commands/scaffold.d.ts +2 -0
- package/dist/src/cli/commands/scaffold.js +304 -0
- package/dist/src/cli/commands/scaffold.js.map +1 -0
- package/dist/src/cli/commands/schemas.d.ts +2 -0
- package/dist/src/cli/commands/schemas.js +14 -0
- package/dist/src/cli/commands/schemas.js.map +1 -0
- package/dist/src/cli/commands/screen.d.ts +2 -0
- package/dist/src/cli/commands/screen.js +89 -0
- package/dist/src/cli/commands/screen.js.map +1 -0
- package/dist/src/cli/commands/serve.d.ts +2 -0
- package/dist/src/cli/commands/serve.js +46 -0
- package/dist/src/cli/commands/serve.js.map +1 -0
- package/dist/src/cli/commands/start.d.ts +2 -0
- package/dist/src/cli/commands/start.js +16 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/stats.d.ts +2 -0
- package/dist/src/cli/commands/stats.js +17 -0
- package/dist/src/cli/commands/stats.js.map +1 -0
- package/dist/src/cli/commands/testdata.d.ts +2 -0
- package/dist/src/cli/commands/testdata.js +60 -0
- package/dist/src/cli/commands/testdata.js.map +1 -0
- package/dist/src/cli/commands/tui.d.ts +2 -0
- package/dist/src/cli/commands/tui.js +26 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/cli/commands/validate.d.ts +2 -0
- package/dist/src/cli/commands/validate.js +22 -0
- package/dist/src/cli/commands/validate.js.map +1 -0
- package/dist/src/cli/commands/vault.d.ts +2 -0
- package/dist/src/cli/commands/vault.js +73 -0
- package/dist/src/cli/commands/vault.js.map +1 -0
- package/dist/src/cli/commands/workflows.d.ts +2 -0
- package/dist/src/cli/commands/workflows.js +23 -0
- package/dist/src/cli/commands/workflows.js.map +1 -0
- package/dist/src/cli/display/review.d.ts +2 -0
- package/dist/src/cli/display/review.js +4 -0
- package/dist/src/cli/display/review.js.map +1 -0
- package/dist/src/cli/display/summary.d.ts +2 -0
- package/dist/src/cli/display/summary.js +19 -0
- package/dist/src/cli/display/summary.js.map +1 -0
- package/dist/src/cli/display/validation.d.ts +2 -0
- package/dist/src/cli/display/validation.js +16 -0
- package/dist/src/cli/display/validation.js.map +1 -0
- package/dist/src/cli/index.d.ts +1 -0
- package/dist/src/cli/index.js +83 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/output.d.ts +21 -0
- package/dist/src/cli/output.js +107 -0
- package/dist/src/cli/output.js.map +1 -0
- package/dist/src/cli/prompts/common.d.ts +21 -0
- package/dist/src/cli/prompts/common.js +53 -0
- package/dist/src/cli/prompts/common.js.map +1 -0
- package/dist/src/cli/prompts/credits.d.ts +3 -0
- package/dist/src/cli/prompts/credits.js +23 -0
- package/dist/src/cli/prompts/credits.js.map +1 -0
- package/dist/src/cli/prompts/deductions.d.ts +12 -0
- package/dist/src/cli/prompts/deductions.js +26 -0
- package/dist/src/cli/prompts/deductions.js.map +1 -0
- package/dist/src/cli/prompts/identity.d.ts +8 -0
- package/dist/src/cli/prompts/identity.js +36 -0
- package/dist/src/cli/prompts/identity.js.map +1 -0
- package/dist/src/cli/prompts/income.d.ts +15 -0
- package/dist/src/cli/prompts/income.js +61 -0
- package/dist/src/cli/prompts/income.js.map +1 -0
- package/dist/src/cli/prompts/workflow.d.ts +3 -0
- package/dist/src/cli/prompts/workflow.js +74 -0
- package/dist/src/cli/prompts/workflow.js.map +1 -0
- package/dist/src/cli/support.d.ts +53 -0
- package/dist/src/cli/support.js +80 -0
- package/dist/src/cli/support.js.map +1 -0
- package/dist/src/cli/tui.d.ts +22 -0
- package/dist/src/cli/tui.js +122 -0
- package/dist/src/cli/tui.js.map +1 -0
- package/dist/src/engine/audit-risk/scorer.d.ts +36 -0
- package/dist/src/engine/audit-risk/scorer.js +132 -0
- package/dist/src/engine/audit-risk/scorer.js.map +1 -0
- package/dist/src/engine/crypto/cost-basis.d.ts +19 -0
- package/dist/src/engine/crypto/cost-basis.js +115 -0
- package/dist/src/engine/crypto/cost-basis.js.map +1 -0
- package/dist/src/engine/crypto/transaction-parser.d.ts +36 -0
- package/dist/src/engine/crypto/transaction-parser.js +124 -0
- package/dist/src/engine/crypto/transaction-parser.js.map +1 -0
- package/dist/src/engine/crypto/wash-sale.d.ts +25 -0
- package/dist/src/engine/crypto/wash-sale.js +51 -0
- package/dist/src/engine/crypto/wash-sale.js.map +1 -0
- package/dist/src/engine/equity/espp.d.ts +41 -0
- package/dist/src/engine/equity/espp.js +90 -0
- package/dist/src/engine/equity/espp.js.map +1 -0
- package/dist/src/engine/equity/iso.d.ts +42 -0
- package/dist/src/engine/equity/iso.js +94 -0
- package/dist/src/engine/equity/iso.js.map +1 -0
- package/dist/src/engine/equity/nso.d.ts +35 -0
- package/dist/src/engine/equity/nso.js +63 -0
- package/dist/src/engine/equity/nso.js.map +1 -0
- package/dist/src/engine/equity/rsu.d.ts +33 -0
- package/dist/src/engine/equity/rsu.js +64 -0
- package/dist/src/engine/equity/rsu.js.map +1 -0
- package/dist/src/engine/field-mapper.d.ts +26 -0
- package/dist/src/engine/field-mapper.js +119 -0
- package/dist/src/engine/field-mapper.js.map +1 -0
- package/dist/src/engine/forms/core-1040.d.ts +2 -0
- package/dist/src/engine/forms/core-1040.js +124 -0
- package/dist/src/engine/forms/core-1040.js.map +1 -0
- package/dist/src/engine/forms/form-8949.d.ts +21 -0
- package/dist/src/engine/forms/form-8949.js +96 -0
- package/dist/src/engine/forms/form-8949.js.map +1 -0
- package/dist/src/engine/forms/index.d.ts +7 -0
- package/dist/src/engine/forms/index.js +6 -0
- package/dist/src/engine/forms/index.js.map +1 -0
- package/dist/src/engine/forms/schedule-b.d.ts +15 -0
- package/dist/src/engine/forms/schedule-b.js +78 -0
- package/dist/src/engine/forms/schedule-b.js.map +1 -0
- package/dist/src/engine/forms/schedule-d.d.ts +9 -0
- package/dist/src/engine/forms/schedule-d.js +86 -0
- package/dist/src/engine/forms/schedule-d.js.map +1 -0
- package/dist/src/engine/fpl.d.ts +70 -0
- package/dist/src/engine/fpl.js +127 -0
- package/dist/src/engine/fpl.js.map +1 -0
- package/dist/src/engine/gig/home-office.d.ts +34 -0
- package/dist/src/engine/gig/home-office.js +53 -0
- package/dist/src/engine/gig/home-office.js.map +1 -0
- package/dist/src/engine/gig/mileage.d.ts +30 -0
- package/dist/src/engine/gig/mileage.js +45 -0
- package/dist/src/engine/gig/mileage.js.map +1 -0
- package/dist/src/engine/gig/multi-1099.d.ts +19 -0
- package/dist/src/engine/gig/multi-1099.js +28 -0
- package/dist/src/engine/gig/multi-1099.js.map +1 -0
- package/dist/src/engine/multiyear/carryforward.d.ts +31 -0
- package/dist/src/engine/multiyear/carryforward.js +77 -0
- package/dist/src/engine/multiyear/carryforward.js.map +1 -0
- package/dist/src/engine/multiyear/compare.d.ts +25 -0
- package/dist/src/engine/multiyear/compare.js +94 -0
- package/dist/src/engine/multiyear/compare.js.map +1 -0
- package/dist/src/engine/multiyear/import.d.ts +23 -0
- package/dist/src/engine/multiyear/import.js +193 -0
- package/dist/src/engine/multiyear/import.js.map +1 -0
- package/dist/src/engine/optimizer/filing-status.d.ts +29 -0
- package/dist/src/engine/optimizer/filing-status.js +66 -0
- package/dist/src/engine/optimizer/filing-status.js.map +1 -0
- package/dist/src/engine/orchestrator.d.ts +14 -0
- package/dist/src/engine/orchestrator.js +135 -0
- package/dist/src/engine/orchestrator.js.map +1 -0
- package/dist/src/engine/scenarios/whatif.d.ts +34 -0
- package/dist/src/engine/scenarios/whatif.js +70 -0
- package/dist/src/engine/scenarios/whatif.js.map +1 -0
- package/dist/src/engine/state/ca/calculator.d.ts +3 -0
- package/dist/src/engine/state/ca/calculator.js +107 -0
- package/dist/src/engine/state/ca/calculator.js.map +1 -0
- package/dist/src/engine/state/common.d.ts +39 -0
- package/dist/src/engine/state/common.js +115 -0
- package/dist/src/engine/state/common.js.map +1 -0
- package/dist/src/engine/state/ga/calculator.d.ts +3 -0
- package/dist/src/engine/state/ga/calculator.js +82 -0
- package/dist/src/engine/state/ga/calculator.js.map +1 -0
- package/dist/src/engine/state/il/calculator.d.ts +3 -0
- package/dist/src/engine/state/il/calculator.js +49 -0
- package/dist/src/engine/state/il/calculator.js.map +1 -0
- package/dist/src/engine/state/mi/calculator.d.ts +3 -0
- package/dist/src/engine/state/mi/calculator.js +60 -0
- package/dist/src/engine/state/mi/calculator.js.map +1 -0
- package/dist/src/engine/state/nc/calculator.d.ts +3 -0
- package/dist/src/engine/state/nc/calculator.js +54 -0
- package/dist/src/engine/state/nc/calculator.js.map +1 -0
- package/dist/src/engine/state/nj/calculator.d.ts +3 -0
- package/dist/src/engine/state/nj/calculator.js +90 -0
- package/dist/src/engine/state/nj/calculator.js.map +1 -0
- package/dist/src/engine/state/ny/calculator.d.ts +3 -0
- package/dist/src/engine/state/ny/calculator.js +103 -0
- package/dist/src/engine/state/ny/calculator.js.map +1 -0
- package/dist/src/engine/state/oh/calculator.d.ts +3 -0
- package/dist/src/engine/state/oh/calculator.js +79 -0
- package/dist/src/engine/state/oh/calculator.js.map +1 -0
- package/dist/src/engine/state/pa/calculator.d.ts +3 -0
- package/dist/src/engine/state/pa/calculator.js +58 -0
- package/dist/src/engine/state/pa/calculator.js.map +1 -0
- package/dist/src/engine/state/registry.d.ts +9 -0
- package/dist/src/engine/state/registry.js +67 -0
- package/dist/src/engine/state/registry.js.map +1 -0
- package/dist/src/engine/state/types.d.ts +57 -0
- package/dist/src/engine/state/types.js +2 -0
- package/dist/src/engine/state/types.js.map +1 -0
- package/dist/src/engine/state/va/calculator.d.ts +3 -0
- package/dist/src/engine/state/va/calculator.js +76 -0
- package/dist/src/engine/state/va/calculator.js.map +1 -0
- package/dist/src/engine/suggestions/missed-deductions.d.ts +43 -0
- package/dist/src/engine/suggestions/missed-deductions.js +128 -0
- package/dist/src/engine/suggestions/missed-deductions.js.map +1 -0
- package/dist/src/engine/tax-calculator.d.ts +55 -0
- package/dist/src/engine/tax-calculator.js +156 -0
- package/dist/src/engine/tax-calculator.js.map +1 -0
- package/dist/src/engine/tax-constants-2025.d.ts +56 -0
- package/dist/src/engine/tax-constants-2025.js +138 -0
- package/dist/src/engine/tax-constants-2025.js.map +1 -0
- package/dist/src/engine/types.d.ts +77 -0
- package/dist/src/engine/types.js +2 -0
- package/dist/src/engine/types.js.map +1 -0
- package/dist/src/engine/va-math.d.ts +24 -0
- package/dist/src/engine/va-math.js +90 -0
- package/dist/src/engine/va-math.js.map +1 -0
- package/dist/src/engine/validator.d.ts +7 -0
- package/dist/src/engine/validator.js +108 -0
- package/dist/src/engine/validator.js.map +1 -0
- package/dist/src/glossary/entries/healthcare.d.ts +2 -0
- package/dist/src/glossary/entries/healthcare.js +78 -0
- package/dist/src/glossary/entries/healthcare.js.map +1 -0
- package/dist/src/glossary/entries/immigration.d.ts +2 -0
- package/dist/src/glossary/entries/immigration.js +112 -0
- package/dist/src/glossary/entries/immigration.js.map +1 -0
- package/dist/src/glossary/entries/tax.d.ts +2 -0
- package/dist/src/glossary/entries/tax.js +149 -0
- package/dist/src/glossary/entries/tax.js.map +1 -0
- package/dist/src/glossary/entries/unemployment.d.ts +2 -0
- package/dist/src/glossary/entries/unemployment.js +52 -0
- package/dist/src/glossary/entries/unemployment.js.map +1 -0
- package/dist/src/glossary/index.d.ts +19 -0
- package/dist/src/glossary/index.js +39 -0
- package/dist/src/glossary/index.js.map +1 -0
- package/dist/src/i18n/index.d.ts +21 -0
- package/dist/src/i18n/index.js +92 -0
- package/dist/src/i18n/index.js.map +1 -0
- package/dist/src/mcp/result.d.ts +3 -0
- package/dist/src/mcp/result.js +7 -0
- package/dist/src/mcp/result.js.map +1 -0
- package/dist/src/mcp/return-bundle.d.ts +19 -0
- package/dist/src/mcp/return-bundle.js +49 -0
- package/dist/src/mcp/return-bundle.js.map +1 -0
- package/dist/src/mcp/shared.d.ts +49102 -0
- package/dist/src/mcp/shared.js +354 -0
- package/dist/src/mcp/shared.js.map +1 -0
- package/dist/src/mcp/tools/build-packet.d.ts +7 -0
- package/dist/src/mcp/tools/build-packet.js +23 -0
- package/dist/src/mcp/tools/build-packet.js.map +1 -0
- package/dist/src/mcp/tools/calculate-tax.d.ts +40 -0
- package/dist/src/mcp/tools/calculate-tax.js +17 -0
- package/dist/src/mcp/tools/calculate-tax.js.map +1 -0
- package/dist/src/mcp/tools/deadlines.d.ts +7 -0
- package/dist/src/mcp/tools/deadlines.js +23 -0
- package/dist/src/mcp/tools/deadlines.js.map +1 -0
- package/dist/src/mcp/tools/describe-form.d.ts +14 -0
- package/dist/src/mcp/tools/describe-form.js +23 -0
- package/dist/src/mcp/tools/describe-form.js.map +1 -0
- package/dist/src/mcp/tools/describe-workflow.d.ts +6 -0
- package/dist/src/mcp/tools/describe-workflow.js +16 -0
- package/dist/src/mcp/tools/describe-workflow.js.map +1 -0
- package/dist/src/mcp/tools/explain-flag.d.ts +7 -0
- package/dist/src/mcp/tools/explain-flag.js +19 -0
- package/dist/src/mcp/tools/explain-flag.js.map +1 -0
- package/dist/src/mcp/tools/extract-document.d.ts +13 -0
- package/dist/src/mcp/tools/extract-document.js +20 -0
- package/dist/src/mcp/tools/extract-document.js.map +1 -0
- package/dist/src/mcp/tools/fees.d.ts +7 -0
- package/dist/src/mcp/tools/fees.js +24 -0
- package/dist/src/mcp/tools/fees.js.map +1 -0
- package/dist/src/mcp/tools/fill-form.d.ts +56 -0
- package/dist/src/mcp/tools/fill-form.js +47 -0
- package/dist/src/mcp/tools/fill-form.js.map +1 -0
- package/dist/src/mcp/tools/fill-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/fill-workflow.js +24 -0
- package/dist/src/mcp/tools/fill-workflow.js.map +1 -0
- package/dist/src/mcp/tools/glossary.d.ts +8 -0
- package/dist/src/mcp/tools/glossary.js +54 -0
- package/dist/src/mcp/tools/glossary.js.map +1 -0
- package/dist/src/mcp/tools/list-forms.d.ts +6 -0
- package/dist/src/mcp/tools/list-forms.js +15 -0
- package/dist/src/mcp/tools/list-forms.js.map +1 -0
- package/dist/src/mcp/tools/list-workflows.d.ts +6 -0
- package/dist/src/mcp/tools/list-workflows.js +16 -0
- package/dist/src/mcp/tools/list-workflows.js.map +1 -0
- package/dist/src/mcp/tools/plan-life-event.d.ts +59 -0
- package/dist/src/mcp/tools/plan-life-event.js +41 -0
- package/dist/src/mcp/tools/plan-life-event.js.map +1 -0
- package/dist/src/mcp/tools/review-form.d.ts +40 -0
- package/dist/src/mcp/tools/review-form.js +26 -0
- package/dist/src/mcp/tools/review-form.js.map +1 -0
- package/dist/src/mcp/tools/review-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/review-workflow.js +27 -0
- package/dist/src/mcp/tools/review-workflow.js.map +1 -0
- package/dist/src/mcp/tools/screen-eligibility.d.ts +53 -0
- package/dist/src/mcp/tools/screen-eligibility.js +44 -0
- package/dist/src/mcp/tools/screen-eligibility.js.map +1 -0
- package/dist/src/mcp/tools/start-workflow.d.ts +6 -0
- package/dist/src/mcp/tools/start-workflow.js +17 -0
- package/dist/src/mcp/tools/start-workflow.js.map +1 -0
- package/dist/src/mcp/tools/validate-form.d.ts +48 -0
- package/dist/src/mcp/tools/validate-form.js +30 -0
- package/dist/src/mcp/tools/validate-form.js.map +1 -0
- package/dist/src/mcp/tools/validate-workflow.d.ts +7 -0
- package/dist/src/mcp/tools/validate-workflow.js +24 -0
- package/dist/src/mcp/tools/validate-workflow.js.map +1 -0
- package/dist/src/pdf/batch.d.ts +8 -0
- package/dist/src/pdf/batch.js +15 -0
- package/dist/src/pdf/batch.js.map +1 -0
- package/dist/src/pdf/merge.d.ts +10 -0
- package/dist/src/pdf/merge.js +62 -0
- package/dist/src/pdf/merge.js.map +1 -0
- package/dist/src/pdf/ocr.d.ts +22 -0
- package/dist/src/pdf/ocr.js +52 -0
- package/dist/src/pdf/ocr.js.map +1 -0
- package/dist/src/pdf/reader.d.ts +2 -0
- package/dist/src/pdf/reader.js +354 -0
- package/dist/src/pdf/reader.js.map +1 -0
- package/dist/src/pdf/shared.d.ts +89 -0
- package/dist/src/pdf/shared.js +137 -0
- package/dist/src/pdf/shared.js.map +1 -0
- package/dist/src/pdf/writer.d.ts +7 -0
- package/dist/src/pdf/writer.js +311 -0
- package/dist/src/pdf/writer.js.map +1 -0
- package/dist/src/plugins/loader.d.ts +15 -0
- package/dist/src/plugins/loader.js +86 -0
- package/dist/src/plugins/loader.js.map +1 -0
- package/dist/src/plugins/sandbox.d.ts +14 -0
- package/dist/src/plugins/sandbox.js +88 -0
- package/dist/src/plugins/sandbox.js.map +1 -0
- package/dist/src/plugins/types.d.ts +17 -0
- package/dist/src/plugins/types.js +13 -0
- package/dist/src/plugins/types.js.map +1 -0
- package/dist/src/schemas/2025/f1040.d.ts +127 -0
- package/dist/src/schemas/2025/f1040.js +104 -0
- package/dist/src/schemas/2025/f1040.js.map +1 -0
- package/dist/src/schemas/2025/f1099-int.d.ts +53 -0
- package/dist/src/schemas/2025/f1099-int.js +51 -0
- package/dist/src/schemas/2025/f1099-int.js.map +1 -0
- package/dist/src/schemas/2025/f1099-nec.d.ts +47 -0
- package/dist/src/schemas/2025/f1099-nec.js +45 -0
- package/dist/src/schemas/2025/f1099-nec.js.map +1 -0
- package/dist/src/schemas/2025/form-8949.d.ts +46 -0
- package/dist/src/schemas/2025/form-8949.js +71 -0
- package/dist/src/schemas/2025/form-8949.js.map +1 -0
- package/dist/src/schemas/2025/index.d.ts +1004 -0
- package/dist/src/schemas/2025/index.js +60 -0
- package/dist/src/schemas/2025/index.js.map +1 -0
- package/dist/src/schemas/2025/schedule-1.d.ts +44 -0
- package/dist/src/schemas/2025/schedule-1.js +56 -0
- package/dist/src/schemas/2025/schedule-1.js.map +1 -0
- package/dist/src/schemas/2025/schedule-b.d.ts +32 -0
- package/dist/src/schemas/2025/schedule-b.js +53 -0
- package/dist/src/schemas/2025/schedule-b.js.map +1 -0
- package/dist/src/schemas/2025/schedule-c.d.ts +58 -0
- package/dist/src/schemas/2025/schedule-c.js +46 -0
- package/dist/src/schemas/2025/schedule-c.js.map +1 -0
- package/dist/src/schemas/2025/schedule-d.d.ts +36 -0
- package/dist/src/schemas/2025/schedule-d.js +52 -0
- package/dist/src/schemas/2025/schedule-d.js.map +1 -0
- package/dist/src/schemas/2025/shared.d.ts +98 -0
- package/dist/src/schemas/2025/shared.js +161 -0
- package/dist/src/schemas/2025/shared.js.map +1 -0
- package/dist/src/schemas/2025/w2.d.ts +57 -0
- package/dist/src/schemas/2025/w2.js +62 -0
- package/dist/src/schemas/2025/w2.js.map +1 -0
- package/dist/src/storage/drafts.d.ts +25 -0
- package/dist/src/storage/drafts.js +117 -0
- package/dist/src/storage/drafts.js.map +1 -0
- package/dist/src/storage/paths.d.ts +15 -0
- package/dist/src/storage/paths.js +33 -0
- package/dist/src/storage/paths.js.map +1 -0
- package/dist/src/storage/profile.d.ts +17 -0
- package/dist/src/storage/profile.js +59 -0
- package/dist/src/storage/profile.js.map +1 -0
- package/dist/src/storage/vault.d.ts +38 -0
- package/dist/src/storage/vault.js +187 -0
- package/dist/src/storage/vault.js.map +1 -0
- package/dist/src/testing/synthetic.d.ts +13 -0
- package/dist/src/testing/synthetic.js +164 -0
- package/dist/src/testing/synthetic.js.map +1 -0
- package/dist/src/types.d.ts +362 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/workflows/deadlines.d.ts +13 -0
- package/dist/src/workflows/deadlines.js +88 -0
- package/dist/src/workflows/deadlines.js.map +1 -0
- package/dist/src/workflows/domains/benefits.d.ts +409 -0
- package/dist/src/workflows/domains/benefits.js +744 -0
- package/dist/src/workflows/domains/benefits.js.map +1 -0
- package/dist/src/workflows/domains/business.d.ts +65 -0
- package/dist/src/workflows/domains/business.js +76 -0
- package/dist/src/workflows/domains/business.js.map +1 -0
- package/dist/src/workflows/domains/education.d.ts +251 -0
- package/dist/src/workflows/domains/education.js +504 -0
- package/dist/src/workflows/domains/education.js.map +1 -0
- package/dist/src/workflows/domains/estate.d.ts +217 -0
- package/dist/src/workflows/domains/estate.js +407 -0
- package/dist/src/workflows/domains/estate.js.map +1 -0
- package/dist/src/workflows/domains/healthcare-ext.d.ts +88 -0
- package/dist/src/workflows/domains/healthcare-ext.js +150 -0
- package/dist/src/workflows/domains/healthcare-ext.js.map +1 -0
- package/dist/src/workflows/domains/healthcare.d.ts +92 -0
- package/dist/src/workflows/domains/healthcare.js +126 -0
- package/dist/src/workflows/domains/healthcare.js.map +1 -0
- package/dist/src/workflows/domains/identity-domain.d.ts +291 -0
- package/dist/src/workflows/domains/identity-domain.js +541 -0
- package/dist/src/workflows/domains/identity-domain.js.map +1 -0
- package/dist/src/workflows/domains/immigration-ext.d.ts +282 -0
- package/dist/src/workflows/domains/immigration-ext.js +590 -0
- package/dist/src/workflows/domains/immigration-ext.js.map +1 -0
- package/dist/src/workflows/domains/immigration.d.ts +121 -0
- package/dist/src/workflows/domains/immigration.js +152 -0
- package/dist/src/workflows/domains/immigration.js.map +1 -0
- package/dist/src/workflows/domains/legal.d.ts +235 -0
- package/dist/src/workflows/domains/legal.js +380 -0
- package/dist/src/workflows/domains/legal.js.map +1 -0
- package/dist/src/workflows/domains/permits.d.ts +65 -0
- package/dist/src/workflows/domains/permits.js +74 -0
- package/dist/src/workflows/domains/permits.js.map +1 -0
- package/dist/src/workflows/domains/retirement.d.ts +59 -0
- package/dist/src/workflows/domains/retirement.js +155 -0
- package/dist/src/workflows/domains/retirement.js.map +1 -0
- package/dist/src/workflows/domains/tax.d.ts +133 -0
- package/dist/src/workflows/domains/tax.js +187 -0
- package/dist/src/workflows/domains/tax.js.map +1 -0
- package/dist/src/workflows/domains/unemployment.d.ts +105 -0
- package/dist/src/workflows/domains/unemployment.js +122 -0
- package/dist/src/workflows/domains/unemployment.js.map +1 -0
- package/dist/src/workflows/domains/veterans.d.ts +189 -0
- package/dist/src/workflows/domains/veterans.js +380 -0
- package/dist/src/workflows/domains/veterans.js.map +1 -0
- package/dist/src/workflows/fees.d.ts +15 -0
- package/dist/src/workflows/fees.js +93 -0
- package/dist/src/workflows/fees.js.map +1 -0
- package/dist/src/workflows/helpers.d.ts +8 -0
- package/dist/src/workflows/helpers.js +66 -0
- package/dist/src/workflows/helpers.js.map +1 -0
- package/dist/src/workflows/io.d.ts +3 -0
- package/dist/src/workflows/io.js +38 -0
- package/dist/src/workflows/io.js.map +1 -0
- package/dist/src/workflows/registry.d.ts +51355 -0
- package/dist/src/workflows/registry.js +140 -0
- package/dist/src/workflows/registry.js.map +1 -0
- package/dist/src/workflows/schemas/benefits.d.ts +78 -0
- package/dist/src/workflows/schemas/benefits.js +91 -0
- package/dist/src/workflows/schemas/benefits.js.map +1 -0
- package/dist/src/workflows/schemas/common.d.ts +27 -0
- package/dist/src/workflows/schemas/common.js +28 -0
- package/dist/src/workflows/schemas/common.js.map +1 -0
- package/dist/src/workflows/schemas/education.d.ts +70 -0
- package/dist/src/workflows/schemas/education.js +85 -0
- package/dist/src/workflows/schemas/education.js.map +1 -0
- package/dist/src/workflows/schemas/estate.d.ts +64 -0
- package/dist/src/workflows/schemas/estate.js +85 -0
- package/dist/src/workflows/schemas/estate.js.map +1 -0
- package/dist/src/workflows/schemas/healthcare-ext.d.ts +15 -0
- package/dist/src/workflows/schemas/healthcare-ext.js +17 -0
- package/dist/src/workflows/schemas/healthcare-ext.js.map +1 -0
- package/dist/src/workflows/schemas/healthcare.d.ts +33 -0
- package/dist/src/workflows/schemas/healthcare.js +20 -0
- package/dist/src/workflows/schemas/healthcare.js.map +1 -0
- package/dist/src/workflows/schemas/identity-domain.d.ts +64 -0
- package/dist/src/workflows/schemas/identity-domain.js +87 -0
- package/dist/src/workflows/schemas/identity-domain.js.map +1 -0
- package/dist/src/workflows/schemas/immigration-ext.d.ts +63 -0
- package/dist/src/workflows/schemas/immigration-ext.js +58 -0
- package/dist/src/workflows/schemas/immigration-ext.js.map +1 -0
- package/dist/src/workflows/schemas/immigration.d.ts +48 -0
- package/dist/src/workflows/schemas/immigration.js +27 -0
- package/dist/src/workflows/schemas/immigration.js.map +1 -0
- package/dist/src/workflows/schemas/legal.d.ts +45 -0
- package/dist/src/workflows/schemas/legal.js +45 -0
- package/dist/src/workflows/schemas/legal.js.map +1 -0
- package/dist/src/workflows/schemas/planning.d.ts +23 -0
- package/dist/src/workflows/schemas/planning.js +15 -0
- package/dist/src/workflows/schemas/planning.js.map +1 -0
- package/dist/src/workflows/schemas/retirement.d.ts +14 -0
- package/dist/src/workflows/schemas/retirement.js +22 -0
- package/dist/src/workflows/schemas/retirement.js.map +1 -0
- package/dist/src/workflows/schemas/tax.d.ts +58 -0
- package/dist/src/workflows/schemas/tax.js +51 -0
- package/dist/src/workflows/schemas/tax.js.map +1 -0
- package/dist/src/workflows/schemas/unemployment.d.ts +33 -0
- package/dist/src/workflows/schemas/unemployment.js +19 -0
- package/dist/src/workflows/schemas/unemployment.js.map +1 -0
- package/dist/src/workflows/schemas/veterans.d.ts +47 -0
- package/dist/src/workflows/schemas/veterans.js +51 -0
- package/dist/src/workflows/schemas/veterans.js.map +1 -0
- package/dist/src/workflows/types.d.ts +9 -0
- package/dist/src/workflows/types.js +2 -0
- package/dist/src/workflows/types.js.map +1 -0
- package/dist/xmcp.config.d.ts +3 -0
- package/dist/xmcp.config.js +29 -0
- package/dist/xmcp.config.js.map +1 -0
- package/llms.txt +48 -0
- package/package.json +82 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// 2025 contribution limits
|
|
2
|
+
const LIMITS_2025 = {
|
|
3
|
+
traditional_ira: 7_000,
|
|
4
|
+
traditional_ira_50plus: 8_000,
|
|
5
|
+
roth_ira: 7_000,
|
|
6
|
+
roth_ira_50plus: 8_000,
|
|
7
|
+
hsa_individual: 4_300,
|
|
8
|
+
hsa_family: 8_550,
|
|
9
|
+
hsa_55plus_catchup: 1_000,
|
|
10
|
+
"401k": 23_500,
|
|
11
|
+
"401k_50plus": 31_000,
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Analyze retirement contribution optimization opportunities.
|
|
15
|
+
* Shows how much more could be contributed and the estimated tax savings.
|
|
16
|
+
*/
|
|
17
|
+
export function optimizeContributions(input) {
|
|
18
|
+
const scenarios = [];
|
|
19
|
+
// 401(k) optimization
|
|
20
|
+
if (input.has401k) {
|
|
21
|
+
const maxLimit = input.age >= 50 ? LIMITS_2025["401k_50plus"] : LIMITS_2025["401k"];
|
|
22
|
+
const room = Math.max(0, maxLimit - input.current401k);
|
|
23
|
+
if (room > 0) {
|
|
24
|
+
scenarios.push({
|
|
25
|
+
vehicleName: "401(k)",
|
|
26
|
+
currentContribution: input.current401k,
|
|
27
|
+
maxContribution: maxLimit,
|
|
28
|
+
additionalRoom: room,
|
|
29
|
+
taxSavingsPerDollar: input.marginalRate,
|
|
30
|
+
estimatedTaxSavings: roundCurrency(room * input.marginalRate),
|
|
31
|
+
notes: `Pre-tax contribution reduces taxable income dollar-for-dollar at your ${(input.marginalRate * 100).toFixed(0)}% marginal rate`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Traditional IRA optimization
|
|
36
|
+
if (input.hasIra && input.iraType === "traditional") {
|
|
37
|
+
const maxLimit = input.age >= 50 ? LIMITS_2025.traditional_ira_50plus : LIMITS_2025.traditional_ira;
|
|
38
|
+
const room = Math.max(0, maxLimit - input.currentIra);
|
|
39
|
+
if (room > 0) {
|
|
40
|
+
// Check if deductible (depends on employer plan + income)
|
|
41
|
+
const deductible = !input.hasEmployerPlan || input.agi < 77_000;
|
|
42
|
+
scenarios.push({
|
|
43
|
+
vehicleName: "Traditional IRA",
|
|
44
|
+
currentContribution: input.currentIra,
|
|
45
|
+
maxContribution: maxLimit,
|
|
46
|
+
additionalRoom: room,
|
|
47
|
+
taxSavingsPerDollar: deductible ? input.marginalRate : 0,
|
|
48
|
+
estimatedTaxSavings: deductible ? roundCurrency(room * input.marginalRate) : 0,
|
|
49
|
+
notes: deductible
|
|
50
|
+
? "Fully deductible contribution — immediate tax savings"
|
|
51
|
+
: "Non-deductible (have employer plan + income above phase-out). Consider Roth IRA instead.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// HSA optimization (triple tax advantage)
|
|
56
|
+
if (input.hasHsa) {
|
|
57
|
+
const baseLimit = input.hsaCoverage === "family" ? LIMITS_2025.hsa_family : LIMITS_2025.hsa_individual;
|
|
58
|
+
const maxLimit = baseLimit + (input.age >= 55 ? LIMITS_2025.hsa_55plus_catchup : 0);
|
|
59
|
+
const room = Math.max(0, maxLimit - input.currentHsa);
|
|
60
|
+
if (room > 0) {
|
|
61
|
+
scenarios.push({
|
|
62
|
+
vehicleName: "HSA",
|
|
63
|
+
currentContribution: input.currentHsa,
|
|
64
|
+
maxContribution: maxLimit,
|
|
65
|
+
additionalRoom: room,
|
|
66
|
+
taxSavingsPerDollar: input.marginalRate,
|
|
67
|
+
estimatedTaxSavings: roundCurrency(room * input.marginalRate),
|
|
68
|
+
notes: "Triple tax benefit: deductible contribution, tax-free growth, tax-free qualified medical withdrawals. Best retirement vehicle available.",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const totalSavings = roundCurrency(scenarios.reduce((sum, s) => sum + s.estimatedTaxSavings, 0));
|
|
73
|
+
const recommendation = totalSavings > 0
|
|
74
|
+
? `You could save approximately $${totalSavings.toLocaleString()} in taxes by maximizing your contributions. ${scenarios.find((s) => s.vehicleName === "HSA" && s.additionalRoom > 0)
|
|
75
|
+
? "Start with the HSA — it offers the best tax advantage."
|
|
76
|
+
: "Start with the highest-savings vehicle first."}`
|
|
77
|
+
: "Your contributions are already at or near maximum limits.";
|
|
78
|
+
return {
|
|
79
|
+
marginalRate: input.marginalRate,
|
|
80
|
+
scenarios,
|
|
81
|
+
totalPotentialSavings: totalSavings,
|
|
82
|
+
recommendation,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function roundCurrency(value) {
|
|
86
|
+
return Number(value.toFixed(2));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=contribution-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contribution-optimizer.js","sourceRoot":"","sources":["../../../../src/advisory/decision-support/contribution-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface DeductionComparison {
|
|
2
|
+
standardDeduction: number;
|
|
3
|
+
itemizedTotal: number;
|
|
4
|
+
recommended: "standard" | "itemized";
|
|
5
|
+
savings: number;
|
|
6
|
+
itemizedBreakdown: ItemizedComponent[];
|
|
7
|
+
notes: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface ItemizedComponent {
|
|
10
|
+
label: string;
|
|
11
|
+
amount: number;
|
|
12
|
+
limit?: number | undefined;
|
|
13
|
+
cappedAmount: number;
|
|
14
|
+
notes?: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
interface DeductionInput {
|
|
17
|
+
filingStatus: string;
|
|
18
|
+
standardDeduction: number;
|
|
19
|
+
mortgageInterest: number;
|
|
20
|
+
stateAndLocalTaxes: number;
|
|
21
|
+
charitableContributions: number;
|
|
22
|
+
medicalExpenses: number;
|
|
23
|
+
agi: number;
|
|
24
|
+
otherItemized: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Compare standard deduction vs. itemized, showing dollar difference
|
|
28
|
+
* and which components contribute to the itemized total.
|
|
29
|
+
*/
|
|
30
|
+
export declare function compareDeductions(input: DeductionInput): DeductionComparison;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const SALT_CAP = 10_000; // State and local tax deduction cap
|
|
2
|
+
/**
|
|
3
|
+
* Compare standard deduction vs. itemized, showing dollar difference
|
|
4
|
+
* and which components contribute to the itemized total.
|
|
5
|
+
*/
|
|
6
|
+
export function compareDeductions(input) {
|
|
7
|
+
const components = [];
|
|
8
|
+
const notes = [];
|
|
9
|
+
// Mortgage interest
|
|
10
|
+
if (input.mortgageInterest > 0) {
|
|
11
|
+
components.push({
|
|
12
|
+
label: "Mortgage interest",
|
|
13
|
+
amount: input.mortgageInterest,
|
|
14
|
+
cappedAmount: input.mortgageInterest,
|
|
15
|
+
notes: "Deductible on up to $750K of acquisition debt",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
// SALT (state and local taxes) — capped at $10,000
|
|
19
|
+
if (input.stateAndLocalTaxes > 0) {
|
|
20
|
+
const capped = Math.min(input.stateAndLocalTaxes, SALT_CAP);
|
|
21
|
+
components.push({
|
|
22
|
+
label: "State and local taxes (SALT)",
|
|
23
|
+
amount: input.stateAndLocalTaxes,
|
|
24
|
+
limit: SALT_CAP,
|
|
25
|
+
cappedAmount: capped,
|
|
26
|
+
notes: input.stateAndLocalTaxes > SALT_CAP
|
|
27
|
+
? `Capped at $${SALT_CAP.toLocaleString()} (you paid $${input.stateAndLocalTaxes.toLocaleString()})`
|
|
28
|
+
: undefined,
|
|
29
|
+
});
|
|
30
|
+
if (input.stateAndLocalTaxes > SALT_CAP) {
|
|
31
|
+
notes.push(`$${(input.stateAndLocalTaxes - SALT_CAP).toLocaleString()} in SALT deduction lost to the $10,000 cap`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Charitable contributions
|
|
35
|
+
if (input.charitableContributions > 0) {
|
|
36
|
+
const agiLimit = input.agi * 0.6;
|
|
37
|
+
const capped = Math.min(input.charitableContributions, agiLimit);
|
|
38
|
+
components.push({
|
|
39
|
+
label: "Charitable contributions",
|
|
40
|
+
amount: input.charitableContributions,
|
|
41
|
+
limit: agiLimit,
|
|
42
|
+
cappedAmount: capped,
|
|
43
|
+
notes: input.charitableContributions > agiLimit
|
|
44
|
+
? `Limited to 60% of AGI ($${agiLimit.toLocaleString()}). Excess carries forward 5 years.`
|
|
45
|
+
: undefined,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Medical expenses (only amount exceeding 7.5% of AGI)
|
|
49
|
+
if (input.medicalExpenses > 0) {
|
|
50
|
+
const threshold = input.agi * 0.075;
|
|
51
|
+
const deductible = Math.max(0, input.medicalExpenses - threshold);
|
|
52
|
+
components.push({
|
|
53
|
+
label: "Medical expenses",
|
|
54
|
+
amount: input.medicalExpenses,
|
|
55
|
+
limit: threshold,
|
|
56
|
+
cappedAmount: deductible,
|
|
57
|
+
notes: deductible > 0
|
|
58
|
+
? `Only amounts exceeding 7.5% of AGI ($${threshold.toLocaleString()}) are deductible`
|
|
59
|
+
: `Below 7.5% AGI threshold — no deduction`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Other itemized
|
|
63
|
+
if (input.otherItemized > 0) {
|
|
64
|
+
components.push({
|
|
65
|
+
label: "Other itemized deductions",
|
|
66
|
+
amount: input.otherItemized,
|
|
67
|
+
cappedAmount: input.otherItemized,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const itemizedTotal = roundCurrency(components.reduce((sum, c) => sum + c.cappedAmount, 0));
|
|
71
|
+
const recommended = itemizedTotal > input.standardDeduction ? "itemized" : "standard";
|
|
72
|
+
const savings = roundCurrency(Math.abs(itemizedTotal - input.standardDeduction));
|
|
73
|
+
if (recommended === "standard") {
|
|
74
|
+
notes.unshift(`Standard deduction ($${input.standardDeduction.toLocaleString()}) exceeds your itemized total ($${itemizedTotal.toLocaleString()}) by $${savings.toLocaleString()}.`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
notes.unshift(`Itemizing saves $${savings.toLocaleString()} compared to the standard deduction.`);
|
|
78
|
+
}
|
|
79
|
+
// Check if close to breakpoint
|
|
80
|
+
const gap = Math.abs(itemizedTotal - input.standardDeduction);
|
|
81
|
+
if (gap < input.standardDeduction * 0.1) {
|
|
82
|
+
notes.push("Your itemized total is close to the standard deduction — small changes in deductible expenses could flip the recommendation.");
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
standardDeduction: input.standardDeduction,
|
|
86
|
+
itemizedTotal,
|
|
87
|
+
recommended,
|
|
88
|
+
savings,
|
|
89
|
+
itemizedBreakdown: components,
|
|
90
|
+
notes,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function roundCurrency(value) {
|
|
94
|
+
return Number(value.toFixed(2));
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=deduction-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduction-optimizer.js","sourceRoot":"","sources":["../../../../src/advisory/decision-support/deduction-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
export const LIFE_EVENTS = [
|
|
2
|
+
{
|
|
3
|
+
id: "new-baby",
|
|
4
|
+
label: "New baby",
|
|
5
|
+
description: "A new child has been born or adopted into your household.",
|
|
6
|
+
workflows: [
|
|
7
|
+
{ workflowId: "tax/1040", priority: 3, notes: "Add dependent for Child Tax Credit and filing status change" },
|
|
8
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 1, deadline: "60 days from birth (special enrollment)", notes: "Add newborn to health insurance plan" },
|
|
9
|
+
{ workflowId: "benefits/snap", priority: 4, notes: "Household size increased — may qualify or increase benefit" },
|
|
10
|
+
{ workflowId: "benefits/wic", priority: 2, notes: "Infant and postpartum parent may qualify for WIC" },
|
|
11
|
+
{ workflowId: "benefits/medicaid", priority: 2, notes: "Newborn typically auto-enrolled if parent has Medicaid" },
|
|
12
|
+
],
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: "marriage",
|
|
16
|
+
label: "Marriage",
|
|
17
|
+
description: "You recently got married.",
|
|
18
|
+
workflows: [
|
|
19
|
+
{ workflowId: "tax/1040", priority: 2, notes: "Filing status changes to MFJ or MFS — compare both" },
|
|
20
|
+
{ workflowId: "identity/name-change", priority: 1, notes: "If changing name, start SSA update immediately" },
|
|
21
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 3, deadline: "60 days from marriage (special enrollment)", notes: "May combine or change health insurance plans" },
|
|
22
|
+
{ workflowId: "identity/voter-registration", priority: 5, notes: "Update registration if name or address changed" },
|
|
23
|
+
{ workflowId: "immigration/family-visa-intake", priority: 1, notes: "If spouse needs immigration status, begin petition process", dependsOn: ["identity/name-change"] },
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "divorce",
|
|
28
|
+
label: "Divorce",
|
|
29
|
+
description: "You are going through or have completed a divorce.",
|
|
30
|
+
workflows: [
|
|
31
|
+
{ workflowId: "tax/1040", priority: 2, notes: "Filing status changes — may qualify for Head of Household" },
|
|
32
|
+
{ workflowId: "identity/name-change", priority: 3, notes: "If reverting name, update SSA and all documents" },
|
|
33
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 1, deadline: "60 days from divorce (special enrollment)", notes: "Obtain separate health insurance coverage" },
|
|
34
|
+
{ workflowId: "legal/child-support-modification", priority: 2, notes: "Establish or modify child support order" },
|
|
35
|
+
{ workflowId: "estate/basic-will", priority: 4, notes: "Update beneficiaries and estate documents" },
|
|
36
|
+
{ workflowId: "estate/power-of-attorney", priority: 4, notes: "Revoke existing POA if ex-spouse was agent" },
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "job-loss",
|
|
41
|
+
label: "Job loss",
|
|
42
|
+
description: "You have lost your job or been laid off.",
|
|
43
|
+
workflows: [
|
|
44
|
+
{ workflowId: "unemployment/claim-intake", priority: 1, deadline: "File within 7 days of last day worked", notes: "File unemployment claim immediately" },
|
|
45
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 1, deadline: "60 days from job loss (special enrollment)", notes: "Enroll in ACA marketplace or evaluate COBRA" },
|
|
46
|
+
{ workflowId: "benefits/snap", priority: 2, notes: "May now qualify for food assistance" },
|
|
47
|
+
{ workflowId: "benefits/medicaid", priority: 2, notes: "Income drop may qualify you for Medicaid" },
|
|
48
|
+
{ workflowId: "benefits/liheap", priority: 3, notes: "May qualify for energy assistance" },
|
|
49
|
+
{ workflowId: "tax/1040", priority: 5, notes: "Unemployment income is taxable — plan for tax impact" },
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "retirement",
|
|
54
|
+
label: "Retirement",
|
|
55
|
+
description: "You are retiring or have recently retired.",
|
|
56
|
+
workflows: [
|
|
57
|
+
{ workflowId: "retirement/ssa-estimator", priority: 1, notes: "Calculate optimal Social Security claiming age" },
|
|
58
|
+
{ workflowId: "healthcare/medicare-enrollment", priority: 1, deadline: "Initial enrollment: 3 months before turning 65", notes: "Enroll in Medicare Parts A and B" },
|
|
59
|
+
{ workflowId: "tax/1040", priority: 3, notes: "Retirement income taxation — pension, 401k distributions, Social Security" },
|
|
60
|
+
{ workflowId: "estate/basic-will", priority: 4, notes: "Review and update estate planning documents" },
|
|
61
|
+
{ workflowId: "estate/advance-directive", priority: 4, notes: "Ensure healthcare directives are current" },
|
|
62
|
+
{ workflowId: "estate/power-of-attorney", priority: 4, notes: "Designate financial and healthcare agents" },
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "moving-states",
|
|
67
|
+
label: "Moving to a different state",
|
|
68
|
+
description: "You are relocating to a new state.",
|
|
69
|
+
workflows: [
|
|
70
|
+
{ workflowId: "identity/voter-registration", priority: 1, deadline: "30 days before next election in most states", notes: "Register to vote in new state" },
|
|
71
|
+
{ workflowId: "identity/real-id", priority: 2, notes: "Update driver's license within 30-90 days (varies by state)" },
|
|
72
|
+
{ workflowId: "tax/1040", priority: 3, notes: "May need to file part-year returns in both states" },
|
|
73
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 2, deadline: "60 days from move (special enrollment)", notes: "Health plan networks may change — verify coverage" },
|
|
74
|
+
{ workflowId: "benefits/snap", priority: 4, notes: "Transfer benefits to new state" },
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: "death-of-spouse",
|
|
79
|
+
label: "Death of spouse",
|
|
80
|
+
description: "Your spouse has passed away.",
|
|
81
|
+
workflows: [
|
|
82
|
+
{ workflowId: "retirement/ssa-estimator", priority: 1, notes: "Apply for survivor benefits — may be higher than own benefit" },
|
|
83
|
+
{ workflowId: "tax/1040", priority: 2, notes: "Can file as Qualifying Surviving Spouse for 2 years" },
|
|
84
|
+
{ workflowId: "estate/basic-will", priority: 2, notes: "Begin probate process if applicable" },
|
|
85
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 1, deadline: "60 days (special enrollment)", notes: "Adjust health coverage" },
|
|
86
|
+
{ workflowId: "benefits/ssdi-application", priority: 3, notes: "Disabled survivors may qualify for benefits" },
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "buying-home",
|
|
91
|
+
label: "Buying a home",
|
|
92
|
+
description: "You are purchasing a home.",
|
|
93
|
+
workflows: [
|
|
94
|
+
{ workflowId: "tax/1040", priority: 2, notes: "Mortgage interest deduction — may want to itemize" },
|
|
95
|
+
{ workflowId: "permits/local-permit-planner", priority: 4, notes: "Check if renovations need permits" },
|
|
96
|
+
{ workflowId: "identity/voter-registration", priority: 5, notes: "Update address on voter registration" },
|
|
97
|
+
{ workflowId: "estate/basic-will", priority: 3, notes: "Update estate plan to include new property" },
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: "starting-business",
|
|
102
|
+
label: "Starting a business",
|
|
103
|
+
description: "You are starting a new business or becoming self-employed.",
|
|
104
|
+
workflows: [
|
|
105
|
+
{ workflowId: "business/license-starter", priority: 1, notes: "Research and obtain required business licenses" },
|
|
106
|
+
{ workflowId: "permits/local-permit-planner", priority: 2, notes: "Check zoning and operational permit requirements" },
|
|
107
|
+
{ workflowId: "tax/1040", priority: 2, notes: "Schedule C for self-employment, quarterly estimated taxes" },
|
|
108
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 3, notes: "Self-employed need individual health coverage" },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: "becoming-disabled",
|
|
113
|
+
label: "Becoming disabled",
|
|
114
|
+
description: "You have developed a disability that affects your ability to work.",
|
|
115
|
+
workflows: [
|
|
116
|
+
{ workflowId: "benefits/ssdi-application", priority: 1, notes: "Apply for Social Security Disability Insurance" },
|
|
117
|
+
{ workflowId: "benefits/medicaid", priority: 2, notes: "May qualify for Medicaid based on disability" },
|
|
118
|
+
{ workflowId: "veterans/disability-claim", priority: 1, notes: "If veteran, file VA disability claim" },
|
|
119
|
+
{ workflowId: "benefits/snap", priority: 3, notes: "Income reduction may qualify you for SNAP" },
|
|
120
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 2, notes: "Ensure adequate health coverage" },
|
|
121
|
+
{ workflowId: "estate/advance-directive", priority: 3, notes: "Document healthcare preferences" },
|
|
122
|
+
{ workflowId: "estate/power-of-attorney", priority: 3, notes: "Designate agents while able" },
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
id: "aging-into-medicare",
|
|
127
|
+
label: "Turning 65 (Medicare eligible)",
|
|
128
|
+
description: "You are approaching or have reached age 65.",
|
|
129
|
+
workflows: [
|
|
130
|
+
{ workflowId: "healthcare/medicare-enrollment", priority: 1, deadline: "Initial enrollment: 7-month window around 65th birthday", notes: "Enroll in Medicare — late enrollment incurs permanent penalties" },
|
|
131
|
+
{ workflowId: "retirement/ssa-estimator", priority: 2, notes: "Review Social Security claiming strategy" },
|
|
132
|
+
{ workflowId: "estate/advance-directive", priority: 3, notes: "Review healthcare directives" },
|
|
133
|
+
],
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
id: "immigration-status-change",
|
|
137
|
+
label: "Immigration status change",
|
|
138
|
+
description: "Your immigration status has changed (e.g., green card received, naturalization, work authorization).",
|
|
139
|
+
workflows: [
|
|
140
|
+
{ workflowId: "immigration/naturalization", priority: 1, notes: "If eligible, begin naturalization process" },
|
|
141
|
+
{ workflowId: "immigration/work-authorization", priority: 1, notes: "Update or obtain work authorization" },
|
|
142
|
+
{ workflowId: "tax/1040", priority: 3, notes: "Filing requirements may change with status" },
|
|
143
|
+
{ workflowId: "identity/voter-registration", priority: 2, notes: "If naturalized, register to vote" },
|
|
144
|
+
{ workflowId: "identity/passport", priority: 3, notes: "If naturalized, apply for U.S. passport" },
|
|
145
|
+
{ workflowId: "healthcare/aca-enrollment", priority: 2, notes: "Healthcare eligibility may change with status" },
|
|
146
|
+
{ workflowId: "benefits/snap", priority: 4, notes: "Benefit eligibility may change with status" },
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
];
|
|
150
|
+
export function findLifeEvent(id) {
|
|
151
|
+
return LIFE_EVENTS.find((event) => event.id === id);
|
|
152
|
+
}
|
|
153
|
+
export function listLifeEvents() {
|
|
154
|
+
return LIFE_EVENTS;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/advisory/life-events/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { LifeEvent } from "../../types.js";
|
|
2
|
+
import { findLifeEvent, listLifeEvents } from "./events.js";
|
|
3
|
+
export interface LifeEventPlan {
|
|
4
|
+
event: LifeEvent;
|
|
5
|
+
orderedWorkflows: PlannedWorkflow[];
|
|
6
|
+
totalWorkflows: number;
|
|
7
|
+
hasUrgentDeadlines: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface PlannedWorkflow {
|
|
10
|
+
workflowId: string;
|
|
11
|
+
priority: number;
|
|
12
|
+
deadline: string | undefined;
|
|
13
|
+
notes: string;
|
|
14
|
+
dependsOn: string[];
|
|
15
|
+
phase: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function planLifeEvent(eventId: string): LifeEventPlan | undefined;
|
|
18
|
+
export declare function formatPlanSummary(plan: LifeEventPlan): string;
|
|
19
|
+
export { listLifeEvents, findLifeEvent };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { findLifeEvent, listLifeEvents } from "./events.js";
|
|
2
|
+
export function planLifeEvent(eventId) {
|
|
3
|
+
const event = findLifeEvent(eventId);
|
|
4
|
+
if (!event)
|
|
5
|
+
return undefined;
|
|
6
|
+
const orderedWorkflows = prioritizeWorkflows(event.workflows);
|
|
7
|
+
const hasUrgentDeadlines = orderedWorkflows.some((w) => w.deadline !== undefined && w.priority <= 2);
|
|
8
|
+
return {
|
|
9
|
+
event,
|
|
10
|
+
orderedWorkflows,
|
|
11
|
+
totalWorkflows: orderedWorkflows.length,
|
|
12
|
+
hasUrgentDeadlines,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function prioritizeWorkflows(workflows) {
|
|
16
|
+
const sorted = [...workflows].sort((a, b) => a.priority - b.priority);
|
|
17
|
+
const phases = new Map();
|
|
18
|
+
const result = [];
|
|
19
|
+
for (const workflow of sorted) {
|
|
20
|
+
const deps = workflow.dependsOn ?? [];
|
|
21
|
+
let phase = 1;
|
|
22
|
+
for (const dep of deps) {
|
|
23
|
+
const depPhase = phases.get(dep);
|
|
24
|
+
if (depPhase !== undefined) {
|
|
25
|
+
phase = Math.max(phase, depPhase + 1);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
phases.set(workflow.workflowId, phase);
|
|
29
|
+
result.push({
|
|
30
|
+
workflowId: workflow.workflowId,
|
|
31
|
+
priority: workflow.priority,
|
|
32
|
+
deadline: workflow.deadline,
|
|
33
|
+
notes: workflow.notes,
|
|
34
|
+
dependsOn: deps,
|
|
35
|
+
phase,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return result.sort((a, b) => {
|
|
39
|
+
if (a.phase !== b.phase)
|
|
40
|
+
return a.phase - b.phase;
|
|
41
|
+
return a.priority - b.priority;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export function formatPlanSummary(plan) {
|
|
45
|
+
const lines = [];
|
|
46
|
+
lines.push(`Life Event: ${plan.event.label}`);
|
|
47
|
+
lines.push(`${plan.event.description}`);
|
|
48
|
+
lines.push("");
|
|
49
|
+
lines.push(`Action Plan (${plan.totalWorkflows} workflows):`);
|
|
50
|
+
lines.push("");
|
|
51
|
+
let currentPhase = 0;
|
|
52
|
+
for (const workflow of plan.orderedWorkflows) {
|
|
53
|
+
if (workflow.phase !== currentPhase) {
|
|
54
|
+
currentPhase = workflow.phase;
|
|
55
|
+
lines.push(`--- Phase ${currentPhase} ---`);
|
|
56
|
+
}
|
|
57
|
+
const deadlineStr = workflow.deadline ? ` [DEADLINE: ${workflow.deadline}]` : "";
|
|
58
|
+
const priorityStr = workflow.priority <= 2 ? " (!)" : "";
|
|
59
|
+
lines.push(` ${workflow.workflowId}${priorityStr}${deadlineStr}`);
|
|
60
|
+
lines.push(` ${workflow.notes}`);
|
|
61
|
+
if (workflow.dependsOn.length > 0) {
|
|
62
|
+
lines.push(` (after: ${workflow.dependsOn.join(", ")})`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (plan.hasUrgentDeadlines) {
|
|
66
|
+
lines.push("");
|
|
67
|
+
lines.push("⚠ Some workflows have urgent deadlines — start immediately.");
|
|
68
|
+
}
|
|
69
|
+
return lines.join("\n");
|
|
70
|
+
}
|
|
71
|
+
export { listLifeEvents, findLifeEvent };
|
|
72
|
+
//# sourceMappingURL=planner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../../src/advisory/life-events/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EligibilityResult } from "../../types.js";
|
|
2
|
+
import type { ScreenerInput } from "./intake.js";
|
|
3
|
+
export declare function screenEligibility(input: ScreenerInput): EligibilityResult[];
|
|
4
|
+
export declare function formatScreenerResults(results: EligibilityResult[]): string;
|