{/ This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. /}

Dcf Model

Build institutional-quality DCF valuation models in Excel — revenue projections, FCF build, WACC, terminal value, Bear/Base/Bull scenarios, 5x5 sensitivity tables. Pairs with excel-author. Use for intrinsic-value equity analysis.

Skill metadata

Source Optional — install with hermes skills install official/finance/dcf-model
Path optional-skills/finance/dcf-model
Version 1.0.0
Author Anthropic (adapted by Nous Research)
License Apache-2.0
Platforms linux, macos, windows
Tags finance, valuation, dcf, excel, openpyxl, modeling, investment-banking
Related skills excel-author, pptx-author, comps-analysis, lbo-model, 3-statement-model

Reference: full SKILL.md

ℹ️ Info

The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.

Environment

This skill assumes headless openpyxl — you are producing an.xlsx file on disk. Follow the excel-author skill's conventions for cell coloring, formulas, named ranges, and sensitivity tables. Recalculate before delivery: python /path/to/excel-author/scripts/recalc.py./out/model.xlsx.

DCF Model Builder

Overview

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).

Tools

Critical Constraints - Read These First

These constraints apply throughout all DCF model building. Review before starting:

Formulas Over Hardcodes (NON-NEGOTIABLE): - 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 - When using openpyxl: ws["D20"] = "=D19*(1+$B$8)" is correct; ws["D20"] = calculated_revenue is WRONG - 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) - If you catch yourself computing something in Python and writing the result — STOP. The model must flex when the user changes an assumption.

Verify Step-by-Step With the User (DO NOT build end-to-end): - After data retrieval → show the user the raw inputs block (revenue, margins, shares, net debt) and confirm before projecting - After revenue projections → show the projected top line and growth rates, confirm before building margin build - After FCF build → show the full FCF schedule, confirm logic before computing WACC - After WACC → show the calculation and inputs, confirm before discounting - After terminal value + PV → show the equity bridge (EV → equity value → per share), confirm before sensitivity tables - Catch errors at each stage — a wrong margin assumption discovered after sensitivity tables are built means rebuilding everything downstream

Sensitivity Tables: - Use an ODD number of rows and columns (standard: 5×5, sometimes 7×7) — this guarantees a true center cell - 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. - Highlight the center cell with the medium-blue fill (#BDD7EE) + bold font so it's immediately visible which cell is the base case. - Populate ALL cells (typically 3 tables × 25 cells = 75) with full DCF recalculation formulas - Use openpyxl loops to write formulas programmatically - NO placeholder text, NO linear approximations, NO manual steps required - Each cell must recalculate full DCF for that assumption combination

Cell Comments: - Add cell comments AS each hardcoded value is created - Format: "Source: [System/Document], [Date], [Reference], [URL if applicable]" - Every blue input must have a comment before moving to next section - Do not defer to end or write "TODO: add source"

Model Layout Planning: - Define ALL section row positions BEFORE writing any formulas - Write ALL headers and labels first - Write ALL section dividers and blank rows second - THEN write formulas using the locked row positions - Test formulas immediately after creation

Formula Recalculation: - Run python recalc.py model.xlsx 30 before delivery - Fix ALL errors until status is "success" - Zero formula errors required (#REF!, #DIV/0!, #VALUE!, etc.)

Scenario Blocks: - Create separate blocks for Bear/Base/Bull cases - Show assumptions horizontally across projection years within each block - Use IF formulas: =IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell])) - Verify formulas reference correct scenario block cells

DCF Process Workflow

Step 1: Data Retrieval and Validation

Fetch data from MCP servers, user provided data, and the web.

Data Sources Priority: 1. MCP Servers (if configured) - Structured financial data from providers like Daloopa 2. User-Provided Data - Historical financials from their research 3. Web Search/Fetch - Current prices, beta, debt and cash when needed

Validation Checklist: - Verify net debt vs net cash (critical for valuation) - Confirm diluted shares outstanding (check for recent buybacks/issuances) - Validate historical margins are consistent with business model - Cross-check revenue growth rates with industry benchmarks - Verify tax rate is reasonable (typically 21-28%)

Step 2: Historical Analysis (3-5 years)

Analyze and document: - Revenue growth trends: Calculate CAGR, identify drivers - Margin progression: Track gross margin, EBIT margin, FCF margin - Capital intensity: D&A and CapEx as % of revenue - Working capital efficiency: NWC changes as % of revenue growth - Return metrics: ROIC, ROE trends

Create summary tables showing:

Historical Metrics (LTM):
Revenue: $X million
Revenue growth: X% CAGR
Gross margin: X%
EBIT margin: X%
D&A % of revenue: X%
CapEx % of revenue: X%
FCF margin: X%

Шаг 3. Постройте прогноз доходов

Методология: 1. Начните с последнего фактического дохода (LTM или последний финансовый год). 2. Примените темпы роста для каждого прогнозируемого года. 3. Покажите обе суммы в долларах И расчетный процент роста.

Темпы роста: - Годы 1-2: Более высокие темпы роста отражают видимость в краткосрочной перспективе. - 3–4 годы: постепенное снижение до среднего показателя по отрасли. - Год 5+: темпы роста приближаются к терминальному.

Структура формулы: - Выручка (год N) = Доход (год N-1) × (1 + темп роста) - Рост % (Год N) = Выручка (Год N) / Доход (Год N-1) - 1

Трехсценарный подход:

Bear Case: Conservative growth (e.g., 8-12%)
Base Case: Most likely scenario (e.g., 12-16%)
Bull Case: Optimistic growth (e.g., 16-20%)

Шаг 4: Моделирование операционных расходов

Анализ фиксированных/переменных затрат:

