# Phase 1 구현 계획

이 문서는 AI 코딩 에이전트가 실제 구현을 시작할 때 사용할 상세 작업 계획입니다.

## 1. 구현 우선순위

Phase 1 구현은 아래 순서를 강제합니다.

1. 공통 기반
2. DB 스키마와 migration
3. SEC adapter
4. Alpaca adapter
5. FRED adapter
6. FINRA adapter
7. parser I/O schema
8. event parser skeleton
9. feature builder skeleton
10. 테스트 자동화

이 순서를 바꾸지 않는 이유:
- 공통 기반 없이는 adapter 품질이 흔들립니다.
- DB 스키마가 없으면 모든 출력 계약이 흔들립니다.
- SEC가 핵심 source입니다.
- parser는 source 수집과 스키마가 고정된 뒤에 만들어야 합니다.

## 2. 작업 분할 단위

### Task Group A — 공통 기반

#### A1. config loader
완료 조건:
- `.env` + YAML config를 읽을 수 있음
- 환경별 override 가능
- 누락된 필수 키는 즉시 실패

#### A2. logging module
완료 조건:
- JSON logger 제공
- job_run_id 주입 가능
- exception helper 제공

#### A3. time_utils
완료 조건:
- UTC ↔ US/Eastern 변환
- 거래일 helper
- date partition helper

#### A4. ids
완료 조건:
- document_id 생성
- event_id 생성
- checksum 생성

### Task Group B — DB와 migration

#### B1. SQLAlchemy/Pydantic 모델
완료 조건:
- 핵심 테이블 모델 정의
- enum과 상태값 정의

#### B2. migration
완료 조건:
- 빈 DB에 초기 schema 적용 가능
- rollback 가능

#### B3. db helper
완료 조건:
- upsert helper
- transaction wrapper
- health check

### Task Group C — SEC adapter

#### C1. submissions fetcher
완료 조건:
- 특정 CIK에 대한 submissions JSON 수집 가능
- raw 저장 성공

#### C2. filing downloader
완료 조건:
- accession 기반 filing index 다운로드
- filing text/html 저장
- exhibit 목록 추출

#### C3. metadata normalizer
완료 조건:
- `documents` 테이블에 canonical metadata 적재
- duplicate safe

#### C4. xbrl fetcher
완료 조건:
- facts/companyfacts 수집 가능
- 핵심 재무 필드 추출 가능

### Task Group D — Alpaca adapter

#### D1. daily bars fetcher
완료 조건:
- 여러 symbol의 일봉 수집 가능
- canonical OHLCV 적재 가능

#### D2. intraday bars fetcher
완료 조건:
- 분봉 수집 가능
- 시간대 정규화 완료

### Task Group E — FRED / FINRA adapter

#### E1. FRED
완료 조건:
- 시리즈별 시계열 수집
- observation 적재

#### E2. FINRA
완료 조건:
- daily short sale file download
- symbol별 파싱
- ratio 계산용 컬럼 적재

### Task Group F — Parser

#### F1. parser schema validator
완료 조건:
- JSON schema validation 가능
- 실패 시 상세 에러 반환

#### F2. rule-based event parser
완료 조건:
- item number 추출
- guidance keyword 추출
- one-off keyword 추출
- event type 분류

#### F3. llm parser stub
완료 조건:
- 입력/출력 인터페이스만 고정
- 실제 호출은 feature flag로 disable 가능

### Task Group G — Feature Builder

#### G1. market features
완료 조건:
- reaction-day return
- volume ratio
- close location
- ATR 기초값

#### G2. event features
완료 조건:
- guidance_direction
- oneoff_flags
- document_quality_score_raw

### Task Group H — 테스트 자동화

#### H1. unit tests
#### H2. integration tests
#### H3. replay tests
#### H4. sample fixture set

## 3. 권장 구현 순서별 산출물

### Step 1
산출물:
- `libs/common/*`
- `configs/env.example`
- `Makefile` 또는 bootstrap script

### Step 2
산출물:
- DB migration 0001
- ORM models
- base repository helpers

### Step 3
산출물:
- `libs/adapters/sec/*`
- `apps/collector/sec_collector/*`
- SEC fixture 기반 통합 테스트

### Step 4
산출물:
- `libs/adapters/alpaca/*`
- daily/intraday collector

### Step 5
산출물:
- `libs/adapters/fred/*`
- `libs/adapters/finra/*`

### Step 6
산출물:
- parser schema
- parser validator
- rule parser

### Step 7
산출물:
- feature builder skeleton
- sample feature row generation

### Step 8
산출물:
- test suite
- CI command set

## 4. 금지 사항

- source adapter 내부에서 전략 점수 계산 금지
- parser 내부에서 DB 직접 접근 금지
- 테스트 없이 production migration 추가 금지
- raw 원문 overwrite 금지
- 외부 API 실패 시 silent ignore 금지
- timezone naive datetime 저장 금지

## 5. AI 코딩 에이전트용 작업 방식

권장 방식:
1. 각 Task Group 별로 브랜치 또는 PR 단위 생성
2. 테스트 먼저 작성
3. fixture 기반으로 개발
4. 구현 후 idempotency 검증
5. 문서 갱신

## 6. 완료 정의

Phase 1은 아래가 모두 만족될 때 완료입니다.

- 모든 핵심 source adapter가 최소 1개 fixture와 1개 실제 샘플로 검증됨
- DB migration이 처음부터 끝까지 깨끗하게 적용됨
- parser schema가 고정되고 샘플 문서에 대해 valid JSON 생성됨
- feature builder가 최소한 market/event feature 한 줄을 생성함
- `pytest` 기준 unit/integration 테스트가 자동 실행됨
- README만 보고 새 개발자가 환경을 띄울 수 있음
