virtual-insanity
← 리포트 목록

DART/EDGAR 공시 collector 복구

2026-04-16 dart [fundamental, dart, edgar, disclosure, hermes]

DART/EDGAR 공시 collector 복구

결론

  • Hermes memory에 없던 최근 공시 산출물을 새로 생성했다.
  • 신규 collector: /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py
  • 산출물:
  • DART: /Users/ron/.hermes/workspace/memory/dart/latest.json
  • EDGAR: /Users/ron/.hermes/workspace/memory/edgar/latest.json
  • Hermes cron 등록 완료: ocFUND-dart-edgar-disclosure-collector, 매 영업일 06:20 KST, enabled=true
  • Hermes cron 강제 실행 검증: last_status=ok, last_error=null
  • 펀더멘탈 context/filter가 DART/EDGAR 산출물을 읽도록 확장했고, 리포트 본문 📊 공시/실적에 실제 공시가 들어간다.

1) 기존 collector/cron 조사

확인 결과: - OpenClaw cron에는 DART 관련 기존 작업이 있었지만 모두 enabled=false였다. - shipbuilding-excel-builder: DART 재무제표 + 수주공시 조선 엑셀 빌더 - financial-statement-collector: DART + yfinance 재무제표 수집 - shipbuilding-data-collector: 조선 DART 수주잔고 수집 - Hermes cron에는 DART/EDGAR 최근 24h 공시 collector가 없었다. - Hermes memory에도 memory/dart/, memory/edgar/ 산출물이 없었다. - DART API key는 Hermes 파일에는 없었고 /Users/ron/.openclaw/dart_api_key에 존재했다. 새 collector는 env, Hermes key, OpenClaw key 순으로 읽는다. 보고서에는 키 평문 미기재.

2) 신규 collector 구현

파일: /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py

핵심 라인: - L33-L34: 산출물 경로 memory/dart, memory/edgar - L37-L39: OpenDART list API / SEC submissions API endpoint - L112-L180: DART 최근 공시 수집 - L228-L295: EDGAR watchlist 기반 최근 filing 수집 - L318-L319: latest.json + 날짜별 JSON 저장

동작: - DART: opendart.fss.or.kr/api/list.json에서 오늘+이전 1일 기준, 상장사 분류 Y/K/N만 수집 - EDGAR: company_entities DB의 NASDAQ/NYSE/AMEX watchlist를 읽고 SEC submissions API 조회 - 외부 쓰기 없음, Telegram 발송 없음, DB 변경 없음

3) 수동 실행 검증

명령:

/usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py --days 1 --dart-max-pages 8 --edgar-limit 30

결과: - DART: status=ok, count=442 - EDGAR: status=ok, count=10 - 샘플: - DART 신성이엔지 — 주식등의대량보유상황보고서(약식) - DART 강원에너지 — 단일판매ㆍ공급계약체결(자율공시) - EDGAR STNG 6-K - EDGAR MRVL 8-K

Hermes cron 등록 후 강제 실행 결과:

{
  "id": "ocFUND-dart-edgar-disclosure-collector",
  "enabled": true,
  "next_run_at": "2026-04-17T06:20:00+09:00",
  "last_run_at": "2026-04-16T10:01:17.085205+09:00",
  "last_status": "ok",
  "last_error": null
}

최종 산출물 확인: - /Users/ron/.hermes/workspace/memory/dart/latest.json: status=ok, count=458, size 152837 - /Users/ron/.hermes/workspace/memory/edgar/latest.json: status=ok, count=10, size 3714

4) Hermes cron 등록

백업: - /Users/ron/.hermes/cron/jobs.json.bak-dart-edgar-20260416T100101

등록 항목: - id: ocFUND-dart-edgar-disclosure-collector - schedule: 20 6 * * 1-5 Asia/Seoul - command: /usr/bin/python3 /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py --days 1 - cwd: /Users/ron/.hermes/workspace - timeout: 900초 - enabled: true

jobs.json 위치: - L1117-L1138에 등록됨.

5) 펀더멘탈 wrapper/context 확장