Операционные расходы должны моделировать реалистичный операционный рычаг: – Продажи и маркетинг: обычно 15–40 % дохода в зависимости от бизнес-модели. - Исследования и разработки: обычно 10–30 % для технологических компаний. – Общие и административные: обычно 8–15 % дохода, что отражает рост доли заемных средств по мере масштабирования компании.

Основные принципы: - ВСЕ проценты основаны на ВЫРУЧКЕ, а не на валовой прибыли. - Операционный рычаг модели: % должен снижаться по мере увеличения выручки. - Ведение отдельных статей для S&M, R&D, G&A. - Рассчитайте EBIT = Валовая прибыль - Общие операционные расходы

Схема расширения маржи:

Current State → Target State (Year 5)
Gross Margin: X% → Y% (justify based on scale, efficiency)
EBIT Margin: X% → Y% (result of revenue growth + opex leverage)

Шаг 5: Расчет свободного денежного потока

Постройте свободный денежный поток в правильной последовательности:

EBIT
(-) Taxes (EBIT × Tax Rate)
= NOPAT (Net Operating Profit After Tax)
(+) D&A (non-cash expense, % of revenue)
(-) CapEx (% of revenue, typically 4-8%)
(-) Δ NWC (change in working capital)
= Unlevered Free Cash Flow

Моделирование оборотного капитала: - Рассчитать как % изменения дохода (дельта дохода) - Типичный диапазон: от -2% до +2% изменения дохода. - Отрицательное число = источник денежных средств (высвобождение оборотного капитала) - Положительное число = использование денежных средств (наращивание оборотного капитала)

Капитальные затраты на техническое обслуживание и рост: - Капитальные затраты на техническое обслуживание: поддержание текущей деятельности (~ 2-3% выручки) - Капитальные затраты на рост: поддержка расширения (дополнительный доход 2–5%) - Общий объем капиталовложений должен соответствовать стратегии роста компании.

Шаг 6: Исследование стоимости капитала (WACC)

Методология CAPM для расчета стоимости собственного капитала:

Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium

Where:
- Risk-Free Rate = Current 10-Year Treasury Yield
- Beta = 5-year monthly stock beta vs market index
- Equity Risk Premium = 5.0-6.0% (market standard)

Расчет стоимости долга:

After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)

Determine Pre-Tax Cost of Debt from:
- Credit rating (if available)
- Current yield on company bonds
- Interest expense / Total Debt from financials

Вес структуры капитала:

Market Value Equity = Current Stock Price × Shares Outstanding
Net Debt = Total Debt - Cash & Equivalents
Enterprise Value = Market Cap + Net Debt

Equity Weight = Market Cap / Enterprise Value
Debt Weight = Net Debt / Enterprise Value

WACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)

Особые случаи: - Чистая денежная позиция: если денежные средства > долг, чистый долг ОТРИЦАТЕЛЬНЫЙ. - Вес долга может быть отрицательным - Расчет WACC корректируется соответствующим образом - Отсутствие долга: WACC = стоимость акционерного капитала.

Типичные диапазоны WACC: - Большая крышка, Стабильный: 7-9% - Растущие компании: 9-12% - Высокий рост/риск: 12-15%

Шаг 7: Применение ставки дисконтирования (прогноз на 5–10 лет)

Середина года: - Предполагается, что денежные потоки произойдут в середине года. - Период скидки: 0,5, 1,5, 2,5, 3,5, 4,5 и т. д. - Коэффициент дисконтирования = 1 / (1 + WACC)^Период

Расчет текущей стоимости:

For each projection year:
PV of FCF = Unlevered FCF × Discount Factor

Example (Year 1):
FCF = $1,000
WACC = 10%
Period = 0.5
Discount Factor = 1 / (1.10)^0.5 = 0.9535
PV = $1,000 × 0.9535 = $954

Выбор прогнозируемого периода: - 5 лет: стандарт для большинства анализов. - 7–10 лет: быстрорастущие компании с более длинной взлетно-посадочной полосой. - 3 года: зрелый, стабильный бизнес.

Шаг 8: Расчет конечной стоимости

Метод бессрочного роста (предпочтительно):

Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)
Terminal Value = Terminal FCF / (WACC - Terminal Growth Rate)

Critical Constraint: Terminal Growth < WACC (otherwise infinite value)

Выбор конечного темпа роста: - Консервативный: 2,0-2,5% (темп роста ВВП) - Умеренный: 2,5-3,5% - Агрессивная: 3,5-5,0% (только для лидеров рынка)

Не превышать: безрисковая ставка или долгосрочный рост ВВП.

Выход из нескольких методов (альтернативный):

Terminal Value = Final Year EBITDA × Exit Multiple

Where Exit Multiple comes from:
- Industry comparable trading multiples
- Precedent transaction multiples
- Typical range: 8-15x EBITDA

Текущая стоимость конечной стоимости:

PV of Terminal Value = Terminal Value / (1 + WACC)^Final Period

Where Final Period accounts for timing:
5-year model with mid-year convention: Period = 4.5

Проверка работоспособности конечного значения: - Должен составлять 50–70 % стоимости предприятия. - Если >75%, модель может быть чрезмерно зависима от терминальных предположений. - Если <40%, проверьте, не являются ли предположения о терминале слишком консервативными.

Шаг 9: Мост между предприятием и акционерным капиталом

Структура сводной оценки:

(+) Sum of PV of Projected FCFs = $X million
(+) PV of Terminal Value = $Y million
= Enterprise Value = $Z million

(-) Net Debt [or + Net Cash if negative] = $A million
= Equity Value = $B million

÷ Diluted Shares Outstanding = C million shares
= Implied Price per Share = $XX.XX

Current Stock Price = $YY.YY
Implied Return = (Implied Price / Current Price) - 1 = XX%

