recipes.fundamental.valuation.damodaran.sumOfParts Recipes Recipe curated

Damodaran Sum-of-Parts 경로

세그먼트·지주회사·복합 사업에 대해 단일 FCFF 대신 segment별 revenue/EBIT 근거와 결손을 분리하는 절차. 트리거 — 'sum of parts', 'SOTP', '세그먼트 가치평가'.

이 스킬

Damodaran Sum-of-Parts 경로

세그먼트·지주회사·복합 사업에 대해 단일 FCFF 대신 segment별 revenue/EBIT 근거와 결손을 분리하는 절차. 트리거 — 'sum of parts', 'SOTP', '세그먼트 가치평가'.

Recipes curated recipes.fundamental.valuation.damodaran.sumOfParts

연계 절차

이 절차의 단계

  1. 1
    Damodaran 내러티브 맵 recipes.fundamental.valuation.damodaran.narrativeMap

    사업 단위 후보 확인.

  2. 2
    Damodaran 정규화 재무 패널 recipes.fundamental.valuation.damodaran.normalizedFinancials

    전체 재무 baseline 확인.

예시

이런 질문이 들어오면 이 skill 을 쓴다

  • 삼성전자 SOTP 경로 점검

출력

기대 결과

  • reported company ?? ???? fallback? segment blocker
  • SOTP ??? ??? ?? segment evidence
  • ???? ?? ?? ? deferredWithBlocker

공개 호출 방식

import dartlab
import importlib.resources as resources
import json

import polars as pl
from dartlab.synth.damodaranL15 import buildDamodaranMemo

target = "005930"
c = dartlab.Company(target)
market = getattr(c, "market", "US" if not target.isdigit() else "KR")
currency = getattr(c, "currency", "USD" if market == "US" else "KRW")
company_name = getattr(c, "corpName", getattr(c, "companyName", target))


def _loadReference(name):
    return json.loads(resources.files("dartlab.reference.data").joinpath(name).read_text(encoding="utf-8"))


def _safeShow(topic):
    try:
        table = c.panel(topic, freq="Y")
    except TypeError:
        table = c.panel(topic)
    except Exception:
        return pl.DataFrame()
    return table if isinstance(table, pl.DataFrame) else pl.DataFrame()


try:
    dartlab.gather("price", target, market="US") if market == "US" else dartlab.gather("price", target)
except Exception:
    pass

memo = buildDamodaranMemo(
    target=target,
    market=market,
    currency=currency,
    companyName=company_name,
    statements={topic: _safeShow(topic) for topic in ("IS", "BS", "CF")},
    countryDefaults=_loadReference("damodaranDefaults.json"),
    industryDefaults=_loadReference("damodaranIndustryDefaults.json"),
    marketData={},
)

emit_result(
    table=memo["tables"]["sumOfParts"],
    values=memo["headline"],
    date=memo.get("asOf"),
    units=memo["units"],
    sources=memo["sources"],
)

호출 동작

1. 결론 도출

단일 회사 재무와 세그먼트 공시 결손을 분리해 SOTP 가능성을 판정한다.

2. 핵심 근거 수집

Company.panel 재무 3표와 segment topic 또는 frame segment table의 필요성을 함께 남긴다.

3. 메커니즘 분석

세그먼트별 성장·마진·자본집약도가 다르면 단일 FCFF보다 SOTP가 적합하다.

4. 반례·한계

세그먼트 revenue/EBIT가 없으면 singleSegmentFallback으로만 둔다.

5. 후속 모니터링

후속 스킬은 peerMultipleDecompositionfcffDcf다.

대표 반환 형태

sumOfParts : list[dict]part, revenue, ebit, status, source.

연계 절차

  1. recipes.fundamental.valuation.damodaran.narrativeMap - 사업 단위 후보 확인.
  2. recipes.fundamental.valuation.damodaran.normalizedFinancials - 전체 재무 baseline 확인.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported·
Server supported·
MCP supported·
Web AI limited·
Pyodide limited·

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • 복합기업을 단일 마진으로만 평가
절대 금지
  • 세그먼트 근거 없이 임의 SOTP를 만들지 않는다.
  • L2 industry/story 엔진 호출 금지.