# This Python file uses the following encoding: utf-8

"""
File: criteria_reflection.py
Description: 以专业咨询机构的赢单路径为参考，结合公司实际统计数据进行反思，提出改进版本的赢单路径

Author: [Your Name]
Date: [Current Date]
"""
from AgentProxy import AgentProxy
import pandas as pd

professional_won_path = [
    {
        "销售阶段名称": "01-prospecting",
        "客户采购行为": "",
        "销售阶段任务": "了解客户信息、与客户进行交流，初步了解客户需求，并确定项目对接人，进入客户供应商名单",
        "关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算",
        "销售关键动作": "1、了解客户组织架构，了解客户现有系统使用情况、竞品使用情况\n2、判断匹配度\n3、明确关键部门及其关键人\n4、明确客户是否有对应预算",
        "售前关键动作": "",
        "客户支持行为": "1. 交流中客户较为开放，能告知需求，计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;",
        "阶段转化标准": "1.客户有需求\n2.有明确的项目联系人"
    },
    {
        "销售阶段名称": "02-evaluation",
        "客户采购行为": "",
        "销售阶段任务": "收集客户信息，了解客户内部预算情况、预期的项目落地时间、产品和数量等，判断商机可靠性；组织技术交流，讲解公司解决方案，传递公司价值",
        "关键获取信息": "1、整理需求确认文档，客户确认\n2.在CRM录入组织架构，明确决策链和决策人\n3.预算是否完成申批\n4.是否进PCC\n5.PCC是否已申批:6.PcC状态\n7.测试类型\n8.测试项（用例）",
        "销售关键动作": "1、整理需求确认文档，客户确认\n2、在CRM录入组织架构，明确决策链和决策人\n3、了解决策链的每个客户动力;\n4.发展线人\n5、组织技术交流，传递公司及产品价值，引导客户的场景和我们的特性结合\n6、组织技术交流，了解预期的项目落地时间、产品和数量等\n7.和客户确认是否需要测试\n8、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试",
        "售前关键动作": "",
        "客户支持行为": "1.愿意透露决策链信息，预算信息，友商信息，时间信息。\n2. 能介绍高title的人\n3. 客户有对我们产品的测试计划;",
        "阶段转化标准": "1.客户有预算\n2.有明确的项目时间\n3.有预期的产品和数量"
    },
    {
        "销售阶段名称": "03-qualification",
        "客户采购行为": "",
        "销售阶段任务": "收集、确认项目立项信息，明确产品和数量；\n组织测试必要性并引导客户做poc测试，验证应用场景和技术适用性、平鼎成功入围",
        "关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n（立项报告的内容）\n4.招标方式",
        "销售关键动作": "1、和客户确认是否需要测试\n2、对客户提出的测试需求进行评估，确定需求我们优势够，决定是否跟进测试\n3、引导客户的测试方案制定，引导将我们优势点，加入到测试方案中，如：性能、扩展性、边界\n4、在公司内部组织测试资源\n5、获取客户内部的测试报告，了解真实的测试结论\n6、了解客户对测试结果的态度和对手情况\n7、做测试正式汇报，和客户达成一致",
        "售前关键动作": "",
        "客户支持行为": "1.支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果，客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料",
        "阶段转化标准": "1.项目预算批准、项目已立项\n2.有确定产品和数量、或\n3.完成场景应用/技术适用性验证、客户确定平鼎入围（完成poc）"
    },
    {
        "销售阶段名称": "04-bidding/negotiating",
        "客户采购行为": "",
        "销售阶段任务": "确认项目是否需要招标，提前影响招投标结果并赢得标书；若不需要招标，则完成商务谈判，确认价格和产品可交付沟通与评审",
        "关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额",
        "销售关键动作": "1.制定关单策略及竞争策略\n2.控制立项报告（对对手不利的参数）\n3.如果无法控制立项，制定应对策略\n4.创造机会与高层沟通汇报\n5.沟通交付计划及SOW\n6. 确定关键联系人",
        "售前关键动作": "",
        "客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的标参数（或有利于我方）\n3. 对黑马和灰犀牛的处理，愿意提供应对处理",
        "阶段转化标准": "1.完成可交付评审；\n2.投标通过审批;\n3.投标结果确认赢标或完成商务谈判，确定价格和产品"
    },
    {
        "销售阶段名称": "05-contract review",
        "客户采购行为": "",
        "销售阶段任务": "发起合同协议审批申请，确认合同条款",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "合同评审通过，完成合同协商审批，确认合同条款"
    },
    {
        "销售阶段名称": "06-closed won",
        "客户采购行为": "",
        "销售阶段任务": "合同归档，项目赢单",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "合同归档"
    },
    {
        "销售阶段名称": "06-closed cancel",
        "客户采购行为": "确认项目取消原因",
        "销售阶段任务": "复盘项目输单原因",
        "关键获取信息": "取消原因",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "1.客户明确表示取消项目\n2.投标确认状态为输单"
    }
]

