[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-anthropic-dcf-model":3,"mdc-jregaa-key":42,"related-repo-anthropic-dcf-model":7511,"related-org-anthropic-dcf-model":7623},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":32,"repoUrl":33,"updatedAt":34,"license":35,"forks":36,"topics":37,"repo":38,"sourceUrl":40,"mdContent":41},"dcf-model","create DCF models for equity valuation","Real DCF (Discounted Cash Flow) model creation for equity valuation. Retrieves financial data from SEC filings and analyst reports, builds comprehensive cash flow projections with proper WACC calculations, performs sensitivity analysis, and outputs professional Excel models with executive summaries. Use when users need to value a company using DCF methodology, request intrinsic value analysis, or ask for detailed financial modeling with growth projections and terminal value calculations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"anthropic","Anthropic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fanthropic.png","anthropics",[13,17,20,23,26,29],{"name":14,"slug":15,"type":16},"Valuation","valuation","tag",{"name":18,"slug":19,"type":16},"Financial Modeling","financial-modeling",{"name":21,"slug":22,"type":16},"Finance","finance",{"name":24,"slug":25,"type":16},"SEC Filings","sec-filings",{"name":27,"slug":28,"type":16},"Investment Banking","investment-banking",{"name":30,"slug":31,"type":16},"DCF","dcf",33636,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services","2026-05-15T06:08:42.744482",null,4964,[],{"repoUrl":33,"stars":32,"forks":36,"topics":39,"description":35},[],"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services\u002Ftree\u002FHEAD\u002Fplugins\u002Fagent-plugins\u002Fpitch-agent\u002Fskills\u002Fdcf-model","---\nname: dcf-model\ndescription: Real DCF (Discounted Cash Flow) model creation for equity valuation. Retrieves financial data from SEC filings and analyst reports, builds comprehensive cash flow projections with proper WACC calculations, performs sensitivity analysis, and outputs professional Excel models with executive summaries. Use when users need to value a company using DCF methodology, request intrinsic value analysis, or ask for detailed financial modeling with growth projections and terminal value calculations.\n---\n\n# DCF Model Builder\n\n## Overview\n\nThis skill creates institutional-quality DCF models for equity valuation following investment banking standards. Each analysis produces a detailed Excel model (with sensitivity analysis included at the bottom of the DCF sheet).\n\n## Tools\n\n- Default to using all of the information provided by the user and MCP servers available for data sourcing.\n\n## Critical Constraints - Read These First\n\nThese constraints apply throughout all DCF model building. Review before starting:\n\n**Environment: Office JS vs Python\u002Fopenpyxl:**\n- **If running inside Excel (Office Add-in \u002F Office JS environment):** Use Office JS directly — do NOT use Python\u002Fopenpyxl. Write formulas via `range.formulas = [[\"=D19*(1+$B$8)\"]]`. No separate recalc step needed; Excel calculates natively. Use `range.format.*` for styling. The same formulas-over-hardcodes rule applies: set `.formulas`, never `.values` for derived cells.\n- **If generating a standalone .xlsx file (no live Excel session):** Use Python\u002Fopenpyxl as described below, then run `recalc.py` before delivery.\n- The rest of this skill uses openpyxl examples — translate to Office JS API calls when in that environment, but all principles (formula strings, cell comments, section checkpoints, sensitivity table loops) apply identically.\n\n**⚠️ Office JS merged cell pitfall:** When building section headers with merged cells, do NOT call `.merge()` then set `.values` on the merged range — Office JS still reports the range's original dimensions and will throw `InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range`. Instead, write the value to the top-left cell alone, then merge and format the full range:\n\n```js\n\u002F\u002F WRONG — throws InvalidArgument:\nconst hdr = ws.getRange(\"A7:H7\");\nhdr.merge();\nhdr.values = [[\"MARKET DATA & KEY INPUTS\"]];  \u002F\u002F 1×1 array vs 1×8 range → fails\n\n\u002F\u002F CORRECT — value first on single cell, then merge + format the range:\nws.getRange(\"A7\").values = [[\"MARKET DATA & KEY INPUTS\"]];\nconst hdr = ws.getRange(\"A7:H7\");\nhdr.merge();\nhdr.format.fill.color = \"#1F4E79\";\nhdr.format.font.bold = true;\nhdr.format.font.color = \"#FFFFFF\";\n```\n\nThis applies to every merged section header in the DCF (market data, scenario blocks, cash flow projection, terminal value, valuation summary, sensitivity tables).\n\n**Formulas Over Hardcodes (NON-NEGOTIABLE):**\n- Every projection, margin, discount factor, PV, and sensitivity cell MUST be a live Excel formula — never a value computed in Python and written as a number\n- When using openpyxl: `ws[\"D20\"] = \"=D19*(1+$B$8)\"` is correct; `ws[\"D20\"] = calculated_revenue` is WRONG\n- The only hardcoded numbers permitted are: (1) raw historical inputs, (2) assumption drivers (growth rates, WACC inputs, terminal g), (3) current market data (share price, debt balance)\n- If you catch yourself computing something in Python and writing the result — STOP. The model must flex when the user changes an assumption.\n\n**Verify Step-by-Step With the User (DO NOT build end-to-end):**\n- After data retrieval → show the user the raw inputs block (revenue, margins, shares, net debt) and confirm before projecting\n- After revenue projections → show the projected top line and growth rates, confirm before building margin build\n- After FCF build → show the full FCF schedule, confirm logic before computing WACC\n- After WACC → show the calculation and inputs, confirm before discounting\n- After terminal value + PV → show the equity bridge (EV → equity value → per share), confirm before sensitivity tables\n- Catch errors at each stage — a wrong margin assumption discovered after sensitivity tables are built means rebuilding everything downstream\n\n**Sensitivity Tables:**\n- **Use an ODD number of rows and columns** (standard: 5×5, sometimes 7×7) — this guarantees a true center cell\n- **Center cell = base case.** Build the axis values so the middle row header and middle column header exactly equal the model's actual assumptions (e.g., if base WACC = 9.0%, the middle row is 9.0%; if terminal g = 3.0%, the middle column is 3.0%). The center cell's output must therefore equal the model's actual implied share price — this is the sanity check that the table is built correctly.\n- **Highlight the center cell** with the medium-blue fill (`#BDD7EE`) + bold font so it's immediately visible which cell is the base case.\n- Populate ALL cells (typically 3 tables × 25 cells = 75) with full DCF recalculation formulas\n- Use openpyxl loops (or Office JS loops) to write formulas programmatically\n- NO placeholder text, NO linear approximations, NO manual steps required\n- Each cell must recalculate full DCF for that assumption combination\n\n**Cell Comments:**\n- Add cell comments AS each hardcoded value is created\n- Format: \"Source: [System\u002FDocument], [Date], [Reference], [URL if applicable]\"\n- Every blue input must have a comment before moving to next section\n- Do not defer to end or write \"TODO: add source\"\n\n**Model Layout Planning:**\n- Define ALL section row positions BEFORE writing any formulas\n- Write ALL headers and labels first\n- Write ALL section dividers and blank rows second\n- THEN write formulas using the locked row positions\n- Test formulas immediately after creation\n\n**Formula Recalculation:**\n- Run `python recalc.py model.xlsx 30` before delivery\n- Fix ALL errors until status is \"success\"\n- Zero formula errors required (#REF!, #DIV\u002F0!, #VALUE!, etc.)\n\n**Scenario Blocks:**\n- Create separate blocks for Bear\u002FBase\u002FBull cases\n- Show assumptions horizontally across projection years within each block\n- Use IF formulas: `=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell]))`\n- Verify formulas reference correct scenario block cells\n\n## DCF Process Workflow\n\n### Step 1: Data Retrieval and Validation\n\nFetch data from MCP servers, user provided data, and the web.\n\n**Data Sources Priority:**\n1. **MCP Servers** (if configured) - Structured financial data from providers like Daloopa\n2. **User-Provided Data** - Historical financials from their research\n3. **Web Search\u002FFetch** - Current prices, beta, debt and cash when needed\n\n**Validation Checklist:**\n- Verify net debt vs net cash (critical for valuation)\n- Confirm diluted shares outstanding (check for recent buybacks\u002Fissuances)\n- Validate historical margins are consistent with business model\n- Cross-check revenue growth rates with industry benchmarks\n- Verify tax rate is reasonable (typically 21-28%)\n\n### Step 2: Historical Analysis (3-5 years)\n\nAnalyze and document:\n- **Revenue growth trends**: Calculate CAGR, identify drivers\n- **Margin progression**: Track gross margin, EBIT margin, FCF margin\n- **Capital intensity**: D&A and CapEx as % of revenue\n- **Working capital efficiency**: NWC changes as % of revenue growth\n- **Return metrics**: ROIC, ROE trends\n\nCreate summary tables showing:\n```\nHistorical Metrics (LTM):\nRevenue: $X million\nRevenue growth: X% CAGR\nGross margin: X%\nEBIT margin: X%\nD&A % of revenue: X%\nCapEx % of revenue: X%\nFCF margin: X%\n```\n\n### Step 3: Build Revenue Projections\n\n**Methodology:**\n1. Start with latest actual revenue (LTM or most recent fiscal year)\n2. Apply growth rates for each projection year\n3. Show both dollar amounts AND calculated growth %\n\n**Growth Rate Framework:**\n- Year 1-2: Higher growth reflecting near-term visibility\n- Year 3-4: Gradual moderation toward industry average\n- Year 5+: Approaching terminal growth rate\n\n**Formula structure:**\n- Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)\n- Growth %(Year N) = Revenue(Year N) \u002F Revenue(Year N-1) - 1\n\n**Three-scenario approach:**\n```\nBear Case: Conservative growth (e.g., 8-12%)\nBase Case: Most likely scenario (e.g., 12-16%)\nBull Case: Optimistic growth (e.g., 16-20%)\n```\n\n### Step 4: Operating Expense Modeling\n\n**Fixed\u002FVariable Cost Analysis:**\n\nOperating expenses should model realistic operating leverage:\n- **Sales & Marketing**: Typically 15-40% of revenue depending on business model\n- **Research & Development**: Typically 10-30% for technology companies\n- **General & Administrative**: Typically 8-15% of revenue, shows leverage as company scales\n\n**Key principles:**\n- ALL percentages based on REVENUE, not gross profit\n- Model operating leverage: % should decline as revenue scales\n- Maintain separate line items for S&M, R&D, G&A\n- Calculate EBIT = Gross Profit - Total OpEx\n\n**Margin expansion framework:**\n```\nCurrent State → Target State (Year 5)\nGross Margin: X% → Y% (justify based on scale, efficiency)\nEBIT Margin: X% → Y% (result of revenue growth + opex leverage)\n```\n\n### Step 5: Free Cash Flow Calculation\n\n**Build FCF in proper sequence:**\n\n```\nEBIT\n(-) Taxes (EBIT × Tax Rate)\n= NOPAT (Net Operating Profit After Tax)\n(+) D&A (non-cash expense, % of revenue)\n(-) CapEx (% of revenue, typically 4-8%)\n(-) Δ NWC (change in working capital)\n= Unlevered Free Cash Flow\n```\n\n**Working Capital Modeling:**\n- Calculate as % of revenue change (delta revenue)\n- Typical range: -2% to +2% of revenue change\n- Negative number = source of cash (working capital release)\n- Positive number = use of cash (working capital build)\n\n**Maintenance vs Growth CapEx:**\n- Maintenance CapEx: Sustains current operations (~2-3% revenue)\n- Growth CapEx: Supports expansion (additional 2-5% revenue)\n- Total CapEx should align with company's growth strategy\n\n### Step 6: Cost of Capital (WACC) Research\n\n**CAPM Methodology for Cost of Equity:**\n\n```\nCost of Equity = Risk-Free Rate + Beta × Equity Risk Premium\n\nWhere:\n- Risk-Free Rate = Current 10-Year Treasury Yield\n- Beta = 5-year monthly stock beta vs market index\n- Equity Risk Premium = 5.0-6.0% (market standard)\n```\n\n**Cost of Debt Calculation:**\n\n```\nAfter-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)\n\nDetermine Pre-Tax Cost of Debt from:\n- Credit rating (if available)\n- Current yield on company bonds\n- Interest expense \u002F Total Debt from financials\n```\n\n**Capital Structure Weights:**\n\n```\nMarket Value Equity = Current Stock Price × Shares Outstanding\nNet Debt = Total Debt - Cash & Equivalents\nEnterprise Value = Market Cap + Net Debt\n\nEquity Weight = Market Cap \u002F Enterprise Value\nDebt Weight = Net Debt \u002F Enterprise Value\n\nWACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)\n```\n\n**Special Cases:**\n- **Net Cash Position**: If Cash > Debt, Net Debt is NEGATIVE\n  - Debt Weight may be negative\n  - WACC calculation adjusts accordingly\n- **No Debt**: WACC = Cost of Equity\n\n**Typical WACC Ranges:**\n- Large Cap, Stable: 7-9%\n- Growth Companies: 9-12%\n- High Growth\u002FRisk: 12-15%\n\n### Step 7: Discount Rate Application (5-10 Year Forecast)\n\n**Mid-Year Convention:**\n- Cash flows assumed to occur mid-year\n- Discount Period: 0.5, 1.5, 2.5, 3.5, 4.5, etc.\n- Discount Factor = 1 \u002F (1 + WACC)^Period\n\n**Present Value Calculation:**\n```\nFor each projection year:\nPV of FCF = Unlevered FCF × Discount Factor\n\nExample (Year 1):\nFCF = $1,000\nWACC = 10%\nPeriod = 0.5\nDiscount Factor = 1 \u002F (1.10)^0.5 = 0.9535\nPV = $1,000 × 0.9535 = $954\n```\n\n**Projection Period Selection:**\n- **5 years**: Standard for most analyses\n- **7-10 years**: High growth companies with longer runway\n- **3 years**: Mature, stable businesses\n\n### Step 8: Terminal Value Calculation\n\n**Perpetuity Growth Method (Preferred):**\n\n```\nTerminal FCF = Final Year FCF × (1 + Terminal Growth Rate)\nTerminal Value = Terminal FCF \u002F (WACC - Terminal Growth Rate)\n\nCritical Constraint: Terminal Growth \u003C WACC (otherwise infinite value)\n```\n\n**Terminal Growth Rate Selection:**\n- Conservative: 2.0-2.5% (GDP growth rate)\n- Moderate: 2.5-3.5%\n- Aggressive: 3.5-5.0% (only for market leaders)\n\n**Do not exceed**: Risk-free rate or long-term GDP growth\n\n**Exit Multiple Method (Alternative):**\n```\nTerminal Value = Final Year EBITDA × Exit Multiple\n\nWhere Exit Multiple comes from:\n- Industry comparable trading multiples\n- Precedent transaction multiples\n- Typical range: 8-15x EBITDA\n```\n\n**Present Value of Terminal Value:**\n```\nPV of Terminal Value = Terminal Value \u002F (1 + WACC)^Final Period\n\nWhere Final Period accounts for timing:\n5-year model with mid-year convention: Period = 4.5\n```\n\n**Terminal Value Sanity Check:**\n- Should represent 50-70% of Enterprise Value\n- If >75%, model may be over-reliant on terminal assumptions\n- If \u003C40%, check if terminal assumptions are too conservative\n\n### Step 9: Enterprise to Equity Value Bridge\n\n**Valuation Summary Structure:**\n\n```\n(+) Sum of PV of Projected FCFs = $X million\n(+) PV of Terminal Value = $Y million\n= Enterprise Value = $Z million\n\n(-) Net Debt [or + Net Cash if negative] = $A million\n= Equity Value = $B million\n\n÷ Diluted Shares Outstanding = C million shares\n= Implied Price per Share = $XX.XX\n\nCurrent Stock Price = $YY.YY\nImplied Return = (Implied Price \u002F Current Price) - 1 = XX%\n```\n\n**Critical Adjustments:**\n- **Net Debt = Total Debt - Cash & Equivalents**\n  - If positive: Subtract from EV (reduces equity value)\n  - If negative (Net Cash): Add to EV (increases equity value)\n- **Use Diluted Shares**: Includes options, RSUs, convertible securities\n- **Other adjustments** (if applicable):\n  - Minority interests\n  - Pension liabilities\n  - Operating lease obligations\n\n**Valuation Output Format:**\n```csv\nValuation Component,Amount ($M)\nPV Explicit FCFs,X.X\nPV Terminal Value,Y.Y\nEnterprise Value,Z.Z\n(-) Net Debt,A.A\nEquity Value,B.B\n,,\nShares Outstanding (M),C.C\nImplied Price per Share,$XX.XX\nCurrent Share Price,$YY.YY\nImplied Upside\u002F(Downside),+XX%\n```\n\n### Step 10: Sensitivity Analysis\n\nBuild **three sensitivity tables** at the bottom of the DCF sheet showing how valuation changes with different assumptions:\n\n1. **WACC vs Terminal Growth** - Shows enterprise value sensitivity to discount rate and perpetuity growth\n2. **Revenue Growth vs EBIT Margin** - Shows impact of top-line growth and operating leverage\n3. **Beta vs Risk-Free Rate** - Shows sensitivity to cost of equity components\n\n**Implementation**: These are simple 2D grids (NOT Excel's \"Data Table\" feature) with formulas in each cell. Each cell must contain a full DCF recalculation for that specific assumption combination. See Critical Constraints section for detailed requirements on populating all 75 cells programmatically using openpyxl.\n\n\u003Ccorrect_patterns>\n\nThis section contains all the CORRECT patterns to follow when building DCF models.\n\n### Scenario Block Selection Pattern - Follow This Approach\n\n**Assumptions are organized in separate blocks for each scenario:**\n\n**CRITICAL STRUCTURE - Three rows per section header:**\n\n```csv\nBEAR CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),12%,10%,9%,8%,7%\nEBIT Margin (%),45%,44%,43%,42%,41%\n\nBASE CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),16%,14%,12%,10%,9%\nEBIT Margin (%),48%,49%,50%,51%,52%\n\nBULL CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),20%,18%,15%,13%,11%\nEBIT Margin (%),50%,51%,52%,53%,54%\n```\n\n**Each scenario block MUST have a column header row** showing the projection years (FY2025E, FY2026E, etc.) immediately below the section title. Without this, users cannot tell which assumption value corresponds to which year.\n\n**How to reference assumptions - Create a consolidation column:**\n1. Case selector cell (e.g., B6) contains 1=Bear, 2=Base, or 3=Bull\n2. Create a consolidation column with INDEX or OFFSET formulas to pull from the correct scenario block\n3. Projection formulas reference the consolidation column (clean cell references)\n4. Each scenario block contains full set of DCF assumptions across projection years\n\n**Recommended consolidation column pattern (using INDEX):**\n`=INDEX(B10:D10, 1, $B$6)`\n\n**NOT this - scattered IF statements throughout:**\n`=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))`\n\nThe consolidation column approach centralizes logic and makes the model easier to audit.\n\n### Correct Revenue Projection Pattern\n\n**Create a consolidation column with INDEX formulas, then reference it in projections:**\n\n**Step 1 - Consolidation column for FY1 growth:**\n`=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)`\n\n**Step 2 - Revenue projection references the consolidation column:**\n`Revenue Year 1: =D29*(1+$E$10)`\n\nWhere:\n- D29 = Prior year revenue\n- $E$10 = Consolidation column cell for FY1 growth (contains INDEX formula)\n- $B$6 = Case selector (1=Bear, 2=Base, 3=Bull)\n\n**This approach is cleaner than embedding IF statements in every projection formula** and makes it much easier to audit which scenario assumptions are being used.\n\n### Correct FCF Formula Pattern\n\n**Use consolidation columns with INDEX formulas, then reference them in FCF calculations:**\n\n**Consolidation column approach:**\n```csv\nItem,Formula,Reference\nD&A,=E29*$E$21,$E$21 = consolidation column for D&A %\nCapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %\nΔ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %\nUnlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC\n```\n\n**Each consolidation column cell contains an INDEX formula** that pulls from the appropriate scenario block based on case selector. This keeps projection formulas clean and auditable.\n\nBefore writing formulas, confirm scenario block row locations and set up consolidation columns.\n\n### Correct Cell Comment Format\n\n**Every hardcoded value needs this format:**\n\n\"Source: [System\u002FDocument], [Date], [Reference], [URL if applicable]\"\n\n**Examples:**\n```csv\nItem,Source Comment\nStock price,Source: Market data script 2025-10-12 Close price\nShares outstanding,Source: 10-K FY2024 Page 45 Note 12\nHistorical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements\nBeta,Source: Market data script 2025-10-12 5-year monthly beta\nConsensus estimates,Source: Management guidance Q3 2024 earnings call\n```\n\n### Correct Assumption Table Structure\n\n**CRITICAL: Each scenario block requires THREE structural elements:**\n\n1. **Section header row** (merged cells): e.g., \"BEAR CASE ASSUMPTIONS\"\n2. **Column header row** showing years - THIS IS REQUIRED, DO NOT SKIP\n3. **Data rows** with assumption values\n\n**Structure:**\n```csv\nBEAR CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n\nBASE CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n\nBULL CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n```\n\n**WITHOUT the column header row showing projection years (FY2025E, FY2026E, etc.), users cannot tell which assumption value corresponds to which year. This row is MANDATORY.**\n\n**Then create a consolidation column** (typically the next column to the right) that uses INDEX formulas to pull from the selected scenario block based on the case selector. This consolidation column is what your projection formulas reference.\n\n### Correct Row Planning Process\n\n**1. Write ALL headers and labels FIRST:**\n```csv\nRow,Content\n1,[Company Name] DCF Model\n2,Ticker | Date | Year End\n4,Case Selector\n7,KEY ASSUMPTIONS\n26,Assumption headers\n27-31,Growth assumptions\n...,...\n```\n\n**2. Write ALL section dividers and blank rows**\n\n**3. THEN write formulas using the locked row positions**\n\n**4. Test formulas immediately after creation**\n\n**Think of it like construction:**\n- Good: Pour foundation, then build walls (stable structure)\n- Bad: Build walls, then pour foundation (walls collapse)\n\n**Excel version:**\n- Good: Add headers, then write formulas (formulas stable)\n- Bad: Write formulas, then add headers (formulas break)\n\n### Correct Sensitivity Table Implementation\n\n**IMPORTANT**: These are NOT Excel's \"Data Table\" feature. These are simple grids where you write regular formulas using openpyxl. Yes, this means ~75 formulas total (3 tables × 25 cells each), but this is straightforward and required.\n\n**Programmatic Population with Formulas:**\n\nEach sensitivity table must be fully populated with formulas that recalculate the implied share price for each combination of assumptions. **Do not use Excel's Data Table feature** (it requires manual intervention and cannot be automated via openpyxl).\n\n**Implementation approach - CONCRETE EXAMPLE:**\n\n**Table Structure — 5×5 grid (ODD dimensions, base case centered):**\n\nIf the model's base WACC = 9.0% and base terminal growth = 3.0%, build the axes symmetrically around those values:\n\n```csv\nWACC vs Terminal Growth,  2.0%,  2.5%,  3.0%,  3.5%,  4.0%\n              8.0%,       [fml], [fml], [fml], [fml], [fml]\n              8.5%,       [fml], [fml], [fml], [fml], [fml]\n              9.0%,       [fml], [fml], [★  ], [fml], [fml]   ← middle row = base WACC\n              9.5%,       [fml], [fml], [fml], [fml], [fml]\n             10.0%,       [fml], [fml], [fml], [fml], [fml]\n                                   ↑\n                          middle col = base terminal g\n```\n\n**★ = the center cell.** Its formula output MUST equal the model's actual implied share price (from the valuation summary). Apply the medium-blue fill (`#BDD7EE`) and bold font to this cell so the base case is visually anchored.\n\n**Rule for axis values:** `axis_values = [base - 2*step, base - step, base, base + step, base + 2*step]` — symmetric around the base, odd count guarantees a center.\n\n**Formula Pattern - Cell B88 (WACC=8.0%, Terminal Growth=2.0%):**\n\nThe formula in B88 should recalculate the implied price using:\n- WACC from row header: `$A88` (8.0%)\n- Terminal Growth from column header: `B$87` (2.0%)\n\n**Recommended approach:** Reference the main DCF calculation but substitute these values.\n\n**Example formula structure:**\n`=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) \u002F [Shares]`\n\n**CRITICAL - Write a formula for EVERY cell in the 5x5 grid (25 cells per table, 75 cells total).** Use openpyxl to write these formulas programmatically in a loop. Do NOT skip this step or leave placeholder text.\n\n**Python implementation pattern:**\n```python\n# Pseudocode for populating sensitivity table\nfor row_idx, wacc_value in enumerate(wacc_range):\n    for col_idx, term_growth_value in enumerate(term_growth_range):\n        # Build formula that uses wacc_value and term_growth_value\n        formula = f\"=\u003CDCF recalc using {wacc_value} and {term_growth_value}>\"\n        ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula\n```\n\n**The sensitivity tables must work immediately when the model is opened, with no manual steps required from the user.**\n\n\u003C\u002Fcorrect_patterns>\n\n\u003Ccommon_mistakes>\n\nThis section contains all the WRONG patterns to avoid when building DCF models.\n\n### WRONG: Simplified Sensitivity Table Approximations or Placeholder Text\n\n**Don't use linear approximations:**\n\n```\n\u002F\u002F WRONG - Linear approximation\nB97: =B88*(1+(0.096-0.116))    \u002F\u002F Assumes linear relationship\n\n\u002F\u002F WRONG - Division shortcut\nB105: =B88\u002F(1+(E48-0.07))      \u002F\u002F Doesn't recalculate full DCF\n```\n\n**Don't leave placeholder text:**\n```\n\u002F\u002F WRONG - Placeholder note\n\"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables.\"\n\n\u002F\u002F WRONG - Empty cells\n[leaving cells blank because \"this is complex\"]\n```\n\n**Don't confuse terminology:**\n- ❌ \"Sensitivity tables need Excel's Data Table feature\" (NO - that's a specific Excel tool we can't use)\n- ✅ \"Sensitivity tables are simple grids with formulas in each cell\" (YES - this is what we build)\n\n**Why these shortcuts are wrong:**\n- Linear approximation formulas don't actually recalculate the DCF - they just apply simple math adjustments\n- The relationships are not linear, so the results will be inaccurate\n- Placeholder text requires manual user intervention\n- Model is not immediately usable when delivered\n- Not professional or client-ready\n- Empty cells = incomplete deliverable\n\n**Common rationalization to REJECT:**\n\"Writing 75+ formulas feels complex, so I'll leave a note for the user to complete it manually.\"\n\n**Reality:** Writing 75 formulas is straightforward when you use a loop in Python with openpyxl. Each formula follows the same pattern - just substitute the row\u002Fcolumn values. This is a required part of the deliverable.\n\n**Instead:** Populate every sensitivity cell with formulas that recalculate the full DCF for that specific combination of assumptions\n\n### WRONG: Missing Cell Comments\n\n**Don't do this:**\n- Create all hardcoded inputs without comments\n- Think \"I'll add them later\"\n- Write \"TODO: add source\"\n- Leave blue inputs without documentation\n\n**Why it's wrong:**\n- Can't verify where data came from\n- Fails xlsx skill requirements\n- Not audit-ready\n- Wastes time fixing later\n\n**Instead:** Add cell comment AS EACH hardcoded value is created\n\n### WRONG: Formula Row References Off\n\n**Symptom:**\nThe FCF section references wrong assumption rows:\n`D&A:  =E29*$E$34    \u002F\u002F Should be $E$21, but referencing wrong row`\n`CapEx: =E29*$E$41   \u002F\u002F Should be $E$22, but row shifted`\n\n**Why this happens:**\n1. Formulas written first\n2. Then headers inserted\n3. All row references shifted\n4. Now formulas point to wrong cells → #REF! errors\n\n**Instead:** Lock row layout FIRST, then write formulas\n\n### WRONG: Single Row for Each Assumption Across Scenarios\n\n**Don't structure assumptions like this:**\n```csv\nAssumption,Bear,Base,Bull\nRevenue Growth FY1,10%,13%,16%\nRevenue Growth FY2,9%,12%,15%\n```\nThis vertical layout makes it hard to see the progression across years within each scenario.\n\n**Why it's wrong:**\n- Makes it difficult to see assumptions evolving across years within each scenario\n- Harder to compare scenario assumptions across full projection period\n- Less intuitive for reviewing scenario logic\n\n**Instead:**\n- Create separate blocks for each scenario (Bear, Base, Bull)\n- Within each block, show assumptions horizontally across projection years\n- This makes each scenario's assumptions easier to review as a cohesive set\n\n### WRONG: No Borders\n\n**Don't deliver a model without borders:**\n- No section delineation\n- All cells blend together\n- Hard to read and unprofessional\n\n**Why it's wrong:**\n- Not client-ready\n- Difficult to navigate\n- Looks amateur\n\n**Instead:** Add borders around all major sections\n\n### WRONG: Wrong Font Colors or No Font Color Distinction\n\n**Don't do this:**\n- All text is black\n- Only use fill colors (no font color changes)\n- Mix up which cells are blue vs black\n\n**Why it's wrong:**\n- Can't distinguish inputs from formulas\n- Auditing becomes impossible\n- Violates xlsx skill requirements\n\n**Instead:** Blue text for ALL hardcoded inputs, black text for ALL formulas, green for sheet links\n\n### WRONG: Operating Expenses Based on Gross Profit\n\n**Don't do this:**\n`S&M: =E33*0.15    \u002F\u002F E33 = Gross Profit (WRONG)`\n\n**Why it's wrong:**\n- Operating expenses scale with revenue, not gross profit\n- Produces unrealistic margin progression\n- Not how businesses actually operate\n\n**Instead:**\n`S&M: =E29*0.15    \u002F\u002F E29 = Revenue (CORRECT)`\n\n### TOP 5 ERRORS SUMMARY\n\n1. **Formula row references off** → Define ALL row positions BEFORE writing formulas\n2. **Missing cell comments** → Add comments AS cells are created, not at end\n3. **Simplified sensitivity tables** → Populate all cells with full DCF recalc formulas, not approximations\n4. **Scenario block references wrong** → Ensure IF formulas pull from correct Bear\u002FBase\u002FBull blocks\n5. **No borders** → Add professional section borders for client-ready appearance\n\nIn addition, be aware of these errors:\n\n### WACC Calculation Errors\n- Mixing book and market values in capital structure\n- Using equity beta instead of asset\u002Funlevered beta incorrectly\n- Wrong tax rate application to cost of debt\n- Incorrect risk-free rate (must use current 10Y Treasury)\n- Failure to adjust for net debt vs net cash position\n\n### Growth Assumption Flaws\n- Terminal growth > WACC (creates infinite value)\n- Projection growth rates inconsistent with historical performance\n- Ignoring industry growth constraints\n- Revenue growth not aligned with unit economics\n- Margin expansion without operational justification\n\n### Terminal Value Mistakes\n- Using wrong growth method (perpetuity vs exit multiple)\n- Terminal value >80% of enterprise value (suggests over-reliance)\n- Inconsistent terminal margins with steady state assumptions\n- Wrong discount period for terminal value\n\n### Cash Flow Projection Errors\n- Operating expenses based on gross profit instead of revenue\n- D&A\u002FCapEx percentages misaligned with business model\n- Working capital changes not properly calculated\n- Tax rate inconsistency between years\n- NOPAT calculation errors\n\n**These errors are the most common. Re-read this section before starting any DCF build.**\n\n\u003C\u002Fcommon_mistakes>\n\n## Excel File Creation\n\n**This skill uses the `xlsx` skill for all spreadsheet operations.** The xlsx skill provides:\n- Standardized formula construction rules\n- Number formatting conventions\n- Automated formula recalculation via `recalc.py` script\n- Comprehensive error checking and validation\n\nAll Excel files created by this skill must follow xlsx skill requirements, including zero formula errors and proper recalculation.\n\n## Quality Rubric\n\nEvery DCF model must maximize for:\n1. **Realistic revenue and margin assumptions** based on historical performance\n2. **Appropriate cost of capital calculation** with proper CAPM methodology\n3. **Comprehensive sensitivity analysis** showing valuation ranges\n4. **Clear terminal value calculation** with supporting rationale\n5. **Professional model structure** enabling scenario analysis\n6. **Transparent documentation** of all key assumptions\n\n## Input Requirements\n\n### Minimum Required Inputs\n1. **Company identifier**: Ticker symbol or company name\n2. **Growth assumptions**: Revenue growth rates for projection period (or \"use consensus\")\n3. **Optional parameters**:\n   - Projection period (default: 5 years)\n   - Scenario cases (Bear\u002FBase\u002FBull growth and margin assumptions)\n   - Terminal growth rate (default: 2.5-3.0%)\n   - Specific WACC inputs if not using CAPM\n\n## Excel Model Structure\n\n### Sheet Architecture\n\nCreate **two sheets**:\n\n1. **DCF** - Main valuation model with sensitivity analysis at bottom\n2. **WACC** - Cost of capital calculation\n\n**CRITICAL**: Sensitivity tables go at the BOTTOM of the DCF sheet (not on a separate sheet). This keeps all valuation outputs together.\n\n### Formula Recalculation (MANDATORY)\n\nAfter creating or modifying the Excel model, **recalculate all formulas** using the recalc.py script from the xlsx skill:\n\n```bash\npython recalc.py [path_to_excel_file] [timeout_seconds]\n```\n\nExample:\n```bash\npython recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30\n```\n\nThe script will:\n- Recalculate all formulas in all sheets using LibreOffice\n- Scan ALL cells for Excel errors (#REF!, #DIV\u002F0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N\u002FA)\n- Return detailed JSON with error locations and counts\n\n**Expected output format:**\n```json\n{\n  \"status\": \"success\",           \u002F\u002F or \"errors_found\"\n  \"total_errors\": 0,              \u002F\u002F Total error count\n  \"total_formulas\": 42,           \u002F\u002F Number of formulas in file\n  \"error_summary\": {}             \u002F\u002F Only present if errors found\n}\n```\n\n**If errors are found**, the output will include details:\n```json\n{\n  \"status\": \"errors_found\",\n  \"total_errors\": 2,\n  \"total_formulas\": 42,\n  \"error_summary\": {\n    \"#REF!\": {\n      \"count\": 2,\n      \"locations\": [\"DCF!B25\", \"DCF!C25\"]\n    }\n  }\n}\n```\n\n**Fix all errors** and re-run recalc.py until status is \"success\" before delivering the model.\n\n### Formatting Standards\n\n**IMPORTANT**: Follow the xlsx skill for formula construction rules and number formatting conventions. The DCF skill adds specific visual presentation standards.\n\n**Color Scheme - Two Layers**:\n\n**Layer 1: Font Colors (MANDATORY from xlsx skill)**\n- **Blue text (RGB: 0,0,255)**: ALL hardcoded inputs (stock price, shares, historical data, assumptions)\n- **Black text (RGB: 0,0,0)**: ALL formulas and calculations\n- **Green text (RGB: 0,128,0)**: Links to other sheets (WACC sheet references)\n\n**Layer 2: Fill Colors — Professional Blue\u002FGrey Palette (Default unless user specifies otherwise)**\n- **Keep it minimal** — use only blues and greys for fills. Do NOT introduce greens, yellows, oranges, or multiple accent colors. A model with too many colors looks amateurish.\n- **Default fill palette:**\n  - **Section headers**: Dark blue (RGB: 31,78,121 \u002F `#1F4E79`) background with white bold text\n  - **Sub-headers\u002Fcolumn headers**: Light blue (RGB: 217,225,242 \u002F `#D9E1F2`) background with black bold text\n  - **Input cells**: Light grey (RGB: 242,242,242 \u002F `#F2F2F2`) background with blue font — or just white with blue font if you want maximum minimalism\n  - **Calculated cells**: White background with black font\n  - **Output\u002Fsummary rows** (per-share value, EV, etc.): Medium blue (RGB: 189,215,238 \u002F `#BDD7EE`) background with black bold font\n- **That's it — 3 blues + 1 grey + white.** Resist the urge to add more.\n- User-provided templates or explicit color preferences ALWAYS override these defaults.\n\n**How the layers work together:**\n- Input cell: Blue font + light grey fill = \"Hardcoded input\"\n- Formula cell: Black font + white background = \"Calculated value\"\n- Sheet link: Green font + white background = \"Reference from another sheet\"\n- Key output: Black bold font + medium blue fill = \"This is the answer\"\n\n**Font color tells you WHAT it is (input\u002Fformula\u002Flink). Fill color tells you WHERE you are (header\u002Fdata\u002Foutput).**\n\n### Border Standards (REQUIRED for Professional Appearance)\n\n**Thick borders** (1.5pt) around major sections:\n- KEY INPUTS section\n- PROJECTION ASSUMPTIONS section\n- 5-YEAR CASH FLOW PROJECTION section\n- TERMINAL VALUE section\n- VALUATION SUMMARY section\n- Each SENSITIVITY ANALYSIS table\n\n**Medium borders** (1pt) between sub-sections:\n- Company Details vs Historical Performance\n- Growth Assumptions vs EBIT Margin vs FCF Parameters\n\n**Thin borders** (0.5pt) around data tables:\n- Scenario assumption tables (Bear | Base | Bull | Selected)\n- Historical vs projected financials matrix\n\n**No borders:** Individual cells within tables (keep clean, scannable)\n\n**Borders are mandatory** - models without professional borders are not client-ready.\n\n**Number Formats** (follows xlsx skill standards):\n- **Years**: Format as text strings (e.g., \"2024\" not \"2,024\")\n- **Percentages**: `0.0%` (one decimal place)\n- **Currency**: `$#,##0` for millions; `$#,##0.00` for per-share - ALWAYS specify units in headers (\"Revenue ($mm)\")\n- **Zeros**: Use number formatting to make all zeros \"-\" (e.g., `$#,##0;($#,##0);-`)\n- **Large numbers**: `#,##0` with thousands separator\n- **Negative numbers**: `(#,##0)` in parentheses (NOT minus sign)\n\n**Cell Comments (MANDATORY for all hardcoded inputs)**:\n\nPer the xlsx skill, ALL hardcoded values must have cell comments documenting the source. Format: \"Source: [System\u002FDocument], [Date], [Reference], [URL if applicable]\"\n\n**CRITICAL**: Add comments AS CELLS ARE CREATED. Do not defer to the end.\n\n### DCF Sheet Detailed Structure\n\n**Section 1: Header**\n```csv\nRow,Content\n1,[Company Name] DCF Model\n2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]\n3,Blank\n4,Case Selector Cell (1=Bear 2=Base 3=Bull)\n5,Case Name Display (formula: =IF([Selector]=1\"Bear\"IF([Selector]=2\"Base\"\"Bull\")))\n```\n\n**Section 2: Market Data (NOT case dependent)**\n```csv\nItem,Value\nCurrent Stock Price,$XX.XX\nShares Outstanding (M),XX.X\nMarket Cap ($M),[Formula]\nNet Debt ($M),XXX [or Net Cash if negative]\n```\n\n**Section 3: DCF Scenario Assumptions**\n\nCreate separate assumption blocks for each scenario (Bear, Base, Bull) with DCF-specific assumptions (Revenue Growth %, EBIT Margin %, Tax Rate %, D&A % of Revenue, CapEx % of Revenue, NWC Change % of ΔRev, Terminal Growth Rate, WACC) laid out horizontally across projection years. Each block must include section header, column header row showing the projection years (FY1, FY2, etc.), and data rows. See `\u003Ccorrect_patterns>` section \"Correct Assumption Table Structure\" for the exact layout.\n\n**Section 4: Historical & Projected Financials**\n\n**Reference a consolidation column (e.g., \"Selected Case\") that pulls from scenario blocks**, not scattered IF formulas in every projection row.\n\n```csv\nIncome Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\nRevenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]\n  % growth,XX%,XX%,XX%,XX%,[=E29\u002FD29-1],[=F29\u002FE29-1],[=G29\u002FF29-1]\n,,,,,,\nGross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]\n  % margin,XX%,XX%,XX%,XX%,[=E33\u002FE29],[=F33\u002FF29],[=G33\u002FG29]\n,,,,,,\nOperating Expenses:,,,,,,,\n  S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]\n  R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]\n  G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]\n  Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]\n,,,,,,\nEBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]\n  % margin,XX%,XX%,XX%,XX%,[=E41\u002FE29],[=F41\u002FF29],[=G41\u002FG29]\n,,,,,,\nTaxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]\n  Tax rate,XX%,XX%,XX%,XX%,[=E43\u002FE41],[=F43\u002FF41],[=G43\u002FG41]\n,,,,,,\nNOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]\n```\n\n**Key Formula Pattern**:\n- Revenue growth: `=E29*(1+$E$10)` where $E$10 is consolidation column for Year 1 growth\n- NOT: `=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))`\n\nThis approach is cleaner, easier to audit, and prevents formula errors by centralizing the scenario logic.\n\n**Section 5: Free Cash Flow Build**\n\n**CRITICAL**: Verify row references point to the CORRECT assumption rows. Test formulas immediately after creation.\n\n```csv\nCash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\nNOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]\n(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]\n    % of Rev,XX%,XX%,XX%,XX%,[=E58\u002FE29],[=F58\u002FF29],[=G58\u002FG29]\n(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]\n    % of Rev,XX%,XX%,XX%,XX%,[=E60\u002FE29],[=F60\u002FF29],[=G60\u002FG29]\n(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]\n    % of Δ Rev,XX%,XX%,XX%,XX%,[=E62\u002F(E29-D29)],[=F62\u002F(F29-E29)],[=G62\u002F(G29-F29)]\n,,,,,,\nUnlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]\n```\n\n**Row reference examples** (based on layout planning):\n- $E$21 = D&A % assumption (consolidation column, row 21)\n- $E$22 = CapEx % assumption (consolidation column, row 22)\n- $E$23 = NWC % assumption (consolidation column, row 23)\n- E29 = Revenue for year (row 29)\n- E45 = NOPAT for year (row 45)\n\n**Before writing formulas**: Confirm these row numbers match the actual layout. Test one column, then copy across.\n\n**Section 6: Discounting & Valuation**\n```csv\nDCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal\nUnlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,\nPeriod,0.5,1.5,2.5,3.5,4.5,\nDiscount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,\nPV of FCF ($M),XXX,XXX,XXX,XXX,XXX,\n,,,,,,\nTerminal FCF ($M),,,,,,,XXX\nTerminal Value ($M),,,,,,,XXX\nPV Terminal Value ($M),,,,,,,XXX\n,,,,,,\nValuation Summary ($M),,,,,,\nSum of PV FCFs,XXX,,,,,\nPV Terminal Value,XXX,,,,,\nEnterprise Value,XXX,,,,,\n(-) Net Debt,(XX),,,,,\nEquity Value,XXX,,,,,\n,,,,,,\nShares Outstanding (M),XX.X,,,,,\nIMPLIED PRICE PER SHARE,$XX.XX,,,,,\nCurrent Stock Price,$XX.XX,,,,,\nImplied Upside\u002F(Downside),XX%,,,,,\n```\n\n### WACC Sheet Structure\n\n```csv\nCOST OF EQUITY CALCULATION,,\nRisk-Free Rate (10Y Treasury),X.XX%,[Yellow input]\nBeta (5Y monthly),X.XX,[Yellow input]\nEquity Risk Premium,X.XX%,[Yellow input]\nCost of Equity,X.XX%,[Calculated blue]\n,,\nCOST OF DEBT CALCULATION,,\nCredit Rating,AA-,[Yellow input]\nPre-Tax Cost of Debt,X.XX%,[Yellow input]\nTax Rate,XX.X%,[Link to DCF sheet]\nAfter-Tax Cost of Debt,X.XX%,[Calculated blue]\n,,\nCAPITAL STRUCTURE,,\nCurrent Stock Price,$XX.XX,[Link to DCF]\nShares Outstanding (M),XX.X,[Link to DCF]\nMarket Capitalization ($M),\"X,XXX\",[Calculated]\n,,\nTotal Debt ($M),XXX,[Yellow input]\nCash & Equivalents ($M),XXX,[Yellow input]\nNet Debt ($M),XXX,[Calculated]\n,,\nEnterprise Value ($M),\"X,XXX\",[Calculated]\n,,\nWACC CALCULATION,Weight,Cost,Contribution\nEquity,XX.X%,X.X%,X.XX%\nDebt,XX.X%,X.X%,X.XX%\n,,\nWEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]\n```\n\n**Key WACC Formulas:**\n```\nMarket Cap = Price × Shares\nNet Debt = Total Debt - Cash\nEnterprise Value = Market Cap + Net Debt\nEquity Weight = Market Cap \u002F EV\nDebt Weight = Net Debt \u002F EV\nWACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)\n```\n\n### Sensitivity Analysis (Bottom of DCF Sheet)\n\n**TERMINOLOGY REMINDER**: \"Sensitivity tables\" = simple 2D grids with row headers, column headers, and formulas in each data cell. NOT Excel's \"Data Table\" feature (Data → What-If Analysis → Data Table). You will use openpyxl to write regular Excel formulas into each cell.\n\n**Location**: Rows 87+ on DCF sheet (NOT a separate sheet)\n\n**Three sensitivity tables, vertically stacked:**\n\n1. **WACC vs Terminal Growth** (rows 87-100) - 5x5 grid = 25 cells with formulas\n2. **Revenue Growth vs EBIT Margin** (rows 102-115) - 5x5 grid = 25 cells with formulas\n3. **Beta vs Risk-Free Rate** (rows 117-130) - 5x5 grid = 25 cells with formulas\n\n**Total formulas to write: 75** (this is required, not optional)\n\n**CRITICAL**: All sensitivity table cells must be populated programmatically with formulas using openpyxl. DO NOT use linear approximation shortcuts. DO NOT leave placeholder text or notes about manual steps. DO NOT rationalize leaving cells empty because \"it's complex\" - use a Python loop to generate the formulas.\n\n**Table Setup:**\n1. Create table structure with row\u002Fcolumn headers (the assumption values to test)\n2. Populate EVERY data cell with a formula that:\n   - Uses the row header value (e.g., WACC = 9.0%)\n   - Uses the column header value (e.g., Terminal Growth = 3.0%)\n   - Recalculates the full DCF with those specific assumptions\n   - Returns the implied share price for that scenario\n3. All cells must contain working formulas when delivered\n4. Format cells with conditional formatting: Green scale for higher values, red scale for lower values\n5. Bold the base case cell\n6. Leave 1-2 blank rows between tables\n\n**No manual intervention required** - the sensitivity tables must be fully functional when the user opens the file.\n\n## Case Selector Implementation\n\n**Three-Case Framework:**\n\n### Bear Case\n- Conservative revenue growth (low end of historical range)\n- Margin compression or no expansion\n- Higher WACC (risk premium increase)\n- Lower terminal growth rate\n- Higher CapEx assumptions\n\n### Base Case\n- Consensus or management guidance revenue growth\n- Moderate margin expansion based on operating leverage\n- Current market-implied WACC\n- GDP-aligned terminal growth (2.5-3.0%)\n- Standard CapEx assumptions\n\n### Bull Case\n- Optimistic revenue growth (high end of projections)\n- Significant margin expansion\n- Lower WACC (reduced risk premium)\n- Higher terminal growth (3.5-5.0%)\n- Reduced CapEx intensity\n\n**Formula Implementation:**\n\n**DO NOT use nested IF formulas scattered throughout.** Instead, create a consolidation column that uses INDEX or OFFSET formulas to pull from the appropriate scenario block.\n\n**Recommended pattern (using INDEX):**\n`=INDEX(B10:D10, 1, $B$6)` where `B10:D10` = Bear\u002FBase\u002FBull values, `1` = row offset, `$B$6` = case selector cell (1, 2, or 3)\n\n**Then reference the consolidation column** in all projections:\n`Revenue Year 1: =D29*(1+$E$10)` where $E$10 is the consolidation column value for Year 1 growth.\n\nThis approach centralizes scenario logic, making the model easier to audit and maintain.\n\n## Deliverables Structure\n\n**File naming**: `[Ticker]_DCF_Model_[Date].xlsx`\n\n**Two sheets**:\n1. **DCF** - Complete model with Bear\u002FBase\u002FBull cases + three sensitivity tables at bottom (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)\n2. **WACC** - Cost of capital calculation\n\n**Key features**: Case selector (1\u002F2\u002F3), consolidation column with INDEX\u002FOFFSET formulas, color-coded cells, cell comments on all inputs, professional borders\n\n## Best Practices\n\n### Model Construction\n1. **Build incrementally**: Complete each section before moving to next\n2. **Test as building**: Enter sample numbers to verify formulas\n3. **Use consistent structure**: Similar calculations follow similar patterns\n4. **Comment complex formulas**: Add notes for unusual calculations\n5. **Build in checks**: Sum checks and balance checks where applicable\n\n### Documentation\n1. **Document all assumptions**: Explain reasoning behind key inputs\n2. **Cite data sources**: Note where each data point came from\n3. **Explain methodology**: Describe any non-standard approaches\n4. **Flag uncertainties**: Highlight areas with limited visibility\n\n### Quality Control\n1. **Cross-check calculations**: Verify math in multiple ways\n2. **Stress test assumptions**: Run sensitivity to ensure model is robust\n3. **Peer review**: Have someone else check formulas\n4. **Version control**: Save versions as work progresses\n\n## Common Variations\n\n### High-Growth Technology Companies\n- Longer projection period (7-10 years)\n- Higher initial growth rates (20-30%)\n- Significant margin expansion over time\n- Higher WACC (12-15%)\n- Model unit economics (users, ARPU, etc.)\n\n### Mature\u002FStable Companies\n- Shorter projection period (3-5 years)\n- Modest growth rates (GDP +1-3%)\n- Stable margins\n- Lower WACC (7-9%)\n- Focus on cash generation and capital allocation\n\n### Cyclical Companies\n- Model through economic cycle\n- Normalize margins at mid-cycle\n- Consider trough and peak scenarios\n- Adjust beta for cyclicality\n\n### Multi-Segment Companies\n- Separate DCFs for each business unit\n- Different growth rates and margins by segment\n- Sum-of-parts valuation\n- Consider synergies\n\n## Troubleshooting\n\n**If you encounter errors or unreasonable results, read [TROUBLESHOOTING.md](.\u002FTROUBLESHOOTING.md) for detailed debugging guidance.**\n\n## Workflow Integration\n\n### At Start of DCF Build\n\n1. **Gather market data**:\n   - Check for available MCP servers for current market data\n   - Use web search\u002Ffetch for stock prices, beta, and other market metrics\n   - Request from user if specific data is needed\n\n2. **Gather historical financials**:\n   - Check for available MCP servers (Daloopa, etc.)\n   - Request from user if not available via MCP\n   - Manual extraction from 10-Ks if necessary\n\n3. **Begin model construction** using the DCF methodology detailed in this skill\n\n### During Model Construction\n\n1. **Build Excel model** using openpyxl with formulas (not hardcoded values)\n2. **Follow xlsx skill conventions** for formula construction and formatting\n3. **Apply fill colors only if requested** by user or if specific brand guidelines are provided\n\n### Before Delivering Model (MANDATORY)\n\n1. **Verify structure**:\n   - Scenario blocks for Bear\u002FBase\u002FBull with assumptions across projection years\n   - Case selector functional with formulas referencing correct scenario blocks\n   - Sensitivity tables at bottom of DCF sheet (not separate sheet)\n   - Font colors: Blue inputs, black formulas, green sheet links\n   - Cell comments on ALL hardcoded inputs\n   - Professional borders around major sections\n\n2. **Recalculate formulas**: Run `python recalc.py model.xlsx 30`\n\n3. **Check output**:\n   - If `status` is `\"success\"` → Continue to step 4\n   - If `status` is `\"errors_found\"` → Check `error_summary` and read [TROUBLESHOOTING.md](.\u002FTROUBLESHOOTING.md) for debugging guidance\n\n4. **Fix errors and re-run recalc.py** until status is \"success\"\n\n5. **Spot-check formulas**:\n   - Test one FCF formula - does it reference the correct assumption rows?\n   - Change case selector - does the consolidation column update properly?\n   - Verify revenue formulas reference consolidation column (not nested IF formulas)\n\n6. **Deliver model**\n\n### Available Data Sources\n\n- **MCP servers**: If configured (Daloopa for historical financials)\n- **Web search\u002Ffetch**: For current stock prices, beta, and market data\n- **User-provided data**: Historical financials, consensus estimates\n- **Manual extraction**: SEC EDGAR filings as fallback\n\n## Final Output Checklist\n\nBefore delivering DCF model:\n\n**Required:**\n- Run `python recalc.py model.xlsx 30` until status is \"success\" (zero formula errors)\n- Two sheets: DCF (with sensitivity at bottom), WACC\n- Font colors: Blue=inputs, Black=formulas, Green=sheet links\n- Cell comments on ALL hardcoded inputs\n- Sensitivity tables fully populated with formulas\n- Professional borders around major sections\n\n**Validation:**\n- OpEx based on revenue (not gross profit)\n- Terminal value 50-70% of EV\n- Terminal growth \u003C WACC\n- Tax rate 21-28%\n- File naming: `[Ticker]_DCF_Model_[Date].xlsx`",{"data":43,"body":44},{"name":4,"description":6},{"type":45,"children":46},"root",[47,56,63,69,75,85,91,96,105,174,207,706,711,719,758,766,799,807,868,876,924,932,960,968,994,1002,1031,1037,1044,1049,1057,1091,1099,1127,1133,1138,1191,1196,1206,1212,1220,1238,1246,1264,1272,1285,1293,1302,1308,1316,1321,1354,1362,1385,1393,1402,1408,1416,1425,1433,1456,1464,1482,1488,1496,1505,1513,1522,1530,1539,1547,1583,1591,1609,1615,1623,1641,1649,1658,1666,1699,1705,1713,1722,1730,1748,1758,1766,1775,1783,1792,1800,1818,1824,1832,1841,1849,1911,1919,2016,2022,2034,2067,2077,2082,2087,2093,2101,2109,2226,2236,2244,2267,2281,2295,2300,2306,2314,2328,2342,2347,2365,2375,2381,2389,2397,2444,2454,2459,2465,2473,2498,2506,2561,2567,2575,2608,2616,2776,2784,2794,2800,2808,2879,2887,2895,2903,2911,2924,2932,2945,2951,2961,2969,2981,2989,2997,3002,3073,3090,3108,3116,3121,3150,3160,3174,3184,3192,3249,3257,3262,3267,3272,3278,3286,3295,3303,3312,3320,3333,3341,3374,3384,3394,3404,3410,3418,3441,3449,3472,3481,3487,3509,3517,3540,3549,3555,3563,3594,3599,3606,3624,3631,3649,3655,3663,3681,3688,3706,3715,3721,3728,3746,3753,3771,3780,3786,3799,3806,3824,3837,3843,3896,3901,3907,3935,3941,3969,3975,3998,4004,4032,4040,4045,4051,4069,4099,4104,4110,4115,4178,4184,4190,4246,4252,4258,4270,4292,4302,4308,4320,4362,4367,4396,4401,4419,4427,4594,4604,4870,4880,4886,4895,4904,4912,4945,4953,5072,5080,5103,5111,5117,5127,5160,5170,5183,5193,5206,5216,5226,5236,5343,5352,5377,5386,5392,5400,5453,5461,5508,5516,5528,5536,5546,5709,5718,5745,5750,5758,5767,5853,5863,5891,5901,5909,6082,6088,6320,6328,6337,6343,6353,6363,6371,6401,6411,6420,6428,6484,6494,6500,6508,6514,6542,6548,6576,6582,6610,6618,6628,6667,6684,6689,6695,6710,6719,6739,6749,6755,6761,6814,6820,6863,6869,6912,6918,6924,6952,6958,6986,6992,7015,7021,7044,7050,7067,7073,7079,7146,7152,7185,7191,7359,7365,7408,7414,7419,7427,7464,7472,7505],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"dcf-model-builder",[53],{"type":54,"value":55},"text","DCF Model Builder",{"type":48,"tag":57,"props":58,"children":60},"h2",{"id":59},"overview",[61],{"type":54,"value":62},"Overview",{"type":48,"tag":64,"props":65,"children":66},"p",{},[67],{"type":54,"value":68},"This skill creates institutional-quality DCF models for equity valuation following investment banking standards. Each analysis produces a detailed Excel model (with sensitivity analysis included at the bottom of the DCF sheet).",{"type":48,"tag":57,"props":70,"children":72},{"id":71},"tools",[73],{"type":54,"value":74},"Tools",{"type":48,"tag":76,"props":77,"children":78},"ul",{},[79],{"type":48,"tag":80,"props":81,"children":82},"li",{},[83],{"type":54,"value":84},"Default to using all of the information provided by the user and MCP servers available for data sourcing.",{"type":48,"tag":57,"props":86,"children":88},{"id":87},"critical-constraints-read-these-first",[89],{"type":54,"value":90},"Critical Constraints - Read These First",{"type":48,"tag":64,"props":92,"children":93},{},[94],{"type":54,"value":95},"These constraints apply throughout all DCF model building. Review before starting:",{"type":48,"tag":64,"props":97,"children":98},{},[99],{"type":48,"tag":100,"props":101,"children":102},"strong",{},[103],{"type":54,"value":104},"Environment: Office JS vs Python\u002Fopenpyxl:",{"type":48,"tag":76,"props":106,"children":107},{},[108,151,169],{"type":48,"tag":80,"props":109,"children":110},{},[111,116,118,125,127,133,135,141,143,149],{"type":48,"tag":100,"props":112,"children":113},{},[114],{"type":54,"value":115},"If running inside Excel (Office Add-in \u002F Office JS environment):",{"type":54,"value":117}," Use Office JS directly — do NOT use Python\u002Fopenpyxl. Write formulas via ",{"type":48,"tag":119,"props":120,"children":122},"code",{"className":121},[],[123],{"type":54,"value":124},"range.formulas = [[\"=D19*(1+$B$8)\"]]",{"type":54,"value":126},". No separate recalc step needed; Excel calculates natively. Use ",{"type":48,"tag":119,"props":128,"children":130},{"className":129},[],[131],{"type":54,"value":132},"range.format.*",{"type":54,"value":134}," for styling. The same formulas-over-hardcodes rule applies: set ",{"type":48,"tag":119,"props":136,"children":138},{"className":137},[],[139],{"type":54,"value":140},".formulas",{"type":54,"value":142},", never ",{"type":48,"tag":119,"props":144,"children":146},{"className":145},[],[147],{"type":54,"value":148},".values",{"type":54,"value":150}," for derived cells.",{"type":48,"tag":80,"props":152,"children":153},{},[154,159,161,167],{"type":48,"tag":100,"props":155,"children":156},{},[157],{"type":54,"value":158},"If generating a standalone .xlsx file (no live Excel session):",{"type":54,"value":160}," Use Python\u002Fopenpyxl as described below, then run ",{"type":48,"tag":119,"props":162,"children":164},{"className":163},[],[165],{"type":54,"value":166},"recalc.py",{"type":54,"value":168}," before delivery.",{"type":48,"tag":80,"props":170,"children":171},{},[172],{"type":54,"value":173},"The rest of this skill uses openpyxl examples — translate to Office JS API calls when in that environment, but all principles (formula strings, cell comments, section checkpoints, sensitivity table loops) apply identically.",{"type":48,"tag":64,"props":175,"children":176},{},[177,182,184,190,192,197,199,205],{"type":48,"tag":100,"props":178,"children":179},{},[180],{"type":54,"value":181},"⚠️ Office JS merged cell pitfall:",{"type":54,"value":183}," When building section headers with merged cells, do NOT call ",{"type":48,"tag":119,"props":185,"children":187},{"className":186},[],[188],{"type":54,"value":189},".merge()",{"type":54,"value":191}," then set ",{"type":48,"tag":119,"props":193,"children":195},{"className":194},[],[196],{"type":54,"value":148},{"type":54,"value":198}," on the merged range — Office JS still reports the range's original dimensions and will throw ",{"type":48,"tag":119,"props":200,"children":202},{"className":201},[],[203],{"type":54,"value":204},"InvalidArgument: The number of rows or columns in the input array doesn't match the size or dimensions of the range",{"type":54,"value":206},". Instead, write the value to the top-left cell alone, then merge and format the full range:",{"type":48,"tag":208,"props":209,"children":214},"pre",{"className":210,"code":211,"language":212,"meta":213,"style":213},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F WRONG — throws InvalidArgument:\nconst hdr = ws.getRange(\"A7:H7\");\nhdr.merge();\nhdr.values = [[\"MARKET DATA & KEY INPUTS\"]];  \u002F\u002F 1×1 array vs 1×8 range → fails\n\n\u002F\u002F CORRECT — value first on single cell, then merge + format the range:\nws.getRange(\"A7\").values = [[\"MARKET DATA & KEY INPUTS\"]];\nconst hdr = ws.getRange(\"A7:H7\");\nhdr.merge();\nhdr.format.fill.color = \"#1F4E79\";\nhdr.format.font.bold = true;\nhdr.format.font.color = \"#FFFFFF\";\n","js","",[215],{"type":48,"tag":119,"props":216,"children":217},{"__ignoreMap":213},[218,230,298,325,379,389,398,472,524,548,605,653],{"type":48,"tag":219,"props":220,"children":223},"span",{"class":221,"line":222},"line",1,[224],{"type":48,"tag":219,"props":225,"children":227},{"style":226},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[228],{"type":54,"value":229},"\u002F\u002F WRONG — throws InvalidArgument:\n",{"type":48,"tag":219,"props":231,"children":233},{"class":221,"line":232},2,[234,240,246,252,257,262,268,273,278,284,288,293],{"type":48,"tag":219,"props":235,"children":237},{"style":236},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[238],{"type":54,"value":239},"const",{"type":48,"tag":219,"props":241,"children":243},{"style":242},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[244],{"type":54,"value":245}," hdr ",{"type":48,"tag":219,"props":247,"children":249},{"style":248},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[250],{"type":54,"value":251},"=",{"type":48,"tag":219,"props":253,"children":254},{"style":242},[255],{"type":54,"value":256}," ws",{"type":48,"tag":219,"props":258,"children":259},{"style":248},[260],{"type":54,"value":261},".",{"type":48,"tag":219,"props":263,"children":265},{"style":264},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[266],{"type":54,"value":267},"getRange",{"type":48,"tag":219,"props":269,"children":270},{"style":242},[271],{"type":54,"value":272},"(",{"type":48,"tag":219,"props":274,"children":275},{"style":248},[276],{"type":54,"value":277},"\"",{"type":48,"tag":219,"props":279,"children":281},{"style":280},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[282],{"type":54,"value":283},"A7:H7",{"type":48,"tag":219,"props":285,"children":286},{"style":248},[287],{"type":54,"value":277},{"type":48,"tag":219,"props":289,"children":290},{"style":242},[291],{"type":54,"value":292},")",{"type":48,"tag":219,"props":294,"children":295},{"style":248},[296],{"type":54,"value":297},";\n",{"type":48,"tag":219,"props":299,"children":301},{"class":221,"line":300},3,[302,307,311,316,321],{"type":48,"tag":219,"props":303,"children":304},{"style":242},[305],{"type":54,"value":306},"hdr",{"type":48,"tag":219,"props":308,"children":309},{"style":248},[310],{"type":54,"value":261},{"type":48,"tag":219,"props":312,"children":313},{"style":264},[314],{"type":54,"value":315},"merge",{"type":48,"tag":219,"props":317,"children":318},{"style":242},[319],{"type":54,"value":320},"()",{"type":48,"tag":219,"props":322,"children":323},{"style":248},[324],{"type":54,"value":297},{"type":48,"tag":219,"props":326,"children":328},{"class":221,"line":327},4,[329,333,337,342,346,351,355,360,364,369,374],{"type":48,"tag":219,"props":330,"children":331},{"style":242},[332],{"type":54,"value":306},{"type":48,"tag":219,"props":334,"children":335},{"style":248},[336],{"type":54,"value":261},{"type":48,"tag":219,"props":338,"children":339},{"style":242},[340],{"type":54,"value":341},"values ",{"type":48,"tag":219,"props":343,"children":344},{"style":248},[345],{"type":54,"value":251},{"type":48,"tag":219,"props":347,"children":348},{"style":242},[349],{"type":54,"value":350}," [[",{"type":48,"tag":219,"props":352,"children":353},{"style":248},[354],{"type":54,"value":277},{"type":48,"tag":219,"props":356,"children":357},{"style":280},[358],{"type":54,"value":359},"MARKET DATA & KEY INPUTS",{"type":48,"tag":219,"props":361,"children":362},{"style":248},[363],{"type":54,"value":277},{"type":48,"tag":219,"props":365,"children":366},{"style":242},[367],{"type":54,"value":368},"]]",{"type":48,"tag":219,"props":370,"children":371},{"style":248},[372],{"type":54,"value":373},";",{"type":48,"tag":219,"props":375,"children":376},{"style":226},[377],{"type":54,"value":378},"  \u002F\u002F 1×1 array vs 1×8 range → fails\n",{"type":48,"tag":219,"props":380,"children":382},{"class":221,"line":381},5,[383],{"type":48,"tag":219,"props":384,"children":386},{"emptyLinePlaceholder":385},true,[387],{"type":54,"value":388},"\n",{"type":48,"tag":219,"props":390,"children":392},{"class":221,"line":391},6,[393],{"type":48,"tag":219,"props":394,"children":395},{"style":226},[396],{"type":54,"value":397},"\u002F\u002F CORRECT — value first on single cell, then merge + format the range:\n",{"type":48,"tag":219,"props":399,"children":401},{"class":221,"line":400},7,[402,407,411,415,419,423,428,432,436,440,444,448,452,456,460,464,468],{"type":48,"tag":219,"props":403,"children":404},{"style":242},[405],{"type":54,"value":406},"ws",{"type":48,"tag":219,"props":408,"children":409},{"style":248},[410],{"type":54,"value":261},{"type":48,"tag":219,"props":412,"children":413},{"style":264},[414],{"type":54,"value":267},{"type":48,"tag":219,"props":416,"children":417},{"style":242},[418],{"type":54,"value":272},{"type":48,"tag":219,"props":420,"children":421},{"style":248},[422],{"type":54,"value":277},{"type":48,"tag":219,"props":424,"children":425},{"style":280},[426],{"type":54,"value":427},"A7",{"type":48,"tag":219,"props":429,"children":430},{"style":248},[431],{"type":54,"value":277},{"type":48,"tag":219,"props":433,"children":434},{"style":242},[435],{"type":54,"value":292},{"type":48,"tag":219,"props":437,"children":438},{"style":248},[439],{"type":54,"value":261},{"type":48,"tag":219,"props":441,"children":442},{"style":242},[443],{"type":54,"value":341},{"type":48,"tag":219,"props":445,"children":446},{"style":248},[447],{"type":54,"value":251},{"type":48,"tag":219,"props":449,"children":450},{"style":242},[451],{"type":54,"value":350},{"type":48,"tag":219,"props":453,"children":454},{"style":248},[455],{"type":54,"value":277},{"type":48,"tag":219,"props":457,"children":458},{"style":280},[459],{"type":54,"value":359},{"type":48,"tag":219,"props":461,"children":462},{"style":248},[463],{"type":54,"value":277},{"type":48,"tag":219,"props":465,"children":466},{"style":242},[467],{"type":54,"value":368},{"type":48,"tag":219,"props":469,"children":470},{"style":248},[471],{"type":54,"value":297},{"type":48,"tag":219,"props":473,"children":475},{"class":221,"line":474},8,[476,480,484,488,492,496,500,504,508,512,516,520],{"type":48,"tag":219,"props":477,"children":478},{"style":236},[479],{"type":54,"value":239},{"type":48,"tag":219,"props":481,"children":482},{"style":242},[483],{"type":54,"value":245},{"type":48,"tag":219,"props":485,"children":486},{"style":248},[487],{"type":54,"value":251},{"type":48,"tag":219,"props":489,"children":490},{"style":242},[491],{"type":54,"value":256},{"type":48,"tag":219,"props":493,"children":494},{"style":248},[495],{"type":54,"value":261},{"type":48,"tag":219,"props":497,"children":498},{"style":264},[499],{"type":54,"value":267},{"type":48,"tag":219,"props":501,"children":502},{"style":242},[503],{"type":54,"value":272},{"type":48,"tag":219,"props":505,"children":506},{"style":248},[507],{"type":54,"value":277},{"type":48,"tag":219,"props":509,"children":510},{"style":280},[511],{"type":54,"value":283},{"type":48,"tag":219,"props":513,"children":514},{"style":248},[515],{"type":54,"value":277},{"type":48,"tag":219,"props":517,"children":518},{"style":242},[519],{"type":54,"value":292},{"type":48,"tag":219,"props":521,"children":522},{"style":248},[523],{"type":54,"value":297},{"type":48,"tag":219,"props":525,"children":527},{"class":221,"line":526},9,[528,532,536,540,544],{"type":48,"tag":219,"props":529,"children":530},{"style":242},[531],{"type":54,"value":306},{"type":48,"tag":219,"props":533,"children":534},{"style":248},[535],{"type":54,"value":261},{"type":48,"tag":219,"props":537,"children":538},{"style":264},[539],{"type":54,"value":315},{"type":48,"tag":219,"props":541,"children":542},{"style":242},[543],{"type":54,"value":320},{"type":48,"tag":219,"props":545,"children":546},{"style":248},[547],{"type":54,"value":297},{"type":48,"tag":219,"props":549,"children":551},{"class":221,"line":550},10,[552,556,560,565,569,574,578,583,587,592,597,601],{"type":48,"tag":219,"props":553,"children":554},{"style":242},[555],{"type":54,"value":306},{"type":48,"tag":219,"props":557,"children":558},{"style":248},[559],{"type":54,"value":261},{"type":48,"tag":219,"props":561,"children":562},{"style":242},[563],{"type":54,"value":564},"format",{"type":48,"tag":219,"props":566,"children":567},{"style":248},[568],{"type":54,"value":261},{"type":48,"tag":219,"props":570,"children":571},{"style":242},[572],{"type":54,"value":573},"fill",{"type":48,"tag":219,"props":575,"children":576},{"style":248},[577],{"type":54,"value":261},{"type":48,"tag":219,"props":579,"children":580},{"style":242},[581],{"type":54,"value":582},"color ",{"type":48,"tag":219,"props":584,"children":585},{"style":248},[586],{"type":54,"value":251},{"type":48,"tag":219,"props":588,"children":589},{"style":248},[590],{"type":54,"value":591}," \"",{"type":48,"tag":219,"props":593,"children":594},{"style":280},[595],{"type":54,"value":596},"#1F4E79",{"type":48,"tag":219,"props":598,"children":599},{"style":248},[600],{"type":54,"value":277},{"type":48,"tag":219,"props":602,"children":603},{"style":248},[604],{"type":54,"value":297},{"type":48,"tag":219,"props":606,"children":608},{"class":221,"line":607},11,[609,613,617,621,625,630,634,639,643,649],{"type":48,"tag":219,"props":610,"children":611},{"style":242},[612],{"type":54,"value":306},{"type":48,"tag":219,"props":614,"children":615},{"style":248},[616],{"type":54,"value":261},{"type":48,"tag":219,"props":618,"children":619},{"style":242},[620],{"type":54,"value":564},{"type":48,"tag":219,"props":622,"children":623},{"style":248},[624],{"type":54,"value":261},{"type":48,"tag":219,"props":626,"children":627},{"style":242},[628],{"type":54,"value":629},"font",{"type":48,"tag":219,"props":631,"children":632},{"style":248},[633],{"type":54,"value":261},{"type":48,"tag":219,"props":635,"children":636},{"style":242},[637],{"type":54,"value":638},"bold ",{"type":48,"tag":219,"props":640,"children":641},{"style":248},[642],{"type":54,"value":251},{"type":48,"tag":219,"props":644,"children":646},{"style":645},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[647],{"type":54,"value":648}," true",{"type":48,"tag":219,"props":650,"children":651},{"style":248},[652],{"type":54,"value":297},{"type":48,"tag":219,"props":654,"children":656},{"class":221,"line":655},12,[657,661,665,669,673,677,681,685,689,693,698,702],{"type":48,"tag":219,"props":658,"children":659},{"style":242},[660],{"type":54,"value":306},{"type":48,"tag":219,"props":662,"children":663},{"style":248},[664],{"type":54,"value":261},{"type":48,"tag":219,"props":666,"children":667},{"style":242},[668],{"type":54,"value":564},{"type":48,"tag":219,"props":670,"children":671},{"style":248},[672],{"type":54,"value":261},{"type":48,"tag":219,"props":674,"children":675},{"style":242},[676],{"type":54,"value":629},{"type":48,"tag":219,"props":678,"children":679},{"style":248},[680],{"type":54,"value":261},{"type":48,"tag":219,"props":682,"children":683},{"style":242},[684],{"type":54,"value":582},{"type":48,"tag":219,"props":686,"children":687},{"style":248},[688],{"type":54,"value":251},{"type":48,"tag":219,"props":690,"children":691},{"style":248},[692],{"type":54,"value":591},{"type":48,"tag":219,"props":694,"children":695},{"style":280},[696],{"type":54,"value":697},"#FFFFFF",{"type":48,"tag":219,"props":699,"children":700},{"style":248},[701],{"type":54,"value":277},{"type":48,"tag":219,"props":703,"children":704},{"style":248},[705],{"type":54,"value":297},{"type":48,"tag":64,"props":707,"children":708},{},[709],{"type":54,"value":710},"This applies to every merged section header in the DCF (market data, scenario blocks, cash flow projection, terminal value, valuation summary, sensitivity tables).",{"type":48,"tag":64,"props":712,"children":713},{},[714],{"type":48,"tag":100,"props":715,"children":716},{},[717],{"type":54,"value":718},"Formulas Over Hardcodes (NON-NEGOTIABLE):",{"type":48,"tag":76,"props":720,"children":721},{},[722,727,748,753],{"type":48,"tag":80,"props":723,"children":724},{},[725],{"type":54,"value":726},"Every projection, margin, discount factor, PV, and sensitivity cell MUST be a live Excel formula — never a value computed in Python and written as a number",{"type":48,"tag":80,"props":728,"children":729},{},[730,732,738,740,746],{"type":54,"value":731},"When using openpyxl: ",{"type":48,"tag":119,"props":733,"children":735},{"className":734},[],[736],{"type":54,"value":737},"ws[\"D20\"] = \"=D19*(1+$B$8)\"",{"type":54,"value":739}," is correct; ",{"type":48,"tag":119,"props":741,"children":743},{"className":742},[],[744],{"type":54,"value":745},"ws[\"D20\"] = calculated_revenue",{"type":54,"value":747}," is WRONG",{"type":48,"tag":80,"props":749,"children":750},{},[751],{"type":54,"value":752},"The only hardcoded numbers permitted are: (1) raw historical inputs, (2) assumption drivers (growth rates, WACC inputs, terminal g), (3) current market data (share price, debt balance)",{"type":48,"tag":80,"props":754,"children":755},{},[756],{"type":54,"value":757},"If you catch yourself computing something in Python and writing the result — STOP. The model must flex when the user changes an assumption.",{"type":48,"tag":64,"props":759,"children":760},{},[761],{"type":48,"tag":100,"props":762,"children":763},{},[764],{"type":54,"value":765},"Verify Step-by-Step With the User (DO NOT build end-to-end):",{"type":48,"tag":76,"props":767,"children":768},{},[769,774,779,784,789,794],{"type":48,"tag":80,"props":770,"children":771},{},[772],{"type":54,"value":773},"After data retrieval → show the user the raw inputs block (revenue, margins, shares, net debt) and confirm before projecting",{"type":48,"tag":80,"props":775,"children":776},{},[777],{"type":54,"value":778},"After revenue projections → show the projected top line and growth rates, confirm before building margin build",{"type":48,"tag":80,"props":780,"children":781},{},[782],{"type":54,"value":783},"After FCF build → show the full FCF schedule, confirm logic before computing WACC",{"type":48,"tag":80,"props":785,"children":786},{},[787],{"type":54,"value":788},"After WACC → show the calculation and inputs, confirm before discounting",{"type":48,"tag":80,"props":790,"children":791},{},[792],{"type":54,"value":793},"After terminal value + PV → show the equity bridge (EV → equity value → per share), confirm before sensitivity tables",{"type":48,"tag":80,"props":795,"children":796},{},[797],{"type":54,"value":798},"Catch errors at each stage — a wrong margin assumption discovered after sensitivity tables are built means rebuilding everything downstream",{"type":48,"tag":64,"props":800,"children":801},{},[802],{"type":48,"tag":100,"props":803,"children":804},{},[805],{"type":54,"value":806},"Sensitivity Tables:",{"type":48,"tag":76,"props":808,"children":809},{},[810,820,830,848,853,858,863],{"type":48,"tag":80,"props":811,"children":812},{},[813,818],{"type":48,"tag":100,"props":814,"children":815},{},[816],{"type":54,"value":817},"Use an ODD number of rows and columns",{"type":54,"value":819}," (standard: 5×5, sometimes 7×7) — this guarantees a true center cell",{"type":48,"tag":80,"props":821,"children":822},{},[823,828],{"type":48,"tag":100,"props":824,"children":825},{},[826],{"type":54,"value":827},"Center cell = base case.",{"type":54,"value":829}," Build the axis values so the middle row header and middle column header exactly equal the model's actual assumptions (e.g., if base WACC = 9.0%, the middle row is 9.0%; if terminal g = 3.0%, the middle column is 3.0%). The center cell's output must therefore equal the model's actual implied share price — this is the sanity check that the table is built correctly.",{"type":48,"tag":80,"props":831,"children":832},{},[833,838,840,846],{"type":48,"tag":100,"props":834,"children":835},{},[836],{"type":54,"value":837},"Highlight the center cell",{"type":54,"value":839}," with the medium-blue fill (",{"type":48,"tag":119,"props":841,"children":843},{"className":842},[],[844],{"type":54,"value":845},"#BDD7EE",{"type":54,"value":847},") + bold font so it's immediately visible which cell is the base case.",{"type":48,"tag":80,"props":849,"children":850},{},[851],{"type":54,"value":852},"Populate ALL cells (typically 3 tables × 25 cells = 75) with full DCF recalculation formulas",{"type":48,"tag":80,"props":854,"children":855},{},[856],{"type":54,"value":857},"Use openpyxl loops (or Office JS loops) to write formulas programmatically",{"type":48,"tag":80,"props":859,"children":860},{},[861],{"type":54,"value":862},"NO placeholder text, NO linear approximations, NO manual steps required",{"type":48,"tag":80,"props":864,"children":865},{},[866],{"type":54,"value":867},"Each cell must recalculate full DCF for that assumption combination",{"type":48,"tag":64,"props":869,"children":870},{},[871],{"type":48,"tag":100,"props":872,"children":873},{},[874],{"type":54,"value":875},"Cell Comments:",{"type":48,"tag":76,"props":877,"children":878},{},[879,884,914,919],{"type":48,"tag":80,"props":880,"children":881},{},[882],{"type":54,"value":883},"Add cell comments AS each hardcoded value is created",{"type":48,"tag":80,"props":885,"children":886},{},[887,889,894,896,901,902,907,908,913],{"type":54,"value":888},"Format: \"Source: ",{"type":48,"tag":219,"props":890,"children":891},{},[892],{"type":54,"value":893},"System\u002FDocument",{"type":54,"value":895},", ",{"type":48,"tag":219,"props":897,"children":898},{},[899],{"type":54,"value":900},"Date",{"type":54,"value":895},{"type":48,"tag":219,"props":903,"children":904},{},[905],{"type":54,"value":906},"Reference",{"type":54,"value":895},{"type":48,"tag":219,"props":909,"children":910},{},[911],{"type":54,"value":912},"URL if applicable",{"type":54,"value":277},{"type":48,"tag":80,"props":915,"children":916},{},[917],{"type":54,"value":918},"Every blue input must have a comment before moving to next section",{"type":48,"tag":80,"props":920,"children":921},{},[922],{"type":54,"value":923},"Do not defer to end or write \"TODO: add source\"",{"type":48,"tag":64,"props":925,"children":926},{},[927],{"type":48,"tag":100,"props":928,"children":929},{},[930],{"type":54,"value":931},"Model Layout Planning:",{"type":48,"tag":76,"props":933,"children":934},{},[935,940,945,950,955],{"type":48,"tag":80,"props":936,"children":937},{},[938],{"type":54,"value":939},"Define ALL section row positions BEFORE writing any formulas",{"type":48,"tag":80,"props":941,"children":942},{},[943],{"type":54,"value":944},"Write ALL headers and labels first",{"type":48,"tag":80,"props":946,"children":947},{},[948],{"type":54,"value":949},"Write ALL section dividers and blank rows second",{"type":48,"tag":80,"props":951,"children":952},{},[953],{"type":54,"value":954},"THEN write formulas using the locked row positions",{"type":48,"tag":80,"props":956,"children":957},{},[958],{"type":54,"value":959},"Test formulas immediately after creation",{"type":48,"tag":64,"props":961,"children":962},{},[963],{"type":48,"tag":100,"props":964,"children":965},{},[966],{"type":54,"value":967},"Formula Recalculation:",{"type":48,"tag":76,"props":969,"children":970},{},[971,984,989],{"type":48,"tag":80,"props":972,"children":973},{},[974,976,982],{"type":54,"value":975},"Run ",{"type":48,"tag":119,"props":977,"children":979},{"className":978},[],[980],{"type":54,"value":981},"python recalc.py model.xlsx 30",{"type":54,"value":983}," before delivery",{"type":48,"tag":80,"props":985,"children":986},{},[987],{"type":54,"value":988},"Fix ALL errors until status is \"success\"",{"type":48,"tag":80,"props":990,"children":991},{},[992],{"type":54,"value":993},"Zero formula errors required (#REF!, #DIV\u002F0!, #VALUE!, etc.)",{"type":48,"tag":64,"props":995,"children":996},{},[997],{"type":48,"tag":100,"props":998,"children":999},{},[1000],{"type":54,"value":1001},"Scenario Blocks:",{"type":48,"tag":76,"props":1003,"children":1004},{},[1005,1010,1015,1026],{"type":48,"tag":80,"props":1006,"children":1007},{},[1008],{"type":54,"value":1009},"Create separate blocks for Bear\u002FBase\u002FBull cases",{"type":48,"tag":80,"props":1011,"children":1012},{},[1013],{"type":54,"value":1014},"Show assumptions horizontally across projection years within each block",{"type":48,"tag":80,"props":1016,"children":1017},{},[1018,1020],{"type":54,"value":1019},"Use IF formulas: ",{"type":48,"tag":119,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":54,"value":1025},"=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell]))",{"type":48,"tag":80,"props":1027,"children":1028},{},[1029],{"type":54,"value":1030},"Verify formulas reference correct scenario block cells",{"type":48,"tag":57,"props":1032,"children":1034},{"id":1033},"dcf-process-workflow",[1035],{"type":54,"value":1036},"DCF Process Workflow",{"type":48,"tag":1038,"props":1039,"children":1041},"h3",{"id":1040},"step-1-data-retrieval-and-validation",[1042],{"type":54,"value":1043},"Step 1: Data Retrieval and Validation",{"type":48,"tag":64,"props":1045,"children":1046},{},[1047],{"type":54,"value":1048},"Fetch data from MCP servers, user provided data, and the web.",{"type":48,"tag":64,"props":1050,"children":1051},{},[1052],{"type":48,"tag":100,"props":1053,"children":1054},{},[1055],{"type":54,"value":1056},"Data Sources Priority:",{"type":48,"tag":1058,"props":1059,"children":1060},"ol",{},[1061,1071,1081],{"type":48,"tag":80,"props":1062,"children":1063},{},[1064,1069],{"type":48,"tag":100,"props":1065,"children":1066},{},[1067],{"type":54,"value":1068},"MCP Servers",{"type":54,"value":1070}," (if configured) - Structured financial data from providers like Daloopa",{"type":48,"tag":80,"props":1072,"children":1073},{},[1074,1079],{"type":48,"tag":100,"props":1075,"children":1076},{},[1077],{"type":54,"value":1078},"User-Provided Data",{"type":54,"value":1080}," - Historical financials from their research",{"type":48,"tag":80,"props":1082,"children":1083},{},[1084,1089],{"type":48,"tag":100,"props":1085,"children":1086},{},[1087],{"type":54,"value":1088},"Web Search\u002FFetch",{"type":54,"value":1090}," - Current prices, beta, debt and cash when needed",{"type":48,"tag":64,"props":1092,"children":1093},{},[1094],{"type":48,"tag":100,"props":1095,"children":1096},{},[1097],{"type":54,"value":1098},"Validation Checklist:",{"type":48,"tag":76,"props":1100,"children":1101},{},[1102,1107,1112,1117,1122],{"type":48,"tag":80,"props":1103,"children":1104},{},[1105],{"type":54,"value":1106},"Verify net debt vs net cash (critical for valuation)",{"type":48,"tag":80,"props":1108,"children":1109},{},[1110],{"type":54,"value":1111},"Confirm diluted shares outstanding (check for recent buybacks\u002Fissuances)",{"type":48,"tag":80,"props":1113,"children":1114},{},[1115],{"type":54,"value":1116},"Validate historical margins are consistent with business model",{"type":48,"tag":80,"props":1118,"children":1119},{},[1120],{"type":54,"value":1121},"Cross-check revenue growth rates with industry benchmarks",{"type":48,"tag":80,"props":1123,"children":1124},{},[1125],{"type":54,"value":1126},"Verify tax rate is reasonable (typically 21-28%)",{"type":48,"tag":1038,"props":1128,"children":1130},{"id":1129},"step-2-historical-analysis-3-5-years",[1131],{"type":54,"value":1132},"Step 2: Historical Analysis (3-5 years)",{"type":48,"tag":64,"props":1134,"children":1135},{},[1136],{"type":54,"value":1137},"Analyze and document:",{"type":48,"tag":76,"props":1139,"children":1140},{},[1141,1151,1161,1171,1181],{"type":48,"tag":80,"props":1142,"children":1143},{},[1144,1149],{"type":48,"tag":100,"props":1145,"children":1146},{},[1147],{"type":54,"value":1148},"Revenue growth trends",{"type":54,"value":1150},": Calculate CAGR, identify drivers",{"type":48,"tag":80,"props":1152,"children":1153},{},[1154,1159],{"type":48,"tag":100,"props":1155,"children":1156},{},[1157],{"type":54,"value":1158},"Margin progression",{"type":54,"value":1160},": Track gross margin, EBIT margin, FCF margin",{"type":48,"tag":80,"props":1162,"children":1163},{},[1164,1169],{"type":48,"tag":100,"props":1165,"children":1166},{},[1167],{"type":54,"value":1168},"Capital intensity",{"type":54,"value":1170},": D&A and CapEx as % of revenue",{"type":48,"tag":80,"props":1172,"children":1173},{},[1174,1179],{"type":48,"tag":100,"props":1175,"children":1176},{},[1177],{"type":54,"value":1178},"Working capital efficiency",{"type":54,"value":1180},": NWC changes as % of revenue growth",{"type":48,"tag":80,"props":1182,"children":1183},{},[1184,1189],{"type":48,"tag":100,"props":1185,"children":1186},{},[1187],{"type":54,"value":1188},"Return metrics",{"type":54,"value":1190},": ROIC, ROE trends",{"type":48,"tag":64,"props":1192,"children":1193},{},[1194],{"type":54,"value":1195},"Create summary tables showing:",{"type":48,"tag":208,"props":1197,"children":1201},{"className":1198,"code":1200,"language":54},[1199],"language-text","Historical Metrics (LTM):\nRevenue: $X million\nRevenue growth: X% CAGR\nGross margin: X%\nEBIT margin: X%\nD&A % of revenue: X%\nCapEx % of revenue: X%\nFCF margin: X%\n",[1202],{"type":48,"tag":119,"props":1203,"children":1204},{"__ignoreMap":213},[1205],{"type":54,"value":1200},{"type":48,"tag":1038,"props":1207,"children":1209},{"id":1208},"step-3-build-revenue-projections",[1210],{"type":54,"value":1211},"Step 3: Build Revenue Projections",{"type":48,"tag":64,"props":1213,"children":1214},{},[1215],{"type":48,"tag":100,"props":1216,"children":1217},{},[1218],{"type":54,"value":1219},"Methodology:",{"type":48,"tag":1058,"props":1221,"children":1222},{},[1223,1228,1233],{"type":48,"tag":80,"props":1224,"children":1225},{},[1226],{"type":54,"value":1227},"Start with latest actual revenue (LTM or most recent fiscal year)",{"type":48,"tag":80,"props":1229,"children":1230},{},[1231],{"type":54,"value":1232},"Apply growth rates for each projection year",{"type":48,"tag":80,"props":1234,"children":1235},{},[1236],{"type":54,"value":1237},"Show both dollar amounts AND calculated growth %",{"type":48,"tag":64,"props":1239,"children":1240},{},[1241],{"type":48,"tag":100,"props":1242,"children":1243},{},[1244],{"type":54,"value":1245},"Growth Rate Framework:",{"type":48,"tag":76,"props":1247,"children":1248},{},[1249,1254,1259],{"type":48,"tag":80,"props":1250,"children":1251},{},[1252],{"type":54,"value":1253},"Year 1-2: Higher growth reflecting near-term visibility",{"type":48,"tag":80,"props":1255,"children":1256},{},[1257],{"type":54,"value":1258},"Year 3-4: Gradual moderation toward industry average",{"type":48,"tag":80,"props":1260,"children":1261},{},[1262],{"type":54,"value":1263},"Year 5+: Approaching terminal growth rate",{"type":48,"tag":64,"props":1265,"children":1266},{},[1267],{"type":48,"tag":100,"props":1268,"children":1269},{},[1270],{"type":54,"value":1271},"Formula structure:",{"type":48,"tag":76,"props":1273,"children":1274},{},[1275,1280],{"type":48,"tag":80,"props":1276,"children":1277},{},[1278],{"type":54,"value":1279},"Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)",{"type":48,"tag":80,"props":1281,"children":1282},{},[1283],{"type":54,"value":1284},"Growth %(Year N) = Revenue(Year N) \u002F Revenue(Year N-1) - 1",{"type":48,"tag":64,"props":1286,"children":1287},{},[1288],{"type":48,"tag":100,"props":1289,"children":1290},{},[1291],{"type":54,"value":1292},"Three-scenario approach:",{"type":48,"tag":208,"props":1294,"children":1297},{"className":1295,"code":1296,"language":54},[1199],"Bear Case: Conservative growth (e.g., 8-12%)\nBase Case: Most likely scenario (e.g., 12-16%)\nBull Case: Optimistic growth (e.g., 16-20%)\n",[1298],{"type":48,"tag":119,"props":1299,"children":1300},{"__ignoreMap":213},[1301],{"type":54,"value":1296},{"type":48,"tag":1038,"props":1303,"children":1305},{"id":1304},"step-4-operating-expense-modeling",[1306],{"type":54,"value":1307},"Step 4: Operating Expense Modeling",{"type":48,"tag":64,"props":1309,"children":1310},{},[1311],{"type":48,"tag":100,"props":1312,"children":1313},{},[1314],{"type":54,"value":1315},"Fixed\u002FVariable Cost Analysis:",{"type":48,"tag":64,"props":1317,"children":1318},{},[1319],{"type":54,"value":1320},"Operating expenses should model realistic operating leverage:",{"type":48,"tag":76,"props":1322,"children":1323},{},[1324,1334,1344],{"type":48,"tag":80,"props":1325,"children":1326},{},[1327,1332],{"type":48,"tag":100,"props":1328,"children":1329},{},[1330],{"type":54,"value":1331},"Sales & Marketing",{"type":54,"value":1333},": Typically 15-40% of revenue depending on business model",{"type":48,"tag":80,"props":1335,"children":1336},{},[1337,1342],{"type":48,"tag":100,"props":1338,"children":1339},{},[1340],{"type":54,"value":1341},"Research & Development",{"type":54,"value":1343},": Typically 10-30% for technology companies",{"type":48,"tag":80,"props":1345,"children":1346},{},[1347,1352],{"type":48,"tag":100,"props":1348,"children":1349},{},[1350],{"type":54,"value":1351},"General & Administrative",{"type":54,"value":1353},": Typically 8-15% of revenue, shows leverage as company scales",{"type":48,"tag":64,"props":1355,"children":1356},{},[1357],{"type":48,"tag":100,"props":1358,"children":1359},{},[1360],{"type":54,"value":1361},"Key principles:",{"type":48,"tag":76,"props":1363,"children":1364},{},[1365,1370,1375,1380],{"type":48,"tag":80,"props":1366,"children":1367},{},[1368],{"type":54,"value":1369},"ALL percentages based on REVENUE, not gross profit",{"type":48,"tag":80,"props":1371,"children":1372},{},[1373],{"type":54,"value":1374},"Model operating leverage: % should decline as revenue scales",{"type":48,"tag":80,"props":1376,"children":1377},{},[1378],{"type":54,"value":1379},"Maintain separate line items for S&M, R&D, G&A",{"type":48,"tag":80,"props":1381,"children":1382},{},[1383],{"type":54,"value":1384},"Calculate EBIT = Gross Profit - Total OpEx",{"type":48,"tag":64,"props":1386,"children":1387},{},[1388],{"type":48,"tag":100,"props":1389,"children":1390},{},[1391],{"type":54,"value":1392},"Margin expansion framework:",{"type":48,"tag":208,"props":1394,"children":1397},{"className":1395,"code":1396,"language":54},[1199],"Current State → Target State (Year 5)\nGross Margin: X% → Y% (justify based on scale, efficiency)\nEBIT Margin: X% → Y% (result of revenue growth + opex leverage)\n",[1398],{"type":48,"tag":119,"props":1399,"children":1400},{"__ignoreMap":213},[1401],{"type":54,"value":1396},{"type":48,"tag":1038,"props":1403,"children":1405},{"id":1404},"step-5-free-cash-flow-calculation",[1406],{"type":54,"value":1407},"Step 5: Free Cash Flow Calculation",{"type":48,"tag":64,"props":1409,"children":1410},{},[1411],{"type":48,"tag":100,"props":1412,"children":1413},{},[1414],{"type":54,"value":1415},"Build FCF in proper sequence:",{"type":48,"tag":208,"props":1417,"children":1420},{"className":1418,"code":1419,"language":54},[1199],"EBIT\n(-) Taxes (EBIT × Tax Rate)\n= NOPAT (Net Operating Profit After Tax)\n(+) D&A (non-cash expense, % of revenue)\n(-) CapEx (% of revenue, typically 4-8%)\n(-) Δ NWC (change in working capital)\n= Unlevered Free Cash Flow\n",[1421],{"type":48,"tag":119,"props":1422,"children":1423},{"__ignoreMap":213},[1424],{"type":54,"value":1419},{"type":48,"tag":64,"props":1426,"children":1427},{},[1428],{"type":48,"tag":100,"props":1429,"children":1430},{},[1431],{"type":54,"value":1432},"Working Capital Modeling:",{"type":48,"tag":76,"props":1434,"children":1435},{},[1436,1441,1446,1451],{"type":48,"tag":80,"props":1437,"children":1438},{},[1439],{"type":54,"value":1440},"Calculate as % of revenue change (delta revenue)",{"type":48,"tag":80,"props":1442,"children":1443},{},[1444],{"type":54,"value":1445},"Typical range: -2% to +2% of revenue change",{"type":48,"tag":80,"props":1447,"children":1448},{},[1449],{"type":54,"value":1450},"Negative number = source of cash (working capital release)",{"type":48,"tag":80,"props":1452,"children":1453},{},[1454],{"type":54,"value":1455},"Positive number = use of cash (working capital build)",{"type":48,"tag":64,"props":1457,"children":1458},{},[1459],{"type":48,"tag":100,"props":1460,"children":1461},{},[1462],{"type":54,"value":1463},"Maintenance vs Growth CapEx:",{"type":48,"tag":76,"props":1465,"children":1466},{},[1467,1472,1477],{"type":48,"tag":80,"props":1468,"children":1469},{},[1470],{"type":54,"value":1471},"Maintenance CapEx: Sustains current operations (~2-3% revenue)",{"type":48,"tag":80,"props":1473,"children":1474},{},[1475],{"type":54,"value":1476},"Growth CapEx: Supports expansion (additional 2-5% revenue)",{"type":48,"tag":80,"props":1478,"children":1479},{},[1480],{"type":54,"value":1481},"Total CapEx should align with company's growth strategy",{"type":48,"tag":1038,"props":1483,"children":1485},{"id":1484},"step-6-cost-of-capital-wacc-research",[1486],{"type":54,"value":1487},"Step 6: Cost of Capital (WACC) Research",{"type":48,"tag":64,"props":1489,"children":1490},{},[1491],{"type":48,"tag":100,"props":1492,"children":1493},{},[1494],{"type":54,"value":1495},"CAPM Methodology for Cost of Equity:",{"type":48,"tag":208,"props":1497,"children":1500},{"className":1498,"code":1499,"language":54},[1199],"Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium\n\nWhere:\n- Risk-Free Rate = Current 10-Year Treasury Yield\n- Beta = 5-year monthly stock beta vs market index\n- Equity Risk Premium = 5.0-6.0% (market standard)\n",[1501],{"type":48,"tag":119,"props":1502,"children":1503},{"__ignoreMap":213},[1504],{"type":54,"value":1499},{"type":48,"tag":64,"props":1506,"children":1507},{},[1508],{"type":48,"tag":100,"props":1509,"children":1510},{},[1511],{"type":54,"value":1512},"Cost of Debt Calculation:",{"type":48,"tag":208,"props":1514,"children":1517},{"className":1515,"code":1516,"language":54},[1199],"After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)\n\nDetermine Pre-Tax Cost of Debt from:\n- Credit rating (if available)\n- Current yield on company bonds\n- Interest expense \u002F Total Debt from financials\n",[1518],{"type":48,"tag":119,"props":1519,"children":1520},{"__ignoreMap":213},[1521],{"type":54,"value":1516},{"type":48,"tag":64,"props":1523,"children":1524},{},[1525],{"type":48,"tag":100,"props":1526,"children":1527},{},[1528],{"type":54,"value":1529},"Capital Structure Weights:",{"type":48,"tag":208,"props":1531,"children":1534},{"className":1532,"code":1533,"language":54},[1199],"Market Value Equity = Current Stock Price × Shares Outstanding\nNet Debt = Total Debt - Cash & Equivalents\nEnterprise Value = Market Cap + Net Debt\n\nEquity Weight = Market Cap \u002F Enterprise Value\nDebt Weight = Net Debt \u002F Enterprise Value\n\nWACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)\n",[1535],{"type":48,"tag":119,"props":1536,"children":1537},{"__ignoreMap":213},[1538],{"type":54,"value":1533},{"type":48,"tag":64,"props":1540,"children":1541},{},[1542],{"type":48,"tag":100,"props":1543,"children":1544},{},[1545],{"type":54,"value":1546},"Special Cases:",{"type":48,"tag":76,"props":1548,"children":1549},{},[1550,1573],{"type":48,"tag":80,"props":1551,"children":1552},{},[1553,1558,1560],{"type":48,"tag":100,"props":1554,"children":1555},{},[1556],{"type":54,"value":1557},"Net Cash Position",{"type":54,"value":1559},": If Cash > Debt, Net Debt is NEGATIVE\n",{"type":48,"tag":76,"props":1561,"children":1562},{},[1563,1568],{"type":48,"tag":80,"props":1564,"children":1565},{},[1566],{"type":54,"value":1567},"Debt Weight may be negative",{"type":48,"tag":80,"props":1569,"children":1570},{},[1571],{"type":54,"value":1572},"WACC calculation adjusts accordingly",{"type":48,"tag":80,"props":1574,"children":1575},{},[1576,1581],{"type":48,"tag":100,"props":1577,"children":1578},{},[1579],{"type":54,"value":1580},"No Debt",{"type":54,"value":1582},": WACC = Cost of Equity",{"type":48,"tag":64,"props":1584,"children":1585},{},[1586],{"type":48,"tag":100,"props":1587,"children":1588},{},[1589],{"type":54,"value":1590},"Typical WACC Ranges:",{"type":48,"tag":76,"props":1592,"children":1593},{},[1594,1599,1604],{"type":48,"tag":80,"props":1595,"children":1596},{},[1597],{"type":54,"value":1598},"Large Cap, Stable: 7-9%",{"type":48,"tag":80,"props":1600,"children":1601},{},[1602],{"type":54,"value":1603},"Growth Companies: 9-12%",{"type":48,"tag":80,"props":1605,"children":1606},{},[1607],{"type":54,"value":1608},"High Growth\u002FRisk: 12-15%",{"type":48,"tag":1038,"props":1610,"children":1612},{"id":1611},"step-7-discount-rate-application-5-10-year-forecast",[1613],{"type":54,"value":1614},"Step 7: Discount Rate Application (5-10 Year Forecast)",{"type":48,"tag":64,"props":1616,"children":1617},{},[1618],{"type":48,"tag":100,"props":1619,"children":1620},{},[1621],{"type":54,"value":1622},"Mid-Year Convention:",{"type":48,"tag":76,"props":1624,"children":1625},{},[1626,1631,1636],{"type":48,"tag":80,"props":1627,"children":1628},{},[1629],{"type":54,"value":1630},"Cash flows assumed to occur mid-year",{"type":48,"tag":80,"props":1632,"children":1633},{},[1634],{"type":54,"value":1635},"Discount Period: 0.5, 1.5, 2.5, 3.5, 4.5, etc.",{"type":48,"tag":80,"props":1637,"children":1638},{},[1639],{"type":54,"value":1640},"Discount Factor = 1 \u002F (1 + WACC)^Period",{"type":48,"tag":64,"props":1642,"children":1643},{},[1644],{"type":48,"tag":100,"props":1645,"children":1646},{},[1647],{"type":54,"value":1648},"Present Value Calculation:",{"type":48,"tag":208,"props":1650,"children":1653},{"className":1651,"code":1652,"language":54},[1199],"For each projection year:\nPV of FCF = Unlevered FCF × Discount Factor\n\nExample (Year 1):\nFCF = $1,000\nWACC = 10%\nPeriod = 0.5\nDiscount Factor = 1 \u002F (1.10)^0.5 = 0.9535\nPV = $1,000 × 0.9535 = $954\n",[1654],{"type":48,"tag":119,"props":1655,"children":1656},{"__ignoreMap":213},[1657],{"type":54,"value":1652},{"type":48,"tag":64,"props":1659,"children":1660},{},[1661],{"type":48,"tag":100,"props":1662,"children":1663},{},[1664],{"type":54,"value":1665},"Projection Period Selection:",{"type":48,"tag":76,"props":1667,"children":1668},{},[1669,1679,1689],{"type":48,"tag":80,"props":1670,"children":1671},{},[1672,1677],{"type":48,"tag":100,"props":1673,"children":1674},{},[1675],{"type":54,"value":1676},"5 years",{"type":54,"value":1678},": Standard for most analyses",{"type":48,"tag":80,"props":1680,"children":1681},{},[1682,1687],{"type":48,"tag":100,"props":1683,"children":1684},{},[1685],{"type":54,"value":1686},"7-10 years",{"type":54,"value":1688},": High growth companies with longer runway",{"type":48,"tag":80,"props":1690,"children":1691},{},[1692,1697],{"type":48,"tag":100,"props":1693,"children":1694},{},[1695],{"type":54,"value":1696},"3 years",{"type":54,"value":1698},": Mature, stable businesses",{"type":48,"tag":1038,"props":1700,"children":1702},{"id":1701},"step-8-terminal-value-calculation",[1703],{"type":54,"value":1704},"Step 8: Terminal Value Calculation",{"type":48,"tag":64,"props":1706,"children":1707},{},[1708],{"type":48,"tag":100,"props":1709,"children":1710},{},[1711],{"type":54,"value":1712},"Perpetuity Growth Method (Preferred):",{"type":48,"tag":208,"props":1714,"children":1717},{"className":1715,"code":1716,"language":54},[1199],"Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)\nTerminal Value = Terminal FCF \u002F (WACC - Terminal Growth Rate)\n\nCritical Constraint: Terminal Growth \u003C WACC (otherwise infinite value)\n",[1718],{"type":48,"tag":119,"props":1719,"children":1720},{"__ignoreMap":213},[1721],{"type":54,"value":1716},{"type":48,"tag":64,"props":1723,"children":1724},{},[1725],{"type":48,"tag":100,"props":1726,"children":1727},{},[1728],{"type":54,"value":1729},"Terminal Growth Rate Selection:",{"type":48,"tag":76,"props":1731,"children":1732},{},[1733,1738,1743],{"type":48,"tag":80,"props":1734,"children":1735},{},[1736],{"type":54,"value":1737},"Conservative: 2.0-2.5% (GDP growth rate)",{"type":48,"tag":80,"props":1739,"children":1740},{},[1741],{"type":54,"value":1742},"Moderate: 2.5-3.5%",{"type":48,"tag":80,"props":1744,"children":1745},{},[1746],{"type":54,"value":1747},"Aggressive: 3.5-5.0% (only for market leaders)",{"type":48,"tag":64,"props":1749,"children":1750},{},[1751,1756],{"type":48,"tag":100,"props":1752,"children":1753},{},[1754],{"type":54,"value":1755},"Do not exceed",{"type":54,"value":1757},": Risk-free rate or long-term GDP growth",{"type":48,"tag":64,"props":1759,"children":1760},{},[1761],{"type":48,"tag":100,"props":1762,"children":1763},{},[1764],{"type":54,"value":1765},"Exit Multiple Method (Alternative):",{"type":48,"tag":208,"props":1767,"children":1770},{"className":1768,"code":1769,"language":54},[1199],"Terminal Value = Final Year EBITDA × Exit Multiple\n\nWhere Exit Multiple comes from:\n- Industry comparable trading multiples\n- Precedent transaction multiples\n- Typical range: 8-15x EBITDA\n",[1771],{"type":48,"tag":119,"props":1772,"children":1773},{"__ignoreMap":213},[1774],{"type":54,"value":1769},{"type":48,"tag":64,"props":1776,"children":1777},{},[1778],{"type":48,"tag":100,"props":1779,"children":1780},{},[1781],{"type":54,"value":1782},"Present Value of Terminal Value:",{"type":48,"tag":208,"props":1784,"children":1787},{"className":1785,"code":1786,"language":54},[1199],"PV of Terminal Value = Terminal Value \u002F (1 + WACC)^Final Period\n\nWhere Final Period accounts for timing:\n5-year model with mid-year convention: Period = 4.5\n",[1788],{"type":48,"tag":119,"props":1789,"children":1790},{"__ignoreMap":213},[1791],{"type":54,"value":1786},{"type":48,"tag":64,"props":1793,"children":1794},{},[1795],{"type":48,"tag":100,"props":1796,"children":1797},{},[1798],{"type":54,"value":1799},"Terminal Value Sanity Check:",{"type":48,"tag":76,"props":1801,"children":1802},{},[1803,1808,1813],{"type":48,"tag":80,"props":1804,"children":1805},{},[1806],{"type":54,"value":1807},"Should represent 50-70% of Enterprise Value",{"type":48,"tag":80,"props":1809,"children":1810},{},[1811],{"type":54,"value":1812},"If >75%, model may be over-reliant on terminal assumptions",{"type":48,"tag":80,"props":1814,"children":1815},{},[1816],{"type":54,"value":1817},"If \u003C40%, check if terminal assumptions are too conservative",{"type":48,"tag":1038,"props":1819,"children":1821},{"id":1820},"step-9-enterprise-to-equity-value-bridge",[1822],{"type":54,"value":1823},"Step 9: Enterprise to Equity Value Bridge",{"type":48,"tag":64,"props":1825,"children":1826},{},[1827],{"type":48,"tag":100,"props":1828,"children":1829},{},[1830],{"type":54,"value":1831},"Valuation Summary Structure:",{"type":48,"tag":208,"props":1833,"children":1836},{"className":1834,"code":1835,"language":54},[1199],"(+) Sum of PV of Projected FCFs = $X million\n(+) PV of Terminal Value = $Y million\n= Enterprise Value = $Z million\n\n(-) Net Debt [or + Net Cash if negative] = $A million\n= Equity Value = $B million\n\n÷ Diluted Shares Outstanding = C million shares\n= Implied Price per Share = $XX.XX\n\nCurrent Stock Price = $YY.YY\nImplied Return = (Implied Price \u002F Current Price) - 1 = XX%\n",[1837],{"type":48,"tag":119,"props":1838,"children":1839},{"__ignoreMap":213},[1840],{"type":54,"value":1835},{"type":48,"tag":64,"props":1842,"children":1843},{},[1844],{"type":48,"tag":100,"props":1845,"children":1846},{},[1847],{"type":54,"value":1848},"Critical Adjustments:",{"type":48,"tag":76,"props":1850,"children":1851},{},[1852,1873,1883],{"type":48,"tag":80,"props":1853,"children":1854},{},[1855,1860],{"type":48,"tag":100,"props":1856,"children":1857},{},[1858],{"type":54,"value":1859},"Net Debt = Total Debt - Cash & Equivalents",{"type":48,"tag":76,"props":1861,"children":1862},{},[1863,1868],{"type":48,"tag":80,"props":1864,"children":1865},{},[1866],{"type":54,"value":1867},"If positive: Subtract from EV (reduces equity value)",{"type":48,"tag":80,"props":1869,"children":1870},{},[1871],{"type":54,"value":1872},"If negative (Net Cash): Add to EV (increases equity value)",{"type":48,"tag":80,"props":1874,"children":1875},{},[1876,1881],{"type":48,"tag":100,"props":1877,"children":1878},{},[1879],{"type":54,"value":1880},"Use Diluted Shares",{"type":54,"value":1882},": Includes options, RSUs, convertible securities",{"type":48,"tag":80,"props":1884,"children":1885},{},[1886,1891,1893],{"type":48,"tag":100,"props":1887,"children":1888},{},[1889],{"type":54,"value":1890},"Other adjustments",{"type":54,"value":1892}," (if applicable):\n",{"type":48,"tag":76,"props":1894,"children":1895},{},[1896,1901,1906],{"type":48,"tag":80,"props":1897,"children":1898},{},[1899],{"type":54,"value":1900},"Minority interests",{"type":48,"tag":80,"props":1902,"children":1903},{},[1904],{"type":54,"value":1905},"Pension liabilities",{"type":48,"tag":80,"props":1907,"children":1908},{},[1909],{"type":54,"value":1910},"Operating lease obligations",{"type":48,"tag":64,"props":1912,"children":1913},{},[1914],{"type":48,"tag":100,"props":1915,"children":1916},{},[1917],{"type":54,"value":1918},"Valuation Output Format:",{"type":48,"tag":208,"props":1920,"children":1924},{"className":1921,"code":1922,"language":1923,"meta":213,"style":213},"language-csv shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Valuation Component,Amount ($M)\nPV Explicit FCFs,X.X\nPV Terminal Value,Y.Y\nEnterprise Value,Z.Z\n(-) Net Debt,A.A\nEquity Value,B.B\n,,\nShares Outstanding (M),C.C\nImplied Price per Share,$XX.XX\nCurrent Share Price,$YY.YY\nImplied Upside\u002F(Downside),+XX%\n","csv",[1925],{"type":48,"tag":119,"props":1926,"children":1927},{"__ignoreMap":213},[1928,1936,1944,1952,1960,1968,1976,1984,1992,2000,2008],{"type":48,"tag":219,"props":1929,"children":1930},{"class":221,"line":222},[1931],{"type":48,"tag":219,"props":1932,"children":1933},{},[1934],{"type":54,"value":1935},"Valuation Component,Amount ($M)\n",{"type":48,"tag":219,"props":1937,"children":1938},{"class":221,"line":232},[1939],{"type":48,"tag":219,"props":1940,"children":1941},{},[1942],{"type":54,"value":1943},"PV Explicit FCFs,X.X\n",{"type":48,"tag":219,"props":1945,"children":1946},{"class":221,"line":300},[1947],{"type":48,"tag":219,"props":1948,"children":1949},{},[1950],{"type":54,"value":1951},"PV Terminal Value,Y.Y\n",{"type":48,"tag":219,"props":1953,"children":1954},{"class":221,"line":327},[1955],{"type":48,"tag":219,"props":1956,"children":1957},{},[1958],{"type":54,"value":1959},"Enterprise Value,Z.Z\n",{"type":48,"tag":219,"props":1961,"children":1962},{"class":221,"line":381},[1963],{"type":48,"tag":219,"props":1964,"children":1965},{},[1966],{"type":54,"value":1967},"(-) Net Debt,A.A\n",{"type":48,"tag":219,"props":1969,"children":1970},{"class":221,"line":391},[1971],{"type":48,"tag":219,"props":1972,"children":1973},{},[1974],{"type":54,"value":1975},"Equity Value,B.B\n",{"type":48,"tag":219,"props":1977,"children":1978},{"class":221,"line":400},[1979],{"type":48,"tag":219,"props":1980,"children":1981},{},[1982],{"type":54,"value":1983},",,\n",{"type":48,"tag":219,"props":1985,"children":1986},{"class":221,"line":474},[1987],{"type":48,"tag":219,"props":1988,"children":1989},{},[1990],{"type":54,"value":1991},"Shares Outstanding (M),C.C\n",{"type":48,"tag":219,"props":1993,"children":1994},{"class":221,"line":526},[1995],{"type":48,"tag":219,"props":1996,"children":1997},{},[1998],{"type":54,"value":1999},"Implied Price per Share,$XX.XX\n",{"type":48,"tag":219,"props":2001,"children":2002},{"class":221,"line":550},[2003],{"type":48,"tag":219,"props":2004,"children":2005},{},[2006],{"type":54,"value":2007},"Current Share Price,$YY.YY\n",{"type":48,"tag":219,"props":2009,"children":2010},{"class":221,"line":607},[2011],{"type":48,"tag":219,"props":2012,"children":2013},{},[2014],{"type":54,"value":2015},"Implied Upside\u002F(Downside),+XX%\n",{"type":48,"tag":1038,"props":2017,"children":2019},{"id":2018},"step-10-sensitivity-analysis",[2020],{"type":54,"value":2021},"Step 10: Sensitivity Analysis",{"type":48,"tag":64,"props":2023,"children":2024},{},[2025,2027,2032],{"type":54,"value":2026},"Build ",{"type":48,"tag":100,"props":2028,"children":2029},{},[2030],{"type":54,"value":2031},"three sensitivity tables",{"type":54,"value":2033}," at the bottom of the DCF sheet showing how valuation changes with different assumptions:",{"type":48,"tag":1058,"props":2035,"children":2036},{},[2037,2047,2057],{"type":48,"tag":80,"props":2038,"children":2039},{},[2040,2045],{"type":48,"tag":100,"props":2041,"children":2042},{},[2043],{"type":54,"value":2044},"WACC vs Terminal Growth",{"type":54,"value":2046}," - Shows enterprise value sensitivity to discount rate and perpetuity growth",{"type":48,"tag":80,"props":2048,"children":2049},{},[2050,2055],{"type":48,"tag":100,"props":2051,"children":2052},{},[2053],{"type":54,"value":2054},"Revenue Growth vs EBIT Margin",{"type":54,"value":2056}," - Shows impact of top-line growth and operating leverage",{"type":48,"tag":80,"props":2058,"children":2059},{},[2060,2065],{"type":48,"tag":100,"props":2061,"children":2062},{},[2063],{"type":54,"value":2064},"Beta vs Risk-Free Rate",{"type":54,"value":2066}," - Shows sensitivity to cost of equity components",{"type":48,"tag":64,"props":2068,"children":2069},{},[2070,2075],{"type":48,"tag":100,"props":2071,"children":2072},{},[2073],{"type":54,"value":2074},"Implementation",{"type":54,"value":2076},": These are simple 2D grids (NOT Excel's \"Data Table\" feature) with formulas in each cell. Each cell must contain a full DCF recalculation for that specific assumption combination. See Critical Constraints section for detailed requirements on populating all 75 cells programmatically using openpyxl.",{"type":48,"tag":64,"props":2078,"children":2079},{},[2080],{"type":54,"value":2081},"\u003Ccorrect_patterns>",{"type":48,"tag":64,"props":2083,"children":2084},{},[2085],{"type":54,"value":2086},"This section contains all the CORRECT patterns to follow when building DCF models.",{"type":48,"tag":1038,"props":2088,"children":2090},{"id":2089},"scenario-block-selection-pattern-follow-this-approach",[2091],{"type":54,"value":2092},"Scenario Block Selection Pattern - Follow This Approach",{"type":48,"tag":64,"props":2094,"children":2095},{},[2096],{"type":48,"tag":100,"props":2097,"children":2098},{},[2099],{"type":54,"value":2100},"Assumptions are organized in separate blocks for each scenario:",{"type":48,"tag":64,"props":2102,"children":2103},{},[2104],{"type":48,"tag":100,"props":2105,"children":2106},{},[2107],{"type":54,"value":2108},"CRITICAL STRUCTURE - Three rows per section header:",{"type":48,"tag":208,"props":2110,"children":2112},{"className":1921,"code":2111,"language":1923,"meta":213,"style":213},"BEAR CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),12%,10%,9%,8%,7%\nEBIT Margin (%),45%,44%,43%,42%,41%\n\nBASE CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),16%,14%,12%,10%,9%\nEBIT Margin (%),48%,49%,50%,51%,52%\n\nBULL CASE ASSUMPTIONS (section header, merge cells across)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),20%,18%,15%,13%,11%\nEBIT Margin (%),50%,51%,52%,53%,54%\n",[2113],{"type":48,"tag":119,"props":2114,"children":2115},{"__ignoreMap":213},[2116,2124,2132,2140,2148,2155,2163,2170,2178,2186,2193,2201,2208,2217],{"type":48,"tag":219,"props":2117,"children":2118},{"class":221,"line":222},[2119],{"type":48,"tag":219,"props":2120,"children":2121},{},[2122],{"type":54,"value":2123},"BEAR CASE ASSUMPTIONS (section header, merge cells across)\n",{"type":48,"tag":219,"props":2125,"children":2126},{"class":221,"line":232},[2127],{"type":48,"tag":219,"props":2128,"children":2129},{},[2130],{"type":54,"value":2131},"Assumption,FY1,FY2,FY3,FY4,FY5\n",{"type":48,"tag":219,"props":2133,"children":2134},{"class":221,"line":300},[2135],{"type":48,"tag":219,"props":2136,"children":2137},{},[2138],{"type":54,"value":2139},"Revenue Growth (%),12%,10%,9%,8%,7%\n",{"type":48,"tag":219,"props":2141,"children":2142},{"class":221,"line":327},[2143],{"type":48,"tag":219,"props":2144,"children":2145},{},[2146],{"type":54,"value":2147},"EBIT Margin (%),45%,44%,43%,42%,41%\n",{"type":48,"tag":219,"props":2149,"children":2150},{"class":221,"line":381},[2151],{"type":48,"tag":219,"props":2152,"children":2153},{"emptyLinePlaceholder":385},[2154],{"type":54,"value":388},{"type":48,"tag":219,"props":2156,"children":2157},{"class":221,"line":391},[2158],{"type":48,"tag":219,"props":2159,"children":2160},{},[2161],{"type":54,"value":2162},"BASE CASE ASSUMPTIONS (section header, merge cells across)\n",{"type":48,"tag":219,"props":2164,"children":2165},{"class":221,"line":400},[2166],{"type":48,"tag":219,"props":2167,"children":2168},{},[2169],{"type":54,"value":2131},{"type":48,"tag":219,"props":2171,"children":2172},{"class":221,"line":474},[2173],{"type":48,"tag":219,"props":2174,"children":2175},{},[2176],{"type":54,"value":2177},"Revenue Growth (%),16%,14%,12%,10%,9%\n",{"type":48,"tag":219,"props":2179,"children":2180},{"class":221,"line":526},[2181],{"type":48,"tag":219,"props":2182,"children":2183},{},[2184],{"type":54,"value":2185},"EBIT Margin (%),48%,49%,50%,51%,52%\n",{"type":48,"tag":219,"props":2187,"children":2188},{"class":221,"line":550},[2189],{"type":48,"tag":219,"props":2190,"children":2191},{"emptyLinePlaceholder":385},[2192],{"type":54,"value":388},{"type":48,"tag":219,"props":2194,"children":2195},{"class":221,"line":607},[2196],{"type":48,"tag":219,"props":2197,"children":2198},{},[2199],{"type":54,"value":2200},"BULL CASE ASSUMPTIONS (section header, merge cells across)\n",{"type":48,"tag":219,"props":2202,"children":2203},{"class":221,"line":655},[2204],{"type":48,"tag":219,"props":2205,"children":2206},{},[2207],{"type":54,"value":2131},{"type":48,"tag":219,"props":2209,"children":2211},{"class":221,"line":2210},13,[2212],{"type":48,"tag":219,"props":2213,"children":2214},{},[2215],{"type":54,"value":2216},"Revenue Growth (%),20%,18%,15%,13%,11%\n",{"type":48,"tag":219,"props":2218,"children":2220},{"class":221,"line":2219},14,[2221],{"type":48,"tag":219,"props":2222,"children":2223},{},[2224],{"type":54,"value":2225},"EBIT Margin (%),50%,51%,52%,53%,54%\n",{"type":48,"tag":64,"props":2227,"children":2228},{},[2229,2234],{"type":48,"tag":100,"props":2230,"children":2231},{},[2232],{"type":54,"value":2233},"Each scenario block MUST have a column header row",{"type":54,"value":2235}," showing the projection years (FY2025E, FY2026E, etc.) immediately below the section title. Without this, users cannot tell which assumption value corresponds to which year.",{"type":48,"tag":64,"props":2237,"children":2238},{},[2239],{"type":48,"tag":100,"props":2240,"children":2241},{},[2242],{"type":54,"value":2243},"How to reference assumptions - Create a consolidation column:",{"type":48,"tag":1058,"props":2245,"children":2246},{},[2247,2252,2257,2262],{"type":48,"tag":80,"props":2248,"children":2249},{},[2250],{"type":54,"value":2251},"Case selector cell (e.g., B6) contains 1=Bear, 2=Base, or 3=Bull",{"type":48,"tag":80,"props":2253,"children":2254},{},[2255],{"type":54,"value":2256},"Create a consolidation column with INDEX or OFFSET formulas to pull from the correct scenario block",{"type":48,"tag":80,"props":2258,"children":2259},{},[2260],{"type":54,"value":2261},"Projection formulas reference the consolidation column (clean cell references)",{"type":48,"tag":80,"props":2263,"children":2264},{},[2265],{"type":54,"value":2266},"Each scenario block contains full set of DCF assumptions across projection years",{"type":48,"tag":64,"props":2268,"children":2269},{},[2270,2275],{"type":48,"tag":100,"props":2271,"children":2272},{},[2273],{"type":54,"value":2274},"Recommended consolidation column pattern (using INDEX):",{"type":48,"tag":119,"props":2276,"children":2278},{"className":2277},[],[2279],{"type":54,"value":2280},"=INDEX(B10:D10, 1, $B$6)",{"type":48,"tag":64,"props":2282,"children":2283},{},[2284,2289],{"type":48,"tag":100,"props":2285,"children":2286},{},[2287],{"type":54,"value":2288},"NOT this - scattered IF statements throughout:",{"type":48,"tag":119,"props":2290,"children":2292},{"className":2291},[],[2293],{"type":54,"value":2294},"=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))",{"type":48,"tag":64,"props":2296,"children":2297},{},[2298],{"type":54,"value":2299},"The consolidation column approach centralizes logic and makes the model easier to audit.",{"type":48,"tag":1038,"props":2301,"children":2303},{"id":2302},"correct-revenue-projection-pattern",[2304],{"type":54,"value":2305},"Correct Revenue Projection Pattern",{"type":48,"tag":64,"props":2307,"children":2308},{},[2309],{"type":48,"tag":100,"props":2310,"children":2311},{},[2312],{"type":54,"value":2313},"Create a consolidation column with INDEX formulas, then reference it in projections:",{"type":48,"tag":64,"props":2315,"children":2316},{},[2317,2322],{"type":48,"tag":100,"props":2318,"children":2319},{},[2320],{"type":54,"value":2321},"Step 1 - Consolidation column for FY1 growth:",{"type":48,"tag":119,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":54,"value":2327},"=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)",{"type":48,"tag":64,"props":2329,"children":2330},{},[2331,2336],{"type":48,"tag":100,"props":2332,"children":2333},{},[2334],{"type":54,"value":2335},"Step 2 - Revenue projection references the consolidation column:",{"type":48,"tag":119,"props":2337,"children":2339},{"className":2338},[],[2340],{"type":54,"value":2341},"Revenue Year 1: =D29*(1+$E$10)",{"type":48,"tag":64,"props":2343,"children":2344},{},[2345],{"type":54,"value":2346},"Where:",{"type":48,"tag":76,"props":2348,"children":2349},{},[2350,2355,2360],{"type":48,"tag":80,"props":2351,"children":2352},{},[2353],{"type":54,"value":2354},"D29 = Prior year revenue",{"type":48,"tag":80,"props":2356,"children":2357},{},[2358],{"type":54,"value":2359},"$E$10 = Consolidation column cell for FY1 growth (contains INDEX formula)",{"type":48,"tag":80,"props":2361,"children":2362},{},[2363],{"type":54,"value":2364},"$B$6 = Case selector (1=Bear, 2=Base, 3=Bull)",{"type":48,"tag":64,"props":2366,"children":2367},{},[2368,2373],{"type":48,"tag":100,"props":2369,"children":2370},{},[2371],{"type":54,"value":2372},"This approach is cleaner than embedding IF statements in every projection formula",{"type":54,"value":2374}," and makes it much easier to audit which scenario assumptions are being used.",{"type":48,"tag":1038,"props":2376,"children":2378},{"id":2377},"correct-fcf-formula-pattern",[2379],{"type":54,"value":2380},"Correct FCF Formula Pattern",{"type":48,"tag":64,"props":2382,"children":2383},{},[2384],{"type":48,"tag":100,"props":2385,"children":2386},{},[2387],{"type":54,"value":2388},"Use consolidation columns with INDEX formulas, then reference them in FCF calculations:",{"type":48,"tag":64,"props":2390,"children":2391},{},[2392],{"type":48,"tag":100,"props":2393,"children":2394},{},[2395],{"type":54,"value":2396},"Consolidation column approach:",{"type":48,"tag":208,"props":2398,"children":2400},{"className":1921,"code":2399,"language":1923,"meta":213,"style":213},"Item,Formula,Reference\nD&A,=E29*$E$21,$E$21 = consolidation column for D&A %\nCapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %\nΔ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %\nUnlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC\n",[2401],{"type":48,"tag":119,"props":2402,"children":2403},{"__ignoreMap":213},[2404,2412,2420,2428,2436],{"type":48,"tag":219,"props":2405,"children":2406},{"class":221,"line":222},[2407],{"type":48,"tag":219,"props":2408,"children":2409},{},[2410],{"type":54,"value":2411},"Item,Formula,Reference\n",{"type":48,"tag":219,"props":2413,"children":2414},{"class":221,"line":232},[2415],{"type":48,"tag":219,"props":2416,"children":2417},{},[2418],{"type":54,"value":2419},"D&A,=E29*$E$21,$E$21 = consolidation column for D&A %\n",{"type":48,"tag":219,"props":2421,"children":2422},{"class":221,"line":300},[2423],{"type":48,"tag":219,"props":2424,"children":2425},{},[2426],{"type":54,"value":2427},"CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %\n",{"type":48,"tag":219,"props":2429,"children":2430},{"class":221,"line":327},[2431],{"type":48,"tag":219,"props":2432,"children":2433},{},[2434],{"type":54,"value":2435},"Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %\n",{"type":48,"tag":219,"props":2437,"children":2438},{"class":221,"line":381},[2439],{"type":48,"tag":219,"props":2440,"children":2441},{},[2442],{"type":54,"value":2443},"Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC\n",{"type":48,"tag":64,"props":2445,"children":2446},{},[2447,2452],{"type":48,"tag":100,"props":2448,"children":2449},{},[2450],{"type":54,"value":2451},"Each consolidation column cell contains an INDEX formula",{"type":54,"value":2453}," that pulls from the appropriate scenario block based on case selector. This keeps projection formulas clean and auditable.",{"type":48,"tag":64,"props":2455,"children":2456},{},[2457],{"type":54,"value":2458},"Before writing formulas, confirm scenario block row locations and set up consolidation columns.",{"type":48,"tag":1038,"props":2460,"children":2462},{"id":2461},"correct-cell-comment-format",[2463],{"type":54,"value":2464},"Correct Cell Comment Format",{"type":48,"tag":64,"props":2466,"children":2467},{},[2468],{"type":48,"tag":100,"props":2469,"children":2470},{},[2471],{"type":54,"value":2472},"Every hardcoded value needs this format:",{"type":48,"tag":64,"props":2474,"children":2475},{},[2476,2478,2482,2483,2487,2488,2492,2493,2497],{"type":54,"value":2477},"\"Source: ",{"type":48,"tag":219,"props":2479,"children":2480},{},[2481],{"type":54,"value":893},{"type":54,"value":895},{"type":48,"tag":219,"props":2484,"children":2485},{},[2486],{"type":54,"value":900},{"type":54,"value":895},{"type":48,"tag":219,"props":2489,"children":2490},{},[2491],{"type":54,"value":906},{"type":54,"value":895},{"type":48,"tag":219,"props":2494,"children":2495},{},[2496],{"type":54,"value":912},{"type":54,"value":277},{"type":48,"tag":64,"props":2499,"children":2500},{},[2501],{"type":48,"tag":100,"props":2502,"children":2503},{},[2504],{"type":54,"value":2505},"Examples:",{"type":48,"tag":208,"props":2507,"children":2509},{"className":1921,"code":2508,"language":1923,"meta":213,"style":213},"Item,Source Comment\nStock price,Source: Market data script 2025-10-12 Close price\nShares outstanding,Source: 10-K FY2024 Page 45 Note 12\nHistorical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements\nBeta,Source: Market data script 2025-10-12 5-year monthly beta\nConsensus estimates,Source: Management guidance Q3 2024 earnings call\n",[2510],{"type":48,"tag":119,"props":2511,"children":2512},{"__ignoreMap":213},[2513,2521,2529,2537,2545,2553],{"type":48,"tag":219,"props":2514,"children":2515},{"class":221,"line":222},[2516],{"type":48,"tag":219,"props":2517,"children":2518},{},[2519],{"type":54,"value":2520},"Item,Source Comment\n",{"type":48,"tag":219,"props":2522,"children":2523},{"class":221,"line":232},[2524],{"type":48,"tag":219,"props":2525,"children":2526},{},[2527],{"type":54,"value":2528},"Stock price,Source: Market data script 2025-10-12 Close price\n",{"type":48,"tag":219,"props":2530,"children":2531},{"class":221,"line":300},[2532],{"type":48,"tag":219,"props":2533,"children":2534},{},[2535],{"type":54,"value":2536},"Shares outstanding,Source: 10-K FY2024 Page 45 Note 12\n",{"type":48,"tag":219,"props":2538,"children":2539},{"class":221,"line":327},[2540],{"type":48,"tag":219,"props":2541,"children":2542},{},[2543],{"type":54,"value":2544},"Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements\n",{"type":48,"tag":219,"props":2546,"children":2547},{"class":221,"line":381},[2548],{"type":48,"tag":219,"props":2549,"children":2550},{},[2551],{"type":54,"value":2552},"Beta,Source: Market data script 2025-10-12 5-year monthly beta\n",{"type":48,"tag":219,"props":2554,"children":2555},{"class":221,"line":391},[2556],{"type":48,"tag":219,"props":2557,"children":2558},{},[2559],{"type":54,"value":2560},"Consensus estimates,Source: Management guidance Q3 2024 earnings call\n",{"type":48,"tag":1038,"props":2562,"children":2564},{"id":2563},"correct-assumption-table-structure",[2565],{"type":54,"value":2566},"Correct Assumption Table Structure",{"type":48,"tag":64,"props":2568,"children":2569},{},[2570],{"type":48,"tag":100,"props":2571,"children":2572},{},[2573],{"type":54,"value":2574},"CRITICAL: Each scenario block requires THREE structural elements:",{"type":48,"tag":1058,"props":2576,"children":2577},{},[2578,2588,2598],{"type":48,"tag":80,"props":2579,"children":2580},{},[2581,2586],{"type":48,"tag":100,"props":2582,"children":2583},{},[2584],{"type":54,"value":2585},"Section header row",{"type":54,"value":2587}," (merged cells): e.g., \"BEAR CASE ASSUMPTIONS\"",{"type":48,"tag":80,"props":2589,"children":2590},{},[2591,2596],{"type":48,"tag":100,"props":2592,"children":2593},{},[2594],{"type":54,"value":2595},"Column header row",{"type":54,"value":2597}," showing years - THIS IS REQUIRED, DO NOT SKIP",{"type":48,"tag":80,"props":2599,"children":2600},{},[2601,2606],{"type":48,"tag":100,"props":2602,"children":2603},{},[2604],{"type":54,"value":2605},"Data rows",{"type":54,"value":2607}," with assumption values",{"type":48,"tag":64,"props":2609,"children":2610},{},[2611],{"type":48,"tag":100,"props":2612,"children":2613},{},[2614],{"type":54,"value":2615},"Structure:",{"type":48,"tag":208,"props":2617,"children":2619},{"className":1921,"code":2618,"language":1923,"meta":213,"style":213},"BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n\nBASE CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n\nBULL CASE ASSUMPTIONS (section header - merge across columns A:G)\nAssumption,FY1,FY2,FY3,FY4,FY5\nRevenue Growth (%),X%,X%,X%,X%,X%\nEBIT Margin (%),X%,X%,X%,X%,X%\nTerminal Growth,X%,,,,\nWACC,X%,,,,\n",[2620],{"type":48,"tag":119,"props":2621,"children":2622},{"__ignoreMap":213},[2623,2631,2638,2646,2654,2662,2670,2677,2685,2692,2699,2706,2713,2720,2727,2736,2744,2752,2760,2768],{"type":48,"tag":219,"props":2624,"children":2625},{"class":221,"line":222},[2626],{"type":48,"tag":219,"props":2627,"children":2628},{},[2629],{"type":54,"value":2630},"BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)\n",{"type":48,"tag":219,"props":2632,"children":2633},{"class":221,"line":232},[2634],{"type":48,"tag":219,"props":2635,"children":2636},{},[2637],{"type":54,"value":2131},{"type":48,"tag":219,"props":2639,"children":2640},{"class":221,"line":300},[2641],{"type":48,"tag":219,"props":2642,"children":2643},{},[2644],{"type":54,"value":2645},"Revenue Growth (%),X%,X%,X%,X%,X%\n",{"type":48,"tag":219,"props":2647,"children":2648},{"class":221,"line":327},[2649],{"type":48,"tag":219,"props":2650,"children":2651},{},[2652],{"type":54,"value":2653},"EBIT Margin (%),X%,X%,X%,X%,X%\n",{"type":48,"tag":219,"props":2655,"children":2656},{"class":221,"line":381},[2657],{"type":48,"tag":219,"props":2658,"children":2659},{},[2660],{"type":54,"value":2661},"Terminal Growth,X%,,,,\n",{"type":48,"tag":219,"props":2663,"children":2664},{"class":221,"line":391},[2665],{"type":48,"tag":219,"props":2666,"children":2667},{},[2668],{"type":54,"value":2669},"WACC,X%,,,,\n",{"type":48,"tag":219,"props":2671,"children":2672},{"class":221,"line":400},[2673],{"type":48,"tag":219,"props":2674,"children":2675},{"emptyLinePlaceholder":385},[2676],{"type":54,"value":388},{"type":48,"tag":219,"props":2678,"children":2679},{"class":221,"line":474},[2680],{"type":48,"tag":219,"props":2681,"children":2682},{},[2683],{"type":54,"value":2684},"BASE CASE ASSUMPTIONS (section header - merge across columns A:G)\n",{"type":48,"tag":219,"props":2686,"children":2687},{"class":221,"line":526},[2688],{"type":48,"tag":219,"props":2689,"children":2690},{},[2691],{"type":54,"value":2131},{"type":48,"tag":219,"props":2693,"children":2694},{"class":221,"line":550},[2695],{"type":48,"tag":219,"props":2696,"children":2697},{},[2698],{"type":54,"value":2645},{"type":48,"tag":219,"props":2700,"children":2701},{"class":221,"line":607},[2702],{"type":48,"tag":219,"props":2703,"children":2704},{},[2705],{"type":54,"value":2653},{"type":48,"tag":219,"props":2707,"children":2708},{"class":221,"line":655},[2709],{"type":48,"tag":219,"props":2710,"children":2711},{},[2712],{"type":54,"value":2661},{"type":48,"tag":219,"props":2714,"children":2715},{"class":221,"line":2210},[2716],{"type":48,"tag":219,"props":2717,"children":2718},{},[2719],{"type":54,"value":2669},{"type":48,"tag":219,"props":2721,"children":2722},{"class":221,"line":2219},[2723],{"type":48,"tag":219,"props":2724,"children":2725},{"emptyLinePlaceholder":385},[2726],{"type":54,"value":388},{"type":48,"tag":219,"props":2728,"children":2730},{"class":221,"line":2729},15,[2731],{"type":48,"tag":219,"props":2732,"children":2733},{},[2734],{"type":54,"value":2735},"BULL CASE ASSUMPTIONS (section header - merge across columns A:G)\n",{"type":48,"tag":219,"props":2737,"children":2739},{"class":221,"line":2738},16,[2740],{"type":48,"tag":219,"props":2741,"children":2742},{},[2743],{"type":54,"value":2131},{"type":48,"tag":219,"props":2745,"children":2747},{"class":221,"line":2746},17,[2748],{"type":48,"tag":219,"props":2749,"children":2750},{},[2751],{"type":54,"value":2645},{"type":48,"tag":219,"props":2753,"children":2755},{"class":221,"line":2754},18,[2756],{"type":48,"tag":219,"props":2757,"children":2758},{},[2759],{"type":54,"value":2653},{"type":48,"tag":219,"props":2761,"children":2763},{"class":221,"line":2762},19,[2764],{"type":48,"tag":219,"props":2765,"children":2766},{},[2767],{"type":54,"value":2661},{"type":48,"tag":219,"props":2769,"children":2771},{"class":221,"line":2770},20,[2772],{"type":48,"tag":219,"props":2773,"children":2774},{},[2775],{"type":54,"value":2669},{"type":48,"tag":64,"props":2777,"children":2778},{},[2779],{"type":48,"tag":100,"props":2780,"children":2781},{},[2782],{"type":54,"value":2783},"WITHOUT the column header row showing projection years (FY2025E, FY2026E, etc.), users cannot tell which assumption value corresponds to which year. This row is MANDATORY.",{"type":48,"tag":64,"props":2785,"children":2786},{},[2787,2792],{"type":48,"tag":100,"props":2788,"children":2789},{},[2790],{"type":54,"value":2791},"Then create a consolidation column",{"type":54,"value":2793}," (typically the next column to the right) that uses INDEX formulas to pull from the selected scenario block based on the case selector. This consolidation column is what your projection formulas reference.",{"type":48,"tag":1038,"props":2795,"children":2797},{"id":2796},"correct-row-planning-process",[2798],{"type":54,"value":2799},"Correct Row Planning Process",{"type":48,"tag":64,"props":2801,"children":2802},{},[2803],{"type":48,"tag":100,"props":2804,"children":2805},{},[2806],{"type":54,"value":2807},"1. Write ALL headers and labels FIRST:",{"type":48,"tag":208,"props":2809,"children":2811},{"className":1921,"code":2810,"language":1923,"meta":213,"style":213},"Row,Content\n1,[Company Name] DCF Model\n2,Ticker | Date | Year End\n4,Case Selector\n7,KEY ASSUMPTIONS\n26,Assumption headers\n27-31,Growth assumptions\n...,...\n",[2812],{"type":48,"tag":119,"props":2813,"children":2814},{"__ignoreMap":213},[2815,2823,2831,2839,2847,2855,2863,2871],{"type":48,"tag":219,"props":2816,"children":2817},{"class":221,"line":222},[2818],{"type":48,"tag":219,"props":2819,"children":2820},{},[2821],{"type":54,"value":2822},"Row,Content\n",{"type":48,"tag":219,"props":2824,"children":2825},{"class":221,"line":232},[2826],{"type":48,"tag":219,"props":2827,"children":2828},{},[2829],{"type":54,"value":2830},"1,[Company Name] DCF Model\n",{"type":48,"tag":219,"props":2832,"children":2833},{"class":221,"line":300},[2834],{"type":48,"tag":219,"props":2835,"children":2836},{},[2837],{"type":54,"value":2838},"2,Ticker | Date | Year End\n",{"type":48,"tag":219,"props":2840,"children":2841},{"class":221,"line":327},[2842],{"type":48,"tag":219,"props":2843,"children":2844},{},[2845],{"type":54,"value":2846},"4,Case Selector\n",{"type":48,"tag":219,"props":2848,"children":2849},{"class":221,"line":381},[2850],{"type":48,"tag":219,"props":2851,"children":2852},{},[2853],{"type":54,"value":2854},"7,KEY ASSUMPTIONS\n",{"type":48,"tag":219,"props":2856,"children":2857},{"class":221,"line":391},[2858],{"type":48,"tag":219,"props":2859,"children":2860},{},[2861],{"type":54,"value":2862},"26,Assumption headers\n",{"type":48,"tag":219,"props":2864,"children":2865},{"class":221,"line":400},[2866],{"type":48,"tag":219,"props":2867,"children":2868},{},[2869],{"type":54,"value":2870},"27-31,Growth assumptions\n",{"type":48,"tag":219,"props":2872,"children":2873},{"class":221,"line":474},[2874],{"type":48,"tag":219,"props":2875,"children":2876},{},[2877],{"type":54,"value":2878},"...,...\n",{"type":48,"tag":64,"props":2880,"children":2881},{},[2882],{"type":48,"tag":100,"props":2883,"children":2884},{},[2885],{"type":54,"value":2886},"2. Write ALL section dividers and blank rows",{"type":48,"tag":64,"props":2888,"children":2889},{},[2890],{"type":48,"tag":100,"props":2891,"children":2892},{},[2893],{"type":54,"value":2894},"3. THEN write formulas using the locked row positions",{"type":48,"tag":64,"props":2896,"children":2897},{},[2898],{"type":48,"tag":100,"props":2899,"children":2900},{},[2901],{"type":54,"value":2902},"4. Test formulas immediately after creation",{"type":48,"tag":64,"props":2904,"children":2905},{},[2906],{"type":48,"tag":100,"props":2907,"children":2908},{},[2909],{"type":54,"value":2910},"Think of it like construction:",{"type":48,"tag":76,"props":2912,"children":2913},{},[2914,2919],{"type":48,"tag":80,"props":2915,"children":2916},{},[2917],{"type":54,"value":2918},"Good: Pour foundation, then build walls (stable structure)",{"type":48,"tag":80,"props":2920,"children":2921},{},[2922],{"type":54,"value":2923},"Bad: Build walls, then pour foundation (walls collapse)",{"type":48,"tag":64,"props":2925,"children":2926},{},[2927],{"type":48,"tag":100,"props":2928,"children":2929},{},[2930],{"type":54,"value":2931},"Excel version:",{"type":48,"tag":76,"props":2933,"children":2934},{},[2935,2940],{"type":48,"tag":80,"props":2936,"children":2937},{},[2938],{"type":54,"value":2939},"Good: Add headers, then write formulas (formulas stable)",{"type":48,"tag":80,"props":2941,"children":2942},{},[2943],{"type":54,"value":2944},"Bad: Write formulas, then add headers (formulas break)",{"type":48,"tag":1038,"props":2946,"children":2948},{"id":2947},"correct-sensitivity-table-implementation",[2949],{"type":54,"value":2950},"Correct Sensitivity Table Implementation",{"type":48,"tag":64,"props":2952,"children":2953},{},[2954,2959],{"type":48,"tag":100,"props":2955,"children":2956},{},[2957],{"type":54,"value":2958},"IMPORTANT",{"type":54,"value":2960},": These are NOT Excel's \"Data Table\" feature. These are simple grids where you write regular formulas using openpyxl. Yes, this means ~75 formulas total (3 tables × 25 cells each), but this is straightforward and required.",{"type":48,"tag":64,"props":2962,"children":2963},{},[2964],{"type":48,"tag":100,"props":2965,"children":2966},{},[2967],{"type":54,"value":2968},"Programmatic Population with Formulas:",{"type":48,"tag":64,"props":2970,"children":2971},{},[2972,2974,2979],{"type":54,"value":2973},"Each sensitivity table must be fully populated with formulas that recalculate the implied share price for each combination of assumptions. ",{"type":48,"tag":100,"props":2975,"children":2976},{},[2977],{"type":54,"value":2978},"Do not use Excel's Data Table feature",{"type":54,"value":2980}," (it requires manual intervention and cannot be automated via openpyxl).",{"type":48,"tag":64,"props":2982,"children":2983},{},[2984],{"type":48,"tag":100,"props":2985,"children":2986},{},[2987],{"type":54,"value":2988},"Implementation approach - CONCRETE EXAMPLE:",{"type":48,"tag":64,"props":2990,"children":2991},{},[2992],{"type":48,"tag":100,"props":2993,"children":2994},{},[2995],{"type":54,"value":2996},"Table Structure — 5×5 grid (ODD dimensions, base case centered):",{"type":48,"tag":64,"props":2998,"children":2999},{},[3000],{"type":54,"value":3001},"If the model's base WACC = 9.0% and base terminal growth = 3.0%, build the axes symmetrically around those values:",{"type":48,"tag":208,"props":3003,"children":3005},{"className":1921,"code":3004,"language":1923,"meta":213,"style":213},"WACC vs Terminal Growth,  2.0%,  2.5%,  3.0%,  3.5%,  4.0%\n              8.0%,       [fml], [fml], [fml], [fml], [fml]\n              8.5%,       [fml], [fml], [fml], [fml], [fml]\n              9.0%,       [fml], [fml], [★  ], [fml], [fml]   ← middle row = base WACC\n              9.5%,       [fml], [fml], [fml], [fml], [fml]\n             10.0%,       [fml], [fml], [fml], [fml], [fml]\n                                   ↑\n                          middle col = base terminal g\n",[3006],{"type":48,"tag":119,"props":3007,"children":3008},{"__ignoreMap":213},[3009,3017,3025,3033,3041,3049,3057,3065],{"type":48,"tag":219,"props":3010,"children":3011},{"class":221,"line":222},[3012],{"type":48,"tag":219,"props":3013,"children":3014},{},[3015],{"type":54,"value":3016},"WACC vs Terminal Growth,  2.0%,  2.5%,  3.0%,  3.5%,  4.0%\n",{"type":48,"tag":219,"props":3018,"children":3019},{"class":221,"line":232},[3020],{"type":48,"tag":219,"props":3021,"children":3022},{},[3023],{"type":54,"value":3024},"              8.0%,       [fml], [fml], [fml], [fml], [fml]\n",{"type":48,"tag":219,"props":3026,"children":3027},{"class":221,"line":300},[3028],{"type":48,"tag":219,"props":3029,"children":3030},{},[3031],{"type":54,"value":3032},"              8.5%,       [fml], [fml], [fml], [fml], [fml]\n",{"type":48,"tag":219,"props":3034,"children":3035},{"class":221,"line":327},[3036],{"type":48,"tag":219,"props":3037,"children":3038},{},[3039],{"type":54,"value":3040},"              9.0%,       [fml], [fml], [★  ], [fml], [fml]   ← middle row = base WACC\n",{"type":48,"tag":219,"props":3042,"children":3043},{"class":221,"line":381},[3044],{"type":48,"tag":219,"props":3045,"children":3046},{},[3047],{"type":54,"value":3048},"              9.5%,       [fml], [fml], [fml], [fml], [fml]\n",{"type":48,"tag":219,"props":3050,"children":3051},{"class":221,"line":391},[3052],{"type":48,"tag":219,"props":3053,"children":3054},{},[3055],{"type":54,"value":3056},"             10.0%,       [fml], [fml], [fml], [fml], [fml]\n",{"type":48,"tag":219,"props":3058,"children":3059},{"class":221,"line":400},[3060],{"type":48,"tag":219,"props":3061,"children":3062},{},[3063],{"type":54,"value":3064},"                                   ↑\n",{"type":48,"tag":219,"props":3066,"children":3067},{"class":221,"line":474},[3068],{"type":48,"tag":219,"props":3069,"children":3070},{},[3071],{"type":54,"value":3072},"                          middle col = base terminal g\n",{"type":48,"tag":64,"props":3074,"children":3075},{},[3076,3081,3083,3088],{"type":48,"tag":100,"props":3077,"children":3078},{},[3079],{"type":54,"value":3080},"★ = the center cell.",{"type":54,"value":3082}," Its formula output MUST equal the model's actual implied share price (from the valuation summary). Apply the medium-blue fill (",{"type":48,"tag":119,"props":3084,"children":3086},{"className":3085},[],[3087],{"type":54,"value":845},{"type":54,"value":3089},") and bold font to this cell so the base case is visually anchored.",{"type":48,"tag":64,"props":3091,"children":3092},{},[3093,3098,3100,3106],{"type":48,"tag":100,"props":3094,"children":3095},{},[3096],{"type":54,"value":3097},"Rule for axis values:",{"type":54,"value":3099}," ",{"type":48,"tag":119,"props":3101,"children":3103},{"className":3102},[],[3104],{"type":54,"value":3105},"axis_values = [base - 2*step, base - step, base, base + step, base + 2*step]",{"type":54,"value":3107}," — symmetric around the base, odd count guarantees a center.",{"type":48,"tag":64,"props":3109,"children":3110},{},[3111],{"type":48,"tag":100,"props":3112,"children":3113},{},[3114],{"type":54,"value":3115},"Formula Pattern - Cell B88 (WACC=8.0%, Terminal Growth=2.0%):",{"type":48,"tag":64,"props":3117,"children":3118},{},[3119],{"type":54,"value":3120},"The formula in B88 should recalculate the implied price using:",{"type":48,"tag":76,"props":3122,"children":3123},{},[3124,3137],{"type":48,"tag":80,"props":3125,"children":3126},{},[3127,3129,3135],{"type":54,"value":3128},"WACC from row header: ",{"type":48,"tag":119,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":54,"value":3134},"$A88",{"type":54,"value":3136}," (8.0%)",{"type":48,"tag":80,"props":3138,"children":3139},{},[3140,3142,3148],{"type":54,"value":3141},"Terminal Growth from column header: ",{"type":48,"tag":119,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":54,"value":3147},"B$87",{"type":54,"value":3149}," (2.0%)",{"type":48,"tag":64,"props":3151,"children":3152},{},[3153,3158],{"type":48,"tag":100,"props":3154,"children":3155},{},[3156],{"type":54,"value":3157},"Recommended approach:",{"type":54,"value":3159}," Reference the main DCF calculation but substitute these values.",{"type":48,"tag":64,"props":3161,"children":3162},{},[3163,3168],{"type":48,"tag":100,"props":3164,"children":3165},{},[3166],{"type":54,"value":3167},"Example formula structure:",{"type":48,"tag":119,"props":3169,"children":3171},{"className":3170},[],[3172],{"type":54,"value":3173},"=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) \u002F [Shares]",{"type":48,"tag":64,"props":3175,"children":3176},{},[3177,3182],{"type":48,"tag":100,"props":3178,"children":3179},{},[3180],{"type":54,"value":3181},"CRITICAL - Write a formula for EVERY cell in the 5x5 grid (25 cells per table, 75 cells total).",{"type":54,"value":3183}," Use openpyxl to write these formulas programmatically in a loop. Do NOT skip this step or leave placeholder text.",{"type":48,"tag":64,"props":3185,"children":3186},{},[3187],{"type":48,"tag":100,"props":3188,"children":3189},{},[3190],{"type":54,"value":3191},"Python implementation pattern:",{"type":48,"tag":208,"props":3193,"children":3197},{"className":3194,"code":3195,"language":3196,"meta":213,"style":213},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Pseudocode for populating sensitivity table\nfor row_idx, wacc_value in enumerate(wacc_range):\n    for col_idx, term_growth_value in enumerate(term_growth_range):\n        # Build formula that uses wacc_value and term_growth_value\n        formula = f\"=\u003CDCF recalc using {wacc_value} and {term_growth_value}>\"\n        ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula\n","python",[3198],{"type":48,"tag":119,"props":3199,"children":3200},{"__ignoreMap":213},[3201,3209,3217,3225,3233,3241],{"type":48,"tag":219,"props":3202,"children":3203},{"class":221,"line":222},[3204],{"type":48,"tag":219,"props":3205,"children":3206},{},[3207],{"type":54,"value":3208},"# Pseudocode for populating sensitivity table\n",{"type":48,"tag":219,"props":3210,"children":3211},{"class":221,"line":232},[3212],{"type":48,"tag":219,"props":3213,"children":3214},{},[3215],{"type":54,"value":3216},"for row_idx, wacc_value in enumerate(wacc_range):\n",{"type":48,"tag":219,"props":3218,"children":3219},{"class":221,"line":300},[3220],{"type":48,"tag":219,"props":3221,"children":3222},{},[3223],{"type":54,"value":3224},"    for col_idx, term_growth_value in enumerate(term_growth_range):\n",{"type":48,"tag":219,"props":3226,"children":3227},{"class":221,"line":327},[3228],{"type":48,"tag":219,"props":3229,"children":3230},{},[3231],{"type":54,"value":3232},"        # Build formula that uses wacc_value and term_growth_value\n",{"type":48,"tag":219,"props":3234,"children":3235},{"class":221,"line":381},[3236],{"type":48,"tag":219,"props":3237,"children":3238},{},[3239],{"type":54,"value":3240},"        formula = f\"=\u003CDCF recalc using {wacc_value} and {term_growth_value}>\"\n",{"type":48,"tag":219,"props":3242,"children":3243},{"class":221,"line":391},[3244],{"type":48,"tag":219,"props":3245,"children":3246},{},[3247],{"type":54,"value":3248},"        ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula\n",{"type":48,"tag":64,"props":3250,"children":3251},{},[3252],{"type":48,"tag":100,"props":3253,"children":3254},{},[3255],{"type":54,"value":3256},"The sensitivity tables must work immediately when the model is opened, with no manual steps required from the user.",{"type":48,"tag":64,"props":3258,"children":3259},{},[3260],{"type":54,"value":3261},"\u003C\u002Fcorrect_patterns>",{"type":48,"tag":64,"props":3263,"children":3264},{},[3265],{"type":54,"value":3266},"\u003Ccommon_mistakes>",{"type":48,"tag":64,"props":3268,"children":3269},{},[3270],{"type":54,"value":3271},"This section contains all the WRONG patterns to avoid when building DCF models.",{"type":48,"tag":1038,"props":3273,"children":3275},{"id":3274},"wrong-simplified-sensitivity-table-approximations-or-placeholder-text",[3276],{"type":54,"value":3277},"WRONG: Simplified Sensitivity Table Approximations or Placeholder Text",{"type":48,"tag":64,"props":3279,"children":3280},{},[3281],{"type":48,"tag":100,"props":3282,"children":3283},{},[3284],{"type":54,"value":3285},"Don't use linear approximations:",{"type":48,"tag":208,"props":3287,"children":3290},{"className":3288,"code":3289,"language":54},[1199],"\u002F\u002F WRONG - Linear approximation\nB97: =B88*(1+(0.096-0.116))    \u002F\u002F Assumes linear relationship\n\n\u002F\u002F WRONG - Division shortcut\nB105: =B88\u002F(1+(E48-0.07))      \u002F\u002F Doesn't recalculate full DCF\n",[3291],{"type":48,"tag":119,"props":3292,"children":3293},{"__ignoreMap":213},[3294],{"type":54,"value":3289},{"type":48,"tag":64,"props":3296,"children":3297},{},[3298],{"type":48,"tag":100,"props":3299,"children":3300},{},[3301],{"type":54,"value":3302},"Don't leave placeholder text:",{"type":48,"tag":208,"props":3304,"children":3307},{"className":3305,"code":3306,"language":54},[1199],"\u002F\u002F WRONG - Placeholder note\n\"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables.\"\n\n\u002F\u002F WRONG - Empty cells\n[leaving cells blank because \"this is complex\"]\n",[3308],{"type":48,"tag":119,"props":3309,"children":3310},{"__ignoreMap":213},[3311],{"type":54,"value":3306},{"type":48,"tag":64,"props":3313,"children":3314},{},[3315],{"type":48,"tag":100,"props":3316,"children":3317},{},[3318],{"type":54,"value":3319},"Don't confuse terminology:",{"type":48,"tag":76,"props":3321,"children":3322},{},[3323,3328],{"type":48,"tag":80,"props":3324,"children":3325},{},[3326],{"type":54,"value":3327},"❌ \"Sensitivity tables need Excel's Data Table feature\" (NO - that's a specific Excel tool we can't use)",{"type":48,"tag":80,"props":3329,"children":3330},{},[3331],{"type":54,"value":3332},"✅ \"Sensitivity tables are simple grids with formulas in each cell\" (YES - this is what we build)",{"type":48,"tag":64,"props":3334,"children":3335},{},[3336],{"type":48,"tag":100,"props":3337,"children":3338},{},[3339],{"type":54,"value":3340},"Why these shortcuts are wrong:",{"type":48,"tag":76,"props":3342,"children":3343},{},[3344,3349,3354,3359,3364,3369],{"type":48,"tag":80,"props":3345,"children":3346},{},[3347],{"type":54,"value":3348},"Linear approximation formulas don't actually recalculate the DCF - they just apply simple math adjustments",{"type":48,"tag":80,"props":3350,"children":3351},{},[3352],{"type":54,"value":3353},"The relationships are not linear, so the results will be inaccurate",{"type":48,"tag":80,"props":3355,"children":3356},{},[3357],{"type":54,"value":3358},"Placeholder text requires manual user intervention",{"type":48,"tag":80,"props":3360,"children":3361},{},[3362],{"type":54,"value":3363},"Model is not immediately usable when delivered",{"type":48,"tag":80,"props":3365,"children":3366},{},[3367],{"type":54,"value":3368},"Not professional or client-ready",{"type":48,"tag":80,"props":3370,"children":3371},{},[3372],{"type":54,"value":3373},"Empty cells = incomplete deliverable",{"type":48,"tag":64,"props":3375,"children":3376},{},[3377,3382],{"type":48,"tag":100,"props":3378,"children":3379},{},[3380],{"type":54,"value":3381},"Common rationalization to REJECT:",{"type":54,"value":3383},"\n\"Writing 75+ formulas feels complex, so I'll leave a note for the user to complete it manually.\"",{"type":48,"tag":64,"props":3385,"children":3386},{},[3387,3392],{"type":48,"tag":100,"props":3388,"children":3389},{},[3390],{"type":54,"value":3391},"Reality:",{"type":54,"value":3393}," Writing 75 formulas is straightforward when you use a loop in Python with openpyxl. Each formula follows the same pattern - just substitute the row\u002Fcolumn values. This is a required part of the deliverable.",{"type":48,"tag":64,"props":3395,"children":3396},{},[3397,3402],{"type":48,"tag":100,"props":3398,"children":3399},{},[3400],{"type":54,"value":3401},"Instead:",{"type":54,"value":3403}," Populate every sensitivity cell with formulas that recalculate the full DCF for that specific combination of assumptions",{"type":48,"tag":1038,"props":3405,"children":3407},{"id":3406},"wrong-missing-cell-comments",[3408],{"type":54,"value":3409},"WRONG: Missing Cell Comments",{"type":48,"tag":64,"props":3411,"children":3412},{},[3413],{"type":48,"tag":100,"props":3414,"children":3415},{},[3416],{"type":54,"value":3417},"Don't do this:",{"type":48,"tag":76,"props":3419,"children":3420},{},[3421,3426,3431,3436],{"type":48,"tag":80,"props":3422,"children":3423},{},[3424],{"type":54,"value":3425},"Create all hardcoded inputs without comments",{"type":48,"tag":80,"props":3427,"children":3428},{},[3429],{"type":54,"value":3430},"Think \"I'll add them later\"",{"type":48,"tag":80,"props":3432,"children":3433},{},[3434],{"type":54,"value":3435},"Write \"TODO: add source\"",{"type":48,"tag":80,"props":3437,"children":3438},{},[3439],{"type":54,"value":3440},"Leave blue inputs without documentation",{"type":48,"tag":64,"props":3442,"children":3443},{},[3444],{"type":48,"tag":100,"props":3445,"children":3446},{},[3447],{"type":54,"value":3448},"Why it's wrong:",{"type":48,"tag":76,"props":3450,"children":3451},{},[3452,3457,3462,3467],{"type":48,"tag":80,"props":3453,"children":3454},{},[3455],{"type":54,"value":3456},"Can't verify where data came from",{"type":48,"tag":80,"props":3458,"children":3459},{},[3460],{"type":54,"value":3461},"Fails xlsx skill requirements",{"type":48,"tag":80,"props":3463,"children":3464},{},[3465],{"type":54,"value":3466},"Not audit-ready",{"type":48,"tag":80,"props":3468,"children":3469},{},[3470],{"type":54,"value":3471},"Wastes time fixing later",{"type":48,"tag":64,"props":3473,"children":3474},{},[3475,3479],{"type":48,"tag":100,"props":3476,"children":3477},{},[3478],{"type":54,"value":3401},{"type":54,"value":3480}," Add cell comment AS EACH hardcoded value is created",{"type":48,"tag":1038,"props":3482,"children":3484},{"id":3483},"wrong-formula-row-references-off",[3485],{"type":54,"value":3486},"WRONG: Formula Row References Off",{"type":48,"tag":64,"props":3488,"children":3489},{},[3490,3495,3497,3503],{"type":48,"tag":100,"props":3491,"children":3492},{},[3493],{"type":54,"value":3494},"Symptom:",{"type":54,"value":3496},"\nThe FCF section references wrong assumption rows:\n",{"type":48,"tag":119,"props":3498,"children":3500},{"className":3499},[],[3501],{"type":54,"value":3502},"D&A:  =E29*$E$34    \u002F\u002F Should be $E$21, but referencing wrong row",{"type":48,"tag":119,"props":3504,"children":3506},{"className":3505},[],[3507],{"type":54,"value":3508},"CapEx: =E29*$E$41   \u002F\u002F Should be $E$22, but row shifted",{"type":48,"tag":64,"props":3510,"children":3511},{},[3512],{"type":48,"tag":100,"props":3513,"children":3514},{},[3515],{"type":54,"value":3516},"Why this happens:",{"type":48,"tag":1058,"props":3518,"children":3519},{},[3520,3525,3530,3535],{"type":48,"tag":80,"props":3521,"children":3522},{},[3523],{"type":54,"value":3524},"Formulas written first",{"type":48,"tag":80,"props":3526,"children":3527},{},[3528],{"type":54,"value":3529},"Then headers inserted",{"type":48,"tag":80,"props":3531,"children":3532},{},[3533],{"type":54,"value":3534},"All row references shifted",{"type":48,"tag":80,"props":3536,"children":3537},{},[3538],{"type":54,"value":3539},"Now formulas point to wrong cells → #REF! errors",{"type":48,"tag":64,"props":3541,"children":3542},{},[3543,3547],{"type":48,"tag":100,"props":3544,"children":3545},{},[3546],{"type":54,"value":3401},{"type":54,"value":3548}," Lock row layout FIRST, then write formulas",{"type":48,"tag":1038,"props":3550,"children":3552},{"id":3551},"wrong-single-row-for-each-assumption-across-scenarios",[3553],{"type":54,"value":3554},"WRONG: Single Row for Each Assumption Across Scenarios",{"type":48,"tag":64,"props":3556,"children":3557},{},[3558],{"type":48,"tag":100,"props":3559,"children":3560},{},[3561],{"type":54,"value":3562},"Don't structure assumptions like this:",{"type":48,"tag":208,"props":3564,"children":3566},{"className":1921,"code":3565,"language":1923,"meta":213,"style":213},"Assumption,Bear,Base,Bull\nRevenue Growth FY1,10%,13%,16%\nRevenue Growth FY2,9%,12%,15%\n",[3567],{"type":48,"tag":119,"props":3568,"children":3569},{"__ignoreMap":213},[3570,3578,3586],{"type":48,"tag":219,"props":3571,"children":3572},{"class":221,"line":222},[3573],{"type":48,"tag":219,"props":3574,"children":3575},{},[3576],{"type":54,"value":3577},"Assumption,Bear,Base,Bull\n",{"type":48,"tag":219,"props":3579,"children":3580},{"class":221,"line":232},[3581],{"type":48,"tag":219,"props":3582,"children":3583},{},[3584],{"type":54,"value":3585},"Revenue Growth FY1,10%,13%,16%\n",{"type":48,"tag":219,"props":3587,"children":3588},{"class":221,"line":300},[3589],{"type":48,"tag":219,"props":3590,"children":3591},{},[3592],{"type":54,"value":3593},"Revenue Growth FY2,9%,12%,15%\n",{"type":48,"tag":64,"props":3595,"children":3596},{},[3597],{"type":54,"value":3598},"This vertical layout makes it hard to see the progression across years within each scenario.",{"type":48,"tag":64,"props":3600,"children":3601},{},[3602],{"type":48,"tag":100,"props":3603,"children":3604},{},[3605],{"type":54,"value":3448},{"type":48,"tag":76,"props":3607,"children":3608},{},[3609,3614,3619],{"type":48,"tag":80,"props":3610,"children":3611},{},[3612],{"type":54,"value":3613},"Makes it difficult to see assumptions evolving across years within each scenario",{"type":48,"tag":80,"props":3615,"children":3616},{},[3617],{"type":54,"value":3618},"Harder to compare scenario assumptions across full projection period",{"type":48,"tag":80,"props":3620,"children":3621},{},[3622],{"type":54,"value":3623},"Less intuitive for reviewing scenario logic",{"type":48,"tag":64,"props":3625,"children":3626},{},[3627],{"type":48,"tag":100,"props":3628,"children":3629},{},[3630],{"type":54,"value":3401},{"type":48,"tag":76,"props":3632,"children":3633},{},[3634,3639,3644],{"type":48,"tag":80,"props":3635,"children":3636},{},[3637],{"type":54,"value":3638},"Create separate blocks for each scenario (Bear, Base, Bull)",{"type":48,"tag":80,"props":3640,"children":3641},{},[3642],{"type":54,"value":3643},"Within each block, show assumptions horizontally across projection years",{"type":48,"tag":80,"props":3645,"children":3646},{},[3647],{"type":54,"value":3648},"This makes each scenario's assumptions easier to review as a cohesive set",{"type":48,"tag":1038,"props":3650,"children":3652},{"id":3651},"wrong-no-borders",[3653],{"type":54,"value":3654},"WRONG: No Borders",{"type":48,"tag":64,"props":3656,"children":3657},{},[3658],{"type":48,"tag":100,"props":3659,"children":3660},{},[3661],{"type":54,"value":3662},"Don't deliver a model without borders:",{"type":48,"tag":76,"props":3664,"children":3665},{},[3666,3671,3676],{"type":48,"tag":80,"props":3667,"children":3668},{},[3669],{"type":54,"value":3670},"No section delineation",{"type":48,"tag":80,"props":3672,"children":3673},{},[3674],{"type":54,"value":3675},"All cells blend together",{"type":48,"tag":80,"props":3677,"children":3678},{},[3679],{"type":54,"value":3680},"Hard to read and unprofessional",{"type":48,"tag":64,"props":3682,"children":3683},{},[3684],{"type":48,"tag":100,"props":3685,"children":3686},{},[3687],{"type":54,"value":3448},{"type":48,"tag":76,"props":3689,"children":3690},{},[3691,3696,3701],{"type":48,"tag":80,"props":3692,"children":3693},{},[3694],{"type":54,"value":3695},"Not client-ready",{"type":48,"tag":80,"props":3697,"children":3698},{},[3699],{"type":54,"value":3700},"Difficult to navigate",{"type":48,"tag":80,"props":3702,"children":3703},{},[3704],{"type":54,"value":3705},"Looks amateur",{"type":48,"tag":64,"props":3707,"children":3708},{},[3709,3713],{"type":48,"tag":100,"props":3710,"children":3711},{},[3712],{"type":54,"value":3401},{"type":54,"value":3714}," Add borders around all major sections",{"type":48,"tag":1038,"props":3716,"children":3718},{"id":3717},"wrong-wrong-font-colors-or-no-font-color-distinction",[3719],{"type":54,"value":3720},"WRONG: Wrong Font Colors or No Font Color Distinction",{"type":48,"tag":64,"props":3722,"children":3723},{},[3724],{"type":48,"tag":100,"props":3725,"children":3726},{},[3727],{"type":54,"value":3417},{"type":48,"tag":76,"props":3729,"children":3730},{},[3731,3736,3741],{"type":48,"tag":80,"props":3732,"children":3733},{},[3734],{"type":54,"value":3735},"All text is black",{"type":48,"tag":80,"props":3737,"children":3738},{},[3739],{"type":54,"value":3740},"Only use fill colors (no font color changes)",{"type":48,"tag":80,"props":3742,"children":3743},{},[3744],{"type":54,"value":3745},"Mix up which cells are blue vs black",{"type":48,"tag":64,"props":3747,"children":3748},{},[3749],{"type":48,"tag":100,"props":3750,"children":3751},{},[3752],{"type":54,"value":3448},{"type":48,"tag":76,"props":3754,"children":3755},{},[3756,3761,3766],{"type":48,"tag":80,"props":3757,"children":3758},{},[3759],{"type":54,"value":3760},"Can't distinguish inputs from formulas",{"type":48,"tag":80,"props":3762,"children":3763},{},[3764],{"type":54,"value":3765},"Auditing becomes impossible",{"type":48,"tag":80,"props":3767,"children":3768},{},[3769],{"type":54,"value":3770},"Violates xlsx skill requirements",{"type":48,"tag":64,"props":3772,"children":3773},{},[3774,3778],{"type":48,"tag":100,"props":3775,"children":3776},{},[3777],{"type":54,"value":3401},{"type":54,"value":3779}," Blue text for ALL hardcoded inputs, black text for ALL formulas, green for sheet links",{"type":48,"tag":1038,"props":3781,"children":3783},{"id":3782},"wrong-operating-expenses-based-on-gross-profit",[3784],{"type":54,"value":3785},"WRONG: Operating Expenses Based on Gross Profit",{"type":48,"tag":64,"props":3787,"children":3788},{},[3789,3793],{"type":48,"tag":100,"props":3790,"children":3791},{},[3792],{"type":54,"value":3417},{"type":48,"tag":119,"props":3794,"children":3796},{"className":3795},[],[3797],{"type":54,"value":3798},"S&M: =E33*0.15    \u002F\u002F E33 = Gross Profit (WRONG)",{"type":48,"tag":64,"props":3800,"children":3801},{},[3802],{"type":48,"tag":100,"props":3803,"children":3804},{},[3805],{"type":54,"value":3448},{"type":48,"tag":76,"props":3807,"children":3808},{},[3809,3814,3819],{"type":48,"tag":80,"props":3810,"children":3811},{},[3812],{"type":54,"value":3813},"Operating expenses scale with revenue, not gross profit",{"type":48,"tag":80,"props":3815,"children":3816},{},[3817],{"type":54,"value":3818},"Produces unrealistic margin progression",{"type":48,"tag":80,"props":3820,"children":3821},{},[3822],{"type":54,"value":3823},"Not how businesses actually operate",{"type":48,"tag":64,"props":3825,"children":3826},{},[3827,3831],{"type":48,"tag":100,"props":3828,"children":3829},{},[3830],{"type":54,"value":3401},{"type":48,"tag":119,"props":3832,"children":3834},{"className":3833},[],[3835],{"type":54,"value":3836},"S&M: =E29*0.15    \u002F\u002F E29 = Revenue (CORRECT)",{"type":48,"tag":1038,"props":3838,"children":3840},{"id":3839},"top-5-errors-summary",[3841],{"type":54,"value":3842},"TOP 5 ERRORS SUMMARY",{"type":48,"tag":1058,"props":3844,"children":3845},{},[3846,3856,3866,3876,3886],{"type":48,"tag":80,"props":3847,"children":3848},{},[3849,3854],{"type":48,"tag":100,"props":3850,"children":3851},{},[3852],{"type":54,"value":3853},"Formula row references off",{"type":54,"value":3855}," → Define ALL row positions BEFORE writing formulas",{"type":48,"tag":80,"props":3857,"children":3858},{},[3859,3864],{"type":48,"tag":100,"props":3860,"children":3861},{},[3862],{"type":54,"value":3863},"Missing cell comments",{"type":54,"value":3865}," → Add comments AS cells are created, not at end",{"type":48,"tag":80,"props":3867,"children":3868},{},[3869,3874],{"type":48,"tag":100,"props":3870,"children":3871},{},[3872],{"type":54,"value":3873},"Simplified sensitivity tables",{"type":54,"value":3875}," → Populate all cells with full DCF recalc formulas, not approximations",{"type":48,"tag":80,"props":3877,"children":3878},{},[3879,3884],{"type":48,"tag":100,"props":3880,"children":3881},{},[3882],{"type":54,"value":3883},"Scenario block references wrong",{"type":54,"value":3885}," → Ensure IF formulas pull from correct Bear\u002FBase\u002FBull blocks",{"type":48,"tag":80,"props":3887,"children":3888},{},[3889,3894],{"type":48,"tag":100,"props":3890,"children":3891},{},[3892],{"type":54,"value":3893},"No borders",{"type":54,"value":3895}," → Add professional section borders for client-ready appearance",{"type":48,"tag":64,"props":3897,"children":3898},{},[3899],{"type":54,"value":3900},"In addition, be aware of these errors:",{"type":48,"tag":1038,"props":3902,"children":3904},{"id":3903},"wacc-calculation-errors",[3905],{"type":54,"value":3906},"WACC Calculation Errors",{"type":48,"tag":76,"props":3908,"children":3909},{},[3910,3915,3920,3925,3930],{"type":48,"tag":80,"props":3911,"children":3912},{},[3913],{"type":54,"value":3914},"Mixing book and market values in capital structure",{"type":48,"tag":80,"props":3916,"children":3917},{},[3918],{"type":54,"value":3919},"Using equity beta instead of asset\u002Funlevered beta incorrectly",{"type":48,"tag":80,"props":3921,"children":3922},{},[3923],{"type":54,"value":3924},"Wrong tax rate application to cost of debt",{"type":48,"tag":80,"props":3926,"children":3927},{},[3928],{"type":54,"value":3929},"Incorrect risk-free rate (must use current 10Y Treasury)",{"type":48,"tag":80,"props":3931,"children":3932},{},[3933],{"type":54,"value":3934},"Failure to adjust for net debt vs net cash position",{"type":48,"tag":1038,"props":3936,"children":3938},{"id":3937},"growth-assumption-flaws",[3939],{"type":54,"value":3940},"Growth Assumption Flaws",{"type":48,"tag":76,"props":3942,"children":3943},{},[3944,3949,3954,3959,3964],{"type":48,"tag":80,"props":3945,"children":3946},{},[3947],{"type":54,"value":3948},"Terminal growth > WACC (creates infinite value)",{"type":48,"tag":80,"props":3950,"children":3951},{},[3952],{"type":54,"value":3953},"Projection growth rates inconsistent with historical performance",{"type":48,"tag":80,"props":3955,"children":3956},{},[3957],{"type":54,"value":3958},"Ignoring industry growth constraints",{"type":48,"tag":80,"props":3960,"children":3961},{},[3962],{"type":54,"value":3963},"Revenue growth not aligned with unit economics",{"type":48,"tag":80,"props":3965,"children":3966},{},[3967],{"type":54,"value":3968},"Margin expansion without operational justification",{"type":48,"tag":1038,"props":3970,"children":3972},{"id":3971},"terminal-value-mistakes",[3973],{"type":54,"value":3974},"Terminal Value Mistakes",{"type":48,"tag":76,"props":3976,"children":3977},{},[3978,3983,3988,3993],{"type":48,"tag":80,"props":3979,"children":3980},{},[3981],{"type":54,"value":3982},"Using wrong growth method (perpetuity vs exit multiple)",{"type":48,"tag":80,"props":3984,"children":3985},{},[3986],{"type":54,"value":3987},"Terminal value >80% of enterprise value (suggests over-reliance)",{"type":48,"tag":80,"props":3989,"children":3990},{},[3991],{"type":54,"value":3992},"Inconsistent terminal margins with steady state assumptions",{"type":48,"tag":80,"props":3994,"children":3995},{},[3996],{"type":54,"value":3997},"Wrong discount period for terminal value",{"type":48,"tag":1038,"props":3999,"children":4001},{"id":4000},"cash-flow-projection-errors",[4002],{"type":54,"value":4003},"Cash Flow Projection Errors",{"type":48,"tag":76,"props":4005,"children":4006},{},[4007,4012,4017,4022,4027],{"type":48,"tag":80,"props":4008,"children":4009},{},[4010],{"type":54,"value":4011},"Operating expenses based on gross profit instead of revenue",{"type":48,"tag":80,"props":4013,"children":4014},{},[4015],{"type":54,"value":4016},"D&A\u002FCapEx percentages misaligned with business model",{"type":48,"tag":80,"props":4018,"children":4019},{},[4020],{"type":54,"value":4021},"Working capital changes not properly calculated",{"type":48,"tag":80,"props":4023,"children":4024},{},[4025],{"type":54,"value":4026},"Tax rate inconsistency between years",{"type":48,"tag":80,"props":4028,"children":4029},{},[4030],{"type":54,"value":4031},"NOPAT calculation errors",{"type":48,"tag":64,"props":4033,"children":4034},{},[4035],{"type":48,"tag":100,"props":4036,"children":4037},{},[4038],{"type":54,"value":4039},"These errors are the most common. Re-read this section before starting any DCF build.",{"type":48,"tag":64,"props":4041,"children":4042},{},[4043],{"type":54,"value":4044},"\u003C\u002Fcommon_mistakes>",{"type":48,"tag":57,"props":4046,"children":4048},{"id":4047},"excel-file-creation",[4049],{"type":54,"value":4050},"Excel File Creation",{"type":48,"tag":64,"props":4052,"children":4053},{},[4054,4067],{"type":48,"tag":100,"props":4055,"children":4056},{},[4057,4059,4065],{"type":54,"value":4058},"This skill uses the ",{"type":48,"tag":119,"props":4060,"children":4062},{"className":4061},[],[4063],{"type":54,"value":4064},"xlsx",{"type":54,"value":4066}," skill for all spreadsheet operations.",{"type":54,"value":4068}," The xlsx skill provides:",{"type":48,"tag":76,"props":4070,"children":4071},{},[4072,4077,4082,4094],{"type":48,"tag":80,"props":4073,"children":4074},{},[4075],{"type":54,"value":4076},"Standardized formula construction rules",{"type":48,"tag":80,"props":4078,"children":4079},{},[4080],{"type":54,"value":4081},"Number formatting conventions",{"type":48,"tag":80,"props":4083,"children":4084},{},[4085,4087,4092],{"type":54,"value":4086},"Automated formula recalculation via ",{"type":48,"tag":119,"props":4088,"children":4090},{"className":4089},[],[4091],{"type":54,"value":166},{"type":54,"value":4093}," script",{"type":48,"tag":80,"props":4095,"children":4096},{},[4097],{"type":54,"value":4098},"Comprehensive error checking and validation",{"type":48,"tag":64,"props":4100,"children":4101},{},[4102],{"type":54,"value":4103},"All Excel files created by this skill must follow xlsx skill requirements, including zero formula errors and proper recalculation.",{"type":48,"tag":57,"props":4105,"children":4107},{"id":4106},"quality-rubric",[4108],{"type":54,"value":4109},"Quality Rubric",{"type":48,"tag":64,"props":4111,"children":4112},{},[4113],{"type":54,"value":4114},"Every DCF model must maximize for:",{"type":48,"tag":1058,"props":4116,"children":4117},{},[4118,4128,4138,4148,4158,4168],{"type":48,"tag":80,"props":4119,"children":4120},{},[4121,4126],{"type":48,"tag":100,"props":4122,"children":4123},{},[4124],{"type":54,"value":4125},"Realistic revenue and margin assumptions",{"type":54,"value":4127}," based on historical performance",{"type":48,"tag":80,"props":4129,"children":4130},{},[4131,4136],{"type":48,"tag":100,"props":4132,"children":4133},{},[4134],{"type":54,"value":4135},"Appropriate cost of capital calculation",{"type":54,"value":4137}," with proper CAPM methodology",{"type":48,"tag":80,"props":4139,"children":4140},{},[4141,4146],{"type":48,"tag":100,"props":4142,"children":4143},{},[4144],{"type":54,"value":4145},"Comprehensive sensitivity analysis",{"type":54,"value":4147}," showing valuation ranges",{"type":48,"tag":80,"props":4149,"children":4150},{},[4151,4156],{"type":48,"tag":100,"props":4152,"children":4153},{},[4154],{"type":54,"value":4155},"Clear terminal value calculation",{"type":54,"value":4157}," with supporting rationale",{"type":48,"tag":80,"props":4159,"children":4160},{},[4161,4166],{"type":48,"tag":100,"props":4162,"children":4163},{},[4164],{"type":54,"value":4165},"Professional model structure",{"type":54,"value":4167}," enabling scenario analysis",{"type":48,"tag":80,"props":4169,"children":4170},{},[4171,4176],{"type":48,"tag":100,"props":4172,"children":4173},{},[4174],{"type":54,"value":4175},"Transparent documentation",{"type":54,"value":4177}," of all key assumptions",{"type":48,"tag":57,"props":4179,"children":4181},{"id":4180},"input-requirements",[4182],{"type":54,"value":4183},"Input Requirements",{"type":48,"tag":1038,"props":4185,"children":4187},{"id":4186},"minimum-required-inputs",[4188],{"type":54,"value":4189},"Minimum Required Inputs",{"type":48,"tag":1058,"props":4191,"children":4192},{},[4193,4203,4213],{"type":48,"tag":80,"props":4194,"children":4195},{},[4196,4201],{"type":48,"tag":100,"props":4197,"children":4198},{},[4199],{"type":54,"value":4200},"Company identifier",{"type":54,"value":4202},": Ticker symbol or company name",{"type":48,"tag":80,"props":4204,"children":4205},{},[4206,4211],{"type":48,"tag":100,"props":4207,"children":4208},{},[4209],{"type":54,"value":4210},"Growth assumptions",{"type":54,"value":4212},": Revenue growth rates for projection period (or \"use consensus\")",{"type":48,"tag":80,"props":4214,"children":4215},{},[4216,4221,4223],{"type":48,"tag":100,"props":4217,"children":4218},{},[4219],{"type":54,"value":4220},"Optional parameters",{"type":54,"value":4222},":\n",{"type":48,"tag":76,"props":4224,"children":4225},{},[4226,4231,4236,4241],{"type":48,"tag":80,"props":4227,"children":4228},{},[4229],{"type":54,"value":4230},"Projection period (default: 5 years)",{"type":48,"tag":80,"props":4232,"children":4233},{},[4234],{"type":54,"value":4235},"Scenario cases (Bear\u002FBase\u002FBull growth and margin assumptions)",{"type":48,"tag":80,"props":4237,"children":4238},{},[4239],{"type":54,"value":4240},"Terminal growth rate (default: 2.5-3.0%)",{"type":48,"tag":80,"props":4242,"children":4243},{},[4244],{"type":54,"value":4245},"Specific WACC inputs if not using CAPM",{"type":48,"tag":57,"props":4247,"children":4249},{"id":4248},"excel-model-structure",[4250],{"type":54,"value":4251},"Excel Model Structure",{"type":48,"tag":1038,"props":4253,"children":4255},{"id":4254},"sheet-architecture",[4256],{"type":54,"value":4257},"Sheet Architecture",{"type":48,"tag":64,"props":4259,"children":4260},{},[4261,4263,4268],{"type":54,"value":4262},"Create ",{"type":48,"tag":100,"props":4264,"children":4265},{},[4266],{"type":54,"value":4267},"two sheets",{"type":54,"value":4269},":",{"type":48,"tag":1058,"props":4271,"children":4272},{},[4273,4282],{"type":48,"tag":80,"props":4274,"children":4275},{},[4276,4280],{"type":48,"tag":100,"props":4277,"children":4278},{},[4279],{"type":54,"value":30},{"type":54,"value":4281}," - Main valuation model with sensitivity analysis at bottom",{"type":48,"tag":80,"props":4283,"children":4284},{},[4285,4290],{"type":48,"tag":100,"props":4286,"children":4287},{},[4288],{"type":54,"value":4289},"WACC",{"type":54,"value":4291}," - Cost of capital calculation",{"type":48,"tag":64,"props":4293,"children":4294},{},[4295,4300],{"type":48,"tag":100,"props":4296,"children":4297},{},[4298],{"type":54,"value":4299},"CRITICAL",{"type":54,"value":4301},": Sensitivity tables go at the BOTTOM of the DCF sheet (not on a separate sheet). This keeps all valuation outputs together.",{"type":48,"tag":1038,"props":4303,"children":4305},{"id":4304},"formula-recalculation-mandatory",[4306],{"type":54,"value":4307},"Formula Recalculation (MANDATORY)",{"type":48,"tag":64,"props":4309,"children":4310},{},[4311,4313,4318],{"type":54,"value":4312},"After creating or modifying the Excel model, ",{"type":48,"tag":100,"props":4314,"children":4315},{},[4316],{"type":54,"value":4317},"recalculate all formulas",{"type":54,"value":4319}," using the recalc.py script from the xlsx skill:",{"type":48,"tag":208,"props":4321,"children":4325},{"className":4322,"code":4323,"language":4324,"meta":213,"style":213},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","python recalc.py [path_to_excel_file] [timeout_seconds]\n","bash",[4326],{"type":48,"tag":119,"props":4327,"children":4328},{"__ignoreMap":213},[4329],{"type":48,"tag":219,"props":4330,"children":4331},{"class":221,"line":222},[4332,4337,4342,4347,4352,4357],{"type":48,"tag":219,"props":4333,"children":4335},{"style":4334},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[4336],{"type":54,"value":3196},{"type":48,"tag":219,"props":4338,"children":4339},{"style":280},[4340],{"type":54,"value":4341}," recalc.py",{"type":48,"tag":219,"props":4343,"children":4344},{"style":242},[4345],{"type":54,"value":4346}," [path_to_excel_file] ",{"type":48,"tag":219,"props":4348,"children":4349},{"style":248},[4350],{"type":54,"value":4351},"[",{"type":48,"tag":219,"props":4353,"children":4354},{"style":242},[4355],{"type":54,"value":4356},"timeout_seconds",{"type":48,"tag":219,"props":4358,"children":4359},{"style":248},[4360],{"type":54,"value":4361},"]\n",{"type":48,"tag":64,"props":4363,"children":4364},{},[4365],{"type":54,"value":4366},"Example:",{"type":48,"tag":208,"props":4368,"children":4370},{"className":4322,"code":4369,"language":4324,"meta":213,"style":213},"python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30\n",[4371],{"type":48,"tag":119,"props":4372,"children":4373},{"__ignoreMap":213},[4374],{"type":48,"tag":219,"props":4375,"children":4376},{"class":221,"line":222},[4377,4381,4385,4390],{"type":48,"tag":219,"props":4378,"children":4379},{"style":4334},[4380],{"type":54,"value":3196},{"type":48,"tag":219,"props":4382,"children":4383},{"style":280},[4384],{"type":54,"value":4341},{"type":48,"tag":219,"props":4386,"children":4387},{"style":280},[4388],{"type":54,"value":4389}," AAPL_DCF_Model_2025-10-12.xlsx",{"type":48,"tag":219,"props":4391,"children":4393},{"style":4392},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[4394],{"type":54,"value":4395}," 30\n",{"type":48,"tag":64,"props":4397,"children":4398},{},[4399],{"type":54,"value":4400},"The script will:",{"type":48,"tag":76,"props":4402,"children":4403},{},[4404,4409,4414],{"type":48,"tag":80,"props":4405,"children":4406},{},[4407],{"type":54,"value":4408},"Recalculate all formulas in all sheets using LibreOffice",{"type":48,"tag":80,"props":4410,"children":4411},{},[4412],{"type":54,"value":4413},"Scan ALL cells for Excel errors (#REF!, #DIV\u002F0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N\u002FA)",{"type":48,"tag":80,"props":4415,"children":4416},{},[4417],{"type":54,"value":4418},"Return detailed JSON with error locations and counts",{"type":48,"tag":64,"props":4420,"children":4421},{},[4422],{"type":48,"tag":100,"props":4423,"children":4424},{},[4425],{"type":54,"value":4426},"Expected output format:",{"type":48,"tag":208,"props":4428,"children":4432},{"className":4429,"code":4430,"language":4431,"meta":213,"style":213},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"status\": \"success\",           \u002F\u002F or \"errors_found\"\n  \"total_errors\": 0,              \u002F\u002F Total error count\n  \"total_formulas\": 42,           \u002F\u002F Number of formulas in file\n  \"error_summary\": {}             \u002F\u002F Only present if errors found\n}\n","json",[4433],{"type":48,"tag":119,"props":4434,"children":4435},{"__ignoreMap":213},[4436,4444,4488,4522,4556,4586],{"type":48,"tag":219,"props":4437,"children":4438},{"class":221,"line":222},[4439],{"type":48,"tag":219,"props":4440,"children":4441},{"style":248},[4442],{"type":54,"value":4443},"{\n",{"type":48,"tag":219,"props":4445,"children":4446},{"class":221,"line":232},[4447,4452,4457,4461,4465,4469,4474,4478,4483],{"type":48,"tag":219,"props":4448,"children":4449},{"style":248},[4450],{"type":54,"value":4451},"  \"",{"type":48,"tag":219,"props":4453,"children":4454},{"style":236},[4455],{"type":54,"value":4456},"status",{"type":48,"tag":219,"props":4458,"children":4459},{"style":248},[4460],{"type":54,"value":277},{"type":48,"tag":219,"props":4462,"children":4463},{"style":248},[4464],{"type":54,"value":4269},{"type":48,"tag":219,"props":4466,"children":4467},{"style":248},[4468],{"type":54,"value":591},{"type":48,"tag":219,"props":4470,"children":4471},{"style":280},[4472],{"type":54,"value":4473},"success",{"type":48,"tag":219,"props":4475,"children":4476},{"style":248},[4477],{"type":54,"value":277},{"type":48,"tag":219,"props":4479,"children":4480},{"style":248},[4481],{"type":54,"value":4482},",",{"type":48,"tag":219,"props":4484,"children":4485},{"style":226},[4486],{"type":54,"value":4487},"           \u002F\u002F or \"errors_found\"\n",{"type":48,"tag":219,"props":4489,"children":4490},{"class":221,"line":300},[4491,4495,4500,4504,4508,4513,4517],{"type":48,"tag":219,"props":4492,"children":4493},{"style":248},[4494],{"type":54,"value":4451},{"type":48,"tag":219,"props":4496,"children":4497},{"style":236},[4498],{"type":54,"value":4499},"total_errors",{"type":48,"tag":219,"props":4501,"children":4502},{"style":248},[4503],{"type":54,"value":277},{"type":48,"tag":219,"props":4505,"children":4506},{"style":248},[4507],{"type":54,"value":4269},{"type":48,"tag":219,"props":4509,"children":4510},{"style":4392},[4511],{"type":54,"value":4512}," 0",{"type":48,"tag":219,"props":4514,"children":4515},{"style":248},[4516],{"type":54,"value":4482},{"type":48,"tag":219,"props":4518,"children":4519},{"style":226},[4520],{"type":54,"value":4521},"              \u002F\u002F Total error count\n",{"type":48,"tag":219,"props":4523,"children":4524},{"class":221,"line":327},[4525,4529,4534,4538,4542,4547,4551],{"type":48,"tag":219,"props":4526,"children":4527},{"style":248},[4528],{"type":54,"value":4451},{"type":48,"tag":219,"props":4530,"children":4531},{"style":236},[4532],{"type":54,"value":4533},"total_formulas",{"type":48,"tag":219,"props":4535,"children":4536},{"style":248},[4537],{"type":54,"value":277},{"type":48,"tag":219,"props":4539,"children":4540},{"style":248},[4541],{"type":54,"value":4269},{"type":48,"tag":219,"props":4543,"children":4544},{"style":4392},[4545],{"type":54,"value":4546}," 42",{"type":48,"tag":219,"props":4548,"children":4549},{"style":248},[4550],{"type":54,"value":4482},{"type":48,"tag":219,"props":4552,"children":4553},{"style":226},[4554],{"type":54,"value":4555},"           \u002F\u002F Number of formulas in file\n",{"type":48,"tag":219,"props":4557,"children":4558},{"class":221,"line":381},[4559,4563,4568,4572,4576,4581],{"type":48,"tag":219,"props":4560,"children":4561},{"style":248},[4562],{"type":54,"value":4451},{"type":48,"tag":219,"props":4564,"children":4565},{"style":236},[4566],{"type":54,"value":4567},"error_summary",{"type":48,"tag":219,"props":4569,"children":4570},{"style":248},[4571],{"type":54,"value":277},{"type":48,"tag":219,"props":4573,"children":4574},{"style":248},[4575],{"type":54,"value":4269},{"type":48,"tag":219,"props":4577,"children":4578},{"style":248},[4579],{"type":54,"value":4580}," {}",{"type":48,"tag":219,"props":4582,"children":4583},{"style":226},[4584],{"type":54,"value":4585},"             \u002F\u002F Only present if errors found\n",{"type":48,"tag":219,"props":4587,"children":4588},{"class":221,"line":391},[4589],{"type":48,"tag":219,"props":4590,"children":4591},{"style":248},[4592],{"type":54,"value":4593},"}\n",{"type":48,"tag":64,"props":4595,"children":4596},{},[4597,4602],{"type":48,"tag":100,"props":4598,"children":4599},{},[4600],{"type":54,"value":4601},"If errors are found",{"type":54,"value":4603},", the output will include details:",{"type":48,"tag":208,"props":4605,"children":4607},{"className":4429,"code":4606,"language":4431,"meta":213,"style":213},"{\n  \"status\": \"errors_found\",\n  \"total_errors\": 2,\n  \"total_formulas\": 42,\n  \"error_summary\": {\n    \"#REF!\": {\n      \"count\": 2,\n      \"locations\": [\"DCF!B25\", \"DCF!C25\"]\n    }\n  }\n}\n",[4608],{"type":48,"tag":119,"props":4609,"children":4610},{"__ignoreMap":213},[4611,4618,4655,4683,4710,4734,4759,4788,4847,4855,4863],{"type":48,"tag":219,"props":4612,"children":4613},{"class":221,"line":222},[4614],{"type":48,"tag":219,"props":4615,"children":4616},{"style":248},[4617],{"type":54,"value":4443},{"type":48,"tag":219,"props":4619,"children":4620},{"class":221,"line":232},[4621,4625,4629,4633,4637,4641,4646,4650],{"type":48,"tag":219,"props":4622,"children":4623},{"style":248},[4624],{"type":54,"value":4451},{"type":48,"tag":219,"props":4626,"children":4627},{"style":236},[4628],{"type":54,"value":4456},{"type":48,"tag":219,"props":4630,"children":4631},{"style":248},[4632],{"type":54,"value":277},{"type":48,"tag":219,"props":4634,"children":4635},{"style":248},[4636],{"type":54,"value":4269},{"type":48,"tag":219,"props":4638,"children":4639},{"style":248},[4640],{"type":54,"value":591},{"type":48,"tag":219,"props":4642,"children":4643},{"style":280},[4644],{"type":54,"value":4645},"errors_found",{"type":48,"tag":219,"props":4647,"children":4648},{"style":248},[4649],{"type":54,"value":277},{"type":48,"tag":219,"props":4651,"children":4652},{"style":248},[4653],{"type":54,"value":4654},",\n",{"type":48,"tag":219,"props":4656,"children":4657},{"class":221,"line":300},[4658,4662,4666,4670,4674,4679],{"type":48,"tag":219,"props":4659,"children":4660},{"style":248},[4661],{"type":54,"value":4451},{"type":48,"tag":219,"props":4663,"children":4664},{"style":236},[4665],{"type":54,"value":4499},{"type":48,"tag":219,"props":4667,"children":4668},{"style":248},[4669],{"type":54,"value":277},{"type":48,"tag":219,"props":4671,"children":4672},{"style":248},[4673],{"type":54,"value":4269},{"type":48,"tag":219,"props":4675,"children":4676},{"style":4392},[4677],{"type":54,"value":4678}," 2",{"type":48,"tag":219,"props":4680,"children":4681},{"style":248},[4682],{"type":54,"value":4654},{"type":48,"tag":219,"props":4684,"children":4685},{"class":221,"line":327},[4686,4690,4694,4698,4702,4706],{"type":48,"tag":219,"props":4687,"children":4688},{"style":248},[4689],{"type":54,"value":4451},{"type":48,"tag":219,"props":4691,"children":4692},{"style":236},[4693],{"type":54,"value":4533},{"type":48,"tag":219,"props":4695,"children":4696},{"style":248},[4697],{"type":54,"value":277},{"type":48,"tag":219,"props":4699,"children":4700},{"style":248},[4701],{"type":54,"value":4269},{"type":48,"tag":219,"props":4703,"children":4704},{"style":4392},[4705],{"type":54,"value":4546},{"type":48,"tag":219,"props":4707,"children":4708},{"style":248},[4709],{"type":54,"value":4654},{"type":48,"tag":219,"props":4711,"children":4712},{"class":221,"line":381},[4713,4717,4721,4725,4729],{"type":48,"tag":219,"props":4714,"children":4715},{"style":248},[4716],{"type":54,"value":4451},{"type":48,"tag":219,"props":4718,"children":4719},{"style":236},[4720],{"type":54,"value":4567},{"type":48,"tag":219,"props":4722,"children":4723},{"style":248},[4724],{"type":54,"value":277},{"type":48,"tag":219,"props":4726,"children":4727},{"style":248},[4728],{"type":54,"value":4269},{"type":48,"tag":219,"props":4730,"children":4731},{"style":248},[4732],{"type":54,"value":4733}," {\n",{"type":48,"tag":219,"props":4735,"children":4736},{"class":221,"line":391},[4737,4742,4747,4751,4755],{"type":48,"tag":219,"props":4738,"children":4739},{"style":248},[4740],{"type":54,"value":4741},"    \"",{"type":48,"tag":219,"props":4743,"children":4744},{"style":4334},[4745],{"type":54,"value":4746},"#REF!",{"type":48,"tag":219,"props":4748,"children":4749},{"style":248},[4750],{"type":54,"value":277},{"type":48,"tag":219,"props":4752,"children":4753},{"style":248},[4754],{"type":54,"value":4269},{"type":48,"tag":219,"props":4756,"children":4757},{"style":248},[4758],{"type":54,"value":4733},{"type":48,"tag":219,"props":4760,"children":4761},{"class":221,"line":400},[4762,4767,4772,4776,4780,4784],{"type":48,"tag":219,"props":4763,"children":4764},{"style":248},[4765],{"type":54,"value":4766},"      \"",{"type":48,"tag":219,"props":4768,"children":4769},{"style":4392},[4770],{"type":54,"value":4771},"count",{"type":48,"tag":219,"props":4773,"children":4774},{"style":248},[4775],{"type":54,"value":277},{"type":48,"tag":219,"props":4777,"children":4778},{"style":248},[4779],{"type":54,"value":4269},{"type":48,"tag":219,"props":4781,"children":4782},{"style":4392},[4783],{"type":54,"value":4678},{"type":48,"tag":219,"props":4785,"children":4786},{"style":248},[4787],{"type":54,"value":4654},{"type":48,"tag":219,"props":4789,"children":4790},{"class":221,"line":474},[4791,4795,4800,4804,4808,4813,4817,4822,4826,4830,4834,4839,4843],{"type":48,"tag":219,"props":4792,"children":4793},{"style":248},[4794],{"type":54,"value":4766},{"type":48,"tag":219,"props":4796,"children":4797},{"style":4392},[4798],{"type":54,"value":4799},"locations",{"type":48,"tag":219,"props":4801,"children":4802},{"style":248},[4803],{"type":54,"value":277},{"type":48,"tag":219,"props":4805,"children":4806},{"style":248},[4807],{"type":54,"value":4269},{"type":48,"tag":219,"props":4809,"children":4810},{"style":248},[4811],{"type":54,"value":4812}," [",{"type":48,"tag":219,"props":4814,"children":4815},{"style":248},[4816],{"type":54,"value":277},{"type":48,"tag":219,"props":4818,"children":4819},{"style":280},[4820],{"type":54,"value":4821},"DCF!B25",{"type":48,"tag":219,"props":4823,"children":4824},{"style":248},[4825],{"type":54,"value":277},{"type":48,"tag":219,"props":4827,"children":4828},{"style":248},[4829],{"type":54,"value":4482},{"type":48,"tag":219,"props":4831,"children":4832},{"style":248},[4833],{"type":54,"value":591},{"type":48,"tag":219,"props":4835,"children":4836},{"style":280},[4837],{"type":54,"value":4838},"DCF!C25",{"type":48,"tag":219,"props":4840,"children":4841},{"style":248},[4842],{"type":54,"value":277},{"type":48,"tag":219,"props":4844,"children":4845},{"style":248},[4846],{"type":54,"value":4361},{"type":48,"tag":219,"props":4848,"children":4849},{"class":221,"line":526},[4850],{"type":48,"tag":219,"props":4851,"children":4852},{"style":248},[4853],{"type":54,"value":4854},"    }\n",{"type":48,"tag":219,"props":4856,"children":4857},{"class":221,"line":550},[4858],{"type":48,"tag":219,"props":4859,"children":4860},{"style":248},[4861],{"type":54,"value":4862},"  }\n",{"type":48,"tag":219,"props":4864,"children":4865},{"class":221,"line":607},[4866],{"type":48,"tag":219,"props":4867,"children":4868},{"style":248},[4869],{"type":54,"value":4593},{"type":48,"tag":64,"props":4871,"children":4872},{},[4873,4878],{"type":48,"tag":100,"props":4874,"children":4875},{},[4876],{"type":54,"value":4877},"Fix all errors",{"type":54,"value":4879}," and re-run recalc.py until status is \"success\" before delivering the model.",{"type":48,"tag":1038,"props":4881,"children":4883},{"id":4882},"formatting-standards",[4884],{"type":54,"value":4885},"Formatting Standards",{"type":48,"tag":64,"props":4887,"children":4888},{},[4889,4893],{"type":48,"tag":100,"props":4890,"children":4891},{},[4892],{"type":54,"value":2958},{"type":54,"value":4894},": Follow the xlsx skill for formula construction rules and number formatting conventions. The DCF skill adds specific visual presentation standards.",{"type":48,"tag":64,"props":4896,"children":4897},{},[4898,4903],{"type":48,"tag":100,"props":4899,"children":4900},{},[4901],{"type":54,"value":4902},"Color Scheme - Two Layers",{"type":54,"value":4269},{"type":48,"tag":64,"props":4905,"children":4906},{},[4907],{"type":48,"tag":100,"props":4908,"children":4909},{},[4910],{"type":54,"value":4911},"Layer 1: Font Colors (MANDATORY from xlsx skill)",{"type":48,"tag":76,"props":4913,"children":4914},{},[4915,4925,4935],{"type":48,"tag":80,"props":4916,"children":4917},{},[4918,4923],{"type":48,"tag":100,"props":4919,"children":4920},{},[4921],{"type":54,"value":4922},"Blue text (RGB: 0,0,255)",{"type":54,"value":4924},": ALL hardcoded inputs (stock price, shares, historical data, assumptions)",{"type":48,"tag":80,"props":4926,"children":4927},{},[4928,4933],{"type":48,"tag":100,"props":4929,"children":4930},{},[4931],{"type":54,"value":4932},"Black text (RGB: 0,0,0)",{"type":54,"value":4934},": ALL formulas and calculations",{"type":48,"tag":80,"props":4936,"children":4937},{},[4938,4943],{"type":48,"tag":100,"props":4939,"children":4940},{},[4941],{"type":54,"value":4942},"Green text (RGB: 0,128,0)",{"type":54,"value":4944},": Links to other sheets (WACC sheet references)",{"type":48,"tag":64,"props":4946,"children":4947},{},[4948],{"type":48,"tag":100,"props":4949,"children":4950},{},[4951],{"type":54,"value":4952},"Layer 2: Fill Colors — Professional Blue\u002FGrey Palette (Default unless user specifies otherwise)",{"type":48,"tag":76,"props":4954,"children":4955},{},[4956,4966,5057,5067],{"type":48,"tag":80,"props":4957,"children":4958},{},[4959,4964],{"type":48,"tag":100,"props":4960,"children":4961},{},[4962],{"type":54,"value":4963},"Keep it minimal",{"type":54,"value":4965}," — use only blues and greys for fills. Do NOT introduce greens, yellows, oranges, or multiple accent colors. A model with too many colors looks amateurish.",{"type":48,"tag":80,"props":4967,"children":4968},{},[4969,4974],{"type":48,"tag":100,"props":4970,"children":4971},{},[4972],{"type":54,"value":4973},"Default fill palette:",{"type":48,"tag":76,"props":4975,"children":4976},{},[4977,4994,5012,5030,5040],{"type":48,"tag":80,"props":4978,"children":4979},{},[4980,4985,4987,4992],{"type":48,"tag":100,"props":4981,"children":4982},{},[4983],{"type":54,"value":4984},"Section headers",{"type":54,"value":4986},": Dark blue (RGB: 31,78,121 \u002F ",{"type":48,"tag":119,"props":4988,"children":4990},{"className":4989},[],[4991],{"type":54,"value":596},{"type":54,"value":4993},") background with white bold text",{"type":48,"tag":80,"props":4995,"children":4996},{},[4997,5002,5004,5010],{"type":48,"tag":100,"props":4998,"children":4999},{},[5000],{"type":54,"value":5001},"Sub-headers\u002Fcolumn headers",{"type":54,"value":5003},": Light blue (RGB: 217,225,242 \u002F ",{"type":48,"tag":119,"props":5005,"children":5007},{"className":5006},[],[5008],{"type":54,"value":5009},"#D9E1F2",{"type":54,"value":5011},") background with black bold text",{"type":48,"tag":80,"props":5013,"children":5014},{},[5015,5020,5022,5028],{"type":48,"tag":100,"props":5016,"children":5017},{},[5018],{"type":54,"value":5019},"Input cells",{"type":54,"value":5021},": Light grey (RGB: 242,242,242 \u002F ",{"type":48,"tag":119,"props":5023,"children":5025},{"className":5024},[],[5026],{"type":54,"value":5027},"#F2F2F2",{"type":54,"value":5029},") background with blue font — or just white with blue font if you want maximum minimalism",{"type":48,"tag":80,"props":5031,"children":5032},{},[5033,5038],{"type":48,"tag":100,"props":5034,"children":5035},{},[5036],{"type":54,"value":5037},"Calculated cells",{"type":54,"value":5039},": White background with black font",{"type":48,"tag":80,"props":5041,"children":5042},{},[5043,5048,5050,5055],{"type":48,"tag":100,"props":5044,"children":5045},{},[5046],{"type":54,"value":5047},"Output\u002Fsummary rows",{"type":54,"value":5049}," (per-share value, EV, etc.): Medium blue (RGB: 189,215,238 \u002F ",{"type":48,"tag":119,"props":5051,"children":5053},{"className":5052},[],[5054],{"type":54,"value":845},{"type":54,"value":5056},") background with black bold font",{"type":48,"tag":80,"props":5058,"children":5059},{},[5060,5065],{"type":48,"tag":100,"props":5061,"children":5062},{},[5063],{"type":54,"value":5064},"That's it — 3 blues + 1 grey + white.",{"type":54,"value":5066}," Resist the urge to add more.",{"type":48,"tag":80,"props":5068,"children":5069},{},[5070],{"type":54,"value":5071},"User-provided templates or explicit color preferences ALWAYS override these defaults.",{"type":48,"tag":64,"props":5073,"children":5074},{},[5075],{"type":48,"tag":100,"props":5076,"children":5077},{},[5078],{"type":54,"value":5079},"How the layers work together:",{"type":48,"tag":76,"props":5081,"children":5082},{},[5083,5088,5093,5098],{"type":48,"tag":80,"props":5084,"children":5085},{},[5086],{"type":54,"value":5087},"Input cell: Blue font + light grey fill = \"Hardcoded input\"",{"type":48,"tag":80,"props":5089,"children":5090},{},[5091],{"type":54,"value":5092},"Formula cell: Black font + white background = \"Calculated value\"",{"type":48,"tag":80,"props":5094,"children":5095},{},[5096],{"type":54,"value":5097},"Sheet link: Green font + white background = \"Reference from another sheet\"",{"type":48,"tag":80,"props":5099,"children":5100},{},[5101],{"type":54,"value":5102},"Key output: Black bold font + medium blue fill = \"This is the answer\"",{"type":48,"tag":64,"props":5104,"children":5105},{},[5106],{"type":48,"tag":100,"props":5107,"children":5108},{},[5109],{"type":54,"value":5110},"Font color tells you WHAT it is (input\u002Fformula\u002Flink). Fill color tells you WHERE you are (header\u002Fdata\u002Foutput).",{"type":48,"tag":1038,"props":5112,"children":5114},{"id":5113},"border-standards-required-for-professional-appearance",[5115],{"type":54,"value":5116},"Border Standards (REQUIRED for Professional Appearance)",{"type":48,"tag":64,"props":5118,"children":5119},{},[5120,5125],{"type":48,"tag":100,"props":5121,"children":5122},{},[5123],{"type":54,"value":5124},"Thick borders",{"type":54,"value":5126}," (1.5pt) around major sections:",{"type":48,"tag":76,"props":5128,"children":5129},{},[5130,5135,5140,5145,5150,5155],{"type":48,"tag":80,"props":5131,"children":5132},{},[5133],{"type":54,"value":5134},"KEY INPUTS section",{"type":48,"tag":80,"props":5136,"children":5137},{},[5138],{"type":54,"value":5139},"PROJECTION ASSUMPTIONS section",{"type":48,"tag":80,"props":5141,"children":5142},{},[5143],{"type":54,"value":5144},"5-YEAR CASH FLOW PROJECTION section",{"type":48,"tag":80,"props":5146,"children":5147},{},[5148],{"type":54,"value":5149},"TERMINAL VALUE section",{"type":48,"tag":80,"props":5151,"children":5152},{},[5153],{"type":54,"value":5154},"VALUATION SUMMARY section",{"type":48,"tag":80,"props":5156,"children":5157},{},[5158],{"type":54,"value":5159},"Each SENSITIVITY ANALYSIS table",{"type":48,"tag":64,"props":5161,"children":5162},{},[5163,5168],{"type":48,"tag":100,"props":5164,"children":5165},{},[5166],{"type":54,"value":5167},"Medium borders",{"type":54,"value":5169}," (1pt) between sub-sections:",{"type":48,"tag":76,"props":5171,"children":5172},{},[5173,5178],{"type":48,"tag":80,"props":5174,"children":5175},{},[5176],{"type":54,"value":5177},"Company Details vs Historical Performance",{"type":48,"tag":80,"props":5179,"children":5180},{},[5181],{"type":54,"value":5182},"Growth Assumptions vs EBIT Margin vs FCF Parameters",{"type":48,"tag":64,"props":5184,"children":5185},{},[5186,5191],{"type":48,"tag":100,"props":5187,"children":5188},{},[5189],{"type":54,"value":5190},"Thin borders",{"type":54,"value":5192}," (0.5pt) around data tables:",{"type":48,"tag":76,"props":5194,"children":5195},{},[5196,5201],{"type":48,"tag":80,"props":5197,"children":5198},{},[5199],{"type":54,"value":5200},"Scenario assumption tables (Bear | Base | Bull | Selected)",{"type":48,"tag":80,"props":5202,"children":5203},{},[5204],{"type":54,"value":5205},"Historical vs projected financials matrix",{"type":48,"tag":64,"props":5207,"children":5208},{},[5209,5214],{"type":48,"tag":100,"props":5210,"children":5211},{},[5212],{"type":54,"value":5213},"No borders:",{"type":54,"value":5215}," Individual cells within tables (keep clean, scannable)",{"type":48,"tag":64,"props":5217,"children":5218},{},[5219,5224],{"type":48,"tag":100,"props":5220,"children":5221},{},[5222],{"type":54,"value":5223},"Borders are mandatory",{"type":54,"value":5225}," - models without professional borders are not client-ready.",{"type":48,"tag":64,"props":5227,"children":5228},{},[5229,5234],{"type":48,"tag":100,"props":5230,"children":5231},{},[5232],{"type":54,"value":5233},"Number Formats",{"type":54,"value":5235}," (follows xlsx skill standards):",{"type":48,"tag":76,"props":5237,"children":5238},{},[5239,5249,5267,5292,5309,5326],{"type":48,"tag":80,"props":5240,"children":5241},{},[5242,5247],{"type":48,"tag":100,"props":5243,"children":5244},{},[5245],{"type":54,"value":5246},"Years",{"type":54,"value":5248},": Format as text strings (e.g., \"2024\" not \"2,024\")",{"type":48,"tag":80,"props":5250,"children":5251},{},[5252,5257,5259,5265],{"type":48,"tag":100,"props":5253,"children":5254},{},[5255],{"type":54,"value":5256},"Percentages",{"type":54,"value":5258},": ",{"type":48,"tag":119,"props":5260,"children":5262},{"className":5261},[],[5263],{"type":54,"value":5264},"0.0%",{"type":54,"value":5266}," (one decimal place)",{"type":48,"tag":80,"props":5268,"children":5269},{},[5270,5275,5276,5282,5284,5290],{"type":48,"tag":100,"props":5271,"children":5272},{},[5273],{"type":54,"value":5274},"Currency",{"type":54,"value":5258},{"type":48,"tag":119,"props":5277,"children":5279},{"className":5278},[],[5280],{"type":54,"value":5281},"$#,##0",{"type":54,"value":5283}," for millions; ",{"type":48,"tag":119,"props":5285,"children":5287},{"className":5286},[],[5288],{"type":54,"value":5289},"$#,##0.00",{"type":54,"value":5291}," for per-share - ALWAYS specify units in headers (\"Revenue ($mm)\")",{"type":48,"tag":80,"props":5293,"children":5294},{},[5295,5300,5302,5308],{"type":48,"tag":100,"props":5296,"children":5297},{},[5298],{"type":54,"value":5299},"Zeros",{"type":54,"value":5301},": Use number formatting to make all zeros \"-\" (e.g., ",{"type":48,"tag":119,"props":5303,"children":5305},{"className":5304},[],[5306],{"type":54,"value":5307},"$#,##0;($#,##0);-",{"type":54,"value":292},{"type":48,"tag":80,"props":5310,"children":5311},{},[5312,5317,5318,5324],{"type":48,"tag":100,"props":5313,"children":5314},{},[5315],{"type":54,"value":5316},"Large numbers",{"type":54,"value":5258},{"type":48,"tag":119,"props":5319,"children":5321},{"className":5320},[],[5322],{"type":54,"value":5323},"#,##0",{"type":54,"value":5325}," with thousands separator",{"type":48,"tag":80,"props":5327,"children":5328},{},[5329,5334,5335,5341],{"type":48,"tag":100,"props":5330,"children":5331},{},[5332],{"type":54,"value":5333},"Negative numbers",{"type":54,"value":5258},{"type":48,"tag":119,"props":5336,"children":5338},{"className":5337},[],[5339],{"type":54,"value":5340},"(#,##0)",{"type":54,"value":5342}," in parentheses (NOT minus sign)",{"type":48,"tag":64,"props":5344,"children":5345},{},[5346,5351],{"type":48,"tag":100,"props":5347,"children":5348},{},[5349],{"type":54,"value":5350},"Cell Comments (MANDATORY for all hardcoded inputs)",{"type":54,"value":4269},{"type":48,"tag":64,"props":5353,"children":5354},{},[5355,5357,5361,5362,5366,5367,5371,5372,5376],{"type":54,"value":5356},"Per the xlsx skill, ALL hardcoded values must have cell comments documenting the source. Format: \"Source: ",{"type":48,"tag":219,"props":5358,"children":5359},{},[5360],{"type":54,"value":893},{"type":54,"value":895},{"type":48,"tag":219,"props":5363,"children":5364},{},[5365],{"type":54,"value":900},{"type":54,"value":895},{"type":48,"tag":219,"props":5368,"children":5369},{},[5370],{"type":54,"value":906},{"type":54,"value":895},{"type":48,"tag":219,"props":5373,"children":5374},{},[5375],{"type":54,"value":912},{"type":54,"value":277},{"type":48,"tag":64,"props":5378,"children":5379},{},[5380,5384],{"type":48,"tag":100,"props":5381,"children":5382},{},[5383],{"type":54,"value":4299},{"type":54,"value":5385},": Add comments AS CELLS ARE CREATED. Do not defer to the end.",{"type":48,"tag":1038,"props":5387,"children":5389},{"id":5388},"dcf-sheet-detailed-structure",[5390],{"type":54,"value":5391},"DCF Sheet Detailed Structure",{"type":48,"tag":64,"props":5393,"children":5394},{},[5395],{"type":48,"tag":100,"props":5396,"children":5397},{},[5398],{"type":54,"value":5399},"Section 1: Header",{"type":48,"tag":208,"props":5401,"children":5403},{"className":1921,"code":5402,"language":1923,"meta":213,"style":213},"Row,Content\n1,[Company Name] DCF Model\n2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]\n3,Blank\n4,Case Selector Cell (1=Bear 2=Base 3=Bull)\n5,Case Name Display (formula: =IF([Selector]=1\"Bear\"IF([Selector]=2\"Base\"\"Bull\")))\n",[5404],{"type":48,"tag":119,"props":5405,"children":5406},{"__ignoreMap":213},[5407,5414,5421,5429,5437,5445],{"type":48,"tag":219,"props":5408,"children":5409},{"class":221,"line":222},[5410],{"type":48,"tag":219,"props":5411,"children":5412},{},[5413],{"type":54,"value":2822},{"type":48,"tag":219,"props":5415,"children":5416},{"class":221,"line":232},[5417],{"type":48,"tag":219,"props":5418,"children":5419},{},[5420],{"type":54,"value":2830},{"type":48,"tag":219,"props":5422,"children":5423},{"class":221,"line":300},[5424],{"type":48,"tag":219,"props":5425,"children":5426},{},[5427],{"type":54,"value":5428},"2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]\n",{"type":48,"tag":219,"props":5430,"children":5431},{"class":221,"line":327},[5432],{"type":48,"tag":219,"props":5433,"children":5434},{},[5435],{"type":54,"value":5436},"3,Blank\n",{"type":48,"tag":219,"props":5438,"children":5439},{"class":221,"line":381},[5440],{"type":48,"tag":219,"props":5441,"children":5442},{},[5443],{"type":54,"value":5444},"4,Case Selector Cell (1=Bear 2=Base 3=Bull)\n",{"type":48,"tag":219,"props":5446,"children":5447},{"class":221,"line":391},[5448],{"type":48,"tag":219,"props":5449,"children":5450},{},[5451],{"type":54,"value":5452},"5,Case Name Display (formula: =IF([Selector]=1\"Bear\"IF([Selector]=2\"Base\"\"Bull\")))\n",{"type":48,"tag":64,"props":5454,"children":5455},{},[5456],{"type":48,"tag":100,"props":5457,"children":5458},{},[5459],{"type":54,"value":5460},"Section 2: Market Data (NOT case dependent)",{"type":48,"tag":208,"props":5462,"children":5464},{"className":1921,"code":5463,"language":1923,"meta":213,"style":213},"Item,Value\nCurrent Stock Price,$XX.XX\nShares Outstanding (M),XX.X\nMarket Cap ($M),[Formula]\nNet Debt ($M),XXX [or Net Cash if negative]\n",[5465],{"type":48,"tag":119,"props":5466,"children":5467},{"__ignoreMap":213},[5468,5476,5484,5492,5500],{"type":48,"tag":219,"props":5469,"children":5470},{"class":221,"line":222},[5471],{"type":48,"tag":219,"props":5472,"children":5473},{},[5474],{"type":54,"value":5475},"Item,Value\n",{"type":48,"tag":219,"props":5477,"children":5478},{"class":221,"line":232},[5479],{"type":48,"tag":219,"props":5480,"children":5481},{},[5482],{"type":54,"value":5483},"Current Stock Price,$XX.XX\n",{"type":48,"tag":219,"props":5485,"children":5486},{"class":221,"line":300},[5487],{"type":48,"tag":219,"props":5488,"children":5489},{},[5490],{"type":54,"value":5491},"Shares Outstanding (M),XX.X\n",{"type":48,"tag":219,"props":5493,"children":5494},{"class":221,"line":327},[5495],{"type":48,"tag":219,"props":5496,"children":5497},{},[5498],{"type":54,"value":5499},"Market Cap ($M),[Formula]\n",{"type":48,"tag":219,"props":5501,"children":5502},{"class":221,"line":381},[5503],{"type":48,"tag":219,"props":5504,"children":5505},{},[5506],{"type":54,"value":5507},"Net Debt ($M),XXX [or Net Cash if negative]\n",{"type":48,"tag":64,"props":5509,"children":5510},{},[5511],{"type":48,"tag":100,"props":5512,"children":5513},{},[5514],{"type":54,"value":5515},"Section 3: DCF Scenario Assumptions",{"type":48,"tag":64,"props":5517,"children":5518},{},[5519,5521,5526],{"type":54,"value":5520},"Create separate assumption blocks for each scenario (Bear, Base, Bull) with DCF-specific assumptions (Revenue Growth %, EBIT Margin %, Tax Rate %, D&A % of Revenue, CapEx % of Revenue, NWC Change % of ΔRev, Terminal Growth Rate, WACC) laid out horizontally across projection years. Each block must include section header, column header row showing the projection years (FY1, FY2, etc.), and data rows. See ",{"type":48,"tag":119,"props":5522,"children":5524},{"className":5523},[],[5525],{"type":54,"value":2081},{"type":54,"value":5527}," section \"Correct Assumption Table Structure\" for the exact layout.",{"type":48,"tag":64,"props":5529,"children":5530},{},[5531],{"type":48,"tag":100,"props":5532,"children":5533},{},[5534],{"type":54,"value":5535},"Section 4: Historical & Projected Financials",{"type":48,"tag":64,"props":5537,"children":5538},{},[5539,5544],{"type":48,"tag":100,"props":5540,"children":5541},{},[5542],{"type":54,"value":5543},"Reference a consolidation column (e.g., \"Selected Case\") that pulls from scenario blocks",{"type":54,"value":5545},", not scattered IF formulas in every projection row.",{"type":48,"tag":208,"props":5547,"children":5549},{"className":1921,"code":5548,"language":1923,"meta":213,"style":213},"Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\nRevenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]\n  % growth,XX%,XX%,XX%,XX%,[=E29\u002FD29-1],[=F29\u002FE29-1],[=G29\u002FF29-1]\n,,,,,,\nGross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]\n  % margin,XX%,XX%,XX%,XX%,[=E33\u002FE29],[=F33\u002FF29],[=G33\u002FG29]\n,,,,,,\nOperating Expenses:,,,,,,,\n  S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]\n  R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]\n  G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]\n  Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]\n,,,,,,\nEBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]\n  % margin,XX%,XX%,XX%,XX%,[=E41\u002FE29],[=F41\u002FF29],[=G41\u002FG29]\n,,,,,,\nTaxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]\n  Tax rate,XX%,XX%,XX%,XX%,[=E43\u002FE41],[=F43\u002FF41],[=G43\u002FG41]\n,,,,,,\nNOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]\n",[5550],{"type":48,"tag":119,"props":5551,"children":5552},{"__ignoreMap":213},[5553,5561,5569,5577,5585,5593,5601,5608,5616,5624,5632,5640,5648,5655,5663,5671,5678,5686,5694,5701],{"type":48,"tag":219,"props":5554,"children":5555},{"class":221,"line":222},[5556],{"type":48,"tag":219,"props":5557,"children":5558},{},[5559],{"type":54,"value":5560},"Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\n",{"type":48,"tag":219,"props":5562,"children":5563},{"class":221,"line":232},[5564],{"type":48,"tag":219,"props":5565,"children":5566},{},[5567],{"type":54,"value":5568},"Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]\n",{"type":48,"tag":219,"props":5570,"children":5571},{"class":221,"line":300},[5572],{"type":48,"tag":219,"props":5573,"children":5574},{},[5575],{"type":54,"value":5576},"  % growth,XX%,XX%,XX%,XX%,[=E29\u002FD29-1],[=F29\u002FE29-1],[=G29\u002FF29-1]\n",{"type":48,"tag":219,"props":5578,"children":5579},{"class":221,"line":327},[5580],{"type":48,"tag":219,"props":5581,"children":5582},{},[5583],{"type":54,"value":5584},",,,,,,\n",{"type":48,"tag":219,"props":5586,"children":5587},{"class":221,"line":381},[5588],{"type":48,"tag":219,"props":5589,"children":5590},{},[5591],{"type":54,"value":5592},"Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]\n",{"type":48,"tag":219,"props":5594,"children":5595},{"class":221,"line":391},[5596],{"type":48,"tag":219,"props":5597,"children":5598},{},[5599],{"type":54,"value":5600},"  % margin,XX%,XX%,XX%,XX%,[=E33\u002FE29],[=F33\u002FF29],[=G33\u002FG29]\n",{"type":48,"tag":219,"props":5602,"children":5603},{"class":221,"line":400},[5604],{"type":48,"tag":219,"props":5605,"children":5606},{},[5607],{"type":54,"value":5584},{"type":48,"tag":219,"props":5609,"children":5610},{"class":221,"line":474},[5611],{"type":48,"tag":219,"props":5612,"children":5613},{},[5614],{"type":54,"value":5615},"Operating Expenses:,,,,,,,\n",{"type":48,"tag":219,"props":5617,"children":5618},{"class":221,"line":526},[5619],{"type":48,"tag":219,"props":5620,"children":5621},{},[5622],{"type":54,"value":5623},"  S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]\n",{"type":48,"tag":219,"props":5625,"children":5626},{"class":221,"line":550},[5627],{"type":48,"tag":219,"props":5628,"children":5629},{},[5630],{"type":54,"value":5631},"  R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]\n",{"type":48,"tag":219,"props":5633,"children":5634},{"class":221,"line":607},[5635],{"type":48,"tag":219,"props":5636,"children":5637},{},[5638],{"type":54,"value":5639},"  G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]\n",{"type":48,"tag":219,"props":5641,"children":5642},{"class":221,"line":655},[5643],{"type":48,"tag":219,"props":5644,"children":5645},{},[5646],{"type":54,"value":5647},"  Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]\n",{"type":48,"tag":219,"props":5649,"children":5650},{"class":221,"line":2210},[5651],{"type":48,"tag":219,"props":5652,"children":5653},{},[5654],{"type":54,"value":5584},{"type":48,"tag":219,"props":5656,"children":5657},{"class":221,"line":2219},[5658],{"type":48,"tag":219,"props":5659,"children":5660},{},[5661],{"type":54,"value":5662},"EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]\n",{"type":48,"tag":219,"props":5664,"children":5665},{"class":221,"line":2729},[5666],{"type":48,"tag":219,"props":5667,"children":5668},{},[5669],{"type":54,"value":5670},"  % margin,XX%,XX%,XX%,XX%,[=E41\u002FE29],[=F41\u002FF29],[=G41\u002FG29]\n",{"type":48,"tag":219,"props":5672,"children":5673},{"class":221,"line":2738},[5674],{"type":48,"tag":219,"props":5675,"children":5676},{},[5677],{"type":54,"value":5584},{"type":48,"tag":219,"props":5679,"children":5680},{"class":221,"line":2746},[5681],{"type":48,"tag":219,"props":5682,"children":5683},{},[5684],{"type":54,"value":5685},"Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]\n",{"type":48,"tag":219,"props":5687,"children":5688},{"class":221,"line":2754},[5689],{"type":48,"tag":219,"props":5690,"children":5691},{},[5692],{"type":54,"value":5693},"  Tax rate,XX%,XX%,XX%,XX%,[=E43\u002FE41],[=F43\u002FF41],[=G43\u002FG41]\n",{"type":48,"tag":219,"props":5695,"children":5696},{"class":221,"line":2762},[5697],{"type":48,"tag":219,"props":5698,"children":5699},{},[5700],{"type":54,"value":5584},{"type":48,"tag":219,"props":5702,"children":5703},{"class":221,"line":2770},[5704],{"type":48,"tag":219,"props":5705,"children":5706},{},[5707],{"type":54,"value":5708},"NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]\n",{"type":48,"tag":64,"props":5710,"children":5711},{},[5712,5717],{"type":48,"tag":100,"props":5713,"children":5714},{},[5715],{"type":54,"value":5716},"Key Formula Pattern",{"type":54,"value":4269},{"type":48,"tag":76,"props":5719,"children":5720},{},[5721,5734],{"type":48,"tag":80,"props":5722,"children":5723},{},[5724,5726,5732],{"type":54,"value":5725},"Revenue growth: ",{"type":48,"tag":119,"props":5727,"children":5729},{"className":5728},[],[5730],{"type":54,"value":5731},"=E29*(1+$E$10)",{"type":54,"value":5733}," where $E$10 is consolidation column for Year 1 growth",{"type":48,"tag":80,"props":5735,"children":5736},{},[5737,5739],{"type":54,"value":5738},"NOT: ",{"type":48,"tag":119,"props":5740,"children":5742},{"className":5741},[],[5743],{"type":54,"value":5744},"=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))",{"type":48,"tag":64,"props":5746,"children":5747},{},[5748],{"type":54,"value":5749},"This approach is cleaner, easier to audit, and prevents formula errors by centralizing the scenario logic.",{"type":48,"tag":64,"props":5751,"children":5752},{},[5753],{"type":48,"tag":100,"props":5754,"children":5755},{},[5756],{"type":54,"value":5757},"Section 5: Free Cash Flow Build",{"type":48,"tag":64,"props":5759,"children":5760},{},[5761,5765],{"type":48,"tag":100,"props":5762,"children":5763},{},[5764],{"type":54,"value":4299},{"type":54,"value":5766},": Verify row references point to the CORRECT assumption rows. Test formulas immediately after creation.",{"type":48,"tag":208,"props":5768,"children":5770},{"className":1921,"code":5769,"language":1923,"meta":213,"style":213},"Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\nNOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]\n(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]\n    % of Rev,XX%,XX%,XX%,XX%,[=E58\u002FE29],[=F58\u002FF29],[=G58\u002FG29]\n(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]\n    % of Rev,XX%,XX%,XX%,XX%,[=E60\u002FE29],[=F60\u002FF29],[=G60\u002FG29]\n(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]\n    % of Δ Rev,XX%,XX%,XX%,XX%,[=E62\u002F(E29-D29)],[=F62\u002F(F29-E29)],[=G62\u002F(G29-F29)]\n,,,,,,\nUnlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]\n",[5771],{"type":48,"tag":119,"props":5772,"children":5773},{"__ignoreMap":213},[5774,5782,5790,5798,5806,5814,5822,5830,5838,5845],{"type":48,"tag":219,"props":5775,"children":5776},{"class":221,"line":222},[5777],{"type":48,"tag":219,"props":5778,"children":5779},{},[5780],{"type":54,"value":5781},"Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E\n",{"type":48,"tag":219,"props":5783,"children":5784},{"class":221,"line":232},[5785],{"type":48,"tag":219,"props":5786,"children":5787},{},[5788],{"type":54,"value":5789},"NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]\n",{"type":48,"tag":219,"props":5791,"children":5792},{"class":221,"line":300},[5793],{"type":48,"tag":219,"props":5794,"children":5795},{},[5796],{"type":54,"value":5797},"(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]\n",{"type":48,"tag":219,"props":5799,"children":5800},{"class":221,"line":327},[5801],{"type":48,"tag":219,"props":5802,"children":5803},{},[5804],{"type":54,"value":5805},"    % of Rev,XX%,XX%,XX%,XX%,[=E58\u002FE29],[=F58\u002FF29],[=G58\u002FG29]\n",{"type":48,"tag":219,"props":5807,"children":5808},{"class":221,"line":381},[5809],{"type":48,"tag":219,"props":5810,"children":5811},{},[5812],{"type":54,"value":5813},"(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]\n",{"type":48,"tag":219,"props":5815,"children":5816},{"class":221,"line":391},[5817],{"type":48,"tag":219,"props":5818,"children":5819},{},[5820],{"type":54,"value":5821},"    % of Rev,XX%,XX%,XX%,XX%,[=E60\u002FE29],[=F60\u002FF29],[=G60\u002FG29]\n",{"type":48,"tag":219,"props":5823,"children":5824},{"class":221,"line":400},[5825],{"type":48,"tag":219,"props":5826,"children":5827},{},[5828],{"type":54,"value":5829},"(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]\n",{"type":48,"tag":219,"props":5831,"children":5832},{"class":221,"line":474},[5833],{"type":48,"tag":219,"props":5834,"children":5835},{},[5836],{"type":54,"value":5837},"    % of Δ Rev,XX%,XX%,XX%,XX%,[=E62\u002F(E29-D29)],[=F62\u002F(F29-E29)],[=G62\u002F(G29-F29)]\n",{"type":48,"tag":219,"props":5839,"children":5840},{"class":221,"line":526},[5841],{"type":48,"tag":219,"props":5842,"children":5843},{},[5844],{"type":54,"value":5584},{"type":48,"tag":219,"props":5846,"children":5847},{"class":221,"line":550},[5848],{"type":48,"tag":219,"props":5849,"children":5850},{},[5851],{"type":54,"value":5852},"Unlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]\n",{"type":48,"tag":64,"props":5854,"children":5855},{},[5856,5861],{"type":48,"tag":100,"props":5857,"children":5858},{},[5859],{"type":54,"value":5860},"Row reference examples",{"type":54,"value":5862}," (based on layout planning):",{"type":48,"tag":76,"props":5864,"children":5865},{},[5866,5871,5876,5881,5886],{"type":48,"tag":80,"props":5867,"children":5868},{},[5869],{"type":54,"value":5870},"$E$21 = D&A % assumption (consolidation column, row 21)",{"type":48,"tag":80,"props":5872,"children":5873},{},[5874],{"type":54,"value":5875},"$E$22 = CapEx % assumption (consolidation column, row 22)",{"type":48,"tag":80,"props":5877,"children":5878},{},[5879],{"type":54,"value":5880},"$E$23 = NWC % assumption (consolidation column, row 23)",{"type":48,"tag":80,"props":5882,"children":5883},{},[5884],{"type":54,"value":5885},"E29 = Revenue for year (row 29)",{"type":48,"tag":80,"props":5887,"children":5888},{},[5889],{"type":54,"value":5890},"E45 = NOPAT for year (row 45)",{"type":48,"tag":64,"props":5892,"children":5893},{},[5894,5899],{"type":48,"tag":100,"props":5895,"children":5896},{},[5897],{"type":54,"value":5898},"Before writing formulas",{"type":54,"value":5900},": Confirm these row numbers match the actual layout. Test one column, then copy across.",{"type":48,"tag":64,"props":5902,"children":5903},{},[5904],{"type":48,"tag":100,"props":5905,"children":5906},{},[5907],{"type":54,"value":5908},"Section 6: Discounting & Valuation",{"type":48,"tag":208,"props":5910,"children":5912},{"className":1921,"code":5911,"language":1923,"meta":213,"style":213},"DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal\nUnlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,\nPeriod,0.5,1.5,2.5,3.5,4.5,\nDiscount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,\nPV of FCF ($M),XXX,XXX,XXX,XXX,XXX,\n,,,,,,\nTerminal FCF ($M),,,,,,,XXX\nTerminal Value ($M),,,,,,,XXX\nPV Terminal Value ($M),,,,,,,XXX\n,,,,,,\nValuation Summary ($M),,,,,,\nSum of PV FCFs,XXX,,,,,\nPV Terminal Value,XXX,,,,,\nEnterprise Value,XXX,,,,,\n(-) Net Debt,(XX),,,,,\nEquity Value,XXX,,,,,\n,,,,,,\nShares Outstanding (M),XX.X,,,,,\nIMPLIED PRICE PER SHARE,$XX.XX,,,,,\nCurrent Stock Price,$XX.XX,,,,,\nImplied Upside\u002F(Downside),XX%,,,,,\n",[5913],{"type":48,"tag":119,"props":5914,"children":5915},{"__ignoreMap":213},[5916,5924,5932,5940,5948,5956,5963,5971,5979,5987,5994,6002,6010,6018,6026,6034,6042,6049,6057,6065,6073],{"type":48,"tag":219,"props":5917,"children":5918},{"class":221,"line":222},[5919],{"type":48,"tag":219,"props":5920,"children":5921},{},[5922],{"type":54,"value":5923},"DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal\n",{"type":48,"tag":219,"props":5925,"children":5926},{"class":221,"line":232},[5927],{"type":48,"tag":219,"props":5928,"children":5929},{},[5930],{"type":54,"value":5931},"Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,\n",{"type":48,"tag":219,"props":5933,"children":5934},{"class":221,"line":300},[5935],{"type":48,"tag":219,"props":5936,"children":5937},{},[5938],{"type":54,"value":5939},"Period,0.5,1.5,2.5,3.5,4.5,\n",{"type":48,"tag":219,"props":5941,"children":5942},{"class":221,"line":327},[5943],{"type":48,"tag":219,"props":5944,"children":5945},{},[5946],{"type":54,"value":5947},"Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,\n",{"type":48,"tag":219,"props":5949,"children":5950},{"class":221,"line":381},[5951],{"type":48,"tag":219,"props":5952,"children":5953},{},[5954],{"type":54,"value":5955},"PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,\n",{"type":48,"tag":219,"props":5957,"children":5958},{"class":221,"line":391},[5959],{"type":48,"tag":219,"props":5960,"children":5961},{},[5962],{"type":54,"value":5584},{"type":48,"tag":219,"props":5964,"children":5965},{"class":221,"line":400},[5966],{"type":48,"tag":219,"props":5967,"children":5968},{},[5969],{"type":54,"value":5970},"Terminal FCF ($M),,,,,,,XXX\n",{"type":48,"tag":219,"props":5972,"children":5973},{"class":221,"line":474},[5974],{"type":48,"tag":219,"props":5975,"children":5976},{},[5977],{"type":54,"value":5978},"Terminal Value ($M),,,,,,,XXX\n",{"type":48,"tag":219,"props":5980,"children":5981},{"class":221,"line":526},[5982],{"type":48,"tag":219,"props":5983,"children":5984},{},[5985],{"type":54,"value":5986},"PV Terminal Value ($M),,,,,,,XXX\n",{"type":48,"tag":219,"props":5988,"children":5989},{"class":221,"line":550},[5990],{"type":48,"tag":219,"props":5991,"children":5992},{},[5993],{"type":54,"value":5584},{"type":48,"tag":219,"props":5995,"children":5996},{"class":221,"line":607},[5997],{"type":48,"tag":219,"props":5998,"children":5999},{},[6000],{"type":54,"value":6001},"Valuation Summary ($M),,,,,,\n",{"type":48,"tag":219,"props":6003,"children":6004},{"class":221,"line":655},[6005],{"type":48,"tag":219,"props":6006,"children":6007},{},[6008],{"type":54,"value":6009},"Sum of PV FCFs,XXX,,,,,\n",{"type":48,"tag":219,"props":6011,"children":6012},{"class":221,"line":2210},[6013],{"type":48,"tag":219,"props":6014,"children":6015},{},[6016],{"type":54,"value":6017},"PV Terminal Value,XXX,,,,,\n",{"type":48,"tag":219,"props":6019,"children":6020},{"class":221,"line":2219},[6021],{"type":48,"tag":219,"props":6022,"children":6023},{},[6024],{"type":54,"value":6025},"Enterprise Value,XXX,,,,,\n",{"type":48,"tag":219,"props":6027,"children":6028},{"class":221,"line":2729},[6029],{"type":48,"tag":219,"props":6030,"children":6031},{},[6032],{"type":54,"value":6033},"(-) Net Debt,(XX),,,,,\n",{"type":48,"tag":219,"props":6035,"children":6036},{"class":221,"line":2738},[6037],{"type":48,"tag":219,"props":6038,"children":6039},{},[6040],{"type":54,"value":6041},"Equity Value,XXX,,,,,\n",{"type":48,"tag":219,"props":6043,"children":6044},{"class":221,"line":2746},[6045],{"type":48,"tag":219,"props":6046,"children":6047},{},[6048],{"type":54,"value":5584},{"type":48,"tag":219,"props":6050,"children":6051},{"class":221,"line":2754},[6052],{"type":48,"tag":219,"props":6053,"children":6054},{},[6055],{"type":54,"value":6056},"Shares Outstanding (M),XX.X,,,,,\n",{"type":48,"tag":219,"props":6058,"children":6059},{"class":221,"line":2762},[6060],{"type":48,"tag":219,"props":6061,"children":6062},{},[6063],{"type":54,"value":6064},"IMPLIED PRICE PER SHARE,$XX.XX,,,,,\n",{"type":48,"tag":219,"props":6066,"children":6067},{"class":221,"line":2770},[6068],{"type":48,"tag":219,"props":6069,"children":6070},{},[6071],{"type":54,"value":6072},"Current Stock Price,$XX.XX,,,,,\n",{"type":48,"tag":219,"props":6074,"children":6076},{"class":221,"line":6075},21,[6077],{"type":48,"tag":219,"props":6078,"children":6079},{},[6080],{"type":54,"value":6081},"Implied Upside\u002F(Downside),XX%,,,,,\n",{"type":48,"tag":1038,"props":6083,"children":6085},{"id":6084},"wacc-sheet-structure",[6086],{"type":54,"value":6087},"WACC Sheet Structure",{"type":48,"tag":208,"props":6089,"children":6091},{"className":1921,"code":6090,"language":1923,"meta":213,"style":213},"COST OF EQUITY CALCULATION,,\nRisk-Free Rate (10Y Treasury),X.XX%,[Yellow input]\nBeta (5Y monthly),X.XX,[Yellow input]\nEquity Risk Premium,X.XX%,[Yellow input]\nCost of Equity,X.XX%,[Calculated blue]\n,,\nCOST OF DEBT CALCULATION,,\nCredit Rating,AA-,[Yellow input]\nPre-Tax Cost of Debt,X.XX%,[Yellow input]\nTax Rate,XX.X%,[Link to DCF sheet]\nAfter-Tax Cost of Debt,X.XX%,[Calculated blue]\n,,\nCAPITAL STRUCTURE,,\nCurrent Stock Price,$XX.XX,[Link to DCF]\nShares Outstanding (M),XX.X,[Link to DCF]\nMarket Capitalization ($M),\"X,XXX\",[Calculated]\n,,\nTotal Debt ($M),XXX,[Yellow input]\nCash & Equivalents ($M),XXX,[Yellow input]\nNet Debt ($M),XXX,[Calculated]\n,,\nEnterprise Value ($M),\"X,XXX\",[Calculated]\n,,\nWACC CALCULATION,Weight,Cost,Contribution\nEquity,XX.X%,X.X%,X.XX%\nDebt,XX.X%,X.X%,X.XX%\n,,\nWEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]\n",[6092],{"type":48,"tag":119,"props":6093,"children":6094},{"__ignoreMap":213},[6095,6103,6111,6119,6127,6135,6142,6150,6158,6166,6174,6182,6189,6197,6205,6213,6221,6228,6236,6244,6252,6259,6268,6276,6285,6294,6303,6311],{"type":48,"tag":219,"props":6096,"children":6097},{"class":221,"line":222},[6098],{"type":48,"tag":219,"props":6099,"children":6100},{},[6101],{"type":54,"value":6102},"COST OF EQUITY CALCULATION,,\n",{"type":48,"tag":219,"props":6104,"children":6105},{"class":221,"line":232},[6106],{"type":48,"tag":219,"props":6107,"children":6108},{},[6109],{"type":54,"value":6110},"Risk-Free Rate (10Y Treasury),X.XX%,[Yellow input]\n",{"type":48,"tag":219,"props":6112,"children":6113},{"class":221,"line":300},[6114],{"type":48,"tag":219,"props":6115,"children":6116},{},[6117],{"type":54,"value":6118},"Beta (5Y monthly),X.XX,[Yellow input]\n",{"type":48,"tag":219,"props":6120,"children":6121},{"class":221,"line":327},[6122],{"type":48,"tag":219,"props":6123,"children":6124},{},[6125],{"type":54,"value":6126},"Equity Risk Premium,X.XX%,[Yellow input]\n",{"type":48,"tag":219,"props":6128,"children":6129},{"class":221,"line":381},[6130],{"type":48,"tag":219,"props":6131,"children":6132},{},[6133],{"type":54,"value":6134},"Cost of Equity,X.XX%,[Calculated blue]\n",{"type":48,"tag":219,"props":6136,"children":6137},{"class":221,"line":391},[6138],{"type":48,"tag":219,"props":6139,"children":6140},{},[6141],{"type":54,"value":1983},{"type":48,"tag":219,"props":6143,"children":6144},{"class":221,"line":400},[6145],{"type":48,"tag":219,"props":6146,"children":6147},{},[6148],{"type":54,"value":6149},"COST OF DEBT CALCULATION,,\n",{"type":48,"tag":219,"props":6151,"children":6152},{"class":221,"line":474},[6153],{"type":48,"tag":219,"props":6154,"children":6155},{},[6156],{"type":54,"value":6157},"Credit Rating,AA-,[Yellow input]\n",{"type":48,"tag":219,"props":6159,"children":6160},{"class":221,"line":526},[6161],{"type":48,"tag":219,"props":6162,"children":6163},{},[6164],{"type":54,"value":6165},"Pre-Tax Cost of Debt,X.XX%,[Yellow input]\n",{"type":48,"tag":219,"props":6167,"children":6168},{"class":221,"line":550},[6169],{"type":48,"tag":219,"props":6170,"children":6171},{},[6172],{"type":54,"value":6173},"Tax Rate,XX.X%,[Link to DCF sheet]\n",{"type":48,"tag":219,"props":6175,"children":6176},{"class":221,"line":607},[6177],{"type":48,"tag":219,"props":6178,"children":6179},{},[6180],{"type":54,"value":6181},"After-Tax Cost of Debt,X.XX%,[Calculated blue]\n",{"type":48,"tag":219,"props":6183,"children":6184},{"class":221,"line":655},[6185],{"type":48,"tag":219,"props":6186,"children":6187},{},[6188],{"type":54,"value":1983},{"type":48,"tag":219,"props":6190,"children":6191},{"class":221,"line":2210},[6192],{"type":48,"tag":219,"props":6193,"children":6194},{},[6195],{"type":54,"value":6196},"CAPITAL STRUCTURE,,\n",{"type":48,"tag":219,"props":6198,"children":6199},{"class":221,"line":2219},[6200],{"type":48,"tag":219,"props":6201,"children":6202},{},[6203],{"type":54,"value":6204},"Current Stock Price,$XX.XX,[Link to DCF]\n",{"type":48,"tag":219,"props":6206,"children":6207},{"class":221,"line":2729},[6208],{"type":48,"tag":219,"props":6209,"children":6210},{},[6211],{"type":54,"value":6212},"Shares Outstanding (M),XX.X,[Link to DCF]\n",{"type":48,"tag":219,"props":6214,"children":6215},{"class":221,"line":2738},[6216],{"type":48,"tag":219,"props":6217,"children":6218},{},[6219],{"type":54,"value":6220},"Market Capitalization ($M),\"X,XXX\",[Calculated]\n",{"type":48,"tag":219,"props":6222,"children":6223},{"class":221,"line":2746},[6224],{"type":48,"tag":219,"props":6225,"children":6226},{},[6227],{"type":54,"value":1983},{"type":48,"tag":219,"props":6229,"children":6230},{"class":221,"line":2754},[6231],{"type":48,"tag":219,"props":6232,"children":6233},{},[6234],{"type":54,"value":6235},"Total Debt ($M),XXX,[Yellow input]\n",{"type":48,"tag":219,"props":6237,"children":6238},{"class":221,"line":2762},[6239],{"type":48,"tag":219,"props":6240,"children":6241},{},[6242],{"type":54,"value":6243},"Cash & Equivalents ($M),XXX,[Yellow input]\n",{"type":48,"tag":219,"props":6245,"children":6246},{"class":221,"line":2770},[6247],{"type":48,"tag":219,"props":6248,"children":6249},{},[6250],{"type":54,"value":6251},"Net Debt ($M),XXX,[Calculated]\n",{"type":48,"tag":219,"props":6253,"children":6254},{"class":221,"line":6075},[6255],{"type":48,"tag":219,"props":6256,"children":6257},{},[6258],{"type":54,"value":1983},{"type":48,"tag":219,"props":6260,"children":6262},{"class":221,"line":6261},22,[6263],{"type":48,"tag":219,"props":6264,"children":6265},{},[6266],{"type":54,"value":6267},"Enterprise Value ($M),\"X,XXX\",[Calculated]\n",{"type":48,"tag":219,"props":6269,"children":6271},{"class":221,"line":6270},23,[6272],{"type":48,"tag":219,"props":6273,"children":6274},{},[6275],{"type":54,"value":1983},{"type":48,"tag":219,"props":6277,"children":6279},{"class":221,"line":6278},24,[6280],{"type":48,"tag":219,"props":6281,"children":6282},{},[6283],{"type":54,"value":6284},"WACC CALCULATION,Weight,Cost,Contribution\n",{"type":48,"tag":219,"props":6286,"children":6288},{"class":221,"line":6287},25,[6289],{"type":48,"tag":219,"props":6290,"children":6291},{},[6292],{"type":54,"value":6293},"Equity,XX.X%,X.X%,X.XX%\n",{"type":48,"tag":219,"props":6295,"children":6297},{"class":221,"line":6296},26,[6298],{"type":48,"tag":219,"props":6299,"children":6300},{},[6301],{"type":54,"value":6302},"Debt,XX.X%,X.X%,X.XX%\n",{"type":48,"tag":219,"props":6304,"children":6306},{"class":221,"line":6305},27,[6307],{"type":48,"tag":219,"props":6308,"children":6309},{},[6310],{"type":54,"value":1983},{"type":48,"tag":219,"props":6312,"children":6314},{"class":221,"line":6313},28,[6315],{"type":48,"tag":219,"props":6316,"children":6317},{},[6318],{"type":54,"value":6319},"WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]\n",{"type":48,"tag":64,"props":6321,"children":6322},{},[6323],{"type":48,"tag":100,"props":6324,"children":6325},{},[6326],{"type":54,"value":6327},"Key WACC Formulas:",{"type":48,"tag":208,"props":6329,"children":6332},{"className":6330,"code":6331,"language":54},[1199],"Market Cap = Price × Shares\nNet Debt = Total Debt - Cash\nEnterprise Value = Market Cap + Net Debt\nEquity Weight = Market Cap \u002F EV\nDebt Weight = Net Debt \u002F EV\nWACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)\n",[6333],{"type":48,"tag":119,"props":6334,"children":6335},{"__ignoreMap":213},[6336],{"type":54,"value":6331},{"type":48,"tag":1038,"props":6338,"children":6340},{"id":6339},"sensitivity-analysis-bottom-of-dcf-sheet",[6341],{"type":54,"value":6342},"Sensitivity Analysis (Bottom of DCF Sheet)",{"type":48,"tag":64,"props":6344,"children":6345},{},[6346,6351],{"type":48,"tag":100,"props":6347,"children":6348},{},[6349],{"type":54,"value":6350},"TERMINOLOGY REMINDER",{"type":54,"value":6352},": \"Sensitivity tables\" = simple 2D grids with row headers, column headers, and formulas in each data cell. NOT Excel's \"Data Table\" feature (Data → What-If Analysis → Data Table). You will use openpyxl to write regular Excel formulas into each cell.",{"type":48,"tag":64,"props":6354,"children":6355},{},[6356,6361],{"type":48,"tag":100,"props":6357,"children":6358},{},[6359],{"type":54,"value":6360},"Location",{"type":54,"value":6362},": Rows 87+ on DCF sheet (NOT a separate sheet)",{"type":48,"tag":64,"props":6364,"children":6365},{},[6366],{"type":48,"tag":100,"props":6367,"children":6368},{},[6369],{"type":54,"value":6370},"Three sensitivity tables, vertically stacked:",{"type":48,"tag":1058,"props":6372,"children":6373},{},[6374,6383,6392],{"type":48,"tag":80,"props":6375,"children":6376},{},[6377,6381],{"type":48,"tag":100,"props":6378,"children":6379},{},[6380],{"type":54,"value":2044},{"type":54,"value":6382}," (rows 87-100) - 5x5 grid = 25 cells with formulas",{"type":48,"tag":80,"props":6384,"children":6385},{},[6386,6390],{"type":48,"tag":100,"props":6387,"children":6388},{},[6389],{"type":54,"value":2054},{"type":54,"value":6391}," (rows 102-115) - 5x5 grid = 25 cells with formulas",{"type":48,"tag":80,"props":6393,"children":6394},{},[6395,6399],{"type":48,"tag":100,"props":6396,"children":6397},{},[6398],{"type":54,"value":2064},{"type":54,"value":6400}," (rows 117-130) - 5x5 grid = 25 cells with formulas",{"type":48,"tag":64,"props":6402,"children":6403},{},[6404,6409],{"type":48,"tag":100,"props":6405,"children":6406},{},[6407],{"type":54,"value":6408},"Total formulas to write: 75",{"type":54,"value":6410}," (this is required, not optional)",{"type":48,"tag":64,"props":6412,"children":6413},{},[6414,6418],{"type":48,"tag":100,"props":6415,"children":6416},{},[6417],{"type":54,"value":4299},{"type":54,"value":6419},": All sensitivity table cells must be populated programmatically with formulas using openpyxl. DO NOT use linear approximation shortcuts. DO NOT leave placeholder text or notes about manual steps. DO NOT rationalize leaving cells empty because \"it's complex\" - use a Python loop to generate the formulas.",{"type":48,"tag":64,"props":6421,"children":6422},{},[6423],{"type":48,"tag":100,"props":6424,"children":6425},{},[6426],{"type":54,"value":6427},"Table Setup:",{"type":48,"tag":1058,"props":6429,"children":6430},{},[6431,6436,6464,6469,6474,6479],{"type":48,"tag":80,"props":6432,"children":6433},{},[6434],{"type":54,"value":6435},"Create table structure with row\u002Fcolumn headers (the assumption values to test)",{"type":48,"tag":80,"props":6437,"children":6438},{},[6439,6441],{"type":54,"value":6440},"Populate EVERY data cell with a formula that:\n",{"type":48,"tag":76,"props":6442,"children":6443},{},[6444,6449,6454,6459],{"type":48,"tag":80,"props":6445,"children":6446},{},[6447],{"type":54,"value":6448},"Uses the row header value (e.g., WACC = 9.0%)",{"type":48,"tag":80,"props":6450,"children":6451},{},[6452],{"type":54,"value":6453},"Uses the column header value (e.g., Terminal Growth = 3.0%)",{"type":48,"tag":80,"props":6455,"children":6456},{},[6457],{"type":54,"value":6458},"Recalculates the full DCF with those specific assumptions",{"type":48,"tag":80,"props":6460,"children":6461},{},[6462],{"type":54,"value":6463},"Returns the implied share price for that scenario",{"type":48,"tag":80,"props":6465,"children":6466},{},[6467],{"type":54,"value":6468},"All cells must contain working formulas when delivered",{"type":48,"tag":80,"props":6470,"children":6471},{},[6472],{"type":54,"value":6473},"Format cells with conditional formatting: Green scale for higher values, red scale for lower values",{"type":48,"tag":80,"props":6475,"children":6476},{},[6477],{"type":54,"value":6478},"Bold the base case cell",{"type":48,"tag":80,"props":6480,"children":6481},{},[6482],{"type":54,"value":6483},"Leave 1-2 blank rows between tables",{"type":48,"tag":64,"props":6485,"children":6486},{},[6487,6492],{"type":48,"tag":100,"props":6488,"children":6489},{},[6490],{"type":54,"value":6491},"No manual intervention required",{"type":54,"value":6493}," - the sensitivity tables must be fully functional when the user opens the file.",{"type":48,"tag":57,"props":6495,"children":6497},{"id":6496},"case-selector-implementation",[6498],{"type":54,"value":6499},"Case Selector Implementation",{"type":48,"tag":64,"props":6501,"children":6502},{},[6503],{"type":48,"tag":100,"props":6504,"children":6505},{},[6506],{"type":54,"value":6507},"Three-Case Framework:",{"type":48,"tag":1038,"props":6509,"children":6511},{"id":6510},"bear-case",[6512],{"type":54,"value":6513},"Bear Case",{"type":48,"tag":76,"props":6515,"children":6516},{},[6517,6522,6527,6532,6537],{"type":48,"tag":80,"props":6518,"children":6519},{},[6520],{"type":54,"value":6521},"Conservative revenue growth (low end of historical range)",{"type":48,"tag":80,"props":6523,"children":6524},{},[6525],{"type":54,"value":6526},"Margin compression or no expansion",{"type":48,"tag":80,"props":6528,"children":6529},{},[6530],{"type":54,"value":6531},"Higher WACC (risk premium increase)",{"type":48,"tag":80,"props":6533,"children":6534},{},[6535],{"type":54,"value":6536},"Lower terminal growth rate",{"type":48,"tag":80,"props":6538,"children":6539},{},[6540],{"type":54,"value":6541},"Higher CapEx assumptions",{"type":48,"tag":1038,"props":6543,"children":6545},{"id":6544},"base-case",[6546],{"type":54,"value":6547},"Base Case",{"type":48,"tag":76,"props":6549,"children":6550},{},[6551,6556,6561,6566,6571],{"type":48,"tag":80,"props":6552,"children":6553},{},[6554],{"type":54,"value":6555},"Consensus or management guidance revenue growth",{"type":48,"tag":80,"props":6557,"children":6558},{},[6559],{"type":54,"value":6560},"Moderate margin expansion based on operating leverage",{"type":48,"tag":80,"props":6562,"children":6563},{},[6564],{"type":54,"value":6565},"Current market-implied WACC",{"type":48,"tag":80,"props":6567,"children":6568},{},[6569],{"type":54,"value":6570},"GDP-aligned terminal growth (2.5-3.0%)",{"type":48,"tag":80,"props":6572,"children":6573},{},[6574],{"type":54,"value":6575},"Standard CapEx assumptions",{"type":48,"tag":1038,"props":6577,"children":6579},{"id":6578},"bull-case",[6580],{"type":54,"value":6581},"Bull Case",{"type":48,"tag":76,"props":6583,"children":6584},{},[6585,6590,6595,6600,6605],{"type":48,"tag":80,"props":6586,"children":6587},{},[6588],{"type":54,"value":6589},"Optimistic revenue growth (high end of projections)",{"type":48,"tag":80,"props":6591,"children":6592},{},[6593],{"type":54,"value":6594},"Significant margin expansion",{"type":48,"tag":80,"props":6596,"children":6597},{},[6598],{"type":54,"value":6599},"Lower WACC (reduced risk premium)",{"type":48,"tag":80,"props":6601,"children":6602},{},[6603],{"type":54,"value":6604},"Higher terminal growth (3.5-5.0%)",{"type":48,"tag":80,"props":6606,"children":6607},{},[6608],{"type":54,"value":6609},"Reduced CapEx intensity",{"type":48,"tag":64,"props":6611,"children":6612},{},[6613],{"type":48,"tag":100,"props":6614,"children":6615},{},[6616],{"type":54,"value":6617},"Formula Implementation:",{"type":48,"tag":64,"props":6619,"children":6620},{},[6621,6626],{"type":48,"tag":100,"props":6622,"children":6623},{},[6624],{"type":54,"value":6625},"DO NOT use nested IF formulas scattered throughout.",{"type":54,"value":6627}," Instead, create a consolidation column that uses INDEX or OFFSET formulas to pull from the appropriate scenario block.",{"type":48,"tag":64,"props":6629,"children":6630},{},[6631,6636,6641,6643,6649,6651,6657,6659,6665],{"type":48,"tag":100,"props":6632,"children":6633},{},[6634],{"type":54,"value":6635},"Recommended pattern (using INDEX):",{"type":48,"tag":119,"props":6637,"children":6639},{"className":6638},[],[6640],{"type":54,"value":2280},{"type":54,"value":6642}," where ",{"type":48,"tag":119,"props":6644,"children":6646},{"className":6645},[],[6647],{"type":54,"value":6648},"B10:D10",{"type":54,"value":6650}," = Bear\u002FBase\u002FBull values, ",{"type":48,"tag":119,"props":6652,"children":6654},{"className":6653},[],[6655],{"type":54,"value":6656},"1",{"type":54,"value":6658}," = row offset, ",{"type":48,"tag":119,"props":6660,"children":6662},{"className":6661},[],[6663],{"type":54,"value":6664},"$B$6",{"type":54,"value":6666}," = case selector cell (1, 2, or 3)",{"type":48,"tag":64,"props":6668,"children":6669},{},[6670,6675,6677,6682],{"type":48,"tag":100,"props":6671,"children":6672},{},[6673],{"type":54,"value":6674},"Then reference the consolidation column",{"type":54,"value":6676}," in all projections:\n",{"type":48,"tag":119,"props":6678,"children":6680},{"className":6679},[],[6681],{"type":54,"value":2341},{"type":54,"value":6683}," where $E$10 is the consolidation column value for Year 1 growth.",{"type":48,"tag":64,"props":6685,"children":6686},{},[6687],{"type":54,"value":6688},"This approach centralizes scenario logic, making the model easier to audit and maintain.",{"type":48,"tag":57,"props":6690,"children":6692},{"id":6691},"deliverables-structure",[6693],{"type":54,"value":6694},"Deliverables Structure",{"type":48,"tag":64,"props":6696,"children":6697},{},[6698,6703,6704],{"type":48,"tag":100,"props":6699,"children":6700},{},[6701],{"type":54,"value":6702},"File naming",{"type":54,"value":5258},{"type":48,"tag":119,"props":6705,"children":6707},{"className":6706},[],[6708],{"type":54,"value":6709},"[Ticker]_DCF_Model_[Date].xlsx",{"type":48,"tag":64,"props":6711,"children":6712},{},[6713,6718],{"type":48,"tag":100,"props":6714,"children":6715},{},[6716],{"type":54,"value":6717},"Two sheets",{"type":54,"value":4269},{"type":48,"tag":1058,"props":6720,"children":6721},{},[6722,6731],{"type":48,"tag":80,"props":6723,"children":6724},{},[6725,6729],{"type":48,"tag":100,"props":6726,"children":6727},{},[6728],{"type":54,"value":30},{"type":54,"value":6730}," - Complete model with Bear\u002FBase\u002FBull cases + three sensitivity tables at bottom (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)",{"type":48,"tag":80,"props":6732,"children":6733},{},[6734,6738],{"type":48,"tag":100,"props":6735,"children":6736},{},[6737],{"type":54,"value":4289},{"type":54,"value":4291},{"type":48,"tag":64,"props":6740,"children":6741},{},[6742,6747],{"type":48,"tag":100,"props":6743,"children":6744},{},[6745],{"type":54,"value":6746},"Key features",{"type":54,"value":6748},": Case selector (1\u002F2\u002F3), consolidation column with INDEX\u002FOFFSET formulas, color-coded cells, cell comments on all inputs, professional borders",{"type":48,"tag":57,"props":6750,"children":6752},{"id":6751},"best-practices",[6753],{"type":54,"value":6754},"Best Practices",{"type":48,"tag":1038,"props":6756,"children":6758},{"id":6757},"model-construction",[6759],{"type":54,"value":6760},"Model Construction",{"type":48,"tag":1058,"props":6762,"children":6763},{},[6764,6774,6784,6794,6804],{"type":48,"tag":80,"props":6765,"children":6766},{},[6767,6772],{"type":48,"tag":100,"props":6768,"children":6769},{},[6770],{"type":54,"value":6771},"Build incrementally",{"type":54,"value":6773},": Complete each section before moving to next",{"type":48,"tag":80,"props":6775,"children":6776},{},[6777,6782],{"type":48,"tag":100,"props":6778,"children":6779},{},[6780],{"type":54,"value":6781},"Test as building",{"type":54,"value":6783},": Enter sample numbers to verify formulas",{"type":48,"tag":80,"props":6785,"children":6786},{},[6787,6792],{"type":48,"tag":100,"props":6788,"children":6789},{},[6790],{"type":54,"value":6791},"Use consistent structure",{"type":54,"value":6793},": Similar calculations follow similar patterns",{"type":48,"tag":80,"props":6795,"children":6796},{},[6797,6802],{"type":48,"tag":100,"props":6798,"children":6799},{},[6800],{"type":54,"value":6801},"Comment complex formulas",{"type":54,"value":6803},": Add notes for unusual calculations",{"type":48,"tag":80,"props":6805,"children":6806},{},[6807,6812],{"type":48,"tag":100,"props":6808,"children":6809},{},[6810],{"type":54,"value":6811},"Build in checks",{"type":54,"value":6813},": Sum checks and balance checks where applicable",{"type":48,"tag":1038,"props":6815,"children":6817},{"id":6816},"documentation",[6818],{"type":54,"value":6819},"Documentation",{"type":48,"tag":1058,"props":6821,"children":6822},{},[6823,6833,6843,6853],{"type":48,"tag":80,"props":6824,"children":6825},{},[6826,6831],{"type":48,"tag":100,"props":6827,"children":6828},{},[6829],{"type":54,"value":6830},"Document all assumptions",{"type":54,"value":6832},": Explain reasoning behind key inputs",{"type":48,"tag":80,"props":6834,"children":6835},{},[6836,6841],{"type":48,"tag":100,"props":6837,"children":6838},{},[6839],{"type":54,"value":6840},"Cite data sources",{"type":54,"value":6842},": Note where each data point came from",{"type":48,"tag":80,"props":6844,"children":6845},{},[6846,6851],{"type":48,"tag":100,"props":6847,"children":6848},{},[6849],{"type":54,"value":6850},"Explain methodology",{"type":54,"value":6852},": Describe any non-standard approaches",{"type":48,"tag":80,"props":6854,"children":6855},{},[6856,6861],{"type":48,"tag":100,"props":6857,"children":6858},{},[6859],{"type":54,"value":6860},"Flag uncertainties",{"type":54,"value":6862},": Highlight areas with limited visibility",{"type":48,"tag":1038,"props":6864,"children":6866},{"id":6865},"quality-control",[6867],{"type":54,"value":6868},"Quality Control",{"type":48,"tag":1058,"props":6870,"children":6871},{},[6872,6882,6892,6902],{"type":48,"tag":80,"props":6873,"children":6874},{},[6875,6880],{"type":48,"tag":100,"props":6876,"children":6877},{},[6878],{"type":54,"value":6879},"Cross-check calculations",{"type":54,"value":6881},": Verify math in multiple ways",{"type":48,"tag":80,"props":6883,"children":6884},{},[6885,6890],{"type":48,"tag":100,"props":6886,"children":6887},{},[6888],{"type":54,"value":6889},"Stress test assumptions",{"type":54,"value":6891},": Run sensitivity to ensure model is robust",{"type":48,"tag":80,"props":6893,"children":6894},{},[6895,6900],{"type":48,"tag":100,"props":6896,"children":6897},{},[6898],{"type":54,"value":6899},"Peer review",{"type":54,"value":6901},": Have someone else check formulas",{"type":48,"tag":80,"props":6903,"children":6904},{},[6905,6910],{"type":48,"tag":100,"props":6906,"children":6907},{},[6908],{"type":54,"value":6909},"Version control",{"type":54,"value":6911},": Save versions as work progresses",{"type":48,"tag":57,"props":6913,"children":6915},{"id":6914},"common-variations",[6916],{"type":54,"value":6917},"Common Variations",{"type":48,"tag":1038,"props":6919,"children":6921},{"id":6920},"high-growth-technology-companies",[6922],{"type":54,"value":6923},"High-Growth Technology Companies",{"type":48,"tag":76,"props":6925,"children":6926},{},[6927,6932,6937,6942,6947],{"type":48,"tag":80,"props":6928,"children":6929},{},[6930],{"type":54,"value":6931},"Longer projection period (7-10 years)",{"type":48,"tag":80,"props":6933,"children":6934},{},[6935],{"type":54,"value":6936},"Higher initial growth rates (20-30%)",{"type":48,"tag":80,"props":6938,"children":6939},{},[6940],{"type":54,"value":6941},"Significant margin expansion over time",{"type":48,"tag":80,"props":6943,"children":6944},{},[6945],{"type":54,"value":6946},"Higher WACC (12-15%)",{"type":48,"tag":80,"props":6948,"children":6949},{},[6950],{"type":54,"value":6951},"Model unit economics (users, ARPU, etc.)",{"type":48,"tag":1038,"props":6953,"children":6955},{"id":6954},"maturestable-companies",[6956],{"type":54,"value":6957},"Mature\u002FStable Companies",{"type":48,"tag":76,"props":6959,"children":6960},{},[6961,6966,6971,6976,6981],{"type":48,"tag":80,"props":6962,"children":6963},{},[6964],{"type":54,"value":6965},"Shorter projection period (3-5 years)",{"type":48,"tag":80,"props":6967,"children":6968},{},[6969],{"type":54,"value":6970},"Modest growth rates (GDP +1-3%)",{"type":48,"tag":80,"props":6972,"children":6973},{},[6974],{"type":54,"value":6975},"Stable margins",{"type":48,"tag":80,"props":6977,"children":6978},{},[6979],{"type":54,"value":6980},"Lower WACC (7-9%)",{"type":48,"tag":80,"props":6982,"children":6983},{},[6984],{"type":54,"value":6985},"Focus on cash generation and capital allocation",{"type":48,"tag":1038,"props":6987,"children":6989},{"id":6988},"cyclical-companies",[6990],{"type":54,"value":6991},"Cyclical Companies",{"type":48,"tag":76,"props":6993,"children":6994},{},[6995,7000,7005,7010],{"type":48,"tag":80,"props":6996,"children":6997},{},[6998],{"type":54,"value":6999},"Model through economic cycle",{"type":48,"tag":80,"props":7001,"children":7002},{},[7003],{"type":54,"value":7004},"Normalize margins at mid-cycle",{"type":48,"tag":80,"props":7006,"children":7007},{},[7008],{"type":54,"value":7009},"Consider trough and peak scenarios",{"type":48,"tag":80,"props":7011,"children":7012},{},[7013],{"type":54,"value":7014},"Adjust beta for cyclicality",{"type":48,"tag":1038,"props":7016,"children":7018},{"id":7017},"multi-segment-companies",[7019],{"type":54,"value":7020},"Multi-Segment Companies",{"type":48,"tag":76,"props":7022,"children":7023},{},[7024,7029,7034,7039],{"type":48,"tag":80,"props":7025,"children":7026},{},[7027],{"type":54,"value":7028},"Separate DCFs for each business unit",{"type":48,"tag":80,"props":7030,"children":7031},{},[7032],{"type":54,"value":7033},"Different growth rates and margins by segment",{"type":48,"tag":80,"props":7035,"children":7036},{},[7037],{"type":54,"value":7038},"Sum-of-parts valuation",{"type":48,"tag":80,"props":7040,"children":7041},{},[7042],{"type":54,"value":7043},"Consider synergies",{"type":48,"tag":57,"props":7045,"children":7047},{"id":7046},"troubleshooting",[7048],{"type":54,"value":7049},"Troubleshooting",{"type":48,"tag":64,"props":7051,"children":7052},{},[7053],{"type":48,"tag":100,"props":7054,"children":7055},{},[7056,7058,7065],{"type":54,"value":7057},"If you encounter errors or unreasonable results, read ",{"type":48,"tag":7059,"props":7060,"children":7062},"a",{"href":7061},".\u002FTROUBLESHOOTING.md",[7063],{"type":54,"value":7064},"TROUBLESHOOTING.md",{"type":54,"value":7066}," for detailed debugging guidance.",{"type":48,"tag":57,"props":7068,"children":7070},{"id":7069},"workflow-integration",[7071],{"type":54,"value":7072},"Workflow Integration",{"type":48,"tag":1038,"props":7074,"children":7076},{"id":7075},"at-start-of-dcf-build",[7077],{"type":54,"value":7078},"At Start of DCF Build",{"type":48,"tag":1058,"props":7080,"children":7081},{},[7082,7109,7136],{"type":48,"tag":80,"props":7083,"children":7084},{},[7085,7090,7091],{"type":48,"tag":100,"props":7086,"children":7087},{},[7088],{"type":54,"value":7089},"Gather market data",{"type":54,"value":4269},{"type":48,"tag":76,"props":7092,"children":7093},{},[7094,7099,7104],{"type":48,"tag":80,"props":7095,"children":7096},{},[7097],{"type":54,"value":7098},"Check for available MCP servers for current market data",{"type":48,"tag":80,"props":7100,"children":7101},{},[7102],{"type":54,"value":7103},"Use web search\u002Ffetch for stock prices, beta, and other market metrics",{"type":48,"tag":80,"props":7105,"children":7106},{},[7107],{"type":54,"value":7108},"Request from user if specific data is needed",{"type":48,"tag":80,"props":7110,"children":7111},{},[7112,7117,7118],{"type":48,"tag":100,"props":7113,"children":7114},{},[7115],{"type":54,"value":7116},"Gather historical financials",{"type":54,"value":4269},{"type":48,"tag":76,"props":7119,"children":7120},{},[7121,7126,7131],{"type":48,"tag":80,"props":7122,"children":7123},{},[7124],{"type":54,"value":7125},"Check for available MCP servers (Daloopa, etc.)",{"type":48,"tag":80,"props":7127,"children":7128},{},[7129],{"type":54,"value":7130},"Request from user if not available via MCP",{"type":48,"tag":80,"props":7132,"children":7133},{},[7134],{"type":54,"value":7135},"Manual extraction from 10-Ks if necessary",{"type":48,"tag":80,"props":7137,"children":7138},{},[7139,7144],{"type":48,"tag":100,"props":7140,"children":7141},{},[7142],{"type":54,"value":7143},"Begin model construction",{"type":54,"value":7145}," using the DCF methodology detailed in this skill",{"type":48,"tag":1038,"props":7147,"children":7149},{"id":7148},"during-model-construction",[7150],{"type":54,"value":7151},"During Model Construction",{"type":48,"tag":1058,"props":7153,"children":7154},{},[7155,7165,7175],{"type":48,"tag":80,"props":7156,"children":7157},{},[7158,7163],{"type":48,"tag":100,"props":7159,"children":7160},{},[7161],{"type":54,"value":7162},"Build Excel model",{"type":54,"value":7164}," using openpyxl with formulas (not hardcoded values)",{"type":48,"tag":80,"props":7166,"children":7167},{},[7168,7173],{"type":48,"tag":100,"props":7169,"children":7170},{},[7171],{"type":54,"value":7172},"Follow xlsx skill conventions",{"type":54,"value":7174}," for formula construction and formatting",{"type":48,"tag":80,"props":7176,"children":7177},{},[7178,7183],{"type":48,"tag":100,"props":7179,"children":7180},{},[7181],{"type":54,"value":7182},"Apply fill colors only if requested",{"type":54,"value":7184}," by user or if specific brand guidelines are provided",{"type":48,"tag":1038,"props":7186,"children":7188},{"id":7187},"before-delivering-model-mandatory",[7189],{"type":54,"value":7190},"Before Delivering Model (MANDATORY)",{"type":48,"tag":1058,"props":7192,"children":7193},{},[7194,7236,7251,7314,7324,7351],{"type":48,"tag":80,"props":7195,"children":7196},{},[7197,7202,7203],{"type":48,"tag":100,"props":7198,"children":7199},{},[7200],{"type":54,"value":7201},"Verify structure",{"type":54,"value":4269},{"type":48,"tag":76,"props":7204,"children":7205},{},[7206,7211,7216,7221,7226,7231],{"type":48,"tag":80,"props":7207,"children":7208},{},[7209],{"type":54,"value":7210},"Scenario blocks for Bear\u002FBase\u002FBull with assumptions across projection years",{"type":48,"tag":80,"props":7212,"children":7213},{},[7214],{"type":54,"value":7215},"Case selector functional with formulas referencing correct scenario blocks",{"type":48,"tag":80,"props":7217,"children":7218},{},[7219],{"type":54,"value":7220},"Sensitivity tables at bottom of DCF sheet (not separate sheet)",{"type":48,"tag":80,"props":7222,"children":7223},{},[7224],{"type":54,"value":7225},"Font colors: Blue inputs, black formulas, green sheet links",{"type":48,"tag":80,"props":7227,"children":7228},{},[7229],{"type":54,"value":7230},"Cell comments on ALL hardcoded inputs",{"type":48,"tag":80,"props":7232,"children":7233},{},[7234],{"type":54,"value":7235},"Professional borders around major sections",{"type":48,"tag":80,"props":7237,"children":7238},{},[7239,7244,7246],{"type":48,"tag":100,"props":7240,"children":7241},{},[7242],{"type":54,"value":7243},"Recalculate formulas",{"type":54,"value":7245},": Run ",{"type":48,"tag":119,"props":7247,"children":7249},{"className":7248},[],[7250],{"type":54,"value":981},{"type":48,"tag":80,"props":7252,"children":7253},{},[7254,7259,7260],{"type":48,"tag":100,"props":7255,"children":7256},{},[7257],{"type":54,"value":7258},"Check output",{"type":54,"value":4269},{"type":48,"tag":76,"props":7261,"children":7262},{},[7263,7283],{"type":48,"tag":80,"props":7264,"children":7265},{},[7266,7268,7273,7275,7281],{"type":54,"value":7267},"If ",{"type":48,"tag":119,"props":7269,"children":7271},{"className":7270},[],[7272],{"type":54,"value":4456},{"type":54,"value":7274}," is ",{"type":48,"tag":119,"props":7276,"children":7278},{"className":7277},[],[7279],{"type":54,"value":7280},"\"success\"",{"type":54,"value":7282}," → Continue to step 4",{"type":48,"tag":80,"props":7284,"children":7285},{},[7286,7287,7292,7293,7299,7301,7306,7308,7312],{"type":54,"value":7267},{"type":48,"tag":119,"props":7288,"children":7290},{"className":7289},[],[7291],{"type":54,"value":4456},{"type":54,"value":7274},{"type":48,"tag":119,"props":7294,"children":7296},{"className":7295},[],[7297],{"type":54,"value":7298},"\"errors_found\"",{"type":54,"value":7300}," → Check ",{"type":48,"tag":119,"props":7302,"children":7304},{"className":7303},[],[7305],{"type":54,"value":4567},{"type":54,"value":7307}," and read ",{"type":48,"tag":7059,"props":7309,"children":7310},{"href":7061},[7311],{"type":54,"value":7064},{"type":54,"value":7313}," for debugging guidance",{"type":48,"tag":80,"props":7315,"children":7316},{},[7317,7322],{"type":48,"tag":100,"props":7318,"children":7319},{},[7320],{"type":54,"value":7321},"Fix errors and re-run recalc.py",{"type":54,"value":7323}," until status is \"success\"",{"type":48,"tag":80,"props":7325,"children":7326},{},[7327,7332,7333],{"type":48,"tag":100,"props":7328,"children":7329},{},[7330],{"type":54,"value":7331},"Spot-check formulas",{"type":54,"value":4269},{"type":48,"tag":76,"props":7334,"children":7335},{},[7336,7341,7346],{"type":48,"tag":80,"props":7337,"children":7338},{},[7339],{"type":54,"value":7340},"Test one FCF formula - does it reference the correct assumption rows?",{"type":48,"tag":80,"props":7342,"children":7343},{},[7344],{"type":54,"value":7345},"Change case selector - does the consolidation column update properly?",{"type":48,"tag":80,"props":7347,"children":7348},{},[7349],{"type":54,"value":7350},"Verify revenue formulas reference consolidation column (not nested IF formulas)",{"type":48,"tag":80,"props":7352,"children":7353},{},[7354],{"type":48,"tag":100,"props":7355,"children":7356},{},[7357],{"type":54,"value":7358},"Deliver model",{"type":48,"tag":1038,"props":7360,"children":7362},{"id":7361},"available-data-sources",[7363],{"type":54,"value":7364},"Available Data Sources",{"type":48,"tag":76,"props":7366,"children":7367},{},[7368,7378,7388,7398],{"type":48,"tag":80,"props":7369,"children":7370},{},[7371,7376],{"type":48,"tag":100,"props":7372,"children":7373},{},[7374],{"type":54,"value":7375},"MCP servers",{"type":54,"value":7377},": If configured (Daloopa for historical financials)",{"type":48,"tag":80,"props":7379,"children":7380},{},[7381,7386],{"type":48,"tag":100,"props":7382,"children":7383},{},[7384],{"type":54,"value":7385},"Web search\u002Ffetch",{"type":54,"value":7387},": For current stock prices, beta, and market data",{"type":48,"tag":80,"props":7389,"children":7390},{},[7391,7396],{"type":48,"tag":100,"props":7392,"children":7393},{},[7394],{"type":54,"value":7395},"User-provided data",{"type":54,"value":7397},": Historical financials, consensus estimates",{"type":48,"tag":80,"props":7399,"children":7400},{},[7401,7406],{"type":48,"tag":100,"props":7402,"children":7403},{},[7404],{"type":54,"value":7405},"Manual extraction",{"type":54,"value":7407},": SEC EDGAR filings as fallback",{"type":48,"tag":57,"props":7409,"children":7411},{"id":7410},"final-output-checklist",[7412],{"type":54,"value":7413},"Final Output Checklist",{"type":48,"tag":64,"props":7415,"children":7416},{},[7417],{"type":54,"value":7418},"Before delivering DCF model:",{"type":48,"tag":64,"props":7420,"children":7421},{},[7422],{"type":48,"tag":100,"props":7423,"children":7424},{},[7425],{"type":54,"value":7426},"Required:",{"type":48,"tag":76,"props":7428,"children":7429},{},[7430,7441,7446,7451,7455,7460],{"type":48,"tag":80,"props":7431,"children":7432},{},[7433,7434,7439],{"type":54,"value":975},{"type":48,"tag":119,"props":7435,"children":7437},{"className":7436},[],[7438],{"type":54,"value":981},{"type":54,"value":7440}," until status is \"success\" (zero formula errors)",{"type":48,"tag":80,"props":7442,"children":7443},{},[7444],{"type":54,"value":7445},"Two sheets: DCF (with sensitivity at bottom), WACC",{"type":48,"tag":80,"props":7447,"children":7448},{},[7449],{"type":54,"value":7450},"Font colors: Blue=inputs, Black=formulas, Green=sheet links",{"type":48,"tag":80,"props":7452,"children":7453},{},[7454],{"type":54,"value":7230},{"type":48,"tag":80,"props":7456,"children":7457},{},[7458],{"type":54,"value":7459},"Sensitivity tables fully populated with formulas",{"type":48,"tag":80,"props":7461,"children":7462},{},[7463],{"type":54,"value":7235},{"type":48,"tag":64,"props":7465,"children":7466},{},[7467],{"type":48,"tag":100,"props":7468,"children":7469},{},[7470],{"type":54,"value":7471},"Validation:",{"type":48,"tag":76,"props":7473,"children":7474},{},[7475,7480,7485,7490,7495],{"type":48,"tag":80,"props":7476,"children":7477},{},[7478],{"type":54,"value":7479},"OpEx based on revenue (not gross profit)",{"type":48,"tag":80,"props":7481,"children":7482},{},[7483],{"type":54,"value":7484},"Terminal value 50-70% of EV",{"type":48,"tag":80,"props":7486,"children":7487},{},[7488],{"type":54,"value":7489},"Terminal growth \u003C WACC",{"type":48,"tag":80,"props":7491,"children":7492},{},[7493],{"type":54,"value":7494},"Tax rate 21-28%",{"type":48,"tag":80,"props":7496,"children":7497},{},[7498,7500],{"type":54,"value":7499},"File naming: ",{"type":48,"tag":119,"props":7501,"children":7503},{"className":7502},[],[7504],{"type":54,"value":6709},{"type":48,"tag":7506,"props":7507,"children":7508},"style",{},[7509],{"type":54,"value":7510},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":7512,"total":7622},[7513,7528,7545,7564,7579,7596,7606],{"slug":7514,"name":7514,"fn":7515,"description":7516,"org":7517,"tags":7518,"stars":32,"repoUrl":33,"updatedAt":7527},"3-statement-model","fill out 3-statement financial models","Complete, populate and fill out 3-statement financial model templates (Income Statement, Balance Sheet, Cash Flow Statement) . Use when asked to fill out model templates, complete existing model frameworks, populate financial models with data, complete a partially filled IS\u002FBS\u002FCF framework, or link integrated financial statements within an existing template structure. Triggers include requests to fill in, complete, or populate a 3-statement model template",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7519,7522,7523,7524],{"name":7520,"slug":7521,"type":16},"Excel","excel",{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":7525,"slug":7526,"type":16},"Financial Statements","financial-statements","2026-05-15T06:08:35.416766",{"slug":7529,"name":7529,"fn":7530,"description":7531,"org":7532,"tags":7533,"stars":32,"repoUrl":33,"updatedAt":7544},"accrual-schedule","build period-end accrual schedules","Build the period-end accrual schedule — for each accrual, compute the entry, cite the support, and draft the JE. Use during month-end close; the JE is a draft for controller approval, not a posting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7534,7537,7538,7541],{"name":7535,"slug":7536,"type":16},"Accounting","accounting",{"name":21,"slug":22,"type":16},{"name":7539,"slug":7540,"type":16},"Journal Entry","journal-entry",{"name":7542,"slug":7543,"type":16},"Month-End Close","month-end-close","2026-05-06T05:38:41.445686",{"slug":7546,"name":7546,"fn":7547,"description":7548,"org":7549,"tags":7550,"stars":32,"repoUrl":33,"updatedAt":7563},"ai-readiness","identify AI opportunities in portfolio companies","Scan the portfolio for the highest-leverage AI opportunities and rank where to deploy operating-partner time. Ingests quarterly updates and financials across multiple portfolio companies, identifies quick wins at each, and stacks them into a single ranked action list. Use during quarterly portfolio reviews, annual planning, or when deciding which companies get AI investment first. Triggers on \"AI readiness\", \"AI opportunity scan\", \"where should we deploy AI\", \"AI across the portfolio\", \"AI quick wins\", or \"which portcos are ready for AI\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7551,7554,7557,7560],{"name":7552,"slug":7553,"type":16},"AI Infrastructure","ai-infrastructure",{"name":7555,"slug":7556,"type":16},"Operations","operations",{"name":7558,"slug":7559,"type":16},"Private Equity","private-equity",{"name":7561,"slug":7562,"type":16},"Strategy","strategy","2026-05-21T06:50:36.056814",{"slug":7565,"name":7565,"fn":7566,"description":7567,"org":7568,"tags":7569,"stars":32,"repoUrl":33,"updatedAt":7578},"audit-xls","audit spreadsheets for formula accuracy","Audit a spreadsheet for formula accuracy, errors, and common mistakes. Scopes to a selected range, a single sheet, or the entire model (including financial-model integrity checks like BS balance, cash tie-out, and logic sanity). Triggers on \"audit this sheet\", \"check my formulas\", \"find formula errors\", \"QA this spreadsheet\", \"sanity check this\", \"debug model\", \"model check\", \"model won't balance\", \"something's off in my model\", \"model review\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7570,7573,7574,7575],{"name":7571,"slug":7572,"type":16},"Audit","audit",{"name":7520,"slug":7521,"type":16},{"name":21,"slug":22,"type":16},{"name":7576,"slug":7577,"type":16},"Spreadsheets","spreadsheets","2026-05-15T06:07:23.536125",{"slug":7580,"name":7580,"fn":7581,"description":7582,"org":7583,"tags":7584,"stars":32,"repoUrl":33,"updatedAt":7595},"bond-futures-basis","analyze bond futures basis","Analyze the bond futures basis by pricing futures, identifying the cheapest-to-deliver, and comparing with yield curves to assess delivery option value and basis trading opportunities. Use when analyzing bond futures, computing the basis, identifying CTD bonds, calculating implied repo rates, or evaluating basis trades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7585,7588,7589,7592],{"name":7586,"slug":7587,"type":16},"Derivatives","derivatives",{"name":21,"slug":22,"type":16},{"name":7590,"slug":7591,"type":16},"Fixed Income","fixed-income",{"name":7593,"slug":7594,"type":16},"Trading","trading","2026-05-15T06:08:13.647174",{"slug":7597,"name":7597,"fn":7598,"description":7599,"org":7600,"tags":7601,"stars":32,"repoUrl":33,"updatedAt":7605},"bond-relative-value","perform bond relative value analysis","Perform relative value analysis on bonds by combining pricing, yield curve context, credit spreads, and scenario stress testing. Use when analyzing bond richness\u002Fcheapness, computing spread decomposition, comparing bonds, assessing bond value vs curves, or running rate shock scenarios.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7602,7603,7604],{"name":21,"slug":22,"type":16},{"name":7590,"slug":7591,"type":16},{"name":7593,"slug":7594,"type":16},"2026-05-15T06:08:11.151011",{"slug":7607,"name":7607,"fn":7608,"description":7609,"org":7610,"tags":7611,"stars":32,"repoUrl":33,"updatedAt":7621},"break-trace","trace reconciliation breaks to source transactions","Root-cause a reconciliation break to its source transaction or posting — follow the audit trail from the break row back to the originating entry on each side and state what differs and why. Use after gl-recon has classified a break.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7612,7613,7614,7617,7618],{"name":7535,"slug":7536,"type":16},{"name":7571,"slug":7572,"type":16},{"name":7615,"slug":7616,"type":16},"Debugging","debugging",{"name":21,"slug":22,"type":16},{"name":7619,"slug":7620,"type":16},"Reconciliation","reconciliation","2026-05-06T05:37:42.364074",62,{"items":7624,"total":7809},[7625,7646,7660,7672,7691,7702,7723,7743,7757,7772,7780,7793],{"slug":7626,"name":7626,"fn":7627,"description":7628,"org":7629,"tags":7630,"stars":7643,"repoUrl":7644,"updatedAt":7645},"algorithmic-art","create algorithmic art with p5.js","Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7631,7634,7637,7640],{"name":7632,"slug":7633,"type":16},"Creative","creative",{"name":7635,"slug":7636,"type":16},"Design","design",{"name":7638,"slug":7639,"type":16},"Generative Art","generative-art",{"name":7641,"slug":7642,"type":16},"JavaScript","javascript",161831,"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills","2026-04-06T17:56:15.455818",{"slug":7647,"name":7647,"fn":7648,"description":7649,"org":7650,"tags":7651,"stars":7643,"repoUrl":7644,"updatedAt":7659},"brand-guidelines","apply Anthropic brand colors and typography","Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7652,7655,7656],{"name":7653,"slug":7654,"type":16},"Branding","branding",{"name":7635,"slug":7636,"type":16},{"name":7657,"slug":7658,"type":16},"Typography","typography","2026-04-06T17:56:05.042852",{"slug":7661,"name":7661,"fn":7662,"description":7663,"org":7664,"tags":7665,"stars":7643,"repoUrl":7644,"updatedAt":7671},"canvas-design","create posters and visual art as PNG or PDF","Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7666,7667,7668],{"name":7632,"slug":7633,"type":16},{"name":7635,"slug":7636,"type":16},{"name":7669,"slug":7670,"type":16},"PDF","pdf","2026-04-06T17:56:03.794732",{"slug":7673,"name":7673,"fn":7674,"description":7675,"org":7676,"tags":7677,"stars":7643,"repoUrl":7644,"updatedAt":7690},"claude-api","build apps with the Claude API","Reference for the Claude API \u002F Anthropic SDK — model ids, pricing, params, streaming, tool use, MCP, agents, caching, token counting, model migration.\nTRIGGER — read BEFORE opening the target file; don't skip because it \"looks like a one-liner\" — whenever: the prompt names Claude\u002FAnthropic in any form (Claude, Anthropic, Fable, Opus, Sonnet, Haiku, `anthropic`, `@anthropic-ai`, `claude-*`, `us.anthropic.*`, `[1m]`); the user asks about an LLM (pricing\u002Fmodel choice\u002Flimits\u002Fcaching) — never answer from memory; OR the task is LLM-shaped with provider unstated (agent\u002FMCP\u002Ftool-definition\u002Fmulti-agent\u002FRAG\u002FLLM-judge\u002Fcomputer-use; generate\u002Fsummarize\u002Fextract\u002Fclassify\u002Frewrite\u002Fconverse over NL; debugging refusals\u002Fcutoffs\u002Fstreaming\u002Ftool-calls\u002Ftokens).\nSKIP only when another provider is being worked on (overrides all triggers): OpenAI\u002FGPT\u002FGemini\u002FLlama\u002FMistral\u002FCohere\u002FOllama named in the query; OR `grep -rE 'openai|langchain_openai|google.generativeai|genai|mistralai|cohere|ollama'` over the project hits (run this grep FIRST if no provider named — don't Read the file).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7678,7681,7682,7685,7687],{"name":7679,"slug":7680,"type":16},"Agents","agents",{"name":9,"slug":8,"type":16},{"name":7683,"slug":7684,"type":16},"Anthropic SDK","anthropic-sdk",{"name":7686,"slug":7673,"type":16},"Claude API",{"name":7688,"slug":7689,"type":16},"LLM","llm","2026-07-28T05:36:08.213335",{"slug":7692,"name":7692,"fn":7693,"description":7694,"org":7695,"tags":7696,"stars":7643,"repoUrl":7644,"updatedAt":7701},"doc-coauthoring","co-author documentation and technical specs","Guide users through a structured workflow for co-authoring documentation. Use when user wants to write documentation, proposals, technical specs, decision docs, or similar structured content. This workflow helps users efficiently transfer context, refine content through iteration, and verify the doc works for readers. Trigger when user mentions writing docs, creating proposals, drafting specs, or similar documentation tasks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7697,7698],{"name":6819,"slug":6816,"type":16},{"name":7699,"slug":7700,"type":16},"Technical Writing","technical-writing","2026-04-06T17:56:14.18897",{"slug":7703,"name":7703,"fn":7704,"description":7705,"org":7706,"tags":7707,"stars":7643,"repoUrl":7644,"updatedAt":7722},"docx","create and edit Word documents","Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files) or Word templates (.dotx files). Triggers include: any mention of 'Word doc', 'word document', '.docx', '.dotx', or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx or .dotx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a 'report', 'memo', 'letter', 'template', or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7708,7711,7713,7716,7719],{"name":7709,"slug":7710,"type":16},"Documents","documents",{"name":7712,"slug":7703,"type":16},"DOCX",{"name":7714,"slug":7715,"type":16},"Office","office",{"name":7717,"slug":7718,"type":16},"Templates","templates",{"name":7720,"slug":7721,"type":16},"Word","word","2026-07-18T05:16:23.136271",{"slug":7724,"name":7724,"fn":7725,"description":7726,"org":7727,"tags":7728,"stars":7643,"repoUrl":7644,"updatedAt":7742},"frontend-design","design production-grade frontend interfaces","Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7729,7730,7733,7736,7739],{"name":7635,"slug":7636,"type":16},{"name":7731,"slug":7732,"type":16},"Frontend","frontend",{"name":7734,"slug":7735,"type":16},"React","react",{"name":7737,"slug":7738,"type":16},"Tailwind CSS","tailwind-css",{"name":7740,"slug":7741,"type":16},"UI Components","ui-components","2026-04-06T17:56:16.723469",{"slug":7744,"name":7744,"fn":7745,"description":7746,"org":7747,"tags":7748,"stars":7643,"repoUrl":7644,"updatedAt":7756},"internal-comms","write internal company communications","A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7749,7752,7753],{"name":7750,"slug":7751,"type":16},"Communications","communications",{"name":7717,"slug":7718,"type":16},{"name":7754,"slug":7755,"type":16},"Writing","writing","2026-04-06T17:56:20.695522",{"slug":7758,"name":7758,"fn":7759,"description":7760,"org":7761,"tags":7762,"stars":7643,"repoUrl":7644,"updatedAt":7771},"mcp-builder","build MCP servers","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node\u002FTypeScript (MCP SDK).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7763,7764,7767,7768],{"name":7679,"slug":7680,"type":16},{"name":7765,"slug":7766,"type":16},"API Development","api-development",{"name":7688,"slug":7689,"type":16},{"name":7769,"slug":7770,"type":16},"MCP","mcp","2026-04-06T17:56:10.357665",{"slug":7670,"name":7670,"fn":7773,"description":7774,"org":7775,"tags":7776,"stars":7643,"repoUrl":7644,"updatedAt":7779},"read edit and manipulate PDF files","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7777,7778],{"name":7709,"slug":7710,"type":16},{"name":7669,"slug":7670,"type":16},"2026-04-06T17:56:02.483316",{"slug":7781,"name":7781,"fn":7782,"description":7783,"org":7784,"tags":7785,"stars":7643,"repoUrl":7644,"updatedAt":7792},"pptx","create and edit PowerPoint presentations","Use this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates (.potx), layouts, speaker notes, or comments. Trigger whenever the user mentions \"deck,\" \"slides,\" \"presentation,\" or references a .pptx or .potx filename, regardless of what they plan to do with the content afterward. If a .pptx or .potx file needs to be opened, created, or touched, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7786,7789],{"name":7787,"slug":7788,"type":16},"PowerPoint","powerpoint",{"name":7790,"slug":7791,"type":16},"Presentations","presentations","2026-07-18T05:16:24.1471",{"slug":7794,"name":7794,"fn":7795,"description":7796,"org":7797,"tags":7798,"stars":7643,"repoUrl":7644,"updatedAt":7808},"skill-creator","create and optimize agent skills","Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[7799,7800,7801,7804,7807],{"name":7679,"slug":7680,"type":16},{"name":6819,"slug":6816,"type":16},{"name":7802,"slug":7803,"type":16},"Evals","evals",{"name":7805,"slug":7806,"type":16},"Performance","performance",{"name":7699,"slug":7700,"type":16},"2026-04-19T06:45:40.804",490]