You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.2 KiB
6.2 KiB
Phase 2 Source Adapter 상세 명세
이 문서는 Phase 2에서 구현할 핵심 source adapter의 상세 규격을 정의합니다. 모든 adapter는 다음 공통 인터페이스를 따라야 합니다.
1. 공통 인터페이스
1.1 입력
run_id: strmode: Literal["poll", "backfill", "replay"]start_date: date | Noneend_date: date | Nonesymbols: list[str] | Noneforce: bool = Falsedry_run: bool = False
1.2 출력
표준 실행 요약 객체:
{
"run_id": "...",
"job_name": "...",
"source": "...",
"status": "completed",
"raw_objects_written": 0,
"staging_records_written": 0,
"structured_records_written": 0,
"warnings": [],
"errors": []
}
1.3 예외 분류
RetriableSourceErrorTerminalSourceErrorSchemaValidationErrorCheckpointCorruptionErrorRawWriteErrorStructuredWriteError
2. SEC Adapter
2.1 책임
- 회사 submissions JSON 수집
- filing index / filing text / exhibit 문서 다운로드
- accession / form_type / filing_date / acceptance_datetime 추출
- XBRL facts 추출 대상 식별
2.2 세부 job
A. sec_submissions_poll
입력:
- CIK 목록 또는 symbol master 기반 CIK 맵
raw 출력:
- submissions JSON
staging 출력:
- filing header row 목록
- 신규 accession 후보 목록
structured 출력:
documentsdocument_versions
B. sec_filing_fetch
입력:
- accession 목록
raw 출력:
- filing text/html
- filing index
- exhibit 문서
staging 출력:
- exhibit inventory
- 99.1 / xbrl 관련 링크
structured 출력:
raw_objectsdocument_artifacts
C. sec_xbrl_extract
입력:
- XBRL 가능 accession
staging 출력:
- canonical fact rows
structured 출력:
xbrl_facts
2.3 체크포인트
- 마지막 submissions fetch 시각
- accession별 fetch 완료 상태
- accession별 xbrl extract 완료 상태
2.4 idempotency key
- submissions:
(source, cik, fetched_at_date, checksum) - filing fetch:
(source, accession, artifact_name, checksum) - xbrl facts:
(accession, concept, period_end, unit, segment_hash)
2.5 구현 주의사항
- accession formatting을 내부 표준으로 통일
- 동일 accession의 문서/artifact는 checksum이 다를 때만 새 버전 생성
- raw write 전에 checksum 계산
- 99.1, 8-K, 10-Q, 10-K, 6-K, 20-F 우선
2.6 실패 조건
retriable:
- 일시적 네트워크 오류
- 응답 타임아웃
- 일시적 source unavailable
terminal:
- accession 식별 불가
- 필수 filing metadata 누락
- artifact MIME/type 해석 불가
3. Alpaca Adapter
3.1 책임
- 일봉 수집
- 분봉 수집(Phase 2에서는 1분/5분 중 하나만 선택)
- 심볼별 거래일 범위 backfill
3.2 세부 job
A. alpaca_daily_bars_backfill
입력:
- symbol list
- date range
raw 출력:
- 원본 bars payload
staging 출력:
- canonical daily bars
structured 출력:
market_bars_daily- Parquet partition
bars_daily/trading_date=YYYY-MM-DD/
B. alpaca_intraday_bars_poll
입력:
- symbol list
- trading day
raw 출력:
- intraday bars payload
staging 출력:
- canonical intraday bars
structured 출력:
market_bars_intraday- Parquet partition
bars_intraday/trading_date=YYYY-MM-DD/
3.3 체크포인트
- symbol / timeframe / date 단위 완료 플래그
- intraday는 마지막 timestamp
3.4 idempotency key
(symbol, timeframe, timestamp)
3.5 구현 주의사항
- timezone normalization을 내부 표준으로 강제
- 반일장 / 휴장일 처리
- 동일 바 중복 수신 시 마지막 checksum만 허용
3.6 실패 조건
retriable:
- 네트워크 오류
- 일시적 rate-limit
terminal:
- symbol invalid
- timestamp parse 실패
- 필수 OHLCV 필드 누락
4. FRED Adapter
4.1 책임
- 지정 series_id 목록 sync
- daily/weekly/monthly frequency series 공통 적재
4.2 세부 job
A. fred_series_sync
입력:
- series_id 목록
- optional date range
raw 출력:
- series observations payload
staging 출력:
- canonical series rows
structured 출력:
macro_series_observations
4.3 체크포인트
- series_id별 마지막 observation date
4.4 idempotency key
(series_id, observation_date)
4.5 구현 주의사항
- 숫자/결측 문자열 처리 규칙 고정
- revision이 가능한 시계열은 overwrite 가능한 upsert 허용
- source metadata(series title, units, frequency)도 별도 저장
5. FINRA Adapter
5.1 책임
- daily short sale volume 파일 다운로드
- 파일 파싱 및 종목별 행 생성
5.2 세부 job
A. finra_short_volume_fetch
입력:
- trading date range
raw 출력:
- 원본 txt/csv 파일
staging 출력:
- parsed rows
structured 출력:
short_sale_volume_daily
5.3 체크포인트
- trading_date 파일 존재 여부
- checksum
5.4 idempotency key
(trade_date, symbol)
5.5 구현 주의사항
- header drift 대응
- symbol 정규화
- total_volume == 0 또는 short_volume > total_volume 같은 비정상 레코드 검출
6. 공통 구현 요구사항
6.1 로그
모든 adapter는 최소 아래 필드를 구조화 로그로 남겨야 합니다.
run_idjob_namesourcemodestatusobject_countduration_mswarning_counterror_count
6.2 메트릭
최소 메트릭:
- fetch success rate
- fetch latency
- raw write latency
- staging rows written
- structured rows written
- checkpoint lag
6.3 Dry Run
모든 adapter는 dry_run 모드를 지원해야 합니다.
dry_run=True일 때:
- 원격 요청은 수행 가능
- raw/structured write는 하지 않음
- validation과 실행 계획만 출력
6.4 Replay
모든 adapter는 특정 raw object를 replay input으로 받을 수 있어야 합니다.
예:
--raw-path data/raw/sec/.../filing.txt--raw-path data/raw/finra/.../file.txt
6.5 Source Freeze
특정 source가 이상 동작할 때 운영자가 source별 수집을 중단할 수 있어야 합니다.
예:
configs/source_freeze.yaml- source/job 단위 on/off
7. 완료 기준
- 각 adapter는 poll/backfill/replay를 모두 지원해야 합니다.
- 동일 input에서 동일 output을 만들어야 합니다.
- raw sidecar, structured rows, checkpoint, job_runs가 모두 연결되어야 합니다.