Важные изменения: - Чистый долг = Общий долг – Денежные средства и их эквиваленты - Если положительный: вычтите из EV (уменьшите стоимость собственного капитала). - Если отрицательный результат (чистые денежные средства): добавьте к EV (увеличивает стоимость капитала) - Использовать разводненные акции: включает опционы, RSU, конвертируемые ценные бумаги. – Другие корректировки (если применимо): - Интересы меньшинств - Пенсионные обязательства - Обязательства по операционной аренде

Формат вывода оценки:

Valuation Component,Amount ($M)
PV Explicit FCFs,X.X
PV Terminal Value,Y.Y
Enterprise Value,Z.Z
(-) Net Debt,A.A
Equity Value,B.B,,
Shares Outstanding (M),C.C
Implied Price per Share,$XX.XX
Current Share Price,$YY.YY
Implied Upside/(Downside),+XX%

Шаг 10: Анализ чувствительности

Создайте три таблицы чувствительности в нижней части листа DCF, показывающие, как меняется оценка при различных допущениях:

  1. WACC против конечного роста – показывает чувствительность стоимости предприятия к ставке дисконтирования и бессрочному росту.
  2. Рост выручки по сравнению с рентабельностью EBIT – показывает влияние роста выручки и операционного левереджа.
  3. Бета против безрисковой ставки – показывает чувствительность к стоимости компонентов собственного капитала.

Реализация. Это простые двумерные сетки (НЕ функция «Таблица данных» Excel) с формулами в каждой ячейке. Каждая ячейка должна содержать полный перерасчет DCF для этой конкретной комбинации допущений. См. раздел «Критические ограничения» для получения подробных требований к программному заполнению всех 75 ячеек с использованием openpyxl.

<правильные_шаблоны>

В этом разделе содержатся все ПРАВИЛЬНЫЕ шаблоны, которым следует следовать при построении моделей DCF.

Шаблон выбора блока сценария — следуйте этому подходу

Предположения организованы в отдельные блоки для каждого сценария:

КРИТИЧЕСКАЯ СТРУКТУРА – три строки в заголовке раздела:

BEAR CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),12%,10%,9%,8%,7%
EBIT Margin (%),45%,44%,43%,42%,41%

BASE CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),16%,14%,12%,10%,9%
EBIT Margin (%),48%,49%,50%,51%,52%

BULL CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),20%,18%,15%,13%,11%
EBIT Margin (%),50%,51%,52%,53%,54%

Каждый блок сценариев ДОЛЖЕН иметь строку заголовка столбца, показывающую прогнозируемые годы (2025ФГ, 2026ПФ и т. д.), непосредственно под заголовком раздела. Без этого пользователи не смогут определить, какое допущенное значение соответствует какому году.

Как ссылаться на предположения. Создайте столбец консолидации: 1. Ячейка выбора регистра (например, B6) содержит 1 = Медведь, 2 = База или 3 = Бык. 2. Создайте столбец консолидации с формулами ИНДЕКС или СМЕЩ для извлечения из правильного блока сценария. 3. Формулы проекции ссылаются на столбец консолидации (ссылки на чистые ячейки). 4. Каждый блок сценариев содержит полный набор допущений DCF на протяжении прогнозируемых лет.

Рекомендуемый шаблон столбца консолидации (с использованием ИНДЕКСА): =ИНДЕКС(B10:D10, 1, $B$6)

НЕ это — повсюду разбросаны утверждения IF: =IF($B$6=1,[Ячейка медвежьего блока],IF($B$6=2,[Базовая ячейка блока],[Ячейка бычьего блока]))

Подход на основе столбцов консолидации централизует логику и упрощает аудит модели.

Правильная модель прогнозирования доходов

Создайте столбец консолидации с формулами ИНДЕКС, а затем используйте его в прогнозах:

Шаг 1. Столбец консолидации данных о росте за 1 финансовый год: =INDEX([Рост в 1 финансовом году]:[Рост в 1 финансовом году], 1, $B$6)

Шаг 2. Прогноз дохода ссылается на столбец консолидации: Доход за 1-й год: =D29*(1+$E$10)

Где: - D29 = Выручка за предыдущий год - $E$10 = ячейка столбца консолидации для роста в 1 финансовом году (содержит формулу ИНДЕКС) - $B$6 = Выбор случая (1=Медведь, 2=База, 3=Бык)

Этот подход более понятен, чем встраивание утверждений ЕСЛИ в каждую формулу прогноза, и значительно упрощает проверку того, какие предположения сценария используются.

Правильный шаблон формулы FCF

Используйте столбцы консолидации с формулами ИНДЕКС, а затем ссылайтесь на них в расчетах свободного денежного потока:

Подход с использованием консолидированного столбца:

Item,Formula,Reference
D&A,=E29*$E$21,$E$21 = consolidation column for D&A %
CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %
Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %
Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC

Каждая ячейка столбца консолидации содержит формулу ИНДЕКС, которая извлекается из соответствующего блока сценариев на основе селектора вариантов. Благодаря этому формулы прогнозирования остаются чистыми и проверяемыми.

Прежде чем писать формулы, подтвердите расположение строк блока сценария и настройте столбцы консолидации.

Правильный формат комментария к ячейке

Каждое жестко закодированное значение должно иметь следующий формат:

«Источник: [Система/Документ], [Дата], [Ссылка], [URL, если применимо]»

Примеры:

Item,Source Comment
Stock price,Source: Market data script 2025-10-12 Close price
Shares outstanding,Source: 10-K FY2024 Page 45 Note 12
Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements
Beta,Source: Market data script 2025-10-12 5-year monthly beta
Consensus estimates,Source: Management guidance Q3 2024 earnings call

Правильная структура таблицы допущений

ВАЖНО: для каждого блока сценариев требуются ТРИ структурных элемента:

  1. Строка заголовка раздела (объединенные ячейки): например, «Предположения по случаю медведя».
  2. Строка заголовка столбца с указанием лет – ЭТО ОБЯЗАТЕЛЬНО, НЕ ПРОПУСКАЙТЕ.
  3. Строки данных с допущенными значениями.

