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

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 unverified recipes.fundamental.valuation.damodaran.sumOfParts

이어 가기

예시

이런 질문이 들어오면 이 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.show(topic, freq="Y")
    except TypeError:
        table = c.show(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.show 재무 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
MCPunknown
Web AIunknown
Pyodideunknown

실패 회피

흔한 실패 · 절대 금지

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