# voucher_invalidate.dspy — 作废券(unused → void 原子条件 UPDATE;已用/过期/已作废拒绝) r = await invalidate_voucher_api(request, params_kw) if r.get('success'): return {"widgettype": "Message", "options": {"title": "已作废", "message": '券已作废', "timeout": 3, "cwidth": 16, "cheight": 9}} return {"widgettype": "Error", "options": {"title": "Error", "message": r.get('message') or 'failed', "timeout": 3, "cwidth": 16, "cheight": 9}}