Dcf Model

Строит институциональные DCF-модели оценки в Excel — проекции выручки, расчёт FCF, WACC, терминальная стоимость, сценарии Bear/Base/Bull, таблицы чувствительности 5×5. Работает в связке с excel-author. Используйте для анализа внутренней стоимости акций.

Метаданные навыка

ИсточникОпциональный (устанавливается по запросу) — установить: hermes skills install official/finance/dcf-model
Путьoptional-skills/finance/dcf-model
Версия1.0.0
АвторAnthropic (adapted by Nous Research)
ЛицензияApache-2.0
Платформыlinux, macos, windows
Тегиfinance, valuation, dcf, excel, openpyxl, modeling, investment-banking
Связанные навыкиexcel-author, pptx-author, comps-analysis, lbo-model, 3-statement-model

Справочник: полный SKILL.md

инфо

Ниже приведено полное определение навыка, которое Hermes Agent загружает при его активации. Именно этот текст агент получает в качестве инструкций во время работы навыка.

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

Навык строит институциональные DCF-модели для оценки акций по стандартам инвестиционного банкинга. Каждый анализ даёт детальную Excel-модель с таблицами чувствительности в нижней части листа DCF.

Tools

  • По умолчанию используются все данные, предоставленные пользователем, и доступные MCP-серверы.

Critical Constraints - Read These First

Эти ограничения действуют на протяжении всего построения модели. Прочитайте перед началом работы.

Формулы вместо хардкода (НЕ ОБСУЖДАЕТСЯ):

  • Каждая проекция, маржа, коэффициент дисконтирования, PV и ячейка чувствительности ОБЯЗАНЫ быть живыми Excel-формулами — никаких значений, вычисленных в Python и записанных числом
  • В openpyxl: ws["D20"] = "=D19*(1+$B$8)" — верно; ws["D20"] = calculated_revenue — НЕВЕРНО
  • Хардкодить допустимо только: (1) исторические входные данные; (2) параметры допущений (темпы роста, вводные WACC, терминальный g); (3) текущие рыночные данные (цена акции, долг)
  • Если поймали себя на том, что вычисляете что-то в Python и записываете результат — СТОП. Модель должна пересчитываться при изменении любого допущения

Пошаговая проверка с пользователем (НЕ стройте сразу до конца):

  • После получения данных → покажите блок исходных вводных (выручка, маржи, акции, чистый долг) и подтвердите перед построением проекций
  • После проекций выручки → покажите топ-лайн и темпы роста, подтвердите перед построением маржевой модели
  • После расчёта FCF → покажите полный FCF-план, подтвердите логику перед расчётом WACC
  • После WACC → покажите расчёт и вводные, подтвердите перед дисконтированием
  • После терминальной стоимости и PV → покажите мостик EV → стоимость акционерного капитала → цена акции, подтвердите перед таблицами чувствительности
  • Ошибки лучше ловить на каждом шаге — неверное допущение по марже, обнаруженное после построения таблиц чувствительности, потребует перестройки всего нижестоящего

Таблицы чувствительности:

  • Используйте НЕЧЁТНОЕ число строк и столбцов (стандарт: 5×5, иногда 7×7) — это гарантирует наличие настоящей центральной ячейки
  • Центральная ячейка = базовый сценарий. Строить оси нужно так, чтобы заголовок средней строки и заголовок среднего столбца в точности совпадали с фактическими допущениями модели (например, если базовый WACC = 9,0%, средняя строка — 9,0%; если терминальный g = 3,0%, средний столбец — 3,0%). Значение в центральной ячейке должно совпадать с фактической расчётной ценой акции из модели — это проверка корректности таблицы.
  • Выделите центральную ячейку заливкой средне-голубого цвета (#BDD7EE) + жирным шрифтом, чтобы базовый сценарий был сразу заметен
  • Заполните ВСЕ ячейки (обычно 3 таблицы × 25 ячеек = 75) полными формулами пересчёта DCF
  • Используйте циклы openpyxl для программной записи формул
  • НИКАКИХ текстов-заглушек, НИКАКИХ линейных приближений, НИКАКИХ ручных шагов
  • Каждая ячейка должна полностью пересчитывать DCF для соответствующей комбинации допущений

Комментарии к ячейкам:

  • Добавляйте комментарии СРАЗУ при создании каждого хардкодированного значения
  • Формат: “Source: [System/Document], [Date], [Reference], [URL if applicable]”
  • Каждый синий вводный должен иметь комментарий до перехода к следующей секции
  • Не откладывайте до конца и не пишите “TODO: add source”

Планирование раскладки модели:

  • Определите ВСЕ позиции строк по секциям ДО записи формул
  • Сначала запишите ВСЕ заголовки и подписи
  • Затем ВСЕ разделители секций и пустые строки
  • И только ПОТОМ пишите формулы, используя зафиксированные позиции строк
  • Немедленно тестируйте формулы после создания

Пересчёт формул:

  • Запустите python recalc.py model.xlsx 30 перед передачей модели
  • Устраняйте ВСЕ ошибки до статуса “success”
  • Допустимо ноль ошибок формул (#REF!, #DIV/0!, #VALUE! и т. д.)

Блоки сценариев:

  • Создавайте отдельные блоки для сценариев Bear/Base/Bull
  • Показывайте допущения горизонтально по годам проекции внутри каждого блока
  • Используйте IF-формулы: =IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell]))
  • Проверяйте, что формулы ссылаются на правильные ячейки блоков сценариев

