47 lines
3.5 KiB
Python
47 lines
3.5 KiB
Python
"""Explain recorded order facts without inferring delivery or operational writes."""
|
|
|
|
import re
|
|
|
|
|
|
def detail_question(message):
|
|
if re.search(r'报价|运费|海派|海卡|\d+\s*(?:KG|公斤)',message,re.I) and not re.search(r'这票|该订单|我的订单',message):
|
|
return False
|
|
return bool(re.search(r'上架|没更新|未更新|没有更新|不更新|少了?.*(?:箱|件)|到了?几箱|逐箱|每箱.*签收|'
|
|
r'已完成.*(?:签收|送达)|(?:签收|送达).*已完成|催单|催一下|拦截|改.*(?:收货|收件).*地址|(?:收货|收件)地址.*改|快递单号|付过款|付款状态|'
|
|
r'(?:这票|该订单|我的货).*(?:发货|发走|出库|开船)',message))
|
|
|
|
|
|
def general_explanation(message):
|
|
if re.search(r'我的|这票|这单|这个订单|该订单',message):return None
|
|
if re.search(r'已完成|履约中|上架',message) and re.search(r'是什么意思|是否代表|是不是|等于|有什么区别',message):
|
|
return '“履约中”“头程订单已完成”属于业务状态;出库、开船、到港等以实际物流节点为准。业务完成不等于收件人签收,签收也不等于亚马逊已上架;上架需以亚马逊入库记录核实。'
|
|
return None
|
|
|
|
|
|
def explain_order(message,row,card):
|
|
if not detail_question(message):return None
|
|
reference=row.get('inbound_code') or row['order_no']
|
|
lines=[f'入仓码 {reference}。' if row.get('inbound_code') else f'订单号 {reference}。']
|
|
if re.search(r'催单|催一下|拦截',message):
|
|
return lines[0]+'催单或拦截需联系人工客服办理;当前仅查询订单,尚未提交催单或拦截申请。'
|
|
if re.search(r'付过款|付款状态',message):
|
|
return lines[0]+'当前订单未接入付款状态,不能根据业务状态判断是否付款,请联系人工核对账单。'
|
|
if '快递单号' in message:
|
|
return lines[0]+'当前未记录可核实的UPS/FedEx尾程快递单号,入仓码和内部订单号不能直接当作快递单号,请联系人工核对。'
|
|
lines.append(f'登记的业务状态为“{card["status"]}”。')
|
|
actual=card.get('nodes',[]) if card.get('node_kind')=='logistics' else []
|
|
if actual:
|
|
latest=actual[0]
|
|
lines.append('最近一条实际物流记录:'+' '.join(str(latest.get(k) or '') for k in ('time','text','place')).strip()+'。')
|
|
else:lines.append('当前没有已记录的实际物流节点,不能根据业务状态推断货物位置。')
|
|
if re.search(r'上架|已完成|签收|送达',message):
|
|
lines.append('头程业务完成不等于收件人签收;当前节点不能用于确认亚马逊上架。上架结果需核对亚马逊入库记录。')
|
|
if re.search(r'没更新|未更新|没有更新|不更新',message):
|
|
lines.append('未更新期间的实际位置和原因无法从现有记录确定,可提供入仓码联系人工核查。')
|
|
if re.search(r'发货|发走|出库|开船',message):
|
|
lines.append('计划发货或开船安排需联系人工核对,不能根据业务状态承诺未来发货日期。')
|
|
if re.search(r'少了?.*(?:箱|件)|到了?几箱|逐箱|每箱.*签收',message):
|
|
if row.get('package_count') is not None:lines.append(f'登记总件数为{row["package_count"]}件。')
|
|
lines.append('当前没有逐箱签收明细,不能把整票业务状态当作每箱均已送达,请联系人工核实各箱情况。')
|
|
return '\n'.join(lines)
|