"""순수 계산 함수 — DB 접근 없음. 원본: schedules/anchoring/src/anchoring/service.py 에서 읽기 경로(칸 해석·앵커가 산출) 두 함수만 발췌 이식. 표본 판정·평가 함수는 배치 전용이라 제외. 모든 산술은 정수(천분율 ‰). float 금지 — 1원 단위 내림의 정확성 보장. """ from bisect import bisect_right from common.anchoring.constants import PRICE_RANGE_INDEX_MAX, UPPER_BOUNDS def calc_price_range_index(target_price: int) -> int: """목표가 → 가격구간 인덱스(0-기반). 자릿수 계단식 사다리. 좌폐우개 [이전 ub, ub): 가격이 upper_bound 와 정확히 같으면 다음 칸. 1억 이상은 마지막 인덱스로 클램프. 정적 테이블 idx = 반환값 + 1""" return min(bisect_right(UPPER_BOUNDS, target_price), PRICE_RANGE_INDEX_MAX) def calc_anchoring_price(target_price: int, anchoring_value: int) -> int: """앵커링가 = 목표가 × (1 − A), 1원 단위 내림. (정수 연산만 — float 곱셈 재도입 금지)""" return target_price * (1000 - anchoring_value) // 1000