Private Wealth Advisory Structured Output Skill
Overview
This skill covers generating structured JSON planning outputs for private wealth advisory engagements. Tasks span Roth conversion and RMD analysis, ILIT Crummey funding, GRAT/CRAT trust comparisons, and estate liquidity action plans.
Environment Setup
The advisory API provides client records at a base URL supplied by the harness. Use that base URL for all HTTP requests.
API Endpoints
Only two endpoints are available:
GET {API_BASE}/api/clients — list all clients
GET {API_BASE}/api/clients/{id} — single client detail
No other endpoints exist for accounts, documents, policies, trusts, profiles, sources, RMD factors, or tax constants. All required data must be derived from the client record plus standard tax and estate-planning rules.
Client Record Schema
Each client object contains:
| Field |
Type |
Description |
| client_id |
string |
Stable identifier (e.g. CLT-1001) |
| household_name |
string |
Display name |
| age |
integer |
Client age in planning_year |
| marital_status |
string |
married / single |
| filing_status |
string |
MFJ / SINGLE / HOH |
| planning_year |
integer |
Current planning year (e.g. 2026) |
| estate_value |
number |
Total gross estate in USD |
| liquid_assets |
number |
Liquid assets available in USD |
| record_status |
string |
active / monitoring |
| advisor_team |
string |
Advisory team assignment |
Task Input Structure
Each task directory contains:
input/
prompt.txt — engagement description and client ID
payloads/
request_memo.md — advisor request memo with specific context
answer_template.json — required output schema and enum definitions
Workflow Steps
- Read the answer template first. It defines all required top-level keys, field types, and allowed enum values.
- Read the request memo for the client ID, engagement type, and planning horizon.
- Fetch client data from
GET {API_BASE}/api/clients/{client_id}.
- Fetch all clients from
GET {API_BASE}/api/clients if you need cross-client context or to verify data.
- Construct the answer JSON conforming exactly to the template.
- Return only the JSON object — no prose outside the JSON.
Output Construction Rules
General JSON Rules
- Return only a JSON object that conforms to
answer_template.json.
- Do not include prose, markdown fences, or commentary outside the JSON.
- Numbers must be JSON numbers, not strings.
- USD amounts must be rounded to cents (two decimal places).
- Dates must be ISO 8601 format (YYYY-MM-DD).
- Object key order is not scored except where noted.
- Every
required_top_level_key from the template must be present.
Task ID and Client ID
task_id: Use the exact task identifier string provided (e.g. "train_001").
client_id: Use the exact client identifier from the request memo and client record (e.g. "CLT-1001").
Analysis Type Mapping
| Engagement Type |
analysis_type value |
| Roth conversion / RMD |
"roth_conversion_rmd" |
| ILIT Crummey funding |
"ilit_crummey_implementation" |
| GRAT vs CRAT comparison |
"trust_comparison" |
| Estate liquidity action plan |
"estate_liquidity_action_plan" |
Task-Specific Templates and Calculation Conventions
1. Roth Conversion / RMD Analysis (roth_conversion_rmd)
Used for: Mercer (train_001), Patel (train_005), and similar.
Required top-level keys: task_id, client_id, analysis_type, recommendation, conversion_plan, rmd_projection, legacy_projection, source_resolution
Recommendation enums:
primary_action: STAGED_ROTH_CONVERSION, DEFER, NO_CONVERSION
suitability: SUITABLE, BORDERLINE, DEFER
risk_flag: TAX_BRACKET_MANAGEMENT, LIQUIDITY_CONSTRAINT, RMD_NEAR_TERM
Conversion plan calculation conventions:
first_conversion_year: The calendar year conversions begin (typically planning_year or planning_year + 1).
conversion_years: Total number of years with planned conversions.
conversion_years_positive: Same as conversion_years (every planned year has a positive conversion amount; set to 0 if NO_CONVERSION).
total_converted = annual_conversion_amount × conversion_years (must be internally consistent).
total_conversion_tax = total_converted × marginal_tax_rate (use the client's top marginal rate based on filing_status and income level; typically 0.35–0.37 for high-net-worth clients).
RMD projection conventions:
horizon_year: From the request memo (e.g. 2046 or 2042).
first_rmd_year: Determined by client birth year and SECURE 2.0 rules:
- Born 1950 or earlier: RMD age 72
- Born 1951–1959: RMD age 73
- Born 1960 or later: RMD age 75
- Compute birth year ≈
planning_year - age. If the exact birth year straddles a boundary, use the age in the planning year to determine the applicable RMD starting age, then compute first_rmd_year = birth_year + rmd_start_age.
rmd_tax_savings_through_horizon = baseline_rmd_tax_through_horizon - conversion_rmd_tax_through_horizon (must be internally consistent and non-negative).
Legacy projection:
heir_tax_profile: MOSTLY_TAX_FREE, MIXED_TAXABLE_AND_TAX_FREE, MOSTLY_TAXABLE — based on the proportion of Roth vs traditional balances at horizon.
Source resolution for Roth/RMD tasks:
controlling_profile_source: SIGNED_PROFILE, ATTORNEY_MEMO, CUSTODIAN_EXPORT, CRM_NOTE, STALE_MARKETING_INTAKE
controlling_account_source: CUSTODIAN_EXPORT, SIGNED_PROFILE, CRM_NOTE
2. ILIT Crummey Implementation (ilit_crummey_implementation)
Used for: Keating (train_002) and similar.
Required top-level keys: task_id, client_id, analysis_type, recommendation, gift_plan, administration, estate_result, source_resolution
Recommendation enums:
primary_action: FUND_WITH_CRUMMEY_NOTICES, USE_LIFETIME_EXEMPTION_FOR_SHORTFALL, USE_NEW_POLICY_OR_ACCEPT_LOOKBACK, DISCLOSE_LOOKBACK_AND_USE_EXEMPTION
suitability: SUITABLE_WITH_ADMINISTRATION, BORDERLINE, NOT_SUITABLE
risk_flag: LOW_IF_FORMALITIES_MET, EXCLUSION_SHORTFALL, THREE_YEAR_LOOKBACK, THREE_YEAR_LOOKBACK_AND_EXCLUSION_SHORTFALL
Gift plan calculation conventions:
planning_year: The year from the client record.
annual_exclusion_per_beneficiary: Gift tax annual exclusion amount for the planning year. For 2026, use $19,000.00 (2024: $18,000, inflation-adjusted forward).
beneficiary_count: Number of Crummey withdrawal power holders (typically children/grandchildren named in the ILIT).
annual_exclusion_capacity = annual_exclusion_per_beneficiary × beneficiary_count
premium_gap = max(0, annual_premium - annual_exclusion_capacity). When capacity covers the full premium, gap is 0.00.
Administration conventions:
notices_required = beneficiary_count (one Crummey notice per beneficiary).
contribution_date: The date contributions are transferred to the ILIT.
notice_due_date: Typically 5 business days after contribution.
withdrawal_window_end: 30 calendar days after notice (the Crummey withdrawal period).
earliest_premium_payment_date: The day after the withdrawal window closes.
dedicated_bank_account_required: true (ILITs require a separate bank account to respect separate-entity status).
Estate result:
estate_inclusion_risk: Use the same value as recommendation.risk_flag.
projected_outside_estate_if_implemented: The death benefit amount kept outside the taxable estate (equals death_benefit when the ILIT is properly structured and no lookback applies).
tax_liquidity_support = death_benefit × estate_tax_rate (typically death_benefit × 0.40), representing the estate tax liquidity the policy provides.
Source resolution for ILIT tasks:
controlling_beneficiary_source: One of the profile source enums.
controlling_policy_source: SIGNED_PROFILE, ATTORNEY_MEMO, CUSTODIAN_EXPORT, CRM_NOTE
3. Trust Comparison — GRAT vs CRAT (trust_comparison)
Used for: Alvarez (train_003) and similar.
Required top-level keys: task_id, client_id, analysis_type, recommendation, estate_context, grat, crat, source_resolution
Recommendation:
preferred_strategy: GRAT or CRAT — choose based on whether the client's priority is family transfer or philanthropy.
rationale_code: CHILDREN_TRANSFER_PRIORITY (when recommending GRAT) or PHILANTHROPIC_PRIORITY (when recommending CRAT).
alternate_role: If GRAT is preferred → SECONDARY_CHARITABLE_TOOL; if CRAT is preferred → SECONDARY_FAMILY_TRANSFER_TOOL.
Estate context calculation:
taxable_estate: The client's estate_value from the API.
estate_tax_exposure: (taxable_estate - applicable_exemption) × 0.40, clamped to a minimum of 0. For 2026, the applicable exemption depends on filing_status and whether TCJA provisions apply:
- MFJ: approximately $27,980,000 (if TCJA extended) or approximately $14,400,000 (if TCJA sunsets)
- SINGLE: approximately $13,990,000 (if TCJA extended) or approximately $7,200,000 (if TCJA sunsets)
liquidity_gap_before_planning = max(0, estate_tax_exposure - liquid_assets)
GRAT:
term_years: Typically 2–5 years for a short-term rolling GRAT strategy.
mortality_inclusion_risk: Always TERM_SURVIVAL_REQUIRED (the grantor must outlive the GRAT term for estate tax exclusion).
estimated_estate_tax_reduction = projected_remainder_to_heirs × 0.40 (the remainder passes estate-tax-free if the grantor survives the term).
CRAT:
family_transfer_fit: LOW, MODERATE, or HIGH — typically LOW when family transfer is the primary goal, since the charitable remainder goes to charity, not heirs.
Source resolution for trust comparison:
controlling_goal_source: One of the profile source enums.
controlling_asset_source: ATTORNEY_MEMO, SIGNED_PROFILE, CRM_NOTE
4. Estate Liquidity Action Plan (estate_liquidity_action_plan)
Used for: Chen (train_004) and similar.
Required top-level keys: task_id, client_id, analysis_type, recommendation, estate_context, ilit, trust_transfer, action_set, source_resolution
Recommendation enums:
primary_action: COMBINE_ILIT_AND_GRAT, CRAT_WITH_LIQUIDITY_REVIEW, ILIT_WITH_EXEMPTION_REVIEW
sequencing: ILIT_FIRST_THEN_GRAT, TRUST_DECISION_FIRST, ILIT_FIRST_THEN_ATTORNEY_REVIEW
risk_flag: Same as ILIT risk flags — LOW_IF_FORMALITIES_MET, EXCLUSION_SHORTFALL, THREE_YEAR_LOOKBACK, THREE_YEAR_LOOKBACK_AND_EXCLUSION_SHORTFALL
Action set:
- Must be a JSON array of enum strings from:
ATTORNEY_DRAFT_REVIEW, CRAT_FOR_CHARITABLE_REMAINDER, GRAT_FOR_APPRECIATING_SHARES, ILIT_CRUMMEY_NOTICE_CYCLE, LIFETIME_EXEMPTION_ALLOCATION
- Must be sorted alphabetically. This is explicitly scored.
Source resolution for estate liquidity tasks:
controlling_goal_source: One of the profile source enums.
controlling_policy_source: SIGNED_PROFILE, ATTORNEY_MEMO, CUSTODIAN_EXPORT, CRM_NOTE
Source Resolution General Rules
When client records conflict (imported from different advisory systems at different times), the source_resolution block declares which source controls:
| Source Enum |
Typical Priority |
When to Use |
SIGNED_PROFILE |
Highest |
Client-signed financial profile |
ATTORNEY_MEMO |
High |
Attorney-prepared legal memorandum |
CUSTODIAN_EXPORT |
High for accounts |
Direct custodian data feed |
CRM_NOTE |
Medium |
Advisor notes from CRM |
STALE_MARKETING_INTAKE |
Low |
Old marketing intake form — overrides only when newer sources are unavailable |
Default resolution hierarchy:
- Profile/personal data:
SIGNED_PROFILE > ATTORNEY_MEMO > CUSTODIAN_EXPORT > CRM_NOTE > STALE_MARKETING_INTAKE
- Account/asset data:
CUSTODIAN_EXPORT > SIGNED_PROFILE > CRM_NOTE
- Legal/trust data:
ATTORNEY_MEMO > SIGNED_PROFILE > CRM_NOTE
- Policy/insurance data:
ATTORNEY_MEMO > SIGNED_PROFILE > CUSTODIAN_EXPORT > CRM_NOTE
Tax Constants Reference
| Constant |
2026 Value |
Notes |
| Estate tax rate |
40% |
Federal estate tax rate above exemption |
| Gift tax annual exclusion |
$19,000 |
Per donee, inflation-adjusted from $18,000 (2024) |
| Top marginal income tax rate |
37% |
MFJ: income over $731,200; SINGLE: over $609,350 |
| Second-highest marginal rate |
35% |
MFJ: $487,451–$731,200; SINGLE: $243,726–$609,350 |
RMD Starting Ages (SECURE 2.0):
| Birth Year |
RMD Age |
| 1950 or earlier |
72 |
| 1951–1959 |
73 |
| 1960 or later |
75 |
To compute birth_year: planning_year - age (accounting for whether the birthday has already occurred in the planning year).
Common Pitfalls
Missing answer wrapper during training: The judge API requires {"task_id": "...", "answer": {...}}. During test solving, output only the inner JSON (no wrapper).
Internal inconsistency: Ensure derived values are mathematically consistent:
total_converted = annual_conversion_amount × conversion_years
rmd_tax_savings = baseline_rmd_tax - conversion_rmd_tax (must be non-negative)
premium_gap = max(0, annual_premium - annual_exclusion_capacity)
annual_exclusion_capacity = annual_exclusion_per_beneficiary × beneficiary_count
notices_required = beneficiary_count
Wrong RMD age: Apply SECURE 2.0 rules based on computed birth year, not age alone. A 72-year-old in 2026 was born in 1954 and falls under the age-73 rule (born 1951–1959), so their first RMD year is 2027, not 2026.
action_set not sorted alphabetically: The estate liquidity template explicitly requires alphabetical sorting. Unsorted arrays are scored as incorrect.
Numbers as strings: All numeric fields must be JSON number literals (e.g. 150000.00), not quoted strings (e.g. "150000.00").
Non-ISO dates: All date fields must be YYYY-MM-DD format.
Missing top-level keys: Every key listed in required_top_level_keys must appear in the output. Missing keys result in scoring penalties.
Wrong enum values: Only use the exact enum strings from the template. Near-matches or plausible synonyms are scored as incorrect.
Using NO_CONVERSION with non-zero conversion plan: If primary_action is NO_CONVERSION, set conversion_years, conversion_years_positive, annual_conversion_amount, total_converted, and total_conversion_tax all to 0.
Estate tax exemption assumptions: Verify whether the planning year falls under TCJA or post-TCJA exemption levels. The 2026 transition year is critical for high-net-worth clients.
Not fetching client data: Always call GET {API_BASE}/api/clients/{client_id} to retrieve the authoritative client record before constructing the answer.
Liquidity gap sign: liquidity_gap_before_planning is max(0, estate_tax_exposure - liquid_assets). It represents the shortfall, not the surplus.
Data Derivation When API Data Is Sparse
The advisory API provides only the client summary record. When template fields require data not directly available from the API (e.g. IRA balances, policy death benefits, trust funding amounts), derive reasonable estimates from:
- Traditional IRA balance: Typically a substantial portion of
estate_value for near-retirement clients. Estimate as 15–40% of estate value depending on age and liquidity profile.
- Roth IRA balance: The existing Roth balance (if mentioned in the memo as "already has a Roth").
- ILIT death benefit: Typically sized to cover the projected estate tax exposure plus a buffer.
- GRAT funding amount: Typically a liquid or closely-held asset expected to appreciate, sized to the liquidity event proceeds.
- Growth rates: Use 5–7% nominal annual growth for diversified portfolios when projecting balances to the horizon year.
- RMD calculations: Apply the IRS Uniform Lifetime Table factors. For a 73-year-old, the distribution period is approximately 26.5 years; first-year RMD ≈ account_balance / distribution_period.
1---2name: reflect-3-attempt-02-503description: Private Wealth Advisory Structured Output Skill4---5# Private Wealth Advisory Structured Output Skill67## Overview89This skill covers generating structured JSON planning outputs for private wealth advisory engagements. Tasks span Roth conversion and RMD analysis, ILIT Crummey funding, GRAT/CRAT trust comparisons, and estate liquidity action plans.1011## Environment Setup1213The advisory API provides client records at a base URL supplied by the harness. Use that base URL for all HTTP requests.1415### API Endpoints1617Only two endpoints are available:1819```20GET {API_BASE}/api/clients — list all clients21GET {API_BASE}/api/clients/{id} — single client detail22```2324No other endpoints exist for accounts, documents, policies, trusts, profiles, sources, RMD factors, or tax constants. All required data must be derived from the client record plus standard tax and estate-planning rules.2526### Client Record Schema2728Each client object contains:2930| Field | Type | Description |31|-------|------|-------------|32| client_id | string | Stable identifier (e.g. CLT-1001) |33| household_name | string | Display name |34| age | integer | Client age in planning_year |35| marital_status | string | married / single |36| filing_status | string | MFJ / SINGLE / HOH |37| planning_year | integer | Current planning year (e.g. 2026) |38| estate_value | number | Total gross estate in USD |39| liquid_assets | number | Liquid assets available in USD |40| record_status | string | active / monitoring |41| advisor_team | string | Advisory team assignment |4243## Task Input Structure4445Each task directory contains:4647```48input/49 prompt.txt — engagement description and client ID50 payloads/51 request_memo.md — advisor request memo with specific context52 answer_template.json — required output schema and enum definitions53```5455### Workflow Steps56571. **Read the answer template first.** It defines all required top-level keys, field types, and allowed enum values.582. **Read the request memo** for the client ID, engagement type, and planning horizon.593. **Fetch client data** from `GET {API_BASE}/api/clients/{client_id}`.604. **Fetch all clients** from `GET {API_BASE}/api/clients` if you need cross-client context or to verify data.615. **Construct the answer JSON** conforming exactly to the template.626. **Return only the JSON object** — no prose outside the JSON.6364## Output Construction Rules6566### General JSON Rules6768- Return **only** a JSON object that conforms to `answer_template.json`.69- Do not include prose, markdown fences, or commentary outside the JSON.70- Numbers must be **JSON numbers**, not strings.71- USD amounts must be **rounded to cents** (two decimal places).72- Dates must be **ISO 8601 format** (YYYY-MM-DD).73- Object key order is not scored except where noted.74- Every `required_top_level_key` from the template **must be present**.7576### Task ID and Client ID7778- `task_id`: Use the exact task identifier string provided (e.g. `"train_001"`).79- `client_id`: Use the exact client identifier from the request memo and client record (e.g. `"CLT-1001"`).8081### Analysis Type Mapping8283| Engagement Type | analysis_type value |84|----------------|---------------------|85| Roth conversion / RMD | `"roth_conversion_rmd"` |86| ILIT Crummey funding | `"ilit_crummey_implementation"` |87| GRAT vs CRAT comparison | `"trust_comparison"` |88| Estate liquidity action plan | `"estate_liquidity_action_plan"` |8990## Task-Specific Templates and Calculation Conventions9192### 1. Roth Conversion / RMD Analysis (roth_conversion_rmd)9394Used for: Mercer (train_001), Patel (train_005), and similar.9596**Required top-level keys:** `task_id`, `client_id`, `analysis_type`, `recommendation`, `conversion_plan`, `rmd_projection`, `legacy_projection`, `source_resolution`9798**Recommendation enums:**99- `primary_action`: `STAGED_ROTH_CONVERSION`, `DEFER`, `NO_CONVERSION`100- `suitability`: `SUITABLE`, `BORDERLINE`, `DEFER`101- `risk_flag`: `TAX_BRACKET_MANAGEMENT`, `LIQUIDITY_CONSTRAINT`, `RMD_NEAR_TERM`102103**Conversion plan calculation conventions:**104- `first_conversion_year`: The calendar year conversions begin (typically `planning_year` or `planning_year + 1`).105- `conversion_years`: Total number of years with planned conversions.106- `conversion_years_positive`: Same as `conversion_years` (every planned year has a positive conversion amount; set to 0 if `NO_CONVERSION`).107- `total_converted` = `annual_conversion_amount × conversion_years` (must be internally consistent).108- `total_conversion_tax` = `total_converted × marginal_tax_rate` (use the client's top marginal rate based on filing_status and income level; typically 0.35–0.37 for high-net-worth clients).109110**RMD projection conventions:**111- `horizon_year`: From the request memo (e.g. 2046 or 2042).112- `first_rmd_year`: Determined by client birth year and SECURE 2.0 rules:113 - Born 1950 or earlier: RMD age 72114 - Born 1951–1959: RMD age 73115 - Born 1960 or later: RMD age 75116 - Compute birth year ≈ `planning_year - age`. If the exact birth year straddles a boundary, use the age in the planning year to determine the applicable RMD starting age, then compute `first_rmd_year = birth_year + rmd_start_age`.117- `rmd_tax_savings_through_horizon` = `baseline_rmd_tax_through_horizon - conversion_rmd_tax_through_horizon` (must be internally consistent and non-negative).118119**Legacy projection:**120- `heir_tax_profile`: `MOSTLY_TAX_FREE`, `MIXED_TAXABLE_AND_TAX_FREE`, `MOSTLY_TAXABLE` — based on the proportion of Roth vs traditional balances at horizon.121122**Source resolution for Roth/RMD tasks:**123- `controlling_profile_source`: `SIGNED_PROFILE`, `ATTORNEY_MEMO`, `CUSTODIAN_EXPORT`, `CRM_NOTE`, `STALE_MARKETING_INTAKE`124- `controlling_account_source`: `CUSTODIAN_EXPORT`, `SIGNED_PROFILE`, `CRM_NOTE`125126### 2. ILIT Crummey Implementation (ilit_crummey_implementation)127128Used for: Keating (train_002) and similar.129130**Required top-level keys:** `task_id`, `client_id`, `analysis_type`, `recommendation`, `gift_plan`, `administration`, `estate_result`, `source_resolution`131132**Recommendation enums:**133- `primary_action`: `FUND_WITH_CRUMMEY_NOTICES`, `USE_LIFETIME_EXEMPTION_FOR_SHORTFALL`, `USE_NEW_POLICY_OR_ACCEPT_LOOKBACK`, `DISCLOSE_LOOKBACK_AND_USE_EXEMPTION`134- `suitability`: `SUITABLE_WITH_ADMINISTRATION`, `BORDERLINE`, `NOT_SUITABLE`135- `risk_flag`: `LOW_IF_FORMALITIES_MET`, `EXCLUSION_SHORTFALL`, `THREE_YEAR_LOOKBACK`, `THREE_YEAR_LOOKBACK_AND_EXCLUSION_SHORTFALL`136137**Gift plan calculation conventions:**138- `planning_year`: The year from the client record.139- `annual_exclusion_per_beneficiary`: Gift tax annual exclusion amount for the planning year. For 2026, use **$19,000.00** (2024: $18,000, inflation-adjusted forward).140- `beneficiary_count`: Number of Crummey withdrawal power holders (typically children/grandchildren named in the ILIT).141- `annual_exclusion_capacity` = `annual_exclusion_per_beneficiary × beneficiary_count`142- `premium_gap` = `max(0, annual_premium - annual_exclusion_capacity)`. When capacity covers the full premium, gap is 0.00.143144**Administration conventions:**145- `notices_required` = `beneficiary_count` (one Crummey notice per beneficiary).146- `contribution_date`: The date contributions are transferred to the ILIT.147- `notice_due_date`: Typically 5 business days after contribution.148- `withdrawal_window_end`: 30 calendar days after notice (the Crummey withdrawal period).149- `earliest_premium_payment_date`: The day after the withdrawal window closes.150- `dedicated_bank_account_required`: `true` (ILITs require a separate bank account to respect separate-entity status).151152**Estate result:**153- `estate_inclusion_risk`: Use the same value as `recommendation.risk_flag`.154- `projected_outside_estate_if_implemented`: The death benefit amount kept outside the taxable estate (equals `death_benefit` when the ILIT is properly structured and no lookback applies).155- `tax_liquidity_support` = `death_benefit × estate_tax_rate` (typically `death_benefit × 0.40`), representing the estate tax liquidity the policy provides.156157**Source resolution for ILIT tasks:**158- `controlling_beneficiary_source`: One of the profile source enums.159- `controlling_policy_source`: `SIGNED_PROFILE`, `ATTORNEY_MEMO`, `CUSTODIAN_EXPORT`, `CRM_NOTE`160161### 3. Trust Comparison — GRAT vs CRAT (trust_comparison)162163Used for: Alvarez (train_003) and similar.164165**Required top-level keys:** `task_id`, `client_id`, `analysis_type`, `recommendation`, `estate_context`, `grat`, `crat`, `source_resolution`166167**Recommendation:**168- `preferred_strategy`: `GRAT` or `CRAT` — choose based on whether the client's priority is family transfer or philanthropy.169- `rationale_code`: `CHILDREN_TRANSFER_PRIORITY` (when recommending GRAT) or `PHILANTHROPIC_PRIORITY` (when recommending CRAT).170- `alternate_role`: If GRAT is preferred → `SECONDARY_CHARITABLE_TOOL`; if CRAT is preferred → `SECONDARY_FAMILY_TRANSFER_TOOL`.171172**Estate context calculation:**173- `taxable_estate`: The client's `estate_value` from the API.174- `estate_tax_exposure`: `(taxable_estate - applicable_exemption) × 0.40`, clamped to a minimum of 0. For 2026, the applicable exemption depends on filing_status and whether TCJA provisions apply:175 - MFJ: approximately $27,980,000 (if TCJA extended) or approximately $14,400,000 (if TCJA sunsets)176 - SINGLE: approximately $13,990,000 (if TCJA extended) or approximately $7,200,000 (if TCJA sunsets)177- `liquidity_gap_before_planning` = `max(0, estate_tax_exposure - liquid_assets)`178179**GRAT:**180- `term_years`: Typically 2–5 years for a short-term rolling GRAT strategy.181- `mortality_inclusion_risk`: Always `TERM_SURVIVAL_REQUIRED` (the grantor must outlive the GRAT term for estate tax exclusion).182- `estimated_estate_tax_reduction` = `projected_remainder_to_heirs × 0.40` (the remainder passes estate-tax-free if the grantor survives the term).183184**CRAT:**185- `family_transfer_fit`: `LOW`, `MODERATE`, or `HIGH` — typically `LOW` when family transfer is the primary goal, since the charitable remainder goes to charity, not heirs.186187**Source resolution for trust comparison:**188- `controlling_goal_source`: One of the profile source enums.189- `controlling_asset_source`: `ATTORNEY_MEMO`, `SIGNED_PROFILE`, `CRM_NOTE`190191### 4. Estate Liquidity Action Plan (estate_liquidity_action_plan)192193Used for: Chen (train_004) and similar.194195**Required top-level keys:** `task_id`, `client_id`, `analysis_type`, `recommendation`, `estate_context`, `ilit`, `trust_transfer`, `action_set`, `source_resolution`196197**Recommendation enums:**198- `primary_action`: `COMBINE_ILIT_AND_GRAT`, `CRAT_WITH_LIQUIDITY_REVIEW`, `ILIT_WITH_EXEMPTION_REVIEW`199- `sequencing`: `ILIT_FIRST_THEN_GRAT`, `TRUST_DECISION_FIRST`, `ILIT_FIRST_THEN_ATTORNEY_REVIEW`200- `risk_flag`: Same as ILIT risk flags — `LOW_IF_FORMALITIES_MET`, `EXCLUSION_SHORTFALL`, `THREE_YEAR_LOOKBACK`, `THREE_YEAR_LOOKBACK_AND_EXCLUSION_SHORTFALL`201202**Action set:**203- Must be a JSON array of enum strings from: `ATTORNEY_DRAFT_REVIEW`, `CRAT_FOR_CHARITABLE_REMAINDER`, `GRAT_FOR_APPRECIATING_SHARES`, `ILIT_CRUMMEY_NOTICE_CYCLE`, `LIFETIME_EXEMPTION_ALLOCATION`204- **Must be sorted alphabetically.** This is explicitly scored.205206**Source resolution for estate liquidity tasks:**207- `controlling_goal_source`: One of the profile source enums.208- `controlling_policy_source`: `SIGNED_PROFILE`, `ATTORNEY_MEMO`, `CUSTODIAN_EXPORT`, `CRM_NOTE`209210## Source Resolution General Rules211212When client records conflict (imported from different advisory systems at different times), the `source_resolution` block declares which source controls:213214| Source Enum | Typical Priority | When to Use |215|-------------|-----------------|-------------|216| `SIGNED_PROFILE` | Highest | Client-signed financial profile |217| `ATTORNEY_MEMO` | High | Attorney-prepared legal memorandum |218| `CUSTODIAN_EXPORT` | High for accounts | Direct custodian data feed |219| `CRM_NOTE` | Medium | Advisor notes from CRM |220| `STALE_MARKETING_INTAKE` | Low | Old marketing intake form — overrides only when newer sources are unavailable |221222Default resolution hierarchy:223- **Profile/personal data**: `SIGNED_PROFILE` > `ATTORNEY_MEMO` > `CUSTODIAN_EXPORT` > `CRM_NOTE` > `STALE_MARKETING_INTAKE`224- **Account/asset data**: `CUSTODIAN_EXPORT` > `SIGNED_PROFILE` > `CRM_NOTE`225- **Legal/trust data**: `ATTORNEY_MEMO` > `SIGNED_PROFILE` > `CRM_NOTE`226- **Policy/insurance data**: `ATTORNEY_MEMO` > `SIGNED_PROFILE` > `CUSTODIAN_EXPORT` > `CRM_NOTE`227228## Tax Constants Reference229230| Constant | 2026 Value | Notes |231|----------|-----------|-------|232| Estate tax rate | 40% | Federal estate tax rate above exemption |233| Gift tax annual exclusion | $19,000 | Per donee, inflation-adjusted from $18,000 (2024) |234| Top marginal income tax rate | 37% | MFJ: income over $731,200; SINGLE: over $609,350 |235| Second-highest marginal rate | 35% | MFJ: $487,451–$731,200; SINGLE: $243,726–$609,350 |236237**RMD Starting Ages (SECURE 2.0):**238| Birth Year | RMD Age |239|------------|---------|240| 1950 or earlier | 72 |241| 1951–1959 | 73 |242| 1960 or later | 75 |243244To compute `birth_year`: `planning_year - age` (accounting for whether the birthday has already occurred in the planning year).245246## Common Pitfalls2472481. **Missing `answer` wrapper during training**: The judge API requires `{"task_id": "...", "answer": {...}}`. During test solving, output only the inner JSON (no wrapper).2492502. **Internal inconsistency**: Ensure derived values are mathematically consistent:251 - `total_converted = annual_conversion_amount × conversion_years`252 - `rmd_tax_savings = baseline_rmd_tax - conversion_rmd_tax` (must be non-negative)253 - `premium_gap = max(0, annual_premium - annual_exclusion_capacity)`254 - `annual_exclusion_capacity = annual_exclusion_per_beneficiary × beneficiary_count`255 - `notices_required = beneficiary_count`2562573. **Wrong RMD age**: Apply SECURE 2.0 rules based on computed birth year, not age alone. A 72-year-old in 2026 was born in 1954 and falls under the age-73 rule (born 1951–1959), so their first RMD year is 2027, not 2026.2582594. **action_set not sorted alphabetically**: The estate liquidity template explicitly requires alphabetical sorting. Unsorted arrays are scored as incorrect.2602615. **Numbers as strings**: All numeric fields must be JSON number literals (e.g. `150000.00`), not quoted strings (e.g. `"150000.00"`).2622636. **Non-ISO dates**: All date fields must be YYYY-MM-DD format.2642657. **Missing top-level keys**: Every key listed in `required_top_level_keys` must appear in the output. Missing keys result in scoring penalties.2662678. **Wrong enum values**: Only use the exact enum strings from the template. Near-matches or plausible synonyms are scored as incorrect.2682699. **Using `NO_CONVERSION` with non-zero conversion plan**: If `primary_action` is `NO_CONVERSION`, set `conversion_years`, `conversion_years_positive`, `annual_conversion_amount`, `total_converted`, and `total_conversion_tax` all to 0.27027110. **Estate tax exemption assumptions**: Verify whether the planning year falls under TCJA or post-TCJA exemption levels. The 2026 transition year is critical for high-net-worth clients.27227311. **Not fetching client data**: Always call `GET {API_BASE}/api/clients/{client_id}` to retrieve the authoritative client record before constructing the answer.27427512. **Liquidity gap sign**: `liquidity_gap_before_planning` is `max(0, estate_tax_exposure - liquid_assets)`. It represents the shortfall, not the surplus.276277## Data Derivation When API Data Is Sparse278279The advisory API provides only the client summary record. When template fields require data not directly available from the API (e.g. IRA balances, policy death benefits, trust funding amounts), derive reasonable estimates from:280281- **Traditional IRA balance**: Typically a substantial portion of `estate_value` for near-retirement clients. Estimate as 15–40% of estate value depending on age and liquidity profile.282- **Roth IRA balance**: The existing Roth balance (if mentioned in the memo as "already has a Roth").283- **ILIT death benefit**: Typically sized to cover the projected estate tax exposure plus a buffer.284- **GRAT funding amount**: Typically a liquid or closely-held asset expected to appreciate, sized to the liquidity event proceeds.285- **Growth rates**: Use 5–7% nominal annual growth for diversified portfolios when projecting balances to the horizon year.286- **RMD calculations**: Apply the IRS Uniform Lifetime Table factors. For a 73-year-old, the distribution period is approximately 26.5 years; first-year RMD ≈ account_balance / distribution_period.