수정 파일 1: /Users/ron/.hermes/workspace/scripts/fundamental_context_filter.py - L32-L33: DART/EDGAR latest 경로 추가 - L154-L180: DART 공시 선별 함수 추가 - L183-L205: EDGAR filing 선별 함수 추가 - L238-L249: context disclosures.dart_24h, disclosures.edgar_24h에 주입 - L256: DART/EDGAR 사용 여부 omission 갱신

수정 파일 2: /Users/ron/.hermes/workspace/scripts/fundamental_redesign_report.py - L93-L99: 📊 공시/실적 섹션이 DART 4건 + EDGAR 3건 + 실적 일정 3건을 우선 반영

검증:

python3 -m py_compile \
  /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py \
  /Users/ron/.hermes/workspace/scripts/fundamental_context_filter.py \
  /Users/ron/.hermes/workspace/scripts/fundamental_redesign_report.py

통과.

context 재생성 결과:

{
  "dart_24h": [
    "DART 강원에너지(114190) — 단일판매ㆍ공급계약체결(자율공시)",
    "DART 대한조선(439260) — 단일판매ㆍ공급계약체결",
    "DART 신세계푸드(031440) — 기재정정 주요사항보고서(주식교환ㆍ이전결정)"
  ],
  "edgar_24h": [
    "EDGAR MRVL 8-K — 8-K",
    "EDGAR STNG 6-K — 6-K",
    "EDGAR ASML 6-K — 6-K"
  ]
}

펀더멘탈 dry-run: - ok=true - body_len=2303 - blacklist_hits=[] - 공시/실적 섹션에 DART/EDGAR 실제 공시 반영 확인.

본문 샘플:

📊 공시/실적
• DART 강원에너지(114190) — 단일판매ㆍ공급계약체결(자율공시)
• DART 대한조선(439260) — 단일판매ㆍ공급계약체결
• DART 신세계푸드(031440) — 기재정정 주요사항보고서(주식교환ㆍ이전결정)
• DART 아이티센피엔에스(232830) — 타법인주식및출자증권취득결정
• EDGAR MRVL 8-K — 8-K
• EDGAR STNG 6-K — 6-K
• EDGAR ASML 6-K — 6-K
• TSMC 어닝콜 (4/16 오늘 14:00 대만시간)

6) 변경 파일

  • 신규: /Users/ron/.hermes/workspace/scripts/pipeline/dart_edgar_disclosure_collector.py
  • 수정: /Users/ron/.hermes/cron/jobs.json
  • 수정: /Users/ron/.hermes/workspace/scripts/fundamental_context_filter.py
  • 수정: /Users/ron/.hermes/workspace/scripts/fundamental_redesign_report.py
  • 생성/갱신: /Users/ron/.hermes/workspace/memory/dart/latest.json
  • 생성/갱신: /Users/ron/.hermes/workspace/memory/edgar/latest.json
  • 생성/갱신: /Users/ron/.hermes/workspace/memory/analyst-fundamental/fundamental_redesign_context_latest.json

7) 잔존 리스크

  • OpenDART list API는 시간 단위가 아니라 날짜 단위라 “정확히 최근 24시간”이 아니라 오늘+전일 접수 공시 기준이다.
  • DART 전체 공시에는 임원 보유/대량보유 보고가 많아, 펀더멘탈 본문에서는 계약·실적·주요사항 중심으로 필터링했다.
  • EDGAR는 Hermes company_entities의 미국 watchlist 기반이다. 전체 SEC filing 전수 수집은 아니며, 해리가 보는 주요 기업 universe 확장이 필요하면 company_entities 확장이 선행되어야 한다.
  • SEC User-Agent는 전용 환경변수가 없으면 기본 collector UA를 사용한다. 장기 운영 안정성을 위해 SEC_USER_AGENT를 실제 연락처 형태로 설정하는 것이 좋다.

자체평가

  • 정확성: 4.6/5 — 실제 API 수집, Hermes cron 실행, fundamental 주입까지 확인.
  • 완성도: 4.5/5 — 신규 수집/cron/context/report 모두 연결. SEC universe 확장은 후속 과제.
  • 검증: 4.7/5 — py_compile, 직접 실행, Hermes cron 강제 실행, 파일 생성, context dry-run 확인.
  • 최소 변경: 4.6/5 — DART/EDGAR collector와 fundamental 공시 주입부만 수정.
  • 종합: 4.6/5