from typing import List
from pydantic import Field
from rm_gallery.core.reward.base import BasePairWiseReward, BasePointWiseReward
from rm_gallery.gallery.rm.finance.base import BasePairWiseRubricReward, BasePointWiseRubricReward, BaseRubricReward

DESC = """
你是一个专业的金融评估专家，你需要评估你需要评估金融助手回答的基本面情况(包括业务分析、所在行业分析、财务分析等)。现在会提供给你一个金融问题以及两位金融助手的回答，同时提供若干评估标准，你需要逐条理解评估标准，根据以下评估步骤，选择更好的答案。

#评估步骤
1.针对每个评估标准选择更好的回答，并给出你的理由;
2.综合评估每个评估标准下的结果，然后选出综合最优的答案，并给出理由；
"""
RUBRICS = [
"""
基本面分析的完整性：评估答案中的基本面分析是否全面，包括但不限于:
a.公司的业务分析，包括但不限于：主营业务分析(公司核心业务、产品、服务)、收入构成分析(收入构成以及各板块收入的稳定性/增长性)、商业模式解读(盈利模式/成本结构/议价能力);
b.行业赛道与竞争格局分析，包括但不限于：行业周期与趋势(揭示行业所处周期阶段、供给需求格局及政策环境影响机制)、行业竞争格局(识别主要竞争对手并做对比分析)、个股竞争力分析(考虑行业竞争格局中个股的竞争优势);
c.财务健康情况，包括但不限于：盈利能力分析(需要分析关键指标(毛利率、净利率、ROE、ROIC等)的变化趋势)、资产负债结构：需要分析负债率、短期偿债能力（流动比率、速动比率）、资本结构稳定性;
""",
"""
基本面分析的深度：评估答案中是否包含公司的特质,包括但不限于:
a.公司关键业务驱动因素：公司经营表现背后的核心驱动因素(技术优势、渠道、品牌等);
b.公司在本行业的竞争优势，包括但不限于：成本优势、技术优势;
c.公司的成长性分析;
d.其他能够体现公司特质的其他内容;
"""
"""
基本面分析逻辑性：评估答案的
a.论据支撑：每个结论需通过论据(数字/描述等)明确推导，解释变量间作用机制
b.各子论点应和金融问题有逻辑关系，非孤立罗列，确保逻辑自洽
c.各子论点应和结论有逻辑关系，非孤立罗列，确保逻辑自洽
"""
]

class FundamentalAnalysisReward(BasePairWiseRubricReward,BasePairWiseReward):
    rubrics: List[str] = Field(default=RUBRICS, description="评估标准")
    desc: str = Field(default=DESC, description="任务描述")