DCF Process Workflow

Step 1: Data Retrieval and Validation

Получайте данные с MCP-серверов, от пользователя и из веба.

Приоритет источников данных:

  1. MCP-серверы (если настроены) — структурированные финансовые данные от провайдеров, например Daloopa
  2. Данные от пользователя — исторические финансовые показатели из его исследований
  3. Поиск/парсинг веба — текущие цены, бета, долг и кэш при необходимости

Чеклист валидации:

  • Проверьте чистый долг vs чистые денежные средства (критично для оценки)
  • Подтвердите разводнённое количество акций (проверьте на наличие недавних buyback/допэмиссий)
  • Убедитесь, что исторические маржи соответствуют бизнес-модели
  • Сопоставьте темпы роста выручки с отраслевыми бенчмарками
  • Проверьте налоговую ставку на разумность (обычно 21–28%)

Step 2: Historical Analysis (3-5 years)

Проанализируйте и задокументируйте:

  • Динамику роста выручки: рассчитайте CAGR, определите драйверы
  • Прогрессию маржей: отслеживайте валовую маржу, маржу EBIT, маржу FCF
  • Капиталоёмкость: D&A и CapEx в % от выручки
  • Эффективность оборотного капитала: изменения NWC в % от прироста выручки
  • Метрики доходности: тенденции ROIC, ROE

Создайте сводные таблицы:

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%

Step 3: Build Revenue Projections

Методология:

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

Структура темпов роста:

  • Год 1–2: более высокий рост — видимость на ближайший период лучше
  • Год 3–4: постепенное замедление до отраслевого среднего
  • Год 5+: приближение к терминальному темпу роста

Структура формул:

  • Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)
  • Growth %(Year N) = Revenue(Year N) / Revenue(Year 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%)

Step 4: Operating Expense Modeling

Анализ постоянных и переменных затрат:

Операционные расходы должны моделировать реалистичный операционный леверидж:

  • Sales & Marketing: обычно 15–40% от выручки в зависимости от бизнес-модели
  • Research & Development: обычно 10–30% для технологических компаний
  • General & Administrative: обычно 8–15% от выручки, снижается при масштабировании

Ключевые принципы:

  • ВСЕ процентные показатели рассчитываются от ВЫРУЧКИ, а не от валовой прибыли
  • Моделируйте операционный леверидж: % должен снижаться по мере роста выручки
  • Ведите отдельные строки для S&M, R&D, G&A
  • Рассчитывайте EBIT = Gross Profit - Total OpEx

Ориентиры по расширению маржи:

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)

Step 5: Free Cash Flow Calculation

Рассчитывайте FCF в правильной последовательности:

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

Моделирование оборотного капитала:

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

Поддерживающий и инвестиционный CapEx:

  • Поддерживающий CapEx: обеспечивает текущие операции (~2–3% выручки)
  • Инвестиционный CapEx: поддерживает расширение (дополнительно 2–5% выручки)
  • Суммарный CapEx должен соответствовать стратегии роста компании

Step 6: Cost of Capital (WACC) Research

Методология 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)

Особые случаи:

  • Чистые денежные средства: если Cash > Debt, Net Debt ОТРИЦАТЕЛЕН
    • Debt Weight может быть отрицательным
    • Расчёт WACC корректируется соответственно
  • Нет долга: WACC = Cost of Equity

Типичные диапазоны WACC:

  • Large Cap, Stable: 7–9%
  • Growth Companies: 9–12%
  • High Growth/Risk: 12–15%

Step 7: Discount Rate Application (5-10 Year Forecast)