Структура:

BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,

BASE CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,

BULL CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,

БЕЗ строки заголовка столбца, показывающей годы прогноза (2025ПФ, 2026ПФ и т. д.), пользователи не могут определить, какое допущенное значение соответствует какому году. Эта строка ОБЯЗАТЕЛЬНА.

Затем создайте столбец консолидации (обычно следующий столбец справа), который использует формулы ИНДЕКС для извлечения данных из выбранного блока сценария на основе селектора вариантов. На этот столбец консолидации ссылаются ваши формулы прогноза.

Правильный процесс планирования рядов

1. Напишите ВСЕ заголовки и метки ПЕРВОЙ:

Row,Content
1,[Company Name] DCF Model
2,Ticker | Date | Year End
4,Case Selector
7,KEY ASSUMPTIONS
26,Assumption headers
27-31,Growth assumptions...,...

2. Запишите ВСЕ разделители разделов и пустые строки

3. ЗАТЕМ напишите формулы, используя заблокированные позиции строк

4. Тестируйте формулы сразу после создания

Думайте об этом как о строительстве: - Хорошо: залейте фундамент, затем постройте стены (стабильная конструкция). - Плохо: построить стены, затем залить фундамент (стены рухнут)

Версия Excel: - Хорошо: добавьте заголовки, затем напишите формулы (формулы стабильны) - Плохо: писать формулы, а затем добавлять заголовки (формулы ломаются).

Правильная реализация таблицы чувствительности

ВАЖНО. Это НЕ функция Excel «Таблица данных». Это простые сетки, в которых вы пишете обычные формулы, используя openpyxl. Да, это означает всего ~75 формул (3 таблицы по 25 ячеек каждая), но это просто и необходимо.

Программная совокупность с формулами:

Каждая таблица чувствительности должна быть полностью заполнена формулами, которые пересчитывают подразумеваемую цену акции для каждой комбинации допущений. Не используйте функцию таблицы данных Excel (она требует ручного вмешательства и не может быть автоматизирована с помощью openpyxl).

Подход к реализации – КОНКРЕТНЫЙ ПРИМЕР:

Структура таблицы — сетка 5×5 (нечетные размеры, базовый случай по центру):

Если базовая WACC модели = 9,0% и базовый терминальный рост = 3,0%, постройте оси симметрично вокруг этих значений:

WACC vs Terminal Growth,  2.0%,  2.5%,  3.0%,  3.5%,  4.0%
              8.0%,       [fml], [fml], [fml], [fml], [fml]
              8.5%,       [fml], [fml], [fml], [fml], [fml]
              9.0%,       [fml], [fml], [], [fml], [fml]    middle row = base WACC
              9.5%,       [fml], [fml], [fml], [fml], [fml]
             10.0%,       [fml], [fml], [fml], [fml], [fml]
                                   
                          middle col = base terminal g

