Files
trex-core/docs/srs/Interface/req-088_operator-pnl-query-cli.md
T
genichinandClaude Opus 4.8 d8d9021260 feat(execution,obs): 호가단위 스냅(dcy-030/#28) + 운영 관측성(dcy-029/#29) + REL-007 환류
dcy-030 (issue #28, P0 체결 복구):
- REQ-083 KRX 호가단위(tick) 순수 유틸 (domain/pricing.py)
- REQ-070 CHG: 슬리피지 실효가 호가단위 스냅 — 상한 준수(매수 floor/매도 ceil)
  + band<1tick 하한/상한 보장 + 부동소수 epsilon 가드. 147700→148400/54500→54700.
- BAT-044 release-candidate

dcy-029 (issue #29, 운영 관측성):
- REQ-084 구조화 로깅 기반 (runtime/logging_setup.py): ISO8601 KST·레벨·Loki JSON
  ·correlation id(slot_id)
- REQ-085 주문 결과 로깅 (event=order_submit|fill|reject)
- REQ-087 거부 ERROR 가시성 (조용한 롤백 제거)
- REQ-086 청산 reason+actor 동반 노출 (안전망/전략 구분, 신규 필드 없음)
- REQ-088 운영 조회 CLI report (application/operator_report.py, 보유·오늘 체결
  ·실현 PnL net·대기, direct-DB)
- REQ-089 운영자 런북 docs/operations.md
- REQ-090 baseline 정합 (runtime-flows·project-structure·interface-contract)
- BAT-045(P0)·BAT-046(P1) release-candidate

REL-007: confirmed → feedback-captured (운영 인스턴스 라이브 검증 + #28/#29 환류
정규화). BAT-037~041 released.

검증: 537 passed, 47 skipped, 회귀 0, ruff clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 13:19:31 +09:00

3.6 KiB

req-088: 운영 조회 CLI — 보유·오늘 체결·실현 PnL·대기 주문

  • Status: Implemented
  • Type: Interface
  • Priority: High
  • Owner: project maintainers

Intent

  • 일일 실현 PnL을 ledger_outbox에서 수기 계산해야 했다. 운영자가 단일 CLI 명령으로 현재 보유·오늘 체결·오늘 실현 PnL(수수료·세금 반영)·대기 주문을 조회해 일일 리포트 자동화의 기반을 만든다. (dcy-029 FR-5, OQ-1=CLI, RPC 없음)

Requirement

  • 운영자 CLI(trex_core/runtime/cli.py)에 신규 서브커맨드(예: report 또는 pnl)를 추가해 다음을 출력한다:
    • 현재 보유: holding 슬롯의 symbol/portfolio_id/qty/avg_price.
    • 오늘 체결: 당일(trading_date, KST 경계) 체결 건수/내역.
    • 오늘 실현 PnL: 수수료·세금 반영(BAT-038 정책과 동일 계산), ledger_outbox/체결 기록을 단일 권위 출처로 집계.
    • 대기 주문: pending_* 슬롯.
  • 조회는 DB-backed 시점 집계다. 신규 RabbitMQ RPC는 추가하지 않는다(dcy-029 OQ-1). 데몬 미경유로 DB를 직접 읽거나 기존 read 경로를 재사용한다.
  • 청산/체결 항목에 reason+actor(REQ-086)를 함께 보여 안전망/전략 구분이 되게 한다.
  • 출력은 사람용 표/요약 + 가능하면 머신 파싱용(예: --json) 형태를 고려한다(자동화 기반).

Acceptance Criteria

  1. Given holding 슬롯 존재, When report 실행, Then 보유 symbol/qty/avg_price가 출력된다.
  2. Given 당일 체결 N건, When 실행, Then 오늘 체결 건수/내역이 출력된다.
  3. Given 당일 매도 체결, When 실행, Then 실현 PnL이 수수료·세금 반영 값으로 출력되고 ledger_outbox 직접 집계와 일치한다.
  4. Given pending_* 슬롯, When 실행, Then 대기 주문이 출력된다.
  5. Given "오늘" 경계, When trading_date(KST) 기준, Then 전일 체결은 오늘 집계에서 제외된다.
  6. Given 신규 표면, When 실행, Then 신규 RabbitMQ RPC 없이 동작한다(CLI/DB-backed, OQ-1).

Impacted Area

  • Docs: docs/runtime-flows.md(운영자 CLI 조회 흐름), docs/operations.md(사용법 — REQ-089)
  • Modules: trex_core/runtime/cli.py(신규 서브커맨드), PnL 집계 read(신규 헬퍼 — ledger_outbox/체결 집계), 기존 slot read 재사용
  • Tests: 집계 함수 단위(수수료·세금·trading_date 경계), CLI 서브커맨드 단위

Notes

  • PnL 계산은 BAT-038(매도 증권거래세+수수료) 정책을 단일 출처로 재사용(dcy-029 NFR-3/A-3). 부분 정산·재시도 중 outbox 상태는 집계 시점 기준으로 명시.
  • 출처: dcy-029 FR-5, OQ-1.

Change Log

CHG-20260616-01

  • Date: 2026-06-16
  • Author: Justin Ko

Change Summary

  • dcy-029 FR-5로부터 최초 생성(Proposed).

CHG-20260616-02

  • Date: 2026-06-16
  • Author: Justin Ko
  • Type: status
  • Summary: Proposed → Approved (confirm-req). 필수 필드·구체 AC 충족, source dcy-029(confirmed, Open OQ 0) 정합. dcy-029 P0/P1 batch 편성 예정.

CHG-20260616-IMPL

  • Date: 2026-06-16
  • Author: Justin Ko
  • Type: status
  • Summary: Approved → Implemented (confirm-req-implemented, BAT-046 release-candidate, dcy-029 P1). 근거: 단위/문서 AC 매핑(REQ-086 reason+actor 로그·interface-contract; REQ-088 operator_report 집계·net PnL·KST 경계·CLI report; REQ-089 docs/operations.md 4영역; REQ-090 runtime-flows·project-structure 정합). 14 passed(report+safety_sell), 전체 537 passed/47 skipped 회귀 0, ruff clean. report direct-DB·Loki 실 적재는 release 운영 검증 위임. Blocking Issues 없음.