class QueryOrderReceivableCostDetailsTool: name = 'query_order_receivable_cost_details' route_path = '/mcp/tools/queryOrderReceivableCostDetails' def __init__(self, api_client=None): self.api_client = api_client def metadata(self): return { 'name': self.name, 'description': ( '按明确订单号分页查询应收费用行、费用确认、关账和核销状态。调用前必须' '确认用户提供的是订单号;不得使用参考号、物流单号或其他号码猜单,不得模糊' '查询、跨字段试查或改用其他工具重试。公司、员工、菜单权限和客户数据范围由' '当前设备会话确定,调用方不得覆盖。' ), 'input_schema': { 'type': 'object', 'properties': { 'order_number': { 'type': 'string', 'minLength': 1, 'maxLength': 100, 'pattern': '.*\\S.*', }, 'page': { 'type': 'integer', 'minimum': 1, 'maximum': 100, 'default': 1, }, 'limit': { 'type': 'integer', 'minimum': 1, 'maximum': 100, 'default': 20, }, }, 'required': ['order_number'], 'additionalProperties': False, }, } def call( self, order_number, page=1, limit=20, request_id='rq_query_order_receivable_cost_details', ): if self.api_client is None: raise RuntimeError( 'api client is required for query_order_receivable_cost_details' ) payload = { 'order_number': self._order_number(order_number), 'page': self._bounded_integer(page, 'page'), 'limit': self._bounded_integer(limit, 'limit'), } return self.api_client.call_tool( self.name, self.route_path, payload, request_id ) @staticmethod def _order_number(value): if not isinstance(value, str): raise ValueError('order_number is invalid') value = value.strip() if not value or len(value) > 100: raise ValueError('order_number is invalid') return value @staticmethod def _bounded_integer(value, field): if ( isinstance(value, bool) or not isinstance(value, int) or value < 1 or value > 100 ): raise ValueError('{0} is invalid'.format(field)) return value