★ = центральная ячейка. Выходные данные формулы ДОЛЖНЫ равняться фактической подразумеваемой цене акций модели (из сводки оценки). Примените к этой ячейке заливку среднего синего цвета (#BDD7EE) и жирный шрифт, чтобы базовый регистр был визуально закреплен.

Правило для значений оси: axis_values ​​= [base - 2*step, base - шаг, base, base + шаг, base + 2*step] — симметрично вокруг основания, нечетное количество гарантирует наличие центра.

Шаблон формулы — ячейка B88 (WACC=8,0%, терминальный рост=2,0%):

Формула в B88 должна пересчитать подразумеваемую цену, используя: - WACC из заголовка строки: $A88 (8,0%). - Терминальный рост из заголовка столбца: «B$87» (2,0%)

Рекомендуемый подход: Используйте основной расчет DCF, но замените эти значения.

Пример структуры формулы: =([СУММА свободных денежных потоков от PV с использованием 88 долларов США в качестве ставки дисконтирования] + [Терминальная стоимость с использованием 87 долларов США в качестве темпа роста и 88 долларов США в качестве WACC] - [Чистый долг]) / [Акции]

ВАЖНО. Напишите формулу для КАЖДОЙ ячейки в сетке 5x5 (25 ячеек в таблице, всего 75 ячеек). Используйте openpyxl для записи этих формул программным способом в цикле. НЕ пропускайте этот шаг и не оставляйте текст-заполнитель.

Шаблон реализации Python:

# Pseudocode for populating sensitivity table
for row_idx, wacc_value in enumerate(wacc_range):
    for col_idx, term_growth_value in enumerate(term_growth_range):
        # Build formula that uses wacc_value and term_growth_value
        formula = f"=<DCF recalc using {wacc_value} and {term_growth_value}>"
        ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula

Таблицы чувствительности должны работать сразу после открытия модели, без каких-либо ручных действий со стороны пользователя.

</correct_patterns>

<распространенные_ошибки>

В этом разделе собраны все НЕПРАВИЛЬНЫЕ шаблоны, которых следует избегать при построении моделей DCF.

НЕПРАВИЛЬНО: упрощенная таблица чувствительности или текст-заполнитель

Не используйте линейные приближения:

// WRONG - Linear approximation
B97: =B88*(1+(0.096-0.116))    // Assumes linear relationship

// WRONG - Division shortcut
B105: =B88/(1+(E48-0.07))      // Doesn't recalculate full DCF

Не оставляйте текст-заполнитель:

// WRONG - Placeholder note
"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables."

// WRONG - Empty cells
[leaving cells blank because "this is complex"]

Не путайте терминологию: - ❌ «Таблицы чувствительности требуют функции таблицы данных Excel» (НЕТ — это специальный инструмент Excel, который мы не можем использовать) - ✅ «Таблицы чувствительности — это простые сетки с формулами в каждой ячейке» (ДА — это то, что мы строим)

Почему эти сочетания клавиш неверны: - Формулы линейной аппроксимации фактически не пересчитывают DCF — они просто применяют простые математические корректировки. - Зависимости нелинейны, поэтому результаты будут неточными. - Текст-заполнитель требует ручного вмешательства пользователя. - Модель не пригодна к использованию сразу после доставки. - Не профессиональны и не готовы к работе с клиентами - Пустые ячейки = неполный результат.

Общая причина ОТКЛОНЕНИЯ: «Написание более 75 формул кажется сложным, поэтому я оставлю заметку, чтобы пользователь мог заполнить ее вручную».

Реальность: Написать 75 формул несложно, если использовать цикл Python с openpyxl. Каждая формула следует одному и тому же шаблону — просто замените значения строк/столбцов. Это обязательная часть результата.

Вместо этого: заполните каждую ячейку чувствительности формулами, которые пересчитывают полный DCF для этой конкретной комбинации допущений.

НЕПРАВИЛЬНО: отсутствуют комментарии к ячейке

Не делайте этого: - Создание всех жестко запрограммированных входных данных без комментариев. - Подумайте: «Я добавлю их позже» - Напишите «TODO: добавить источник» - Оставить синие входы без документации

Почему это неправильно: - Невозможно проверить, откуда взялись данные. - Не соответствует требованиям к навыкам xlsx - Не готов к аудиту - трата времени на исправление позже.

Вместо этого: добавляйте комментарий к ячейке ПРИ создании КАЖДОГО жестко запрограммированного значения.

НЕПРАВИЛЬНО: ссылки на строки формул отключены

Симптом: В разделе FCF ссылаются на неверные строки допущений: D&A: =E29*$E$34 // Должно быть $E$21, но ссылка на неправильную строку CapEx: =E29*$E$41 // Должно быть $E$22, но строка сдвинута

Почему это происходит: 1. Формулы написаны первыми 2. Затем вставляются заголовки 3. Сдвинуты все ссылки на строки. 4. Теперь формулы указывают не на те ячейки → #ССЫЛКА! ошибки

Вместо этого: СНАЧАЛА заблокируйте макет строки, а затем напишите формулы.

НЕПРАВИЛЬНО: одна строка для каждого предположения в сценариях

Не структурируйте предположения следующим образом:

Assumption,Bear,Base,Bull
Revenue Growth FY1,10%,13%,16%
Revenue Growth FY2,9%,12%,15%

This vertical layout makes it hard to see the progression across years within each scenario.

Why it's wrong: - Makes it difficult to see assumptions evolving across years within each scenario - Harder to compare scenario assumptions across full projection period - Less intuitive for reviewing scenario logic

Instead: - Create separate blocks for each scenario (Bear, Base, Bull) - Within each block, show assumptions horizontally across projection years - This makes each scenario's assumptions easier to review as a cohesive set

WRONG: No Borders

Don't deliver a model without borders: - No section delineation - All cells blend together - Hard to read and unprofessional

Why it's wrong: - Not client-ready - Difficult to navigate - Looks amateur

Instead: Add borders around all major sections

WRONG: Wrong Font Colors or No Font Color Distinction

Don't do this: - All text is black - Only use fill colors (no font color changes) - Mix up which cells are blue vs black

Why it's wrong: - Can't distinguish inputs from formulas - Auditing becomes impossible - Violates xlsx skill requirements

Instead: Blue text for ALL hardcoded inputs, black text for ALL formulas, green for sheet links

WRONG: Operating Expenses Based on Gross Profit

Don't do this: S&M: =E33*0.15 // E33 = Gross Profit (WRONG)

Why it's wrong: - Operating expenses scale with revenue, not gross profit - Produces unrealistic margin progression - Not how businesses actually operate

Instead: S&M: =E29*0.15 // E29 = Revenue (CORRECT)

TOP 5 ERRORS SUMMARY

  1. Formula row references off → Define ALL row positions BEFORE writing formulas
  2. Missing cell comments → Add comments AS cells are created, not at end
  3. Simplified sensitivity tables → Populate all cells with full DCF recalc formulas, not approximations
  4. Scenario block references wrong → Ensure IF formulas pull from correct Bear/Base/Bull blocks
  5. No borders → Add professional section borders for client-ready appearance

In addition, be aware of these errors:

WACC Calculation Errors

Growth Assumption Flaws

Terminal Value Mistakes

Cash Flow Projection Errors

These errors are the most common. Re-read this section before starting any DCF build.

</common_mistakes>

Excel File Creation

This skill uses the xlsx skill for all spreadsheet operations. The xlsx skill provides: - Standardized formula construction rules - Number formatting conventions - Automated formula recalculation via recalc.py script - Comprehensive error checking and validation

All Excel files created by this skill must follow xlsx skill requirements, including zero formula errors and proper recalculation.

Quality Rubric

Every DCF model must maximize for: 1. Realistic revenue and margin assumptions based on historical performance 2. Appropriate cost of capital calculation with proper CAPM methodology 3. Comprehensive sensitivity analysis showing valuation ranges 4. Clear terminal value calculation with supporting rationale 5. Professional model structure enabling scenario analysis 6. Transparent documentation of all key assumptions

Input Requirements

Minimum Required Inputs

  1. Company identifier: Ticker symbol or company name
  2. Growth assumptions: Revenue growth rates for projection period (or "use consensus")
  3. Optional parameters:
  4. Projection period (default: 5 years)
  5. Scenario cases (Bear/Base/Bull growth and margin assumptions)
  6. Terminal growth rate (default: 2.5-3.0%)
  7. Specific WACC inputs if not using CAPM

Excel Model Structure

Sheet Architecture

Create two sheets:

  1. DCF - Main valuation model with sensitivity analysis at bottom
  2. WACC - Cost of capital calculation

CRITICAL: Sensitivity tables go at the BOTTOM of the DCF sheet (not on a separate sheet). This keeps all valuation outputs together.

Formula Recalculation (MANDATORY)

After creating or modifying the Excel model, recalculate all formulas using the recalc.py script from the excel-author skill:

python recalc.py [path_to_excel_file] [timeout_seconds]

Пример:

python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30

Скрипт будет: - Пересчитать все формулы на всех листах с помощью LibreOffice. - Сканировать ВСЕ ячейки на наличие ошибок Excel (#ССЫЛКА!, #ДЕЛ/0!, #ЗНАЧЕНИЕ!, #ИМЯ?, #NULL!, #NUM!, #Н/Д). - Возврат подробного JSON с указанием местоположений и количества ошибок.

Ожидаемый формат вывода:

{
  "status": "success",           // or "errors_found"
  "total_errors": 0,              // Total error count
  "total_formulas": 42,           // Number of formulas in file
  "error_summary": {}             // Only present if errors found
}

Если обнаружены ошибки, выходные данные будут содержать подробную информацию:

{
  "status": "errors_found",
  "total_errors": 2,
  "total_formulas": 42,
  "error_summary": {
    "#REF!": {
      "count": 2,
      "locations": ["DCF!B25", "DCF!C25"]
    }
  }
}

Исправьте все ошибки и перезапускайте recalc.py до тех пор, пока статус не станет «успех», прежде чем доставлять модель.

Стандарты форматирования

ВАЖНО. Следуйте навыкам работы с xlsx, чтобы узнать правила построения формул и правила форматирования чисел. Навык DCF добавляет особые стандарты визуального представления.

Цветовая схема — два слоя:

Слой 1: Цвета шрифта (ОБЯЗАТЕЛЬНО при наличии навыков xlsx) - Синий текст (RGB: 0,0,255): ВСЕ жестко закодированные входные данные (цена акций, акции, исторические данные, предположения). - Черный текст (RGB: 0,0,0): ВСЕ формулы и расчеты. - Зеленый текст (RGB: 0,128,0): ссылки на другие листы (ссылки на листы WACC).

Слой 2: Цвета заливки — профессиональная палитра синего/серого цвета (по умолчанию, если пользователь не указал иное) - Сохраняйте минимум — используйте для заливок только синие и серые оттенки. НЕ добавляйте зеленый, желтый, оранжевый или несколько акцентных цветов. Модель со слишком большим количеством цветов выглядит дилетантской. - Палитра заливки по умолчанию: - Заголовки разделов: темно-синий (RGB: 31,78,121 / #1F4E79) фон с белым жирным текстом. - Подзаголовки/заголовки столбцов: голубой (RGB: 217 225 242 / #D9E1F2) фон с черным жирным текстом. - Ячейки ввода: светло-серый (RGB: 242,242,242 / #F2F2F2) фон с синим шрифтом — или просто белый с синим шрифтом, если вы хотите максимального минимализма. - Рассчитываемые ячейки: белый фон с черным шрифтом. - Ряды вывода/сводки (стоимость на акцию, EV и т. д.): средний синий фон (RGB: 189 215 238 / #BDD7EE) с черным жирным шрифтом. - Вот и все — 3 синих + 1 серый + белый. Не поддавайтесь желанию добавить еще. - Предоставленные пользователем шаблоны или явные цветовые предпочтения ВСЕГДА переопределяют эти значения по умолчанию.

Как слои работают вместе: – Ячейка ввода: синий шрифт + светло-серая заливка = «Жестко закодированный ввод». - Ячейка формулы: черный шрифт + белый фон = «Расчетное значение». - Ссылка на лист: зеленый шрифт + белый фон = «Ссылка с другого листа». - Ключевой вывод: черный жирный шрифт + средняя синяя заливка = «Это ответ».

Цвет шрифта говорит вам, ЧТО это (ввод/формула/ссылка). Цвет заливки сообщает вам, ГДЕ вы находитесь (заголовок/данные/вывод).

Пограничные стандарты (ТРЕБУЮТСЯ для профессионального внешнего вида)

Толстые рамки (1,5 пт) вокруг основных разделов: - Раздел «КЛЮЧЕВЫЕ ВХОДЫ» - Раздел ПРОГНОЗНЫЕ ПРЕДПОЛОЖЕНИЯ - Раздел ПРОГНОЗ ДЕНЕЖНЫХ ПОТОКОВ НА 5 ЛЕТ - раздел ТЕРМИНАЛЬНОЕ ЗНАЧЕНИЕ - раздел ОБЗОР ОЦЕНКИ - Каждая таблица АНАЛИЗА ЧУВСТВИТЕЛЬНОСТИ

Средние границы (1 пт) между подразделами: - Подробности о компании и исторические показатели - Допущения роста в сравнении с рентабельностью EBIT и параметрами свободного денежного потока

Тонкие рамки (0,5 пт) вокруг таблиц данных: - Таблицы предположений сценариев (Медвежий | Базовый | Бычий | Выбранный) - Матрица исторических и прогнозируемых финансовых показателей

Без границ: Отдельные ячейки в таблицах (сохраняйте чистоту и возможность сканирования)

Границы обязательны — модели без профессиональных рамок не готовы для клиентов.

Числовые форматы (в соответствии со стандартами навыков xlsx): – Годы: формат в виде текстовых строк (например, «2024», а не «2024»). - Проценты: 0,0% (один десятичный знак) - Валюта: $#,##0 для миллионов; $#,##0.00 для каждой акции - ВСЕГДА указывайте единицы измерения в заголовках ("Доход ($мм)") - Нули: используйте форматирование чисел, чтобы все нули были «-» (например, $#,##0;($#,##0);-) - Большие числа: #,##0 с разделителем тысяч. - Отрицательные числа: (#,##0) в скобках (НЕ знак минус)

Комментарии к ячейке (ОБЯЗАТЕЛЬНО для всех жестко закодированных входных данных):

Согласно навыку xlsx, ВСЕ жестко запрограммированные значения должны иметь комментарии к ячейкам, документирующие источник. Формат: «Источник: [Система/Документ], [Дата], [Ссылка], [URL, если применимо]»

КРИТИЧЕСКОЕ: добавляйте комментарии ПО мере создания ячеек. Не откладывайте дело до конца.

Подробная структура листа DCF

Раздел 1: Заголовок

Row,Content
1,[Company Name] DCF Model
2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]
3,Blank
4,Case Selector Cell (1=Bear 2=Base 3=Bull)
5,Case Name Display (formula: =IF([Selector]=1"Bear"IF([Selector]=2"Base""Bull")))

Раздел 2: Рыночные данные (НЕ зависит от конкретного случая)

Item,Value
Current Stock Price,$XX.XX
Shares Outstanding (M),XX.X
Market Cap ($M),[Formula]
Net Debt ($M),XXX [or Net Cash if negative]

Раздел 3: Допущения сценария DCF

Создайте отдельные блоки допущений для каждого сценария (медвежий, базовый, бычий) с предположениями, специфичными для DCF (% роста выручки, % маржи EBIT, % налоговой ставки, % D&A от выручки, % капитальных затрат от выручки, % изменения NWC от ΔRev, темпы конечного роста, WACC), расположенными горизонтально по годам прогнозирования. Каждый блок должен включать заголовок раздела, строку заголовка столбца, показывающую годы прогноза (1-й финансовый год, 2-й финансовый год и т. д.), и строки данных. См. раздел <correct_patterns> «Правильная структура таблицы допущений» для точного макета.

Раздел 4: Исторические и прогнозируемые финансовые показатели

Ссылайтесь на столбец консолидации (например, «Выбранный случай»), который извлекается из блоков сценариев, а не на разбросанные формулы ЕСЛИ в каждой строке прогноза.

Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
  % growth,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1],,,,,,
Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
  % margin,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29],,,,,,
