"""
OpenClaw Stock Agent — Order Module (orders/)

이 패키지는 키움 REST API 로 매수·매도 주문을 발행하는 유일한 통로입니다.
조회 전용 모듈(`agents/stock/workspace/scripts/kiwoom_client.py`)와 분리됩니다.

매매 절대 원칙
==============
1. LLM 결정 금지
   - LLM(클로·레이) 출력으로 매매 트리거 안 됨.
   - 자연어 → 페이로드 파싱은 LLM 가능, 단 사람의 PIN echo 가 마지막 게이트.
   - 환경변수 OPENCLAW_AGENT 가 셋된 세션은 즉시 sys.exit(99). 진입점 첫 줄 강제.

2. DM + chat_id 화이트리스트
   - 그룹·익명 메시지는 즉시 거부.
   - 토큰 검증 시 발신자 ID 화이트리스트 통과해야 실행.

3. 사이드카 default OFF
   - state/orders_disabled 파일 존재 시 모든 진입점 첫 줄에서 거부.
   - /orders_on 으로 풀고, /orders_off 또는 trash 로 막음.

4. 한도·시간·종목 가드는 limits.json 으로 관리
   - 코드 상수 X. 변경 시 별도 커밋, 단위테스트 강제.
   - guards.py 가 limits.json 을 읽어 검증.

5. 자동 재시도 금지
   - 네트워크 timeout 후 자동 재시도 안 함 (중복 체결 위험).
   - 실패 시 사람이 ord_no 조회로 체결 확인 후 재판단.

확정 사양
=========
- 매매 허용 계좌: 본인 4계좌 (가희 포함)
- 1회 주문 / 1일 누적 / 잔고% 한도: 없음
- 가격 가드: ±30% (상한가/하한가) 초과 지정가 거부 (시장가에는 적용 불가, 거래소가 자연 차단)
- 시장가: 허용
  - 자연어 "시장가" → 시장가 주문
  - 자연어 "지금 바로 / 즉시 / 빨리 / 당장" → 최우선호가 +1틱 지정가 (모호함 보호)
- 거래시간: 08:00–20:00 (NXT 포함)
  - 08:00–09:00 NXT 단독 (NXT 미가능 종목 거부)
  - 09:00:30–15:20 KRX + NXT 동시 (SOR)
  - 15:20–15:30 KRX 단일가
  - 15:30–20:00 NXT 단독 (NXT 미가능 종목 거부)
- 라우팅 default: SOR (_AL) 자동
- 거래 간 딜레이: 마지막 카드 종료(체결·만료·취소) 후 60초
- 동일 종목 딜레이: 마지막 체결 후 600초 (10분)
- PIN
  - 본인 계좌(일반·ISA): 숫자 4자리
  - 가희 계좌(가희_일반·가희_ISA): 영숫자 8자리, 혼동 글자 제외 55자
  - 만료 120초, 1회용, 1회 시도
- 카드+PIN 분리 발송: 메시지 A(카드, 매수/매도·계좌·종목명·가격 하이라이트) + 메시지 B(PIN만 단독)
- 만료/취소/오입력: 모두 텔레그램 알림
- 사이드카: /orders_on /orders_off

상세 한도값과 시간 경계는 limits.json 참조.
"""
