인사이트

방법론

이 페이지는 공개 저장소에 적힌 데이터 흐름, 상수, DTO 경로만 정리합니다.

데이터 흐름

  • 수집기: `collector`가 원천 데이터를 수집해 Supabase에 저장합니다.
  • 내보내기: `exporter`가 `web/exporters/static_data.py`와 `web/exporters/upcoming_data.py`를 사용해 공개 JSON DTO를 만듭니다.
  • : 브라우저는 `/data/etfs.json`, `/data/charts/{code}.json`, `/data/holdings/{code}.json`, `/data/news.json`, `/data/upcoming.json`만 읽습니다.

생명주기 규칙

  • 상장일 기준: `WINDOW_DAYS`는 `collector/constants.py`에서 60으로 선언되어 있습니다.
  • 반등 졸업 사용 여부: `ENABLE_REBOUND_GRADUATION`는 `collector/constants.py`에서 False로 선언되어 있습니다.
  • 표시 졸업: `collector/etf_lifecycle.py`의 `is_graduated_for_display`는 persisted graduated status만 사용합니다.
  • 표시 사유 코드: `collector/etf_lifecycle.py`의 `resolve_display_reason_code`는 비졸업 행에는 `discovery`를, 졸업 행의 비유효 `reason_code`에는 `legacy_unknown`을 반환합니다.

내보내기 사실

  • etfs.json: `web/exporters/static_data.py`가 `etf_master`에서 `code`, `name`, `listing_date`, `listing_price`, `current_price`, `status`, `graduation_reason_code`를 읽어 생성합니다.
  • upcoming.json: `web/exporters/upcoming_data.py`가 `etf_upcoming`과 listed-master lookup을 사용해 생성합니다.
  • 후보 단계: `web/exporters/upcoming_data.py`는 `candidate` 항목의 `listingDate`를 DTO에서 `null`로 씁니다.
  • 정렬: 상장예정 내보내기는 `filingDate`와 `filingNo`를 기준으로 내림차순 정렬합니다.