Operating Expenses:,,,,,,,
  S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
  R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
  G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
  Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38],,,,,,
EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
  % margin,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29],,,,,,
Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
  Tax rate,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41],,,,,,
NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]

Ключевая формула: - Рост выручки: =E29*(1+$E$10), где $E$10 — столбец консолидации для роста за 1 год. - НЕ: =E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))

Этот подход более понятен, его легче контролировать и предотвращает ошибки формул за счет централизации логики сценария.

Раздел 5: Создание свободного денежного потока

КРИТИЧЕСКОЕ: убедитесь, что ссылки на строки указывают на ПРАВИЛЬНЫЕ строки допущений. Тестируйте формулы сразу после создания.

Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
    % of Rev,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
    % of Rev,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
    % of Δ Rev,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)],,,,,,
Unlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]

Примеры ссылок на строки (на основе планирования макета): - $E$21 = допущение D&A % (столбец консолидации, строка 21) - $E$22 = допущение о капитальных затратах в % (столбец консолидации, строка 22) - $E$23 = допущение NWC % (столбец консолидации, строка 23) - E29 = Выручка за год (строка 29) - E45 = NOPAT для года (строка 45)

Перед написанием формул: убедитесь, что номера строк соответствуют фактическому макету. Проверьте один столбец, затем скопируйте его.

