o2o-negosium-original/agent/tenants/_base/resources/scripts_requote.json
Mina Choi 71ef28110b [feat] negodata·agent·negosium: 협상 기준가 회사별 선택(공급가/매입가) + 공급사 포털 안내 회사설정화
어느 가격이 "공급사에 지불하는 단가"인지는 회사마다 달라, 컬럼을 합치는 대신 회사가 고르게 했다.
판정은 settings.features.nego_baseline_field 1순위, 미설정 회사는 price 만 숨겼으면 purchase_price 폴백.
판정식 정본은 negodata/backend/common/nego_baseline.py (agent·negosium backend 가 같은 규칙 미러).

- negodata front: 회사 설정에 협상 기준가 라디오(선택지마다 실제 나갈 문장 미리보기 + 학습 경고),
  '공급사 포털 안내' 탭 신설(협상 유의사항·헬프데스크 연락처), 용어 카탈로그에 target_price·supplier 추가.
  인터넷 최저가는 숨김 대상에서 제외(신규 견적의 유일한 목표가 후보).
  상품 등록 기본값에서 개발용 더미 제거(price 1,000,000·PROD-BAT-###·800,000·대한민국·10 EA·14).
- agent: get_item_price → get_item_baseline (기준가·호칭·회사 용어사전을 한 쿼리로),
  "기존 공급가 대비" 하드코딩을 회사 용어로 치환 + 받침 기준 조사 자동 보정,
  협상 스크립트 4종의 협력사·목표가·배송형태 용어를 {label_*} 토큰화, input_options 도 변수 치환 적용.
- negosium: 협상 화면 기준 단가·배송형태 라벨을 회사 설정 기준으로, 유의사항 본문과 헬프데스크 연락처를
  하드코딩에서 회사 설정으로(미등록 시 영역 숨김). 유의사항의 VAT·배송비 문구 삭제(IMK 0803 ⑥).
- negodata backend: LPS 검색 가격 힌트를 items.price 고정에서 기준가 규칙으로.

검증: 기준가 설정 3 × 숨김 4 = 12조합에서 협상 멘트·포털 표시·LPS 힌트가 전부 일치.
agent 테스트 176건 통과. 보고서 negodata/docs/nego-baseline-verification.md
2026-08-05 11:47:06 +09:00

148 lines
6.9 KiB
JSON

{
"_comment": "재견적(requote) 대화 스크립트. 신규 공급사 선정 흐름. 구조 보존 + 브랜드/표현 중립 재작성(CLEANROOM.md).",
"시작": {
"script": "",
"editor_script_id": "시작",
"next_input_mode": "null",
"input_options": [],
"next_step": { "default": "서비스안내" },
"type": "null",
"chat_end": false
},
"서비스안내": {
"script": "안녕하세요. {company_name} {service_name}입니다. 본 서비스는 {company_name}와 {label_supplier} 간 신규 물품 공급 협상을 위한 것으로, 귀사에 새로운 공급 기회를 제공하고자 합니다. 이용 방법 안내를 확인하신 뒤 [확인]을 눌러 주세요.",
"editor_script_id": "서비스안내",
"next_input_mode": "confirm",
"input_options": ["확인"],
"next_step": { "default": "담당자확인" },
"type": "text",
"chat_end": false
},
"담당자확인": {
"script": "본 안내는 {label_supplier} 포털에 등록된 담당자에게 발송되었습니다. 구매 협상 담당자가 맞는지 확인 부탁드립니다. 담당자가 맞다면 [예], 맞지 않다면 [아니오]를 선택해 주세요.",
"editor_script_id": "담당자확인",
"next_input_mode": "yes_no",
"input_options": ["예", "아니오"],
"next_step": { "예": "협상품목안내", "아니오": "담당자확인_아니오" },
"type": "text",
"chat_end": false
},
"담당자확인_아니오": {
"script": "[아니오]를 선택하셨습니다. 담당자 정보를 변경하시려면 [정보변경]을, 다시 진행하려면 [돌아가기]를 선택해 주세요.",
"editor_script_id": "담당자확인_아니오",
"next_input_mode": "yes_no",
"input_options": ["돌아가기", "정보변경"],
"next_step": { "돌아가기": "담당자확인", "정보변경": "정보변경_완료" },
"type": "text",
"chat_end": false
},
"정보변경_완료": {
"script": "[정보변경]을 선택하셨습니다. {label_supplier} 관리 시스템에서 담당자 정보를 변경하신 뒤 고객센터로 새 견적 생성을 요청해 주세요. 24시간 이내 갱신되지 않으면 미참여로 처리될 수 있습니다.",
"editor_script_id": "정보변경_완료",
"next_input_mode": "null",
"input_options": [],
"next_step": null,
"type": "text",
"chat_end": true
},
"협상품목안내": {
"script": "{company_name}는 아래 상품에 대해 신규 {label_supplier_를} 선정하고 있으며, 귀사를 초대하여 견적을 요청드립니다. 제출하신 견적은 복수 업체와의 비교 평가를 통해 {label_supplier} 선정에 반영됩니다. 상품 정보를 확인해 주세요.",
"editor_script_id": "협상품목안내",
"next_input_mode": "confirm",
"input_options": ["네, 알겠습니다."],
"next_step": { "default": "가격제안" },
"type": "text",
"chat_end": false
},
"가격제안": {
"script": "제안 가격에 동의해 주시면 동의한 업체에 한하여 가격 경쟁을 진행합니다. 진행하시겠습니까?",
"editor_script_id": "가격제안",
"next_input_mode": "yes_no",
"input_options": ["예", "아니오"],
"next_step": { "예": "배송형태선택", "아니오": "협상실패" },
"type": "text",
"chat_end": false
},
"협상실패": {
"script": "참여해 주셔서 감사합니다. 협상이 종료되었습니다.",
"editor_script_id": "협상실패",
"next_input_mode": "null",
"input_options": [],
"next_step": { "default": "협상종료" },
"type": "text",
"chat_end": false
},
"배송형태선택": {
"script": "{label_delivery_type_를} 선택해 주세요.",
"editor_script_id": "배송형태선택",
"next_input_mode": "delivery_type",
"input_options": ["{label_delivery_type_1}", "{label_delivery_type_2}", "{label_delivery_type_3}"],
"next_step": { "default": "가격협상_입력" },
"type": "text",
"chat_end": false
},
"가격협상_입력": {
"script": "제안하실 가격을 입력해 주세요.",
"editor_script_id": "가격협상_입력",
"next_input_mode": "price",
"input_options": [],
"next_step": { "default": "가격협상_확인" },
"type": "text",
"chat_end": false
},
"가격협상_확인": {
"script": "**{input_price}원**으로 제안하시겠습니까?",
"editor_script_id": "가격협상_확인",
"next_input_mode": "yes_no",
"input_options": ["예", "아니오"],
"next_step": { "예": "추가할인요청", "아니오": "가격재입력" },
"type": "text",
"chat_end": false
},
"가격재입력": {
"script": "다시 제안하실 가격을 입력해 주세요.",
"editor_script_id": "가격재입력",
"next_input_mode": "price",
"input_options": [],
"next_step": { "default": "가격협상_확인" },
"type": "text",
"chat_end": false
},
"추가할인요청": {
"script": "추가 할인 여지가 있으신가요? 가능하시면 더 경쟁력 있는 제안을 부탁드립니다.",
"editor_script_id": "추가할인요청",
"next_input_mode": "yes_no",
"input_options": ["예", "아니오"],
"next_step": { "default": "결과안내" },
"type": "text",
"chat_end": false
},
"결과안내": {
"script": "협상 결과를 확인해 주세요. 투찰을 확정하시려면 [투찰확정], 정보를 수정하시려면 [정보수정]을 선택해 주세요.",
"editor_script_id": "결과안내",
"next_input_mode": "yes_no",
"input_options": ["투찰확정", "정보수정"],
"next_step": { "투찰확정": "결과제출", "정보수정": "가격제안" },
"type": "text",
"chat_end": false
},
"결과제출": {
"script": "협상 내용을 확인하신 뒤 동의해 주세요.",
"editor_script_id": "결과제출",
"next_input_mode": "confirm",
"input_options": ["협상 내용을 확인했으며, 이의가 없음에 동의합니다."],
"next_step": { "default": "협상종료" },
"type": "text",
"chat_end": false
},
"협상종료": {
"script": "지금까지 {company_name} {service_name}를 통해 협상에 참여해 주셔서 감사합니다. 협상이 종료되었습니다.",
"editor_script_id": "협상종료",
"next_input_mode": "null",
"input_options": [],
"next_step": null,
"type": "text",
"chat_end": true
}
}