Mid-Year Convention:

  • Предполагается, что денежные потоки поступают в середине года
  • Период дисконтирования: 0,5; 1,5; 2,5; 3,5; 4,5 и т. д.
  • Discount Factor = 1 / (1 + WACC)^Period

Расчёт приведённой стоимости:

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 года: зрелые, стабильные компании

Step 8: Terminal Value Calculation

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

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% стоимости предприятия (EV)
  • Если >75%, модель слишком зависит от терминальных допущений
  • Если <40%, проверьте, не слишком ли консервативны терминальные допущения

Step 9: Enterprise to Equity Value Bridge

Структура итогов оценки:

(+) 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%

Ключевые корректировки:

  • Net Debt = Total Debt - Cash & Equivalents
    • Если положительный: вычитаем из EV (снижает стоимость акционерного капитала)
    • Если отрицательный (Net Cash): добавляем к 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%

Step 10: Sensitivity Analysis

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

  1. WACC vs Terminal Growth — чувствительность EV к ставке дисконтирования и темпу бессрочного роста
  2. Revenue Growth vs EBIT Margin — влияние топ-лайн роста и операционного левериджа
  3. Beta vs Risk-Free Rate — чувствительность к компонентам стоимости собственного капитала

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

<correct_patterns>

В этом разделе — ПРАВИЛЬНЫЕ подходы при построении DCF-моделей.

Scenario Block Selection Pattern - Follow This Approach

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

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

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%

Каждый блок сценария ОБЯЗАТЕЛЬНО должен содержать строку заголовков столбцов с годами проекции (FY2025E, FY2026E и т. д.) сразу под названием блока. Без неё пользователь не поймёт, какое значение допущения к какому году относится.

Как ссылаться на допущения — создайте консолидирующий столбец:

  1. Ячейка-переключатель сценариев (например, B6) содержит 1=Bear, 2=Base или 3=Bull
  2. Создайте консолидирующий столбец с формулами INDEX или OFFSET, извлекающими данные из нужного блока
  3. Формулы проекций ссылаются на консолидирующий столбец (чистые ссылки на ячейки)
  4. Каждый блок содержит полный набор DCF-допущений по всем годам проекции

Рекомендуемый паттерн для консолидирующего столбца (INDEX): =INDEX(B10:D10, 1, $B$6)

НЕ это — разрозненные IF-формулы повсюду: =IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))

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

Correct Revenue Projection Pattern

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

Шаг 1 — консолидирующий столбец для роста FY1: =INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)

Шаг 2 — проекция выручки ссылается на консолидирующий столбец: Revenue Year 1: =D29*(1+$E$10)

Где:

  • D29 = выручка предыдущего года
  • $E$10 = ячейка консолидирующего столбца для роста FY1 (содержит INDEX-формулу)
  • $B$6 = ячейка-переключатель сценариев (1=Bear, 2=Base, 3=Bull)

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

Correct FCF Formula Pattern

Используйте консолидирующие столбцы с INDEX-формулами, затем ссылайтесь на них в расчётах 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

Каждая ячейка консолидирующего столбца содержит INDEX-формулу, извлекающую данные из соответствующего блока сценария по переключателю. Формулы проекций остаются чистыми и легко проверяемыми.

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

Correct Cell Comment Format

Каждое хардкодированное значение должно иметь комментарий в этом формате:

“Source: [System/Document], [Date], [Reference], [URL if applicable]”

Примеры:

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

Correct Assumption Table Structure

КРИТИЧНО: каждый блок сценария требует ТРЁХ структурных элементов:

  1. Строка заголовка секции (объединённые ячейки): например, “BEAR CASE ASSUMPTIONS”
  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%,,,,

БЕЗ строки заголовков столбцов с годами проекции (FY2025E, FY2026E и т. д.) пользователь не поймёт, к какому году относится то или иное значение. Эта строка ОБЯЗАТЕЛЬНА.

Затем создайте консолидирующий столбец (обычно следующий вправо) с INDEX-формулами, которые извлекают данные из выбранного блока сценария по переключателю. Именно на этот столбец ссылаются формулы проекций.

Correct Row Planning Process

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 это выглядит так:

  • Правильно: сначала заголовки, потом формулы (формулы стабильны)
  • Неправильно: сначала формулы, потом заголовки (формулы ломаются)

Correct Sensitivity Table Implementation

ВАЖНО: Это НЕ функция 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]   ← средняя строка = базовый WACC
              9.5%,       [fml], [fml], [fml], [fml], [fml]
             10.0%,       [fml], [fml], [fml], [fml], [fml]

                          средний столбец = базовый терминальный g

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

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