Раздел 6: Дисконтирование и оценка

DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal
Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,
Period,0.5,1.5,2.5,3.5,4.5,
Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,
PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,,,,,,,
Terminal FCF ($M),,,,,,,XXX
Terminal Value ($M),,,,,,,XXX
PV Terminal Value ($M),,,,,,,XXX,,,,,,
Valuation Summary ($M),,,,,,
Sum of PV FCFs,XXX,,,,,
PV Terminal Value,XXX,,,,,
Enterprise Value,XXX,,,,,
(-) Net Debt,(XX),,,,,
Equity Value,XXX,,,,,,,,,,,
Shares Outstanding (M),XX.X,,,,,
IMPLIED PRICE PER SHARE,$XX.XX,,,,,
Current Stock Price,$XX.XX,,,,,
Implied Upside/(Downside),XX%,,,,,

Структура таблицы WACC

COST OF EQUITY CALCULATION,,
Risk-Free Rate (10Y Treasury),X.XX%,[Yellow input]
Beta (5Y monthly),X.XX,[Yellow input]
Equity Risk Premium,X.XX%,[Yellow input]
Cost of Equity,X.XX%,[Calculated blue],,
COST OF DEBT CALCULATION,,
Credit Rating,AA-,[Yellow input]
Pre-Tax Cost of Debt,X.XX%,[Yellow input]
Tax Rate,XX.X%,[Link to DCF sheet]
After-Tax Cost of Debt,X.XX%,[Calculated blue],,
CAPITAL STRUCTURE,,
Current Stock Price,$XX.XX,[Link to DCF]
Shares Outstanding (M),XX.X,[Link to DCF]
Market Capitalization ($M),"X,XXX",[Calculated],,
Total Debt ($M),XXX,[Yellow input]
Cash & Equivalents ($M),XXX,[Yellow input]
Net Debt ($M),XXX,[Calculated],,
Enterprise Value ($M),"X,XXX",[Calculated],,
WACC CALCULATION,Weight,Cost,Contribution
Equity,XX.X%,X.X%,X.XX%
Debt,XX.X%,X.X%,X.XX%,,
WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]

Основные формулы WACC:

Market Cap = Price × Shares
Net Debt = Total Debt - Cash
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / EV
Debt Weight = Net Debt / EV
WACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)

Sensitivity Analysis (Bottom of DCF Sheet)

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.

Location: Rows 87+ on DCF sheet (NOT a separate sheet)

