recipes.quality.cashflowGovernanceDualSignal Recipes Recipe drafted

현금흐름 품질 × 거버넌스 감사 동시 적신호

accrual ratio (현금흐름 vs 회계이익 갭) + governance amber (이사회 독립성 / 특수관계자) + audit-change (감사인 변경) 3 신호 동시 발현 시 분식 / 회계 신뢰도 적신호. Dechow et al (2011) "Predicting Material Accounting Misstatements" 학술 결과 적용. analysis ↔ scan 격리 메우는 조합. 트리거 — '분식 의심', '회계 신뢰도', 'accrual governance audit'.

이 스킬

현금흐름 품질 × 거버넌스 감사 동시 적신호

accrual ratio (현금흐름 vs 회계이익 갭) + governance amber (이사회 독립성 / 특수관계자) + audit-change (감사인 변경) 3 신호 동시 발현 시 분식 / 회계 신뢰도 적신호. Dechow et al (2011) "Predicting Material Accounting Misstatements" 학술 결과 적용. analysis ↔ scan 격리 메우는 조합. 트리거 — '분식 의심', '회계 신뢰도', 'accrual governance audit'.

Recipes drafted recipes.quality.cashflowGovernanceDualSignal

이어 가기

절차

실행 순서

  1. 1

    `accrualRatio : float` · `highAccrual : bool`

  2. 2

    `fcfNiRatio : float`

  3. 3

    `boardIndependence : float` · `relatedPartyRatio : float` · `govAmber : bool`

  4. 4

    `auditChanged : bool`

  5. 5

    `flagCount : int (0~3)` · `tripleFlag : bool`

예시

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

  • 삼성전자 accrual + governance + audit triple
  • HMM 회계 신뢰도 적신호

공개 호출 방식

import dartlab
import polars as pl

target = "005930"
c = dartlab.Company(target)

def latest_period(df):
    if hasattr(df, "columns"):
        for col in df.columns:
            if str(col)[:4].isdigit():
                return str(col)
    return "latest"

def compact(obj):
    if isinstance(obj, pl.DataFrame):
        return {"type": "DataFrame", "rows": obj.height, "columns": obj.width}
    if isinstance(obj, dict):
        return {"type": "dict", "keys": list(obj.keys())[:8]}
    return {"type": type(obj).__name__}

earnings_quality = c.analysis("earningsQuality")
cashflow = c.analysis("cashflow")
governance = c.analysis("governance")
cf = c.show("CF", freq="Y")

def ready(obj):
    if isinstance(obj, pl.DataFrame):
        return not obj.is_empty()
    return bool(obj)

dual_flags = [ready(earnings_quality), ready(cashflow), ready(governance)]
emit_result(
    table=[
        {"signal": "earningsQuality", "result": compact(earnings_quality)},
        {"signal": "cashflow", "result": compact(cashflow)},
        {"signal": "governance", "result": compact(governance)},
    ],
    values={"target": target, "flagCount": sum(dual_flags), "tripleFlag": all(dual_flags)},
    date=latest_period(cf),
)

호출 동작

  1. c.analysis("earningsQuality") — accrual ratio + FCF/NI 비율.
  2. c.analysis("governance") — 이사회 독립성 + 특수관계자 비중.
  3. c.scan("audit") — 최근 2 년 감사인 변경 여부.
  4. 3 신호 boolean 결합 → triple flag.

대표 반환 형태

pl.DataFrame — 컬럼:

  • accrualRatio : float · highAccrual : bool
  • fcfNiRatio : float
  • boardIndependence : float · relatedPartyRatio : float · govAmber : bool
  • auditChanged : bool
  • flagCount : int (0~3) · tripleFlag : bool

연계 절차

  1. 본 recipe → triple flag 종목 식별.
  2. tripleFlag = True → recipes.credit.quantConsensus 와 결합 — Beneish M-score 분식 신호와 교차 검증.
  3. universe 적용 → recipes.governance.auditNetwork 로 cross-sectional flag.

기본 검증

  • ValidateRecipe(..., capture=False) 기준으로 공개 호출 블록이 실행되어야 한다.
  • requiredEvidence의 근거 종류가 모두 반환되어야 한다.
  • target을 바꿔도 Company("005930") 하드코딩 가정이 남지 않아야 한다.

AI 직접 사용 방식

  1. ReadSkill 에서 사용자 질문과 whenToUse를 맞춰 이 recipe를 고른다.
  2. GetSkillBody 로 본문 전체를 읽고 linkedSkills 순서대로 먼저 필요한 엔진 skill을 확인한다.
  3. ## 공개 호출 방식의 첫 Python 블록을 target만 바꿔 ValidateRecipe(..., capture=False)로 smoke 실행한다.
  4. 실행 결과의 skillRef, tableRef, valueRef, dateRef, executionRef 중 누락된 근거가 있으면 답변을 작성하지 말고 호출 또는 근거 요구를 보강한다.
  5. 답변은 결론, 핵심 근거, 메커니즘, 반례·한계, 후속 모니터링 순서로 작성하고 falsifier.description이 있으면 반례 단락에서 반드시 확인한다.

런타임

실행 환경별 호환성

환경상태비고 / 제한
Local Python supported
Server supported
MCPunknown
Web AIunknown
Pyodide limited

실패 회피

흔한 실패 · 절대 금지

흔한 실패
  • accrual ratio 가 산업 평균 (제조업 vs 서비스) 차이 무시.
  • governance amber 정의가 회사 size / industry 별 thresholds 다름.
절대 금지
  • 단일 신호 (accrual 만) 로 분식 단정 금지.
  • 감사인 변경 = 분식 단정 금지 — 정상 rotation 도 있음.