Files
trex-core/docs/batches/bat-038_20260612_sell-transaction-tax-fee/index.md
T
genichinandClaude Opus 4.8 1cf13b060f feat(broker): BAT-038 — 매도 증권거래세 누락 정정 + fee/tax 단일 정책 지점 (dcy-026/REQ-018, issue #24)
dcy-026 confirm-discovery + REQ-018 change-req(CHG-20260612-01)→구현→
confirm-req-implemented(CHG-20260612-02) 전체 delivery.

- broker_port.py: calculate_tax(side, amount) 신규 + fee/tax 율 env 상수화
  (TREX_KIS_FEE_BPS=1.5, TREX_KRX_TAX_SELL_BPS=20.0). 매도 0.2%/매수 0.
- paper.py / kis.py: tax=0.0 하드코딩 3곳 제거 → 정책 함수 호출.
  KIS daily-ccld 응답에 fee/tax 필드 부재 → 정책 폴백(향후 정본 우선 훅).
- runtime-flows.md: 체결→ledger fee/tax 산출 흐름 갱신.
- tests: fee/tax 정책 단위 + issue #24 4건 회귀(fee+tax=1,376.9원).
  429 passed (+6), ruff clean.

REQ-018 Approved→Implemented, BAT-038 release-candidate.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-12 17:57:15 +09:00

2.6 KiB

BAT-038: 매도 증권거래세 누락 정정 + fee/tax 단일 정책 지점 (CHG-20260612-01)

  • Status: release-candidate
  • Profile: standard
  • Source Discovery: dcy-026 (issue #24)
  • Included REQ: REQ-018 (CHG-20260612-01)
  • Excluded REQ: 없음

Summary

  • 매도 체결의 증권거래세가 전 체결에서 tax=0.0 으로 하드코딩되어 실현 손익·일일 수익률이 과대 계산되던 운영 버그(issue #24)를 닫는다. FillStatus.tax 가 매도 정책 세율(0.2%)로 계산되도록 정정하고, 수수료율·세율을 단일 정책 지점(calculate_fee/calculate_tax)에서 env 설정으로 관리한다. KIS 어댑터는 브로커 응답 fee/tax 가 있으면 정본 우선, 없으면 정책 폴백.

Scope

  • In Scope:
    • trex_core/application/broker_port.py — calculate_tax(side, amount) 신규 + 세율/수수료율 env 상수(TREX_KIS_FEE_BPS=1.5, TREX_KRX_TAX_SELL_BPS=20.0). FillStatus.tax 의미 정정(주석 갱신).
    • trex_core/adapters/broker/paper.py — tax=0.0 → calculate_tax(...) (line 90)
    • trex_core/adapters/broker/kis.py — tax=0.0 → 브로커 응답 fee/tax 파싱 + 정책 폴백 (line 213·230)
    • docs/runtime-flows.md — 체결→ledger fee/tax 산출·저장 흐름 갱신
    • 테스트: 매수/매도 fee·tax 단위, issue #24 4건 회귀(1,376.9원), paper·KIS 동일 정책, KIS 응답 우선 경로
  • Out of Scope:
    • 과거 잘못 저장된 ledger 행 소급 보정 (dcy-026 OQ-3 Closed — 보정 안 함)
    • portfolio-hub 측 손익 재계산 로직 (수신측 저장소 책임)
    • REQ-011 (BrokerPort 포트 계약) 변경 — fee/tax 는 REQ-018 영역, REQ-011 무영향
    • 세율 동적 설정 UI/운영 도구

Documents

Notes

  • 인터페이스/계약 의미 변경(FillStatus.tax 0 고정 → 매도 정책 계산) + KIS 응답 파싱(신규 동작, R-2) + env 설정 + baseline 문서(runtime-flows) 정렬을 함께 포함하므로 standard profile.
  • 회귀 기준값: issue #24 4건 fee+tax 합계 1,376.9원(fee 177.9 + tax 1,199). 이슈 기재 1,357원은 원작성자 추정 오차(~20원), baseline 아님.
  • TREX_KIS_FEE_BPS/TREX_KRX_TAX_SELL_BPS 변수명에 도메인 라벨이 있으나 단일 정책 지점으로 paper·KIS 가 동일 공유.
  • 핵심 리스크: R-1(세율 산식 오류 → 손익 역왜곡, 완화: 1,376.9원 회귀 고정), R-2(KIS 응답 필드명/단위 오파싱 → 라이브 전용 오류, 완화: raw 필드 확인 + 폴백 + 로그).