Паттерн формулы — ячейка B88 (WACC=8,0%, Terminal Growth=2,0%):

Формула в B88 должна пересчитывать подразумеваемую цену, используя:

  • WACC из заголовка строки: $A88 (8,0%)
  • Terminal Growth из заголовка столбца: B$87 (2,0%)

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

Пример структуры формулы: =([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) / [Shares]

КРИТИЧНО — запишите формулу в КАЖДУЮ ячейку сетки 5×5 (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>

<common_mistakes>

В этом разделе — НЕПРАВИЛЬНЫЕ подходы при построении DCF-моделей.

WRONG: Simplified Sensitivity Table Approximations or Placeholder Text

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

// 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"]

Не путайте терминологию:

  • ❌ “Sensitivity tables need Excel’s Data Table feature” (НЕТ — это специальный инструмент Excel, мы его не используем)
  • ✅ “Sensitivity tables are simple grids with formulas in each cell” (ДА — именно это мы строим)

Почему такие сокращения недопустимы:

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

Типичное оправдание, которое нужно ОТВЕРГНУТЬ: “Писать 75+ формул сложно, поэтому оставлю заметку для пользователя.”

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

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

WRONG: Missing Cell Comments

Не делайте так:

  • Создавать все хардкодированные вводные без комментариев
  • Думать «добавлю позже»
  • Писать “TODO: add source”
  • Оставлять синие вводные без документирования

Почему это ошибка:

  • Невозможно проверить источник данных
  • Нарушает требования навыка xlsx
  • Не готово к аудиту
  • Потеря времени при исправлении позже

Правильно: добавляйте комментарий к ячейке СРАЗУ при её создании.

WRONG: Formula Row References Off

Симптом: FCF-секция ссылается на неправильные строки допущений: D&A: =E29*$E$34 // Should be $E$21, but referencing wrong row CapEx: =E29*$E$41 // Should be $E$22, but row shifted

Почему это происходит:

  1. Сначала написаны формулы
  2. Затем вставлены заголовки
  3. Все ссылки на строки сдвинулись
  4. Формулы ссылаются на неправильные ячейки → ошибки #REF!

Правильно: зафиксируйте раскладку строк СНАЧАЛА, затем пишите формулы.

WRONG: Single Row for Each Assumption Across Scenarios

Не структурируйте допущения так:

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

Такая вертикальная раскладка мешает видеть динамику допущений по годам внутри каждого сценария.

Почему это ошибка:

  • Сложно отследить, как допущения меняются по годам внутри сценария
  • Труднее сравнивать допущения сценариев по всему периоду проекции
  • Менее наглядно для проверки логики сценариев

Правильно:

  • Создайте отдельные блоки для каждого сценария (Bear, Base, Bull)
  • Внутри каждого блока показывайте допущения горизонтально по годам
  • Так каждый сценарий читается как единый набор допущений

WRONG: No Borders

Не сдавайте модель без границ:

  • Нет разделения секций
  • Все ячейки сливаются
  • Сложно читать, непрофессионально

Почему это ошибка:

  • Не готово для клиента
  • Неудобная навигация
  • Выглядит любительски

Правильно: добавьте границы вокруг всех основных секций.

WRONG: Wrong Font Colors or No Font Color Distinction

Не делайте так:

  • Весь текст чёрный
  • Только заливка ячеек без изменения цвета шрифта
  • Путаница, какие ячейки синие, а какие чёрные

Почему это ошибка:

  • Невозможно отличить вводные от формул
  • Аудит становится невозможным
  • Нарушает требования навыка xlsx

Правильно: синий текст для ВСЕХ хардкодированных вводных, чёрный — для ВСЕХ формул, зелёный — для ссылок на другие листы.

WRONG: Operating Expenses Based on Gross Profit

Не делайте так: S&M: =E33*0.15 // E33 = Gross Profit (WRONG)

Почему это ошибка:

  • Операционные расходы масштабируются от выручки, а не от валовой прибыли
  • Даёт нереалистичную динамику маржей
  • Не соответствует реальной экономике бизнеса

Правильно: S&M: =E29*0.15 // E29 = Revenue (CORRECT)

TOP 5 ERRORS SUMMARY

  1. Неправильные ссылки на строки в формулах → определите ВСЕ позиции строк ДО написания формул
  2. Отсутствующие комментарии к ячейкам → добавляйте при создании, не в конце
  3. Упрощённые таблицы чувствительности → заполняйте все ячейки полными формулами пересчёта DCF, а не приближениями
  4. Неверные ссылки на блоки сценариев → убедитесь, что IF-формулы тянут данные из правильных блоков Bear/Base/Bull
  5. Нет границ → добавьте профессиональные границы секций для готовности к клиенту

Дополнительно следите за этими ошибками:

WACC Calculation Errors

  • Смешение балансовых и рыночных значений в структуре капитала
  • Неверное применение levered vs unlevered beta
  • Неправильное применение налоговой ставки к стоимости долга
  • Некорректная безрисковая ставка (необходимо использовать текущую доходность 10-летних US Treasuries)
  • Игнорирование чистого долга vs чистых денежных средств

Growth Assumption Flaws

  • Терминальный темп роста > WACC (создаёт бесконечную стоимость)
  • Темпы роста в проекции несовместимы с исторической динамикой
  • Игнорирование отраслевых ограничений роста
  • Несоответствие роста выручки юнит-экономике
  • Расширение маржей без операционного обоснования

Terminal Value Mistakes

  • Неверный метод (бессрочный рост vs выходной мультипликатор)
  • Терминальная стоимость >80% EV (чрезмерная зависимость от терминальных допущений)
  • Несоответствие терминальных маржей стационарным допущениям
  • Неверный период дисконтирования для терминальной стоимости

Cash Flow Projection Errors

  • Операционные расходы от валовой прибыли вместо выручки
  • Несоответствие % D&A/CapEx бизнес-модели
  • Неверный расчёт изменений оборотного капитала
  • Непоследовательная налоговая ставка по годам
  • Ошибки в расчёте NOPAT

Это самые распространённые ошибки. Перечитайте этот раздел перед началом построения любой DCF-модели.

</common_mistakes>

Excel File Creation

Навык использует навык xlsx для всех операций с таблицами. Навык xlsx предоставляет:

  • Стандартизированные правила построения формул
  • Соглашения по форматированию чисел
  • Автоматизированный пересчёт формул через скрипт recalc.py
  • Комплексную проверку ошибок и валидацию

Все Excel-файлы, созданные этим навыком, должны соответствовать требованиям навыка xlsx: нулевое количество ошибок формул и корректный пересчёт.

Quality Rubric

Каждая DCF-модель должна по максимуму соответствовать следующим критериям:

  1. Реалистичные допущения по выручке и маржам на основе исторических данных
  2. Корректный расчёт стоимости капитала по методологии CAPM
  3. Полный анализ чувствительности с диапазонами оценки
  4. Прозрачный расчёт терминальной стоимости с обоснованием
  5. Профессиональная структура модели для сценарного анализа
  6. Документирование всех ключевых допущений

Input Requirements

Minimum Required Inputs

  1. Идентификатор компании: тикер или название
  2. Допущения по росту: темпы роста выручки на период проекции (или “use consensus”)
  3. Опциональные параметры:
    • Период проекции (по умолчанию: 5 лет)
    • Сценарии (Bear/Base/Bull — допущения по росту и маржам)
    • Терминальный темп роста (по умолчанию: 2,5–3,0%)
    • Конкретные вводные WACC, если не использовать CAPM

Excel Model Structure

Sheet Architecture

Создайте два листа:

  1. DCF — основная модель оценки с таблицами чувствительности внизу
  2. WACC — расчёт стоимости капитала

КРИТИЧНО: таблицы чувствительности размещаются В НИЖНЕЙ ЧАСТИ листа DCF (не на отдельном листе). Так все итоги оценки остаются вместе.

Formula Recalculation (MANDATORY)

После создания или изменения Excel-модели пересчитайте все формулы скриптом recalc.py из навыка excel-author:

python recalc.py [path_to_excel_file] [timeout_seconds]

Пример:

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

Скрипт:

  • Пересчитает все формулы на всех листах через LibreOffice
  • Сканирует ВСЕ ячейки на наличие Excel-ошибок (#REF!, #DIV/0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N/A)
  • Возвращает детализированный 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 до статуса “success” перед сдачей модели.

Formatting Standards

ВАЖНО: Следуйте навыку 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 серый + белый. Не добавляйте лишнего.
  • Шаблоны от пользователя и его цветовые предпочтения всегда имеют приоритет над этими умолчаниями.

Как работают оба слоя вместе:

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

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

Border Standards (REQUIRED for Professional Appearance)

Толстые границы (1,5pt) вокруг основных секций:

  • Секция KEY INPUTS
  • Секция PROJECTION ASSUMPTIONS
  • Секция 5-YEAR CASH FLOW PROJECTION
  • Секция TERMINAL VALUE
  • Секция VALUATION SUMMARY
  • Каждая таблица SENSITIVITY ANALYSIS

Средние границы (1pt) между подсекциями:

  • Company Details vs Historical Performance
  • Growth Assumptions vs EBIT Margin vs FCF Parameters

Тонкие границы (0,5pt) вокруг таблиц данных:

  • Таблицы допущений по сценариям (Bear | Base | Bull | Selected)
  • Матрица исторических и прогнозных финансовых показателей

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

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

Форматы чисел (по стандартам навыка xlsx):

  • Годы: форматировать как текстовые строки (например, “2024”, а не “2,024”)
  • Проценты: 0.0% (один знак после запятой)
  • Валюта: $#,##0 для миллионов; $#,##0.00 для цены акции — ВСЕГДА указывайте единицы в заголовках (“Revenue ($mm)”)
  • Нули: использовать форматирование числа, чтобы все нули отображались как ”-” (например, $#,##0;($#,##0);-)
  • Большие числа: #,##0 с разделителем тысяч
  • Отрицательные числа: (#,##0) в скобках (НЕ знак минус)

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

Согласно навыку xlsx, ВСЕ хардкодированные значения должны иметь комментарии с указанием источника. Формат: “Source: [System/Document], [Date], [Reference], [URL if applicable]”

КРИТИЧНО: добавляйте комментарии ПРИ СОЗДАНИИ ЯЧЕЕК. Не откладывайте.

DCF Sheet Detailed Structure

Section 1: Header

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

Section 2: Market Data (NOT case dependent)

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]

Section 3: DCF Scenario Assumptions

Создайте отдельные блоки допущений для каждого сценария (Bear, Base, Bull) с DCF-допущениями (Revenue Growth %, EBIT Margin %, Tax Rate %, D&A % of Revenue, CapEx % of Revenue, NWC Change % of ΔRev, Terminal Growth Rate, WACC), разложенными горизонтально по годам проекции. Каждый блок должен включать заголовок секции, строку заголовков столбцов с годами (FY1, FY2 и т. д.) и строки данных. Точная раскладка — в разделе <correct_patterns> «Correct Assumption Table Structure».

Section 4: Historical & Projected Financials

Ссылайтесь на консолидирующий столбец (например, “Selected Case”), который тянет данные из блоков сценариев, а не разбрасывайте IF-формулы по всем строкам проекции.

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

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

Section 5: Free Cash Flow Build

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

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 = % допущения CapEx (консолидирующий столбец, строка 22)
  • $E$23 = % допущения NWC (консолидирующий столбец, строка 23)
  • E29 = Выручка за год (строка 29)
  • E45 = NOPAT за год (строка 45)

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

Section 6: Discounting & Valuation

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 Sheet Structure

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)

НАПОМИНАНИЕ ПО ТЕРМИНОЛОГИИ: «таблицы чувствительности» = простые двумерные сетки с заголовками строк, заголовками столбцов и формулами в каждой ячейке данных. НЕ функция Excel «Таблица данных» (Данные → Анализ «что если» → Таблица данных). Для записи обычных Excel-формул в каждую ячейку используется openpyxl.

Расположение: строки 87+ на листе DCF (НЕ отдельный лист)

Три таблицы чувствительности, расположенные вертикально:

  1. WACC vs Terminal Growth (строки 87–100) — сетка 5×5 = 25 ячеек с формулами
  2. Revenue Growth vs EBIT Margin (строки 102–115) — сетка 5×5 = 25 ячеек с формулами
  3. Beta vs Risk-Free Rate (строки 117–130) — сетка 5×5 = 25 ячеек с формулами

Итого формул: 75 (это требование, не опция)

КРИТИЧНО: все ячейки таблиц чувствительности должны быть заполнены программно через openpyxl. НЕ используйте линейные приближения. НЕ оставляйте текст-заглушки или инструкции по ручным шагам. НЕ оправдывайте пустые ячейки «сложностью» — используйте Python-цикл для генерации формул.

Настройка таблицы:

  1. Создайте структуру с заголовками строк/столбцов (значения допущений для проверки)
  2. Заполните КАЖДУЮ ячейку данных формулой, которая:
    • Использует значение заголовка строки (например, WACC = 9,0%)
    • Использует значение заголовка столбца (например, Terminal Growth = 3,0%)
    • Полностью пересчитывает DCF с этими конкретными допущениями
    • Возвращает подразумеваемую цену акции для данного сценария
  3. Все ячейки должны содержать рабочие формулы при сдаче
  4. Форматируйте ячейки условным форматированием: зелёная шкала для высоких значений, красная — для низких
  5. Выделите жирным ячейку базового сценария
  6. Оставляйте 1–2 пустые строки между таблицами

Никакого ручного вмешательства — таблицы чувствительности должны полностью работать при открытии файла пользователем.

Case Selector Implementation

Трёхсценарная структура:

Bear Case

  • Консервативный рост выручки (нижняя граница исторического диапазона)
  • Сжатие маржей или их отсутствие
  • Более высокий WACC (рост премии за риск)
  • Более низкий терминальный темп роста
  • Более высокие допущения по CapEx

Base Case

  • Рост выручки по консенсусу или согласно прогнозам менеджмента
  • Умеренное расширение маржей на основе операционного левериджа
  • WACC, подразумеваемый текущим рынком
  • Терминальный рост в соответствии с ВВП (2,5–3,0%)
  • Стандартные допущения по CapEx

Bull Case

  • Оптимистичный рост выручки (верхняя граница прогнозов)
  • Значительное расширение маржей
  • Более низкий WACC (снижение премии за риск)
  • Более высокий терминальный рост (3,5–5,0%)
  • Снижение капиталоёмкости

Реализация формул:

НЕ используйте вложенные IF-формулы по всей модели. Вместо этого создайте консолидирующий столбец с INDEX или OFFSET для извлечения данных из нужного блока сценария.

Рекомендуемый паттерн (INDEX): =INDEX(B10:D10, 1, $B$6), где B10:D10 = значения Bear/Base/Bull, 1 = смещение строки, $B$6 = ячейка-переключатель сценариев (1, 2 или 3)

Затем ссылайтесь на консолидирующий столбец во всех проекциях: Revenue Year 1: =D29*(1+$E$10), где $E$10 — значение консолидирующего столбца для роста в году 1.

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

Deliverables Structure

Именование файла: [Ticker]_DCF_Model_[Date].xlsx

Два листа:

  1. DCF — полная модель с вариантами Bear/Base/Bull + три таблицы чувствительности внизу (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)
  2. WACC — расчёт стоимости капитала

Ключевые функции: переключатель сценариев (1/2/3), консолидирующий столбец с формулами INDEX/OFFSET, цветовая маркировка ячеек, комментарии на всех вводных, профессиональные границы.

Best Practices

Model Construction

  1. Стройте последовательно: завершайте каждую секцию перед переходом к следующей
  2. Тестируйте по ходу: вводите пробные числа для проверки формул
  3. Соблюдайте единую структуру: похожие расчёты — по одним паттернам
  4. Комментируйте сложные формулы: добавляйте пояснения к нестандартным расчётам
  5. Встраивайте проверки: контрольные суммы там, где применимо

Documentation

  1. Документируйте все допущения: обосновывайте ключевые вводные
  2. Указывайте источники данных: фиксируйте, откуда взята каждая точка данных
  3. Описывайте методологию: поясняйте нестандартные подходы
  4. Отмечайте неопределённости: выделяйте области с ограниченной видимостью

Quality Control

  1. Перекрёстная проверка расчётов: верифицируйте математику несколькими способами
  2. Стресс-тестирование допущений: запускайте анализ чувствительности для проверки устойчивости модели
  3. Проверка коллегой: попросите кого-то проверить формулы
  4. Контроль версий: сохраняйте версии по ходу работы

Common Variations

High-Growth Technology Companies

  • Более длинный период проекции (7–10 лет)
  • Высокие начальные темпы роста (20–30%)
  • Значительное расширение маржей со временем
  • Более высокий WACC (12–15%)
  • Моделирование юнит-экономики (пользователи, ARPU и т. д.)

Mature/Stable Companies

  • Более короткий период проекции (3–5 лет)
  • Умеренные темпы роста (ВВП +1–3%)
  • Стабильные маржи
  • Более низкий WACC (7–9%)
  • Фокус на генерации кэша и распределении капитала

Cyclical Companies

  • Моделирование через экономический цикл
  • Нормализация маржей на уровне середины цикла
  • Сценарии спада и пика
  • Корректировка беты на цикличность

Multi-Segment Companies

  • Отдельные DCF для каждого бизнес-сегмента
  • Разные темпы роста и маржи по сегментам
  • Оценка методом суммы частей
  • Учёт синергий

Troubleshooting

При возникновении ошибок или нереалистичных результатов читайте TROUBLESHOOTING.md с детальным руководством по отладке.

Workflow Integration

At Start of DCF Build

  1. Сбор рыночных данных:

    • Проверьте наличие MCP-серверов для текущих рыночных данных
    • Используйте веб-поиск/парсинг для цен акций, беты и других рыночных метрик
    • Запросите у пользователя, если нужны конкретные данные
  2. Сбор исторических финансовых данных:

    • Проверьте наличие MCP-серверов (Daloopa и др.)
    • Запросите у пользователя, если данные недоступны через MCP
    • Ручное извлечение из отчётов 10-K как запасной вариант
  3. Начало построения модели по DCF-методологии, описанной в навыке

During Model Construction

  1. Стройте Excel-модель через openpyxl с формулами (не хардкодированными значениями)
  2. Следуйте соглашениям навыка xlsx по построению формул и форматированию
  3. Применяйте заливку только по запросу пользователя или при наличии конкретных брендинговых требований

Before Delivering Model (MANDATORY)

  1. Проверьте структуру:

    • Блоки сценариев Bear/Base/Bull с допущениями по годам
    • Переключатель сценариев работает, формулы ссылаются на правильные блоки
    • Таблицы чувствительности внизу листа DCF (не на отдельном листе)
    • Цвета шрифтов: синий — вводные, чёрный — формулы, зелёный — ссылки на другой лист
    • Комментарии на ВСЕХ хардкодированных вводных
    • Профессиональные границы вокруг основных секций
  2. Пересчитайте формулы: python recalc.py model.xlsx 30

  3. Проверьте результат:

    • Если status равен "success" → переходите к шагу 4
    • Если status равен "errors_found" → изучите error_summary и читайте TROUBLESHOOTING.md
  4. Исправьте ошибки и повторно запустите recalc.py до статуса “success”

  5. Точечная проверка формул:

    • Проверьте одну FCF-формулу — ссылается ли она на правильные строки допущений?
    • Измените переключатель сценариев — обновляется ли консолидирующий столбец?
    • Убедитесь, что формулы выручки ссылаются на консолидирующий столбец (а не на вложенные IF)
  6. Передайте модель

Available Data Sources

  • MCP-серверы: если настроены (Daloopa для исторических финансовых данных)
  • Веб-поиск/парсинг: для текущих цен акций, беты и рыночных данных
  • Данные от пользователя: исторические финансовые показатели, консенсус-прогнозы
  • Ручное извлечение: отчёты SEC EDGAR как запасной вариант

Final Output Checklist

Перед сдачей DCF-модели:

Обязательно:

  • Запустить python recalc.py model.xlsx 30 до статуса “success” (нулевое количество ошибок формул)
  • Два листа: DCF (с таблицами чувствительности внизу), WACC
  • Цвета шрифтов: синий = вводные, чёрный = формулы, зелёный = ссылки на другой лист
  • Комментарии на ВСЕХ хардкодированных вводных
  • Таблицы чувствительности полностью заполнены формулами
  • Профессиональные границы вокруг основных секций

Валидация:

  • OpEx от выручки (не от валовой прибыли)
  • Терминальная стоимость 50–70% от EV
  • Терминальный рост < WACC
  • Налоговая ставка 21–28%
  • Именование файла: [Ticker]_DCF_Model_[Date].xlsx

Data sources — MCP first, web fallback

Многие фрагменты ниже упоминают «S&P Kensho MCP / Daloopa MCP / FactSet MCP». Это коммерческие MCP-серверы финансовых данных из исходного контекста плагина Cowork. В Hermes Agent:

  • Если есть структурированный MCP-сервер финансовых данных (Hermes Agent поддерживает MCP — см. навык native-mcp), предпочитайте его для point-in-time сопоставимых, прецедентных сделок и отчётности.
  • В противном случае используйте:
    • web_search / web_extract по SEC EDGAR (https://www.sec.gov/cgi-bin/browse-edgar) для US-отчётности
    • IR-страницы компаний для пресс-релизов и презентаций к результатам
    • browser_navigate для интерактивных порталов данных
    • Данные от пользователя (явно запрашивайте, если в контексте нет)
  • Никогда не выдумывайте. Если мультипликатор, прецедент или данные из отчётности нельзя верифицировать, пометьте ячейку как [UNSOURCED] и сообщите об этом пользователю.

Attribution

Навык адаптирован из пакета плагинов Anthropic’s Claude for Financial Services (Apache-2.0). Пути Office-JS / Cowork live-Excel убраны; эта версия работает с headless openpyxl через соглашения навыка excel-author. Оригинал: https://github.com/anthropics/financial-services

ESC