Roth Conversion RMD Analysis Skill
Task Overview
Given a client profile with conflicting data sources, produce a JSON analysis recommending whether to execute a staged Roth conversion, defer, or take no conversion action. The analysis must resolve source conflicts, project RMD taxes, and estimate legacy balances.
Input Structure
Each task contains:
prompt.txt — generic instruction to read request_memo.md and produce deliverable
payloads/request_memo.md — client profile, conflicting sources, goals, and specific questions
payloads/answer_template.json — exact schema and enum values for the output
Source Resolution Rules
The output requires source_resolution with two fields:
controlling_profile_source: authoritative source for demographic/legal data (DOB, salary, heir info, tax profile)
controlling_account_source: authoritative source for account balances
Hierarchy
- SIGNED_PROFILE — highest authority for client-verified personal data (DOB, salary, filing status)
- CUSTODIAN_EXPORT — highest authority for actual account balances, unless the signed profile is explicitly more recent and client-acknowledged
- ATTORNEY_MEMO — highest authority for legal/heir matters and estate-specific guidance; overrides SIGNED_PROFILE on heir tax profiles
- CRM_NOTE — lowest authority; use only when no higher source exists for the datum
- STALE_MARKETING_INTAKE — never prefer over the above
Principle
Prefer the source that is most recent, most specific to the data type, and client-verified.
RMD Age Determination (SECURE 2.0)
Use the IRS SECURE 2.0 schedule unless the memo explicitly overrides it:
- Born before 1951 → RMD age 72
- Born 1951–1959 → RMD age 73
- Born 1960 or later → RMD age 75
Pitfall: If the request_memo explicitly states an RMD start year or says "RMDs already started," trust that statement even if it conflicts with the DOB-based calculation. The memo is ground truth for the client's specific situation.
Recommendation Logic
Suitability Assessment
- Current marginal rate < expected heir marginal rate → generally SUITABLE
- Current marginal rate ≈ expected heir marginal rate → BORDERLINE
- Current marginal rate > expected heir marginal rate → DEFER
- RMDs already started and current rate ≥ heir rate → strongly DEFER
- RMD within ~5 years and balance is very large → may downgrade from SUITABLE to BORDERLINE
Primary Action Mapping
- SUITABLE →
STAGED_ROTH_CONVERSION
- BORDERLINE →
STAGED_ROTH_CONVERSION (with conservative plan) or DEFER
- DEFER →
DEFER (or NO_CONVERSION if permanently unsuitable)
Risk Flags
TAX_BRACKET_MANAGEMENT — conversion requires staying within or managing tax brackets (most common)
LIQUIDITY_CONSTRAINT — client may lack outside funds to pay conversion taxes
RMD_NEAR_TERM — RMDs starting within ~5 years, reducing conversion runway
Conversion Plan Design
If SUITABLE / BORDERLINE
- Determine
first_conversion_year: typically the current year or next calendar year.
- Determine
conversion_years: typically from current age to RMD age, or a fixed horizon (e.g., 5–15 years). If already in RMDs, use a shorter window (e.g., 3–5 years) or set to 0 if deferring.
- Determine
total_converted:
- Common approach: convert enough to fill the current tax bracket without jumping brackets, or convert a set fraction of the balance over the conversion window.
- For large balances with short runways, be conservative (e.g., 20–40% of balance).
annual_conversion_amount = total_converted / conversion_years (rounded to cents).
total_conversion_tax = total_converted × current_marginal_tax_rate (rounded to cents).
- If conversions would span multiple brackets, use a blended rate or bracket-by-bracket calculation. A simplified flat-rate estimate is acceptable when bracket boundaries are unknown.
If DEFER / NO_CONVERSION
first_conversion_year: set to current year or next year
conversion_years: 0
conversion_years_positive: 0
annual_conversion_amount: 0.00
total_converted: 0.00
total_conversion_tax: 0.00
RMD Tax Projections
Assumptions (use unless memo states otherwise)
- Annual growth rate: 6% or 7% (use 6% as a conservative standard)
- Horizon: age 85 or 90, or a consistent fixed year (e.g., 20 years from now). Document the chosen horizon.
- RMD calculation: IRS Uniform Lifetime Table (divide prior year-end balance by distribution period)
- Tax on RMDs: RMD amount × current marginal tax rate (simplified; can refine if bracket changes are expected)
Baseline vs Conversion
baseline_rmd_tax_through_horizon: project RMDs and taxes on the full traditional balance.
conversion_rmd_tax_through_horizon: project RMDs and taxes on the balance after subtracting total_converted.
rmd_tax_savings_through_horizon = baseline − conversion (must be non-negative if conversion is suitable).
Important: RMDs are calculated on the prior year-end balance. After each RMD, the remaining balance grows at the assumed rate. Sum taxes year-by-year through the horizon.
Legacy Projections
projected_roth_balance_horizon: total_converted compounded at the growth rate from first_conversion_year to horizon_year.
projected_traditional_balance_horizon: initial balance minus total_converted, then reduced by annual RMDs and compounded by growth rate.
heir_tax_profile:
MOSTLY_TAX_FREE — majority of heirs are in lower brackets or charity/spouse rollover
MIXED_TAXABLE_AND_TAX_FREE — mixed heir brackets or partial charity
MOSTLY_TAXABLE — majority of heirs are in equal or higher brackets
Heir Tax Profile Rules
- Spousal rollover → tax-free (counts toward tax-free)
- Charity bequest → tax-free
- Heir in lower bracket than owner → tax-free perspective
- Heir in equal or higher bracket → taxable perspective
- When multiple heirs with mixed brackets →
MIXED_TAXABLE_AND_TAX_FREE unless one side clearly dominates
JSON Output Rules
- All monetary values must be JSON numbers (not strings), rounded to two decimal places.
- All enum values must match the template exactly (uppercase with underscores).
task_id must match the task directory name (e.g., train_001, test_001).
client_id should be stable (use the client's name or a slug derived from it).
analysis_type is always roth_conversion_rmd.
- All top-level keys listed in
required_top_level_keys must be present.
conversion_plan.conversion_years_positive should equal conversion_plan.conversion_years when all years have conversions; set to 0 when deferring.
- Ensure internal consistency:
total_converted ≈ annual_conversion_amount × conversion_years (within rounding).
Common Pitfalls
- Using strings for numbers — the template explicitly forbids this.
- Ignoring memo-overridden RMD status — trust the memo over general IRS rules.
- Wrong source resolution — account balances usually come from custodian export, but personal data comes from signed profile; legal/heir data may come from attorney memo.
- Inconsistent horizon — choose a horizon and apply it consistently across baseline and conversion projections.
- Forgetting RMDs reduce balance — legacy traditional balance must account for RMD withdrawals.
- Negative tax savings — if conversion increases projected RMD taxes, reconsider the recommendation.
- Heir tax profile misclassification — consider the owner's current marginal rate vs heir's expected marginal rate, not just absolute heir brackets.
Calculation Verification Checklist
Before finalizing output, verify:
1---2name: self-attempt-02-373description: Roth Conversion RMD Analysis Skill4---5# Roth Conversion RMD Analysis Skill67## Task Overview8Given a client profile with conflicting data sources, produce a JSON analysis recommending whether to execute a staged Roth conversion, defer, or take no conversion action. The analysis must resolve source conflicts, project RMD taxes, and estimate legacy balances.910## Input Structure11Each task contains:12- `prompt.txt` — generic instruction to read `request_memo.md` and produce deliverable13- `payloads/request_memo.md` — client profile, conflicting sources, goals, and specific questions14- `payloads/answer_template.json` — exact schema and enum values for the output1516## Source Resolution Rules17The output requires `source_resolution` with two fields:18- `controlling_profile_source`: authoritative source for demographic/legal data (DOB, salary, heir info, tax profile)19- `controlling_account_source`: authoritative source for account balances2021### Hierarchy22- **SIGNED_PROFILE** — highest authority for client-verified personal data (DOB, salary, filing status)23- **CUSTODIAN_EXPORT** — highest authority for actual account balances, unless the signed profile is explicitly more recent and client-acknowledged24- **ATTORNEY_MEMO** — highest authority for legal/heir matters and estate-specific guidance; overrides SIGNED_PROFILE on heir tax profiles25- **CRM_NOTE** — lowest authority; use only when no higher source exists for the datum26- **STALE_MARKETING_INTAKE** — never prefer over the above2728### Principle29Prefer the source that is **most recent, most specific to the data type, and client-verified**.3031## RMD Age Determination (SECURE 2.0)32Use the IRS SECURE 2.0 schedule unless the memo explicitly overrides it:33- Born before 1951 → RMD age 7234- Born 1951–1959 → RMD age 7335- Born 1960 or later → RMD age 753637**Pitfall**: If the request_memo explicitly states an RMD start year or says "RMDs already started," trust that statement even if it conflicts with the DOB-based calculation. The memo is ground truth for the client's specific situation.3839## Recommendation Logic4041### Suitability Assessment421. **Current marginal rate < expected heir marginal rate** → generally **SUITABLE**432. **Current marginal rate ≈ expected heir marginal rate** → **BORDERLINE**443. **Current marginal rate > expected heir marginal rate** → **DEFER**454. **RMDs already started** and current rate ≥ heir rate → strongly **DEFER**465. **RMD within ~5 years** and balance is very large → may downgrade from SUITABLE to **BORDERLINE**4748### Primary Action Mapping49- **SUITABLE** → `STAGED_ROTH_CONVERSION`50- **BORDERLINE** → `STAGED_ROTH_CONVERSION` (with conservative plan) or `DEFER`51- **DEFER** → `DEFER` (or `NO_CONVERSION` if permanently unsuitable)5253### Risk Flags54- `TAX_BRACKET_MANAGEMENT` — conversion requires staying within or managing tax brackets (most common)55- `LIQUIDITY_CONSTRAINT` — client may lack outside funds to pay conversion taxes56- `RMD_NEAR_TERM` — RMDs starting within ~5 years, reducing conversion runway5758## Conversion Plan Design5960### If SUITABLE / BORDERLINE611. Determine `first_conversion_year`: typically the current year or next calendar year.622. Determine `conversion_years`: typically from current age to RMD age, or a fixed horizon (e.g., 5–15 years). If already in RMDs, use a shorter window (e.g., 3–5 years) or set to 0 if deferring.633. Determine `total_converted`:64 - Common approach: convert enough to fill the current tax bracket without jumping brackets, or convert a set fraction of the balance over the conversion window.65 - For large balances with short runways, be conservative (e.g., 20–40% of balance).664. `annual_conversion_amount` = `total_converted` / `conversion_years` (rounded to cents).675. `total_conversion_tax` = `total_converted` × `current_marginal_tax_rate` (rounded to cents).68 - If conversions would span multiple brackets, use a blended rate or bracket-by-bracket calculation. A simplified flat-rate estimate is acceptable when bracket boundaries are unknown.6970### If DEFER / NO_CONVERSION71- `first_conversion_year`: set to current year or next year72- `conversion_years`: 073- `conversion_years_positive`: 074- `annual_conversion_amount`: 0.0075- `total_converted`: 0.0076- `total_conversion_tax`: 0.007778## RMD Tax Projections7980### Assumptions (use unless memo states otherwise)81- **Annual growth rate**: 6% or 7% (use 6% as a conservative standard)82- **Horizon**: age 85 or 90, or a consistent fixed year (e.g., 20 years from now). Document the chosen horizon.83- **RMD calculation**: IRS Uniform Lifetime Table (divide prior year-end balance by distribution period)84- **Tax on RMDs**: RMD amount × current marginal tax rate (simplified; can refine if bracket changes are expected)8586### Baseline vs Conversion87- `baseline_rmd_tax_through_horizon`: project RMDs and taxes on the full traditional balance.88- `conversion_rmd_tax_through_horizon`: project RMDs and taxes on the balance **after** subtracting `total_converted`.89- `rmd_tax_savings_through_horizon` = baseline − conversion (must be non-negative if conversion is suitable).9091**Important**: RMDs are calculated on the prior year-end balance. After each RMD, the remaining balance grows at the assumed rate. Sum taxes year-by-year through the horizon.9293## Legacy Projections94- `projected_roth_balance_horizon`: `total_converted` compounded at the growth rate from `first_conversion_year` to `horizon_year`.95- `projected_traditional_balance_horizon`: initial balance minus `total_converted`, then reduced by annual RMDs and compounded by growth rate.96- `heir_tax_profile`:97 - `MOSTLY_TAX_FREE` — majority of heirs are in lower brackets or charity/spouse rollover98 - `MIXED_TAXABLE_AND_TAX_FREE` — mixed heir brackets or partial charity99 - `MOSTLY_TAXABLE` — majority of heirs are in equal or higher brackets100101## Heir Tax Profile Rules102- Spousal rollover → tax-free (counts toward tax-free)103- Charity bequest → tax-free104- Heir in lower bracket than owner → tax-free perspective105- Heir in equal or higher bracket → taxable perspective106- When multiple heirs with mixed brackets → `MIXED_TAXABLE_AND_TAX_FREE` unless one side clearly dominates107108## JSON Output Rules109- All monetary values must be **JSON numbers** (not strings), rounded to **two decimal places**.110- All enum values must match the template exactly (uppercase with underscores).111- `task_id` must match the task directory name (e.g., `train_001`, `test_001`).112- `client_id` should be stable (use the client's name or a slug derived from it).113- `analysis_type` is always `roth_conversion_rmd`.114- All top-level keys listed in `required_top_level_keys` must be present.115- `conversion_plan.conversion_years_positive` should equal `conversion_plan.conversion_years` when all years have conversions; set to 0 when deferring.116- Ensure internal consistency: `total_converted` ≈ `annual_conversion_amount` × `conversion_years` (within rounding).117118## Common Pitfalls1191. **Using strings for numbers** — the template explicitly forbids this.1202. **Ignoring memo-overridden RMD status** — trust the memo over general IRS rules.1213. **Wrong source resolution** — account balances usually come from custodian export, but personal data comes from signed profile; legal/heir data may come from attorney memo.1224. **Inconsistent horizon** — choose a horizon and apply it consistently across baseline and conversion projections.1235. **Forgetting RMDs reduce balance** — legacy traditional balance must account for RMD withdrawals.1246. **Negative tax savings** — if conversion increases projected RMD taxes, reconsider the recommendation.1257. **Heir tax profile misclassification** — consider the *owner's current marginal rate vs heir's expected marginal rate*, not just absolute heir brackets.126127## Calculation Verification Checklist128Before finalizing output, verify:129- [ ] `first_rmd_year` aligns with memo or SECURE 2.0 rules130- [ ] `horizon_year` is reasonable and consistent131- [ ] `baseline_rmd_tax_through_horizon` ≥ `conversion_rmd_tax_through_horizon`132- [ ] `rmd_tax_savings_through_horizon` = baseline − conversion133- [ ] `total_converted` = `annual_conversion_amount` × `conversion_years` (± rounding)134- [ ] `total_conversion_tax` = `total_converted` × rate (or blended rate)135- [ ] `projected_traditional_balance_horizon` < initial balance (unless very long horizon with high growth)136- [ ] `projected_roth_balance_horizon` > `total_converted` (due to growth)137- [ ] `recommendation` enums exactly match template values138- [ ] `source_resolution` enums exactly match template values139- [ ] `task_id` matches the directory/task identifier