Files
trex-core/.proofline/criteria/ac-0001.md
T

2.3 KiB

id, status
id status
ac-0001 active

KIS 연속 잔고 전체 조회 및 종목별 집계

Criterion

KISBroker.get_balance()는 KIS 국내주식 잔고조회 최초 요청에서 빈 continuation key와 공백/미지정 tr_cont를 사용해야 한다. 성공 응답의 response header tr_cont가 F 또는 M이면 body의 ctx_area_fk100과 ctx_area_nk100을 다음 요청 query에 전달하고 후속 요청 header에 tr_cont=N을 사용해야 하며, D 또는 E에서 종료해야 한다. 전체 성공 페이지의 유효한 양수 hldg_qty는 pdno별로 합산한 하나의 BalanceItem으로 반환하고 0 이하 수량 row는 제외해야 한다. OwnershipAwareBroker가 KIS broker를 감싸는 경우에도 완전한 raw snapshot이 기존 projection의 입력이 되어야 하며 ownership 및 ownership_mismatch 정책은 변경되지 않아야 한다.

Verification

  • 성공 조건: synthetic F → M → E 다중 페이지 응답에서 요청별 header와 continuation query가 계약대로 이어지고, 첫 페이지와 후속 페이지의 모든 양수 보유종목 및 페이지에 걸쳐 중복된 종목의 합산 수량이 최종 결과에 포함되며 E 이후 추가 요청이 없어야 한다. 별도 fixture로 D 종료도 확인한다.
  • 실패·경계 조건: 정상 단일 페이지와 검증된 빈 잔고는 추가 요청 없이 기존 결과를 반환하고, 0 이하 수량 row는 결과에서 제외되어야 한다. 실전 50건·모의 20건이라는 page-size에 의존하지 않고 response header 계약만으로 순회해야 한다.
  • ownership 보존 조건: 첫 페이지의 manual holding과 후속 페이지의 strategy-owned symbol을 포함한 KIS 응답을 OwnershipAwareBroker에 연결했을 때 후속 페이지 종목이 projection 결과에 포함되어야 한다. 전체 raw 수량이 전략 소유수량 이상이면 성공하고, 실제로 작을 때만 기존 ownership_mismatch가 유지되어야 한다.
  • 검사 방법: tests/adapters/broker/test_kis.py에서 httpx.get을 페이지별 response header/body fixture로 대체하여 호출 횟수, 요청 header, query key, 종료 조건과 최종 BalanceItem 집계를 단언하고, ownership adapter 회귀 테스트에서 완전한 delegate 결과의 projection과 기존 mismatch 경계를 단언한다.