recipes.fundamental.governance.relatedPartyTransactionShare Recipes Recipe curated

특수관계자 매출·매입 비중 추세

특수관계자 (대주주·계열사) 와의 매출 + 매입 + 자금대여 비중의 연도별 추세. 비중 > 30% 또는 *전체 매출보다 빠르게 성장* 시 일감몰아주기·이전가격 의심 후보. governance + forensics 결합. 트리거 — '특수관계자 매출·매입 비중 추세', 'related party transaction share', 'relatedPartyTransactionShare'.

이 스킬

특수관계자 매출·매입 비중 추세

특수관계자 (대주주·계열사) 와의 매출 + 매입 + 자금대여 비중의 연도별 추세. 비중 > 30% 또는 *전체 매출보다 빠르게 성장* 시 일감몰아주기·이전가격 의심 후보. governance + forensics 결합. 트리거 — '특수관계자 매출·매입 비중 추세', 'related party transaction share', 'relatedPartyTransactionShare'.

Recipes curated recipes.fundamental.governance.relatedPartyTransactionShare

연계 절차

이 절차의 단계

  1. 1
    Filing Note Signal Extractor recipes.fundamental.quality.forensics.noteSignalExtractor

    주석 본문에서 특수관계자 분리.

  2. 2
    실질지배력·연결범위·방어권 판단 진단 (IFRS 10) recipes.fundamental.quality.forensics.controllingPowerJudgment

    실질지배력 시점 변경 추적.

  3. 3
    recipes.fundamental.governance.audit recipes.fundamental.governance.audit

    거버넌스 종합 audit.

절차

실행 순서

  1. 1

    Company.gather('relatedPartyTransactions') 연도별 (salesToRelated + purchasesFromRelated)

  2. 2

    Company.panel('revenue') 연도별 총매출

  3. 3

    salesToRpPct = salesToRelated / totalRevenue × 100

  4. 4

    purchPct = purchasesFromRelated / totalRevenue × 100

  5. 5

    특수관계자 거래 raw 누락 (소규모·미공시) → 비적용.

  6. 6

    비중 30% 임계는 KR 공정거래법 일감몰아주기 기준 (총수 일가 지분 30%+) 차용 — 회사별 적용 가능성 다름.

  7. 7

    합법적 그룹 시너지 거래 (지주사 모델) vs 일감몰아주기 분리 어려움.

  8. 8

    매입 측 (purchPct) 은 이전가격 의심 — 별도 가격 적정성 검증 필요.

  9. 9

    의심 라벨 → `recipes.fundamental.quality.forensics.noteSignalExtractor` 로 주석 본문에서 거래 상세 추출.

  10. 10

    absoluteSales 가속 → `recipes.fundamental.quality.forensics.controllingPowerJudgment` 로 실질지배력 변경 추적.

  11. 11

    purchPct ↑ → `recipes.fundamental.governance.audit` 으로 거버넌스 종합 + 이전가격 점검.

  12. 12

    특수관계자 거래 raw 누락 회사는 본 recipe 비적용.

예시

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

  • 005930 특수관계자 매출 비중 연도별
  • 계열사 매출 의존 — 일감몰아주기 의심 신호
  • 대주주 자금대여 비중 추세

출력

기대 결과

  • 매출 / 매입 / 자금대여 특수관계자 비중 5y 시계열
  • 비중 vs 전체 매출 성장률 비교 단일값
  • 라벨 (의심 / 관찰 / 평상 — 30% 또는 전체보다 빠른 성장 임계)

공개 호출 방식

import dartlab
import polars as pl

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

try:
    rpt_rows = c.gather("relatedPartyTransactions").to_dicts()
except Exception:
    rpt_rows = []

try:
    rev_rows = c.panel("revenue").to_dicts()
    rev_by_year = {str(r.get("year"))[:4]: float(r.get("revenue") or 0) for r in rev_rows}
except Exception:
    rev_by_year = {}

audit = []
for r in sorted(rpt_rows, key=lambda x: str(x.get("year") or "")):
    yr = str(r.get("year"))[:4]
    sales_to_rp = float(r.get("salesToRelated") or 0)
    purch_from_rp = float(r.get("purchasesFromRelated") or 0)
    total_rev = rev_by_year.get(yr, 0)
    audit.append({
        "year": yr,
        "salesToRpPct": sales_to_rp / total_rev if total_rev else None,
        "purchPct": purch_from_rp / total_rev if total_rev else None,
        "absoluteSales": sales_to_rp,
    })