Three sensitivity tables, vertically stacked:

  1. WACC vs Terminal Growth (rows 87-100) - 5x5 grid = 25 cells with formulas
  2. Revenue Growth vs EBIT Margin (rows 102-115) - 5x5 grid = 25 cells with formulas
  3. Beta vs Risk-Free Rate (rows 117-130) - 5x5 grid = 25 cells with formulas

Total formulas to write: 75 (this is required, not optional)

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.

Table Setup: 1. Create table structure with row/column headers (the assumption values to test) 2. Populate EVERY data cell with a formula that: - Uses the row header value (e.g., WACC = 9.0%) - Uses the column header value (e.g., Terminal Growth = 3.0%) - Recalculates the full DCF with those specific assumptions - Returns the implied share price for that scenario 3. All cells must contain working formulas when delivered 4. Format cells with conditional formatting: Green scale for higher values, red scale for lower values 5. Bold the base case cell 6. Leave 1-2 blank rows between tables

No manual intervention required - the sensitivity tables must be fully functional when the user opens the file.

Case Selector Implementation

Three-Case Framework:

Bear Case

Base Case

Bull Case

Formula Implementation:

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.

Recommended pattern (using INDEX): =INDEX(B10:D10, 1, $B$6) where B10:D10 = Bear/Base/Bull values, 1 = row offset, $B$6 = case selector cell (1, 2, or 3)

Then reference the consolidation column in all projections: Revenue Year 1: =D29*(1+$E$10) where $E$10 is the consolidation column value for Year 1 growth.

This approach centralizes scenario logic, making the model easier to audit and maintain.

Deliverables Structure

File naming: [Ticker]_DCF_Model_[Date].xlsx

Two sheets: 1. DCF - Complete model with Bear/Base/Bull cases + three sensitivity tables at bottom (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate) 2. WACC - Cost of capital calculation

Key features: Case selector (1/2/3), consolidation column with INDEX/OFFSET formulas, color-coded cells, cell comments on all inputs, professional borders

Best Practices

Model Construction

  1. Build incrementally: Complete each section before moving to next
  2. Test as building: Enter sample numbers to verify formulas
  3. Use consistent structure: Similar calculations follow similar patterns
  4. Comment complex formulas: Add notes for unusual calculations
  5. Build in checks: Sum checks and balance checks where applicable

Documentation

  1. Document all assumptions: Explain reasoning behind key inputs
  2. Cite data sources: Note where each data point came from
  3. Explain methodology: Describe any non-standard approaches
  4. Flag uncertainties: Highlight areas with limited visibility

Quality Control

  1. Cross-check calculations: Verify math in multiple ways
  2. Stress test assumptions: Run sensitivity to ensure model is robust
  3. Peer review: Have someone else check formulas
  4. Version control: Save versions as work progresses

Common Variations

High-Growth Technology Companies

Mature/Stable Companies

Cyclical Companies

Multi-Segment Companies

Troubleshooting

If you encounter errors or unreasonable results, read TROUBLESHOOTING.md for detailed debugging guidance.

Workflow Integration

At Start of DCF Build

  1. Gather market data:
  2. Check for available MCP servers for current market data
  3. Use web search/fetch for stock prices, beta, and other market metrics
  4. Request from user if specific data is needed

  5. Gather historical financials:

  6. Check for available MCP servers (Daloopa, etc.)
  7. Request from user if not available via MCP
  8. Manual extraction from 10-Ks if necessary

  9. Begin model construction using the DCF methodology detailed in this skill

During Model Construction

  1. Build Excel model using openpyxl with formulas (not hardcoded values)
  2. Follow xlsx skill conventions for formula construction and formatting
  3. Apply fill colors only if requested by user or if specific brand guidelines are provided

Before Delivering Model (MANDATORY)

  1. Verify structure:
  2. Scenario blocks for Bear/Base/Bull with assumptions across projection years
  3. Case selector functional with formulas referencing correct scenario blocks
  4. Sensitivity tables at bottom of DCF sheet (not separate sheet)
  5. Font colors: Blue inputs, black formulas, green sheet links
  6. Cell comments on ALL hardcoded inputs
  7. Professional borders around major sections

  8. Recalculate formulas: Run python recalc.py model.xlsx 30

  9. Check output:

  10. If status is "success" → Continue to step 4
  11. If status is "errors_found" → Check error_summary and read TROUBLESHOOTING.md for debugging guidance

  12. Fix errors and re-run recalc.py until status is "success"

  13. Spot-check formulas:

  14. Test one FCF formula - does it reference the correct assumption rows?
  15. Change case selector - does the consolidation column update properly?
  16. Verify revenue formulas reference consolidation column (not nested IF formulas)

  17. Deliver model

Available Data Sources

Final Output Checklist

Before delivering DCF model:

Required: - Run python recalc.py model.xlsx 30 until status is "success" (zero formula errors) - Two sheets: DCF (with sensitivity at bottom), WACC - Font colors: Blue=inputs, Black=formulas, Green=sheet links - Cell comments on ALL hardcoded inputs - Sensitivity tables fully populated with formulas - Professional borders around major sections

Validation: - OpEx based on revenue (not gross profit) - Terminal value 50-70% of EV - Terminal growth < WACC - Tax rate 21-28% - File naming: [Ticker]_DCF_Model_[Date].xlsx

Data sources — MCP first, web fallback

Many passages below say "use the S&P Kensho MCP / Daloopa MCP / FactSet MCP". Those are commercial financial-data MCPs from the original Cowork plugin context. In Hermes:

Attribution

This skill is adapted from Anthropic's Claude for Financial Services plugin suite (Apache-2.0). The Office-JS / Cowork live-Excel paths have been removed; this version targets headless openpyxl via the excel-author skill's conventions. Original: https://github.com/anthropics/financial-services