actual_won_path = [
    {
        "销售阶段名称": "01-prospecting",
        "客户采购行为": "",
        "销售阶段任务": "",
        "关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "1. 交流中客户较为开放，能告知需求，计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;",
        "阶段转化标准": "1.客户有需求 2.有明确的项目联系人"
    },
    {
        "销售阶段名称": "02-evaluation",
        "客户采购行为": "",
        "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成商务评估与商机确认\n完成市场调研与竞争分析",
        "关键获取信息": "1.预算是否完成申批\n2.是否进PCC\n3.PCC是否已申批\n4.PCC状态\n5.测试类型\n6.测试项（用例）",
        "销售关键动作": "**客户接触与需求识别**\n**商务调研与合同准备**\n**项目支持与优化**\n**内部协调与支持**",
        "售前关键动作": "",
        "客户支持行为": "1. **客户需求的深入理解与确认**:\n- 积极主动地与客户沟通,深入理解客户的需求、预算和业务目标。确保和明确预算。\n- 客户愿意参与并进行多次沟通，以确认需求的具体细节，并帮助解决方案能够准确匹配需求。\n\n2. **产品或服务的匹配度评估**:\n- 协助组织产品演示或服务方案说明会,充分展示我们产品的特点，包括技术能力、功能特性和性能指标。\n- 需要进行必要的技术评估和测试，以证明产品或服务的有效性和可靠性。\n\n3. **客户的积极认知与接受度**:\n- 客户对我们的解决方案表现出浓厚兴趣，并对其潜在价值有清晰认识。",
        "阶段转化标准": ""
    },
    {
        "销售阶段名称": "03-qualification",
        "客户采购行为": "",
        "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成商务评估与商机确认\n完成项目立项与合同准备",
        "关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n（立项报告的内容）\n4.招标方式",
        "销售关键动作": "**客户关系管理**\n**项目支持与优化**\n**内部协调与支持**\n**商务谈判与合同准备**",
        "售前关键动作": "",
        "客户支持行为": "1. 支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果，客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料",
        "阶段转化标准": "1. **需求与方案的匹配度**：确认客户的需求是否与公司的产品或服务有力匹配，包括技术能力、产品特性、服务范围等。\n\n2. **技术评估与测试**：评估完成技术验证或试用阶段，包括技术风险、兼容问题、服务水平等，并有足够的保障措施。\n\n3. **商务条款与定价**：初步确定商务条款和定价策略，以及客户对公司的信任程度。\n\n4. **内部准备就绪**：确保公司内部对于承接项目的服务能力已经就绪，包括技术支持、交付能力、服务团队、人力资源等。\n\n5. **客户意愿与定位**：明确在客户采购决策链中的竞争优势定位，包括定价策略、合同条款、竞争优势等。\n\n6. **合规性与法律审查**：确保所有商务活动符合相关法律法规，合同草案已经过法律审核，没有潜在的法律风险。"
    },
    {
        "销售阶段名称": "04-bidding/negotiating",
        "客户采购行为": "",
        "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成项目立项与合同准备\n完成商务谈判与竞争分析",
        "关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额",
        "销售关键动作": "**客户关系管理**\n**合同审查与订单处理**\n**客户接触与需求识别**\n**商务谈判与合同准备**",
        "售前关键动作": "",
        "客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的招标参数（或有利于我方）\n3. 对黑马和灰犀牛的处理，愿意提供应对处理",
        "阶段转化标准": "1. **客户需求与解决方案的匹配度确认**:\n- 确保所提供的解决方案完全符合客户的需求和预期。\n- 与客户共同验证解决方案的有效性和可行性。\n\n2. **中标主张的确定与沟通**:\n- 明确并强化产品或服务的独特卖点（USP）和价值主张。\n- 确认客户对产品或服务的认可度和采购意愿维持在较高水平。"
    },
    {
        "销售阶段名称": "05-contract review",
        "客户采购行为": "",
        "销售阶段任务": "",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "完成合同协议审批申请，确认合同条款（包括付款条件、服务开通时间等）"
    },
    {
        "销售阶段名称": "06-closed won",
        "客户采购行为": "",
        "销售阶段任务": "完成需求确认与收集\n完成合同签订与归档",
        "关键获取信息": "无",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "合同签署完成，合同归档（系统正式确认订单）"
    },
    {
        "销售阶段名称": "06-cancel",
        "客户采购行为": "",
        "销售阶段任务": "确认项目取消原因\n输单原因",
        "关键获取信息": "取消原因",
        "销售关键动作": "",
        "售前关键动作": "",
        "客户支持行为": "",
        "阶段转化标准": "1.客户明确回复项目取消 2.客户明确表示没有预算 3.内部立项未通过\n1.投标确认结果未通过 2.客户明确表示选择竞品 3.poc结果客户满意度半数未入围/未通过 4.商务谈判失败 5.其他如商务关系没有竞争机会"
    }
]