table = pl.DataFrame(audit) if audit else pl.DataFrame(
    schema={"year": pl.Utf8, "salesToRpPct": pl.Float64, "purchPct": pl.Float64, "absoluteSales": pl.Float64}
)

emit_result(
    table=table,
    values={"years": table.height,
            "latestSalesPct": float(table["salesToRpPct"].drop_nulls().tail(1)[0]) if table["salesToRpPct"].drop_nulls().len() else None},
    date=str(table["year"].max()) if table.height else None,
    sources=["dartlab://gather/relatedPartyTransactions", "dartlab://show/revenue"],
)

호출 동작

1. 결론 도출

salesToRpPct + purchPct 추세 단정. 예: “5y 추세: salesToRpPct 24% → 31% (+7%p), purchPct 18% → 22% (+4%p) → 매출 측 30% 임계 초과 + 5y 누적 +7%p — 일감몰아주기 의심 후보 (전체 매출 +12% 성장 vs 특수관계자 매출 +45% 가속 — 5y 가속도 우월).”

2. 핵심 근거 수집

  • Company.gather(‘relatedPartyTransactions’) 연도별 (salesToRelated + purchasesFromRelated)
  • Company.panel(‘revenue’) 연도별 총매출
  • salesToRpPct = salesToRelated / totalRevenue × 100
  • purchPct = purchasesFromRelated / totalRevenue × 100

3. 메커니즘 분석

연도별 → 3 metric 추세
   salesToRpPct  → 특수관계자 매출 의존도
   purchPct      → 특수관계자 매입 의존도
   absoluteSales → 절대값 (성장 패턴 분리)

의심 임계 (3 중 1 이상):
   ① salesToRpPct > 30% (절대 임계)
   ② 연도 간 ≥ +5%p 증가 (변화 임계)
   ③ 특수관계자 매출 성장률 > 전체 매출 성장률 × 2 (가속도 임계)

라벨:
   3 임계 모두 미충족 → 평상
   1 임계 충족      → 관찰
   2-3 임계 충족    → 의심 (forensics 후속 필수)

비중 단일 시점만으로 의심 X — 추세 + 절대값 + 매출 가속도 3 axis 결합. 합법 그룹 내부거래도 있으므로 의심 후보 로만 표기.

4. 반례·한계

  • 특수관계자 거래 raw 누락 (소규모·미공시) → 비적용.
  • 비중 30% 임계는 KR 공정거래법 일감몰아주기 기준 (총수 일가 지분 30%+) 차용 — 회사별 적용 가능성 다름.
  • 합법적 그룹 시너지 거래 (지주사 모델) vs 일감몰아주기 분리 어려움.
  • 매입 측 (purchPct) 은 이전가격 의심 — 별도 가격 적정성 검증 필요.

5. 후속 모니터링

  • 의심 라벨 → recipes.fundamental.quality.forensics.noteSignalExtractor 로 주석 본문에서 거래 상세 추출.
  • absoluteSales 가속 → recipes.fundamental.quality.forensics.controllingPowerJudgment 로 실질지배력 변경 추적.
  • purchPct ↑ → recipes.fundamental.governance.audit 으로 거버넌스 종합 + 이전가격 점검.

대표 반환 형태

column의미
year결산 연도
salesToRpPct특수관계자 매출 / 총매출
purchPct특수관계자 매입 / 총매출
absoluteSales특수관계자 매출 절대값

연계 절차

  1. recipes.fundamental.quality.forensics.noteSignalExtractor - 주석 본문에서 특수관계자 분리.
  2. recipes.fundamental.quality.forensics.controllingPowerJudgment - 실질지배력 시점 변경 추적.
  3. recipes.fundamental.governance.audit - 거버넌스 종합 audit.

기본 검증

  • 특수관계자 거래 raw 누락 회사는 본 recipe 비적용.
  • 비중 단일 시점만으로 의심 결론 X — 추세 + 매출 성장률 비교 필수.
  • 합법적 그룹 내부거래도 있으므로 의심 후보 로만 표기.

런타임

실행 환경별 호환성

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