협상 중반에 목표가를 부르면 이후 올려줄 금액이 없어져 남은 카드가 같은 값만 반복한다.
제안은 앵커가 → 중간가 → 목표가로 수렴해야 하므로 시드를 그 순서에 맞춘다.
- NGC-010 향후 거래 연계 · NGC-011 양보 가치 강조: 제시 금액 {target_price} → {anchor_price}
- tactic: WC-01 종결 전용 추가, WC-04 min_round 2 → 종결 전용, WC-05 종결 전용 + min_round 2,
WC-02 min_round 2 추가 (WC-03 종전 유지)
init-data.sql · dbeaver/4_cards_reset_dbeaver.sql 동일 반영.
검증: 임시 DB 에 1_init + 4_cards_reset 적용 후 tactic·변수 확인.
212 lines
25 KiB
SQL
212 lines
25 KiB
SQL
-- 임시 데이터(로컬/개발 시드) — 스키마는 00-init.sql, 데이터는 이 파일.
|
|
-- 채우는 것: company.companies + company.users(negodata 로그인용) + 협상 카드(card.nego_cards/wild_cards).
|
|
-- 전체/공용 시드가 아니다. 재실행 안전(WHERE NOT EXISTS) — 운영 DB 에는 적용하지 않는다.
|
|
-- admin 계정은 negodata 프론트 로그인 폼 기본값(admin / admin1234)에 대응한다.
|
|
-- 적용(도커 postgres): docker exec -i negosium-db psql -U postgres -d negosium_db < postgres-init/temp-data.sql
|
|
-- created_at/updated_at/deleted 은 server_default 로 자동 채워져 INSERT 에 안 넣는다.
|
|
|
|
\connect negosium_db
|
|
|
|
-- 회사 1개 (고정 UUID — users.company_id FK 가 참조). status 1=active.
|
|
INSERT INTO company.companies (company_id, name, business_number, representative_name, email, contact_number, website_url, status)
|
|
SELECT 'a35152d2-db61-4760-9f1e-beb9736d957f', '아이마켓코리아', '220-88-21724', '홍길동',
|
|
'admin@imarketkorea.com', '02-3708-5000', 'https://www.imarketkorea.com', 1
|
|
WHERE NOT EXISTS (
|
|
SELECT 1 FROM company.companies WHERE company_id = 'a35152d2-db61-4760-9f1e-beb9736d957f'
|
|
);
|
|
|
|
-- admin 유저. password 는 'admin1234' 의 bcrypt 해시(백엔드 GetHashedPW 와 동일 알고리즘, checkpw 로 검증됨).
|
|
-- role 2=manager (UserRole.MANAGER; ADMIN 코드는 enum 에 없어 최상위인 MANAGER 사용). status 1=active.
|
|
INSERT INTO company.users (company_id, id, password, name, email, contact_number, last_accessed_at, status, role)
|
|
SELECT 'a35152d2-db61-4760-9f1e-beb9736d957f',
|
|
'admin',
|
|
'$2b$12$E.y.XVR.MxmzOMd2satUDuVhvQA4kRsNJu7lNbZA4YZf/UWVcslSy',
|
|
'관리자', 'admin@imarketkorea.com', '02-3708-5000', now(), 1, 2
|
|
WHERE NOT EXISTS (
|
|
SELECT 1 FROM company.users WHERE id = 'admin' AND deleted = FALSE
|
|
);
|
|
|
|
|
|
-- ============================================================
|
|
-- 협상 카드 시드 (실 적용 카드) — nego_cards 일반 11장 / wild_cards 와일드 5장
|
|
-- user_id NULL = o2o 기본 제공 카드. 기본 카드가 한 장도 없을 때만 통째로 삽입(재실행 안전).
|
|
-- tone(CardTone): 1=강경 2=정중 3=우호 4=중립 5=단호
|
|
-- strategy_type(CardStrategyType): 1=경쟁 2=수용 3=고수 4=협력 5=선점 6=종결
|
|
--
|
|
-- [사용 변수 목록] (총 9개) * 주체: customer=고객사(발화자,"당사") / partner=협력사(응답자,"귀사")
|
|
-- 기본가(DB 존재):
|
|
-- {target_price} 목표가격(고객사 지향가) 접미: 원(VAT별도)
|
|
-- {anchoring_price} 앵커링가격(고객사 하한) 접미: 원(VAT별도)
|
|
-- {internet_lowest_price} 인터넷 최저가 접미: 원(VAT별도)
|
|
-- 세션값(협상 중 직전 제시가):
|
|
-- {prev_customer_price} 고객사 직전 제시가 접미: 원
|
|
-- {prev_partner_price} 협력사 직전 제시가 접미: 원
|
|
-- 계산가(기본가·세션값 조합):
|
|
-- {target_mid_price} 역제안가 = (anchoring_price + target_price) / 2
|
|
-- {middle_price} 절충가 = (prev_customer_price + prev_partner_price) / 2
|
|
-- 조건/근거:
|
|
-- {customer_condition} 고객사 교환·요구 조건 (조건 전략 내용이 있을 때만 카드 선택 가능 — 미작성 시 토큰 잔존)
|
|
-- ============================================================
|
|
|
|
-- 일반 카드 (nego_cards)
|
|
INSERT INTO card.nego_cards
|
|
(user_id, name, number, script, edit_script, usage_type, tone, strategy_type)
|
|
SELECT * FROM (VALUES
|
|
-- 1. 타사 검토 언급 — tone 1(강경) · strategy 1(경쟁)
|
|
(NULL::uuid, '타사 검토 언급', 'NGC-001',
|
|
'귀사의 품질과 협력 의지를 높이 평가하고 있어 우선적으로 협의를 진행하고 있습니다.
|
|
|
|
다만 당사는 현재 본 건에 대해 복수의 공급 가능 업체와 병행하여 검토를 진행하고 있으며, 최종 선정을 위해서는 제시해 주신 조건이 타 대안 대비 분명한 경쟁력을 갖추어야 합니다.
|
|
|
|
귀사께서 충분히 경쟁력 있는 제안을 주실 수 있으리라 기대하며, 재검토하신 조건을 회신해 주시기 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "귀사의 품질과 협력 의지를 높이 평가하고 있어 우선적으로 협의를 진행하고 있습니다."}]}, {"type": "paragraph", "children": [{"text": "다만 당사는 현재 본 건에 대해 "}, {"text": "복수의 공급 가능 업체와 병행하여 검토를 진행", "bold": true}, {"text": "하고 있으며, 최종 선정을 위해서는 제시해 주신 조건이 타 대안 대비 분명한 경쟁력을 갖추어야 합니다."}]}, {"type": "paragraph", "children": [{"text": "귀사께서 충분히 경쟁력 있는 제안을 주실 수 있으리라 기대하며, 재검토하신 조건을 회신해 주시기 바랍니다."}]}]'::jsonb,
|
|
1, 1, 1),
|
|
|
|
-- 2. 내부 승인 필요 — tone 2(정중) · strategy 1(경쟁)
|
|
(NULL::uuid, '내부 승인 필요', 'NGC-002',
|
|
'제안해 주신 조건은 잘 검토하였습니다.
|
|
|
|
다만 해당 수준의 가격은 담당자 선에서 단독으로 확정하기 어려우며, 내부 상위 결재 절차를 거쳐야 하는 사안입니다. 솔직히 말씀드리면, 현재 조건으로는 내부 승인을 받기가 쉽지 않을 것으로 예상됩니다.
|
|
|
|
당사가 무리 없이 승인을 진행할 수 있는 수준으로 한 번 더 조정해 주신다면, 신속하게 절차를 밟아 협상을 매듭짓겠습니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "제안해 주신 조건은 잘 검토하였습니다."}]}, {"type": "paragraph", "children": [{"text": "다만 해당 수준의 가격은 담당자 선에서 단독으로 확정하기 어려우며, "}, {"text": "내부 상위 결재 절차를 거쳐야 하는 사안", "bold": true}, {"text": "입니다. 솔직히 말씀드리면, 현재 조건으로는 내부 승인을 받기가 쉽지 않을 것으로 예상됩니다."}]}, {"type": "paragraph", "children": [{"text": "당사가 무리 없이 승인을 진행할 수 있는 수준으로 한 번 더 조정해 주신다면, 신속하게 절차를 밟아 협상을 매듭짓겠습니다."}]}]'::jsonb,
|
|
1, 2, 1),
|
|
|
|
-- 3. 장기 관계 강조 — tone 3(우호) · strategy 2(수용)
|
|
(NULL::uuid, '장기 관계 강조', 'NGC-003',
|
|
'귀사와의 협력을 진심으로 소중하게 생각하고 있습니다.
|
|
|
|
이번 거래가 단발성으로 끝나지 않고, 앞으로도 오랜 기간 협력하는 관계가 되기를 바랍니다. 그런 의미에서 양사가 모두 만족할 수 있는 합리적인 지점을 함께 찾고자 합니다.
|
|
|
|
귀사께서 조금만 더 협조해 주신다면, 당사 역시 장기적인 관점에서 최선을 다해 화답하겠습니다. 좋은 합의를 기대합니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "귀사와의 협력을 진심으로 소중하게 생각하고 있습니다."}]}, {"type": "paragraph", "children": [{"text": "이번 거래가 단발성으로 끝나지 않고, "}, {"text": "앞으로도 오랜 기간 협력하는 관계", "bold": true}, {"text": "가 되기를 바랍니다. 그런 의미에서 양사가 모두 만족할 수 있는 합리적인 지점을 함께 찾고자 합니다."}]}, {"type": "paragraph", "children": [{"text": "귀사께서 조금만 더 협조해 주신다면, 당사 역시 장기적인 관점에서 최선을 다해 화답하겠습니다. 좋은 합의를 기대합니다."}]}]'::jsonb,
|
|
1, 3, 2),
|
|
|
|
-- 4. 명분 제공 — tone 2(정중) · strategy 2(수용)
|
|
(NULL::uuid, '명분 제공', 'NGC-004',
|
|
'그동안 귀사께서 제공해주신 전문성과 경쟁력에 감사드립니다.
|
|
|
|
이번 합의는 귀사가 일방적으로 양보하는 것이 아니라, 양사가 장기적 협력을 위해 함께 내린 전략적 결정으로 이해해 주시면 감사하겠습니다. 당사 역시 이번 합의를 귀사와의 신뢰를 보여주는 기회로 삼겠습니다.
|
|
|
|
서로의 입장을 존중하는 선에서 원만하게 마무리할 수 있기를 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "그동안 귀사께서 제공해주신 전문성과 경쟁력에 감사드립니다."}]}, {"type": "paragraph", "children": [{"text": "이번 합의는 귀사가 일방적으로 양보하는 것이 아니라, "}, {"text": "양사가 장기적 협력을 위해 함께 내린 전략적 결정", "bold": true}, {"text": "으로 이해해 주시면 감사하겠습니다. 당사 역시 이번 합의를 귀사와의 신뢰를 보여주는 기회로 삼겠습니다."}]}, {"type": "paragraph", "children": [{"text": "서로의 입장을 존중하는 선에서 원만하게 마무리할 수 있기를 바랍니다."}]}]'::jsonb,
|
|
1, 2, 2),
|
|
|
|
-- 5. 공정 합의 제안 — tone 4(중립) · strategy 2(수용)
|
|
(NULL::uuid, '공정 합의 제안', 'NGC-005',
|
|
'당사가 바라는 것은 어느 한쪽에 치우친 거래가 아니라, 양사 모두가 공정하다고 느낄 수 있는 합의입니다.
|
|
|
|
당사는 합리적인 근거 위에서 성실하게 조건을 제시해 왔으며, 귀사 역시 같은 자세로 임해 주시리라 믿습니다. 서로가 공정함을 기준으로 한 걸음씩 다가선다면, 양사 모두 납득할 수 있는 결론에 이를 수 있습니다.
|
|
|
|
공정한 합의를 향해 귀사의 전향적인 검토를 부탁드립니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "당사가 바라는 것은 어느 한쪽에 치우친 거래가 아니라, "}, {"text": "양사 모두가 공정하다고 느낄 수 있는 합의", "bold": true}, {"text": "입니다."}]}, {"type": "paragraph", "children": [{"text": "당사는 합리적인 근거 위에서 성실하게 조건을 제시해 왔으며, 귀사 역시 같은 자세로 임해 주시리라 믿습니다. 서로가 공정함을 기준으로 한 걸음씩 다가선다면, 양사 모두 납득할 수 있는 결론에 이를 수 있습니다."}]}, {"type": "paragraph", "children": [{"text": "공정한 합의를 향해 귀사의 전향적인 검토를 부탁드립니다."}]}]'::jsonb,
|
|
1, 4, 2),
|
|
|
|
-- 7. 예산 상한 안내 — tone 2(정중) · strategy 3(고수)
|
|
(NULL::uuid, '예산 상한 안내', 'NGC-007',
|
|
'귀사와의 합의를 진심으로 바라고 있습니다.
|
|
|
|
다만 당사 내부 사정상 본 건에 희망 가능한 금액은 {anchoring_price}원(VAT별도)이 한계입니다. 이는 담당자 개인의 재량을 넘어선것으로 너른 양해를 부탁드립니다.
|
|
|
|
해당 범위 내에서 귀사가 수용 가능한 지점을 함께 찾을 수 있기를 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "귀사와의 합의를 진심으로 바라고 있습니다."}]}, {"type": "paragraph", "children": [{"text": "다만 당사 내부 사정상 본 건에 희망 가능한 금액은 "}, {"type": "variable", "name": "anchoring_price", "label": "앵커링가격(고객사 하한)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "이 한계입니다.", "bold": true}, {"text": " 이는 담당자 개인의 재량을 넘어선것으로 너른 양해를 부탁드립니다."}]}, {"type": "paragraph", "children": [{"text": "해당 범위 내에서 귀사가 수용 가능한 지점을 함께 찾을 수 있기를 바랍니다."}]}]'::jsonb,
|
|
1, 2, 3),
|
|
|
|
-- 8. 시장가 근거 제시 — tone 4(중립) · strategy 3(고수)
|
|
(NULL::uuid, '시장가 근거 제시', 'NGC-008',
|
|
'인터넷 시장 조사 결과, 동종 업계의 유사 거래에서도 본 건과 비슷한 사양은 {internet_lowest_price}원(VAT별도) 안팎에서 거래되고 있습니다.
|
|
|
|
특정 업체만의 기준이 아니라 업계 전반의 관행에 근거한 가격인 만큼, 합리적으로 검토해 주시기를 부탁드립니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "인터넷 시장 조사 결과, 동종 업계의 유사 거래에서도 본 건과 비슷한 사양은 "}, {"type": "variable", "name": "internet_lowest_price", "label": "인터넷 최저가", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": " 안팎에서 거래되고 있습니다."}]}, {"type": "paragraph", "children": [{"text": "특정 업체만의 기준이 아니라 업계 전반의 관행에 근거한 가격인 만큼, 합리적으로 검토해 주시기를 부탁드립니다."}]}]'::jsonb,
|
|
1, 4, 3),
|
|
|
|
-- 10. 향후 거래 연계 — tone 4(중립) · strategy 4(협력)
|
|
(NULL::uuid, '향후 거래 연계', 'NGC-010',
|
|
'이번 거래의 가격을 {anchor_price}원(VAT별도)으로 조정하는 대신, {customer_condition}을 함께 검토해 주실 것을 제안 드립니다.
|
|
|
|
당장의 단가 한 건만 보기보다 향후 이어질 거래까지 함께 고려한다면, 양사 모두에게 더 큰 가치를 만들 수 있습니다. 이번 합의를 장기적 관계의 출발점으로 삼아, 서로에게 이익이 되는 구조를 함께 설계하기를 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "이번 거래의 가격을 "}, {"type": "variable", "name": "anchor_price", "label": "앵커가", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "으로 조정하는 대신, "}, {"type": "variable", "name": "customer_condition", "label": "고객사 교환·요구 조건", "children": [{"text": ""}], "style": {"bold": true}}, {"text": "을 함께 검토해 주실 것을 제안 드립니다."}]}, {"type": "paragraph", "children": [{"text": "당장의 단가 한 건만 보기보다 향후 이어질 거래까지 함께 고려한다면, 양사 모두에게 더 큰 가치를 만들 수 있습니다. 이번 합의를 장기적 관계의 출발점으로 삼아, 서로에게 이익이 되는 구조를 함께 설계하기를 바랍니다."}]}]'::jsonb,
|
|
1, 4, 4),
|
|
|
|
-- 11. 양보 가치 강조 — tone 4(중립) · strategy 4(협력)
|
|
(NULL::uuid, '양보 가치 강조', 'NGC-011',
|
|
'이번 조정은 당사에 결코 작은 일이 아님을 먼저 말씀드리고 싶습니다.
|
|
|
|
{anchor_price}원(VAT별도)으로의 조정은 당사 수익 구조상 상당한 부담을 감수한 결정이며, 내부적으로도 쉽지 않은 승인 과정을 거쳤습니다. 이는 곧 귀사께서 그만큼 실질적인 혜택을 얻으시게 된다는 의미이기도 합니다.
|
|
|
|
당사가 감수한 만큼, 귀사께서도 이에 상응하는 조건으로 화답해 주시기를 정중히 요청 드립니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "이번 조정은 당사에 결코 작은 일이 아님을 먼저 말씀드리고 싶습니다."}]}, {"type": "paragraph", "children": [{"type": "variable", "name": "anchor_price", "label": "앵커가", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "으로의 조정은 당사 수익 구조상 상당한 부담을 감수한 결정", "bold": true}, {"text": "이며, 내부적으로도 쉽지 않은 승인 과정을 거쳤습니다. 이는 곧 귀사께서 그만큼 실질적인 혜택을 얻으시게 된다는 의미이기도 합니다."}]}, {"type": "paragraph", "children": [{"text": "당사가 감수한 만큼, 귀사께서도 이에 상응하는 조건으로 화답해 주시기를 정중히 요청 드립니다."}]}]'::jsonb,
|
|
1, 4, 4)
|
|
) AS v(user_id, name, number, script, edit_script, usage_type, tone, strategy_type)
|
|
WHERE NOT EXISTS (SELECT 1 FROM card.nego_cards WHERE user_id IS NULL AND deleted = FALSE);
|
|
|
|
-- 와일드 카드 (wild_cards) - condition NULL, available TRUE
|
|
INSERT INTO card.wild_cards
|
|
(user_id, name, number, script, edit_script, usage_type, condition, available, memo, tone, strategy_type)
|
|
SELECT * FROM (VALUES
|
|
-- 1. 목표가 선제안 — tone 5(단호) · strategy 5(선점)
|
|
(NULL::uuid, '목표가 선제안', 'WC-01',
|
|
'안녕하십니까. 금번 협상에 참여해 주셔서 감사합니다.
|
|
|
|
당사는 시장 상황과 거래 조건을 종합적으로 검토하여 합리적인 목표 가격을 산정하였으며, 이에 {target_price}원(VAT별도)을 제안 드립니다.
|
|
|
|
본 제안은 명확한 산정 기준에 근거한 것으로, 귀사께서도 이를 바탕으로 건설적인 협의가 가능할 것으로 기대합니다. 검토 후 의견 주시기 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "안녕하십니까. 금번 협상에 참여해 주셔서 감사합니다."}]}, {"type": "paragraph", "children": [{"text": "당사는 "}, {"text": "시장 상황과 거래 조건", "bold": true}, {"text": "을 종합적으로 검토하여 합리적인 목표 가격을 산정하였으며, 이에 "}, {"type": "variable", "name": "target_price", "label": "목표가격(고객사 지향가)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "을 제안 드립니다.", "bold": true}]}, {"type": "paragraph", "children": [{"text": "본 제안은 명확한 산정 기준에 근거한 것으로, 귀사께서도 이를 바탕으로 건설적인 협의가 가능할 것으로 기대합니다. 검토 후 의견 주시기 바랍니다."}]}]'::jsonb,
|
|
1, NULL::varchar, TRUE, NULL::varchar, 5, 5),
|
|
|
|
-- 2. 역제안가 제시 — tone 5(단호) · strategy 5(선점)
|
|
(NULL::uuid, '역제안가 제시', 'WC-02',
|
|
'제안해 주신 {prev_partner_price}원은 당사가 검토한 기준 대비 다소 높은 수준으로 판단됩니다.
|
|
|
|
이에 당사는 {target_mid_price}원(VAT별도)을 역으로 제안 드립니다. 양측 제안 사이에서 합리적인 접점을 찾되, 그 기준은 명확한 산정 근거에 두는 것이 바람직하다고 봅니다.
|
|
|
|
귀사의 제안 근거도 함께 공유해 주시면, 보다 빠르게 합의 가능한 구간을 좁혀갈 수 있겠습니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "제안해 주신 "}, {"type": "variable", "name": "prev_partner_price", "label": "협력사 직전 제시가", "children": [{"text": ""}], "suffix": "원", "style": {"bold": true, "color": "red"}}, {"text": "은 당사가 검토한 기준 대비 다소 높은 수준으로 판단됩니다."}]}, {"type": "paragraph", "children": [{"text": "이에 당사는 "}, {"type": "variable", "name": "target_mid_price", "label": "역제안가(앵커·목표 중간)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "을 역으로 제안 드립니다.", "bold": true}, {"text": " 양측 제안 사이에서 합리적인 접점을 찾되, 그 기준은 명확한 산정 근거에 두는 것이 바람직하다고 봅니다."}]}, {"type": "paragraph", "children": [{"text": "귀사의 제안 근거도 함께 공유해 주시면, 보다 빠르게 합의 가능한 구간을 좁혀갈 수 있겠습니다."}]}]'::jsonb,
|
|
1, NULL::varchar, TRUE, NULL::varchar, 5, 5),
|
|
|
|
-- 3. 최종 통보 — tone 1(강경) · strategy 1(경쟁)
|
|
(NULL::uuid, '최종 통보', 'WC-03',
|
|
'합리적인 기준에 근거하여 당사의 최종 목표 가격 {target_price}원(VAT별도)을 제안 드립니다. 귀사의 기존 제안 가격으로는 긍정적인 합의가 어려울 것으로 예상됩니다.
|
|
|
|
이번 협상이 결렬되는 경우 우선 협상권을 보장하기 어려우며, 다른 공급 업체를 선정하기 위한 검토가 진행될 수 있습니다.
|
|
|
|
본 금액을 수락하시면 해당 가격으로 최종 확정되며, 재검토가 필요하시면 다른 제안 가격을 입력해 주시기 바랍니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "합리적인 기준에 근거하여 당사의 최종 목표 가격 "}, {"type": "variable", "name": "target_price", "label": "목표가격(고객사 지향가)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "을 제안 드립니다. 귀사의 기존 제안 가격으로는 긍정적인 합의가 어려울 것으로 예상됩니다."}]}, {"type": "paragraph", "children": [{"text": "이번 협상이 결렬되는 경우 "}, {"text": "우선 협상권을 보장하기 어려우며, 다른 공급 업체를 선정하기 위한 검토가 진행될 수 있습니다.", "bold": true}]}, {"type": "paragraph", "children": [{"text": "본 금액을 수락하시면 해당 가격으로 최종 확정되며, 재검토가 필요하시면 다른 제안 가격을 입력해 주시기 바랍니다."}]}]'::jsonb,
|
|
1, NULL::varchar, TRUE, NULL::varchar, 1, 1),
|
|
|
|
-- 4. 단계적 인하 제안 — tone 1(강경) · strategy 1(경쟁)
|
|
(NULL::uuid, '단계적 인하 제안', 'WC-04',
|
|
'당초 당사가 검토한 적정가는 {anchoring_price}원(VAT별도) 수준이었습니다. 다만 귀사의 입장과 시장 상황을 함께 고려하여, 당사가 한발 물러서고자 합니다.
|
|
|
|
이에 {target_price}원(VAT별도)으로 조정하여 제안 드립니다. 이는 당초 기준 대비 당사가 상당 부분 양보한 금액이니, 귀사께서도 이 점을 감안하여 긍정적으로 검토해 주시기를 부탁드립니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "당초 당사가 검토한 적정가는 "}, {"type": "variable", "name": "anchoring_price", "label": "앵커링가격(고객사 하한)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": " 수준이었습니다. 다만 귀사의 입장과 시장 상황을 함께 고려하여, 당사가 한발 물러서고자 합니다."}]}, {"type": "paragraph", "children": [{"text": "이에 "}, {"type": "variable", "name": "target_price", "label": "목표가격(고객사 지향가)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "으로 조정하여 제안 드립니다.", "bold": true}, {"text": " 이는 당초 기준 대비 당사가 상당 부분 양보한 금액이니, 귀사께서도 이 점을 감안하여 긍정적으로 검토해 주시기를 부탁드립니다."}]}]'::jsonb,
|
|
1, NULL::varchar, TRUE, NULL::varchar, 1, 1),
|
|
|
|
-- 5. 중간값 절충 — tone 4(중립) · strategy 6(종결)
|
|
(NULL::uuid, '중간값 절충', 'WC-05',
|
|
'긴 협의 끝에 양측의 입장이 상당히 가까워졌습니다.
|
|
|
|
현재 당사 제안 {prev_customer_price}원과 귀사 제안 {prev_partner_price}원 사이의 차이를 양사가 절반씩 나누어, {middle_price}원(VAT별도)으로 마무리할 것을 제안 드립니다.
|
|
|
|
어느 한쪽이 일방적으로 양보하기보다 균형 있게 합의하는 것이 앞으로의 협력 관계를 위해서도 바람직하다고 생각합니다. 동의하신다면 본 금액으로 최종 확정하겠습니다.',
|
|
'[{"type": "paragraph", "children": [{"text": "긴 협의 끝에 양측의 입장이 상당히 가까워졌습니다."}]}, {"type": "paragraph", "children": [{"text": "현재 당사 제안 "}, {"type": "variable", "name": "prev_customer_price", "label": "고객사 직전 제시가", "children": [{"text": ""}], "suffix": "원", "style": {"bold": true, "color": "red"}}, {"text": "과 귀사 제안 "}, {"type": "variable", "name": "prev_partner_price", "label": "협력사 직전 제시가", "children": [{"text": ""}], "suffix": "원", "style": {"bold": true, "color": "red"}}, {"text": " 사이의 차이를 양사가 절반씩 나누어, "}, {"type": "variable", "name": "middle_price", "label": "절충가(양측 중간)", "children": [{"text": ""}], "suffix": "원(VAT별도)", "style": {"bold": true, "color": "red"}}, {"text": "으로 마무리할 것을 제안 드립니다.", "bold": true}]}, {"type": "paragraph", "children": [{"text": "어느 한쪽이 일방적으로 양보하기보다 균형 있게 합의하는 것이 앞으로의 협력 관계를 위해서도 바람직하다고 생각합니다. 동의하신다면 본 금액으로 최종 확정하겠습니다."}]}]'::jsonb,
|
|
1, NULL::varchar, TRUE, NULL::varchar, 4, 6)
|
|
) AS v(user_id, name, number, script, edit_script, usage_type, condition, available, memo, tone, strategy_type)
|
|
WHERE NOT EXISTS (SELECT 1 FROM card.wild_cards WHERE user_id IS NULL AND deleted = FALSE);
|
|
|
|
-- 와일드카드 전술 운영 규칙(tactic) — 제안가는 script 변수 파싱으로 결정되므로,
|
|
-- 문장으로 알 수 없는 규칙(종결 전용·최소 라운드)만 여기 시드한다. 멱등(미설정 행만 갱신).
|
|
-- 목표가 제시 카드(WC-01·03·04)는 종결 전용 — 협상 중반에 목표가를 부르면 이후 올려줄 금액이
|
|
-- 없어져 남은 카드가 같은 값만 반복하게 된다. 제안은 앵커가 → 중간가 → 목표가로 수렴시킨다.
|
|
-- WC-05 중간값 절충 = 종결 전용 + 2라운드부터(간격이 좁혀진 뒤라야 절충이 성립)
|
|
-- WC-02 역제안가 제시 = 2라운드부터(상대 제안을 받아본 뒤 하는 것)
|
|
UPDATE card.wild_cards SET tactic = '{"closing": true}'::jsonb
|
|
WHERE number IN ('WC-01', 'WC-03', 'WC-04') AND user_id IS NULL AND deleted = FALSE
|
|
AND (tactic IS NULL OR tactic = '{}'::jsonb);
|
|
UPDATE card.wild_cards SET tactic = '{"closing": true, "min_round": 2}'::jsonb
|
|
WHERE number = 'WC-05' AND user_id IS NULL AND deleted = FALSE
|
|
AND (tactic IS NULL OR tactic = '{}'::jsonb);
|
|
UPDATE card.wild_cards SET tactic = '{"min_round": 2}'::jsonb
|
|
WHERE number = 'WC-02' AND user_id IS NULL AND deleted = FALSE
|
|
AND (tactic IS NULL OR tactic = '{}'::jsonb);
|