용어 체계: 값=anchoring_value(정수‰)·가격=anchoring_price·조정=adjustment·구간=price_range·표본=sample - DB: rate_adjustments→anchoring.adjustments (id→adjustment_id, price_bracket_index→price_range_index, nego_count→sample_count, anchor_rate_before/after→anchoring_value_before/after, consumed_session_ids→used_session_ids) - sessions: target_anchoring_price→anchoring_price, anchor_rate_permille→anchoring_value, last_offered_price→last_offer_price, anchoring_adjustment_id→used_by_adjustment_id - 뷰: rate_history/current_rates→value_history/current_values, delta_permille→value_change - 코드: calc_price_range_index·calc_anchoring_price·evaluate_samples·get_current_value· get_latest_adjusted_value·get_current_anchoring_value·fetch_current_values·get_base_anchoring_value· Adjustment(ORM)·update_last_offer_price, 상수 ANCHORING_VALUE_MIN/MAX·ADJUSTMENT_STEP· PRICE_RANGE_COUNT/INDEX_MAX, 배치 로그 키 bracket=→price_range= - API: negodata protocol 필드 target_anchoring_price→anchoring_price (front 생성 모델·컴포넌트 동반) - 기존 DB 마이그레이션 신설: schedules/anchoring/migrations/20260706_rename_anchoring.sql (멱등 DO 블록 — 테이블·컬럼·뷰·인덱스·PK 제약. 코드 배포와 동시 적용 필요) - postgres-init 01·04, 문서 6종 동기화 - 실배포 전 수정 포함: main.py argparse 화(--dry-run 단독·오타 플래그 기동 전 차단), 박제 정합식 calc_anchoring_price 재사용, clamped 지표가 실제 포화만 집계(경계값 유지 제외) 주의: sessions.anchoring_value(정수‰)와 quotation_settings.anchoring_value(구 float 비율)는 같은 이름·다른 단위 — 구 컬럼은 미변경. 검증: 모듈 20·negodata 50·backend 57 테스트 통과, front tsc·vite build 통과, 로컬 DB 마이그레이션 적용 후 배치 dry-run·상주 기동·양 서버 부팅 확인. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
/**
|
|
* Generated by orval v7.21.0 🍺
|
|
* Do not edit manually.
|
|
* Negodata Api Server
|
|
* OpenAPI spec version: 0.1.0
|
|
*/
|
|
import type { ErrorInfo } from './errorInfo';
|
|
import type { ResTargetBreakdownMsg } from './resTargetBreakdownMsg';
|
|
import type { ResTargetBreakdownMdPrice } from './resTargetBreakdownMdPrice';
|
|
import type { ResTargetBreakdownInternetLowest } from './resTargetBreakdownInternetLowest';
|
|
import type { ResTargetBreakdownPurchase } from './resTargetBreakdownPurchase';
|
|
import type { ResTargetBreakdownSelling } from './resTargetBreakdownSelling';
|
|
import type { TargetCandidate } from './targetCandidate';
|
|
import type { ResTargetBreakdownChosenBasis } from './resTargetBreakdownChosenBasis';
|
|
import type { ResTargetBreakdownAnchoringPrice } from './resTargetBreakdownAnchoringPrice';
|
|
|
|
export interface ResTargetBreakdown {
|
|
result?: ErrorInfo;
|
|
msg?: ResTargetBreakdownMsg;
|
|
is_new?: boolean;
|
|
is_inherited?: boolean;
|
|
md_price?: ResTargetBreakdownMdPrice;
|
|
internet_lowest?: ResTargetBreakdownInternetLowest;
|
|
purchase?: ResTargetBreakdownPurchase;
|
|
selling?: ResTargetBreakdownSelling;
|
|
fee?: number;
|
|
margin?: number;
|
|
anchoring_value?: number;
|
|
candidates?: TargetCandidate[];
|
|
chosen_basis?: ResTargetBreakdownChosenBasis;
|
|
target_price?: number;
|
|
anchoring_price?: ResTargetBreakdownAnchoringPrice;
|
|
}
|