api_key = 'c6bbe7f48063a2c1' 
api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' 
assistant_id = "66bb09a84673b57506fe7bbd" 
agent = AgentProxy(assistant_id, api_key, api_secret)

reflection_path = [] # 记录反思后的赢单路径

# Iterate over professional_won_path and get index in the loop
for index, pro_stage in enumerate(professional_won_path):
    print(f"Index: {index}")
    custom_stage = actual_won_path[index]

    # 反思销售阶段任务
    prompt_reflection_task = f"""
    任务：
    以专业咨询机构提出的销售阶段任务为参考和蓝本，结合实际销售数据分析总结的销售任务，提出改进版本的销售阶段任务，注意尽可能以专业机构的版本为主，语言、风格也按照专业机构的版本。
    专业咨询机构提出的销售阶段任务：
    {pro_stage['销售阶段任务']}
    通过分析实际销售数据分析总结的得到的销售任务：
    {custom_stage['销售阶段任务']}
    """
    print(f"prompt_reflection_task: {prompt_reflection_task}")
    reflection_task = agent.send_message(prompt_reflection_task)
    print(f"反思后的销售阶段任务: {reflection_task}")

    reflection_stage = pro_stage.copy()
    reflection_stage['销售阶段任务'] = reflection_task

    # 反思销售关键动作
    prompt_reflection_action = f"""
    任务：
    以专业咨询机构提出的销售关键动作为参考和蓝本，结合实际销售数据分析总结的销售关键动作，提出改进版本的销售关键动作，注意尽可能以专业机构的版本为主，语言、风格也比照专业机构的版本。
    专业咨询机构提出的销售关键动作：
    {pro_stage['销售关键动作']}
    通过分析实际销售数据分析总结得到的销售关键动作：
    {custom_stage['销售关键动作']}
    """
    print(f"prompt_reflection_action: {prompt_reflection_action}")
    reflection_action = agent.send_message(prompt_reflection_action)
    print(f"反思后的销售关键动作: {reflection_action}")
    reflection_stage['销售关键动作'] = reflection_action

    # 反思阶段转化标准
    prompt_reflection_standard = f"""
    任务：
    以专业咨询机构提出的阶段转化标准为参考和蓝本，结合实际销售数据分析总结的阶段转化标准，提出改进版本的阶段转化标准，注意尽可能以专业机构的版本为主，语言、风格也比照专业机构的版本。
    专业咨询机构提出的阶段转化标准：
    {pro_stage['阶段转化标准']}
    通过分析实际销售数据分析总结得到的阶段转化标准：
    {custom_stage['阶段转化标准']}
    """
    print(f"prompt_reflection_standard: {prompt_reflection_standard}")
    reflection_standard = agent.send_message(prompt_reflection_standard)
    print(f"反思后的阶段转化标准: {reflection_standard}")
    reflection_stage['阶段转化标准'] = reflection_standard

    reflection_path.append(reflection_stage)

# Write reflection_path to Excel
df = pd.DataFrame(reflection_path)

# Reorder columns to match the original structure
column_order = [
    "销售阶段名称", "客户采购行为", "销售阶段任务", "关键获取信息",
    "销售关键动作", "售前关键动作", "客户支持行为", "阶段转化标准"
]
df = df.reindex(columns=column_order)

# Write to Excel
excel_file_path = 'reflection_path_results.xlsx'
df.to_excel(excel_file_path, index=False)
print(f"Reflection path results have been written to {excel_file_path}")
