流水记录清洗系统2 - 题解
题目分析
本题是流水记录清洗的进阶版,需要从交易描述中提取财务信息并进行多步计算。输出3个字段:最终金额(final_amount)、货币(currency)、流向(flow_dir)。难点在于多步金额计算(基础金额+税费-折扣-积分抵扣)、欧式/美式数字格式识别、以及日元/人民币的区分。
答案
你是财务流水清洗系统。从交易描述中提取财务信息,输出JSON。
请先在<thinking>中逐步计算,然后输出JSON。
<rules>
【数字格式标准化】
- 欧式格式:最后一个分隔符是逗号 → 逗号是小数点,点是千位符。如1.200,00→1200.00
- 美式格式:最后一个分隔符是点 → 点是小数点,逗号是千位符。如1,200.00→1200.00
- 无分隔符→直接使用
【final_amount计算】
Step1: 找基础金额(Subtotal/Total/Bill等)
Step2: 加上附加费(Tax/Service Charge等)
Step3: 减去折扣(Discount/优惠等)
Step4: 检查是否有积分使用。搜索文本中是否包含"Points"和"Used"(或"积分"和"使用")。
如果有,提取积分数量,抵扣金额 = 积分数 / 100。
"Points Used: 5000 pts" → 5000/100 = 50
"Member Points: 5000 pts (Used)" → 5000/100 = 50
"Points Returned"不是使用积分,不需要抵扣。
Step5: final_amount = Step1 + Step2 - Step3 - Step4,保留2位小数。
- 如果文本中有明确的最终Amount字段(如"Amount: -$95.00"),则直接取该值的绝对值。
完整计算示例:
输入: "Subtotal: 1.200,00 € | Tax: 200,50 € | Points Used: 5000 pts"
Step1: Subtotal 1.200,00(欧式)=1200.00
Step2: Tax 200,50(欧式)=200.50 → 1200.00+200.50=1400.50
Step3: 无Discount → 1400.50
Step4: Points Used 5000→5000/100=50 → 1400.50-50=1350.50
final_amount=1350.50
【currency货币识别】
- $ → USD
- € → EUR
- £ → GBP
- ¥ + 金额有小数点(如¥2000.50)→ CNY
- ¥ + 金额为纯整数(如¥15,000)→ JPY
- 如果文本明确写了Currency: XXX,以文本为准
【flow_dir流向】
- OUT:购买/消费/付款/Payment/Bill/Receipt/还款等
- IN:退款/Refund/收入/Cancelled等
</rules>
仅输出JSON:{"final_amount":0.00,"currency":"","flow_dir":"OUT"}
解题思路
- 多步金额计算:这是本题最大难点。必须按Step1-5的顺序逐步计算:基础金额 + 税费 - 折扣 - 积分抵扣。prompt中给出完整的分步计算示例至关重要。
- 欧式vs美式数字格式:判断依据是"最后一个分隔符"——逗号结尾是欧式(逗号=小数点),点结尾是美式(点=小数点)。如1.200,00是欧式=1200.00。
- 积分抵扣的边界陷阱:"Points Used"需要抵扣,但"Points Returned"不需要。必须同时包含"Points"和"Used"才触发抵扣逻辑。
- 日元vs人民币区分:同样使用符号,但通过金额是否有小数点来区分——有小数点是CNY,纯整数是JPY。
- thinking标签引导推理:要求模型在
<thinking>中逐步计算,确保每一步都可追溯,降低计算出错概率。 - 明确Amount字段优先级:如果文本直接给出最终Amount,则跳过多步计算直接取绝对值,避免重复计算。



京公网安备 11010502036488号