절차
실행 순서
- 1
단일 기업 수익성 질문은 Company 경로가 기본이다. 먼저 Company.analysis와 Company.show 기능에서 수익성 관련 축과 원자료 topic을 찾는다.
- 2
Company snapshot 또는 Company.analysis가 가능하면 그것을 1차 근거로 둔다. `dart.scan/finance-lite.parquet`는 횡단 비교·후보 발굴·Company 원자료 부재 시의 보조 근거로만 사용한다.
- 3
질문이 “수익성 분석”이면 저평가/후보 scan skill로 목적을 바꾸지 않는다. screen은 peer 위치나 후보 발굴이 명시될 때만 보조로 연결한다.
- 4
finance-lite를 쓰는 경우 `stockCode`, 연결/별도, 손익계산서 구분, 기간 구분을 먼저 확인하고 매출·영업이익·순이익 계정 후보를 실제 계정명으로 좁힌다.
- 5
Polars에서 wide table을 만들 때 lazy pivot을 가정하지 말고 collect 후 eager pivot을 사용한다. 현재 Polars는 pivot 축에 `on`을 쓰는 경로가 안전하다.
- 6
매출, 영업이익률, 순이익률, 현금성 보조 지표를 같은 기간 기준으로 만들고, 실행 결과는 숫자 metric이 검산 가능한 table/value ref가 되도록 남긴다.
- 7
최종 material claim은 기간·metric·값을 포함하되, 각 claim이 해당 table/value ref를 직접 참조하게 한다. evidence refs만 나열하고 claim refs를 비워 두면 숫자 검산을 통과하지 못한다.
- 8
scan 또는 macro 맥락이 있으면 업황과 기업 수익성 변화를 연결한다.
- 9
claim은 기간, metric, table 또는 value ref에 묶는다.
- 10
`c = dartlab.Company("005930")`
- 11
`c.analysis()`
- 12
`c.analysis("financial", "수익성")`
예시
이런 질문이 들어오면 이 skill 을 쓴다
- 삼성전자 수익성 분석해줘
- 영업이익률이 좋아졌는지 봐줘
출력
기대 결과
- profitability thesis
- 기간별 수익성 표
- 업황/섹터 연결
- 한계
절차
- 단일 기업 수익성 질문은 Company 경로가 기본이다. 먼저 Company.analysis와 Company.show capability에서 수익성 관련 축과 원자료 topic을 찾는다.
- Company snapshot 또는 Company.analysis가 가능하면 그것을 1차 근거로 둔다.
dart.scan/finance-lite.parquet는 횡단 비교·후보 발굴·Company 원자료 부재 시의 보조 근거로만 사용한다. - 질문이 “수익성 분석”이면 저평가/후보 scan skill로 목적을 바꾸지 않는다. screen은 peer 위치나 후보 발굴이 명시될 때만 보조로 연결한다.
- finance-lite를 쓰는 경우
stockCode, 연결/별도, 손익계산서 구분, 기간 구분을 먼저 확인하고 매출·영업이익·순이익 계정 후보를 실제 계정명으로 좁힌다. - Polars에서 wide table을 만들 때 lazy pivot을 가정하지 말고 collect 후 eager pivot을 사용한다. 현재 Polars는 pivot 축에
on을 쓰는 경로가 안전하다. - 매출, 영업이익률, 순이익률, 현금성 보조 지표를 같은 기간 기준으로 만들고, 실행 결과는 숫자 metric이 검산 가능한 table/value ref가 되도록 남긴다.
- 최종 material claim은 기간·metric·값을 포함하되, 각 claim이 해당 table/value ref를 직접 참조하게 한다. evidence refs만 나열하고 claim refs를 비워 두면 숫자 검산을 통과하지 못한다.
- scan 또는 macro 맥락이 있으면 업황과 기업 수익성 변화를 연결한다.
- claim은 기간, metric, table 또는 value ref에 묶는다.
공개 호출 방식
c = dartlab.Company("005930")c.analysis()c.analysis("financial", "수익성")dartlab.analysis(c, axis="financial", sub="수익성")
호출 동작
- Company 재무 snapshot과 표준 계정 매핑을 읽어 단일 기업의 재무 축을 계산한다. 인자 없이 호출하면 사용 가능한 axis/subaxis 가이드 DataFrame을 반환한다. 데이터가 없으면 값을 만들지 않고 None 또는 데이터 부재 메시지로 제한한다.
- 실행 전에 target, period/date, metric, source 또는 universe를 확인한다.
- 데이터가 없거나 runtime 제한이 있으면 값을 추정하지 않고 한계와 필요한 다음 수집 경로를 말한다.
대표 반환 형태
- 주로 DataFrame 또는 dict-like 결과를 반환한다. 핵심 컬럼/키는 period, metric/account, value, unit, basis, comment이며 금액 단위는 원/백만원, 비율은 % 또는 배수다.
- 전체 세부 필드는 공개 docstring/capability와 동기화한다. 코드/API 변경으로 이 설명이 오래되면 skill 갱신 누락으로 본다.
기본 검증
- 실행 결과는 tableRef, valueRef, dateRef, executionRef 중 필요한 근거로 남긴다.
- 최종 판단의 숫자 claim은 해당 table/value ref에 직접 묶는다.
- 스킬과 실제 공개 API의 호출 방식, 대표 반환 형태, 오류/제한 동작이 다르면 같은 변경에서 스킬을 갱신한다.
런타임
실행 환경별 호환성
| 환경 | 상태 | 비고 / 제한 |
|---|---|---|
| Local Python | supported | — |
| Server | supported | — |
| MCP | supported | — |
| Web AI | limited | — |
| Pyodide | limited |
|
실패 회피
흔한 실패 · 절대 금지
- 매출 증가만 보고 수익성 개선 단정
- 같은 기간이 아닌 마진 비교
- 업황 맥락 없는 이익률 판단
- finance-lite 계정명을 확인하지 않고 고정 계정 id만 가정
- Polars LazyFrame pivot 방식과 eager pivot 방식을 혼동해 실행 실패
- 단일 기업 질문에서 scan prebuild만 보고 Company 원자료 또는 Company.analysis 확인을 생략
- table ref는 만들었지만 material claim을 해당 table/value ref에 직접 묶지 않아 최종 검산 실패
- 숫자 없는 수익성 판단
- 결손값을 0으로 대체
- 단일 종목 수익성 질문을 저평가·후보 발굴 screen으로 바꿔 답하기