feat(broker): KIS venue parameterization — OrderRequest.venue + EXCG_ID_DVSN_CD (REQ-117/118, BAT-056)

- OrderRequest.venue: str = "KRX" additive 추가 (기존 위치 인수 순서 불변)
- BrokerPort.cancel_order: venue: str = "KRX" 파라미터 추가
- BrokerPort.get_current_price: market: str = "J" 파라미터 추가
- KISBroker.submit_order: EXCG_ID_DVSN_CD=req.venue 항상 명시 전송
- KISBroker.cancel_order: EXCG_ID_DVSN_CD=venue 항상 명시 전송
- KISBroker.get_current_price: FID_COND_MRKT_DIV_CODE=market 파라미터화
- PaperBroker: cancel_order/get_current_price 시그니처 정합 (venue/market 수신·무시)
- poll_fill TR 유지 (TTTC8001R) — NXT 체결 포함 여부 미확인 open item (코드 주석 기록)
- tests/adapters/broker/test_venue.py: REQ-117 AC-1~5 + REQ-118 AC-1~8 신규 17개
- docs: interface-contract.md OrderRequest/BrokerPort 섹션 + change log 추가
- docs: runtime-flows.md venue 전달 경로 명시 + change log 추가

결과: 794 passed, 47 skipped (기존 777+47 대비 신규 17개 추가 전부 통과)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
This commit is contained in:
2026-07-06 23:24:51 +09:00
co-authored by Claude Fable 5
parent dc6d7a943b
commit ee3dc83a93
9 changed files with 638 additions and 11 deletions
@@ -0,0 +1,57 @@
# BAT-056: KIS Broker Venue Parameterization (NXT/KRX)
- ID: bat-056
- Slug: kis-broker-venue
- Status: In Progress
- Date: 2026-07-06
- Owner: trex-core-dev
- Risk: HIGH (라이브 주문 경로 — worktree+PR+QC(opus) 플로)
## REQs
| REQ | Title | Status |
| --- | --- | --- |
| REQ-117 | OrderRequest venue additive 필드 | Approved |
| REQ-118 | KIS 브로커 어댑터 venue 파라미터화 (EXCG_ID_DVSN_CD) | Approved |
## Scope
- `trex_core/application/broker_port.py` — `OrderRequest.venue` 필드 additive 추가
- `trex_core/adapters/broker/kis.py` — submit_order, cancel_order, poll_fill, get_current_price 변경
- `trex_core/adapters/broker/paper.py` — cancel_order 시그니처 정합
- `tests/adapters/broker/` — 신규 venue 테스트 + 기존 회귀
- `docs/interface-contract.md` — OrderRequest venue 필드 + EXCG 명세 업데이트
- `docs/runtime-flows.md` — venue 전달 경로 명시
## Out of Scope
- AMQP wire 계약 변경 (intent 메시지 venue 전달은 tvr 팬-인 batch 별도 범위)
- orb/tsl 소비 경로 (intent, slots wire) 변경
- SOR 동작 지원
- VTS NXT 검증 (단위 테스트 + 실전 소액 스모크 별도)
## Additive Constraint
venue 미지정(기본 KRX) 경로에서 기존 orb/tsl 동작이 byte-동일 유지:
- submit_order: `EXCG_ID_DVSN_CD="KRX"` 추가만 다름 (기존 미전송 → KRX 명시)
- cancel_order: `EXCG_ID_DVSN_CD="KRX"` 추가만 다름
- poll_fill: TR 유지(TTTC8001R/VTTC8001R) — NXT 체결 포함 여부 미확인(open item)
- get_current_price: market 기본값 "J" 유지
## AC Coverage
| AC | REQ | 대상 테스트 위치 |
| --- | --- | --- |
| REQ-117 AC-1 | venue 기본값 KRX | tests/adapters/broker/test_venue.py |
| REQ-117 AC-2 | NXT 지정 | tests/adapters/broker/test_venue.py |
| REQ-117 AC-3 | 기존 회귀 | 전체 pytest |
| REQ-117 AC-4 | 위치 인수 순서 불변 | tests/adapters/broker/test_venue.py |
| REQ-117 AC-5 | paper broker venue 무영향 | tests/adapters/broker/test_venue.py |
| REQ-118 AC-1 | submit KRX EXCG 포함 | tests/adapters/broker/test_venue.py |
| REQ-118 AC-2 | submit NXT EXCG 포함 | tests/adapters/broker/test_venue.py |
| REQ-118 AC-3 | cancel NXT EXCG 포함 | tests/adapters/broker/test_venue.py |
| REQ-118 AC-4 | poll_fill TR 미확인 open item | design.md + 코드 주석 |
| REQ-118 AC-5 | get_current_price 기본 J | tests/adapters/broker/test_venue.py |
| REQ-118 AC-6 | get_current_price UN | tests/adapters/broker/test_venue.py |
| REQ-118 AC-7 | 기존 회귀 (EXCG 추가만 다름) | tests/adapters/broker/test_venue.py |
| REQ-118 AC-8 | paper cancel_order 시그니처 정합 | tests/adapters/broker/test_venue.py |