changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "description": "Single-stock concentration analysis. All dollar amounts are USD.",
+ "properties": {
+ "advisorBenchmarkLine": {
+ "description": "One-line comparison of the user weight vs the common advisor 10% single-name guideline.",
+ "type": "string"
+ },
+ "concentration": {
+ "description": "Position value / total assets, 0..1.",
+ "type": "number"
+ },
+ "daysUntilLongTerm": {
+ "description": "Days until long-term treatment; 0 when already long-term.",
+ "type": "number"
+ },
+ "hedging": {
+ "description": "Black-Scholes cost of a 1-year 30%-OTM protective put covering the full position.",
+ "properties": {
+ "putPrice": {
+ "description": "Put premium in dollars for the 1-year tenor.",
+ "type": "number"
+ },
+ "riskFreeRate": {
+ "description": "Annualized risk-free rate used in pricing, as a decimal.",
+ "type": "number"
+ },
+ "sigma": {
+ "description": "Annualized volatility used in pricing (explicit/ticker implied vol, else sector realized vol x 1.20).",
+ "type": "number"
+ },
+ "strike": {
+ "description": "Put strike in dollars (70% of position value).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "strike",
+ "putPrice",
+ "sigma",
+ "riskFreeRate"
+ ],
+ "type": "object"
+ },
+ "isLongTermToday": {
+ "description": "True when the position already qualifies for long-term capital gains treatment.",
+ "type": "boolean"
+ },
+ "longTermDate": {
+ "description": "Date the position turns long-term (acquisitionDate + 1 year). ISO 8601 date-time string.",
+ "type": "string"
+ },
+ "lossExposure": {
+ "description": "Dollar damage at 30/50/70% single-stock drawdowns.",
+ "items": {
+ "properties": {
+ "dollarLoss": {
+ "description": "Dollars lost at this drawdown.",
+ "type": "number"
+ },
+ "drop": {
+ "description": "Modeled drawdown as a fraction of position value (0.30, 0.50, 0.70).",
+ "type": "number"
+ },
+ "newConcentration": {
+ "description": "Portfolio concentration (0..1) after the drawdown.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "drop",
+ "dollarLoss",
+ "newConcentration"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "riskBand": {
+ "description": "Qualitative concentration band for the position weight.",
+ "enum": [
+ "Low",
+ "Moderate",
+ "Concentrated",
+ "Highly concentrated",
+ "Extreme"
+ ],
+ "type": "string"
+ },
+ "schedule": {
+ "description": "Sell-down plans over 1, 2, and 3 years; empty when the position is already at or below the target weight.",
+ "items": {
+ "properties": {
+ "endOfHorizonWealth": {
+ "description": "Total after-tax wealth in dollars at the end of the 3-year comparison horizon.",
+ "type": "number"
+ },
+ "planKey": {
+ "description": "Plan identifier.",
+ "enum": [
+ "lump_sum",
+ "two_year",
+ "three_year"
+ ],
+ "type": "string"
+ },
+ "planLabel": {
+ "description": "Human-readable plan name, e.g. \"Sell over 2 years\".",
+ "type": "string"
+ },
+ "savingsVsLumpSum": {
+ "description": "Raw tax saved in dollars vs selling everything today; positive means this plan pays less tax.",
+ "type": "number"
+ },
+ "taxBreakdown": {
+ "description": "Plan-total tax slices, same-rate rows merged.",
+ "items": {
+ "description": "One tax slice: a dollar amount taxed at one rate.",
+ "properties": {
+ "amount": {
+ "description": "Dollars of gain in this slice.",
+ "type": "number"
+ },
+ "label": {
+ "description": "Tax line label, e.g. \"Federal LTCG\", \"NIIT\", \"California\".",
+ "type": "string"
+ },
+ "rate": {
+ "description": "Rate applied to this slice as a decimal (0.15 = 15%).",
+ "type": "number"
+ },
+ "tax": {
+ "description": "Tax in dollars: amount x rate.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "label",
+ "rate",
+ "amount",
+ "tax"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "totalSale": {
+ "description": "Total nominal sale dollars across the plan years.",
+ "type": "number"
+ },
+ "totalTax": {
+ "description": "Total tax in dollars across the plan years.",
+ "type": "number"
+ },
+ "wealthByYear": {
+ "description": "Total wealth in dollars at the end of each year, t = 0..3 (4 points). For charting.",
+ "items": {
+ "type": "number"
+ },
+ "type": "array"
+ },
+ "wealthVsLumpSum": {
+ "description": "End-of-horizon wealth delta in dollars vs the sell-everything-today baseline; positive means this plan ends wealthier.",
+ "type": "number"
+ },
+ "year1IsShortTerm": {
+ "description": "True when the first sale year would be taxed at short-term rates.",
+ "type": "boolean"
+ },
+ "yearlySales": {
+ "description": "One entry per sale year: year (1-indexed), saleAmount, gainAmount, isLongTerm, federalTax, stateTax, totalTax in dollars, plus a per-slice breakdown.",
+ "items": {
+ "properties": {
+ "breakdown": {
+ "description": "Per-rate tax slices for this sale.",
+ "items": {
+ "description": "One tax slice: a dollar amount taxed at one rate.",
+ "properties": {
+ "amount": {
+ "description": "Dollars of gain in this slice.",
+ "type": "number"
+ },
+ "label": {
+ "description": "Tax line label, e.g. \"Federal LTCG\", \"NIIT\", \"California\".",
+ "type": "string"
+ },
+ "rate": {
+ "description": "Rate applied to this slice as a decimal (0.15 = 15%).",
+ "type": "number"
+ },
+ "tax": {
+ "description": "Tax in dollars: amount x rate.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "label",
+ "rate",
+ "amount",
+ "tax"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "federalTax": {
+ "description": "Federal tax in dollars on this sale (including NIIT).",
+ "type": "number"
+ },
+ "gainAmount": {
+ "description": "Taxable gain in dollars within the sale.",
+ "type": "number"
+ },
+ "isLongTerm": {
+ "description": "True when this sale gets long-term capital gains treatment.",
+ "type": "boolean"
+ },
+ "saleAmount": {
+ "description": "Dollars sold this year.",
+ "type": "number"
+ },
+ "stateTax": {
+ "description": "State tax in dollars on this sale.",
+ "type": "number"
+ },
+ "totalTax": {
+ "description": "Total tax in dollars on this sale.",
+ "type": "number"
+ },
+ "year": {
+ "description": "Sale year, 1-indexed.",
+ "type": "number"
+ }
+ },
+ "required": [
+ "year",
+ "saleAmount",
+ "gainAmount",
+ "isLongTerm",
+ "federalTax",
+ "stateTax",
+ "totalTax",
+ "breakdown"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ }
+ },
+ "required": [
+ "planKey",
+ "planLabel",
+ "yearlySales",
+ "totalSale",
+ "totalTax",
+ "endOfHorizonWealth",
+ "savingsVsLumpSum",
+ "wealthVsLumpSum",
+ "year1IsShortTerm",
+ "taxBreakdown",
+ "wealthByYear"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "sectorContextLine": {
+ "description": "One-line volatility/drawdown context for the chosen sector.",
+ "type": "string"
+ },
+ "waitForLtInsight": {
+ "description": "Tax saved by waiting for long-term treatment before selling; null when already long-term or no sale is needed.",
+ "properties": {
+ "daysAway": {
+ "description": "Days until that date.",
+ "type": "number"
+ },
+ "delayedLumpSumTax": {
+ "description": "Tax in dollars on the same sale executed after the long-term date.",
+ "type": "number"
+ },
+ "immediateLumpSumTax": {
+ "description": "Tax in dollars on the full sell-down executed today (short-term rates).",
+ "type": "number"
+ },
+ "longTermDate": {
+ "description": "Date the position turns long-term. ISO 8601 date-time string.",
+ "type": "string"
+ },
+ "savings": {
+ "description": "immediateLumpSumTax - delayedLumpSumTax in dollars (floored at 0).",
+ "type": "number"
+ }
+ },
+ "required": [
+ "longTermDate",
+ "daysAway",
+ "immediateLumpSumTax",
+ "delayedLumpSumTax",
+ "savings"
+ ],
+ "type": [
+ "object",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "concentration",
+ "riskBand",
+ "isLongTermToday",
+ "longTermDate",
+ "daysUntilLongTerm",
+ "lossExposure",
+ "waitForLtInsight",
+ "schedule",
+ "hedging",
+ "sectorContextLine",
+ "advisorBenchmarkLine"
+ ],
+ "type": "object"
+}