class QueryCustomerUnverifiedBillDetailsTool: name = 'query_customer_unverified_bill_details' route_path = '/mcp/tools/queryCustomerUnverifiedBillDetails' def __init__(self, api_client=None): self.api_client = api_client def metadata(self): return { 'name': self.name, 'description': ( '分页查询当前员工有权查看的单个客户未核销账单明细。customer_id必须先从' 'list_customer_filter_options取得;主回款跟进中的月份汇总需要展开时再调用本工具。' '公司、员工、菜单权限和数据范围由当前设备会话确定,调用方不得覆盖。' ), 'input_schema': { 'type': 'object', 'properties': { 'customer_id': {'type': 'integer', 'minimum': 1}, 'page': { 'type': 'integer', 'minimum': 1, 'maximum': 100, 'default': 1, }, 'limit': { 'type': 'integer', 'minimum': 1, 'maximum': 100, 'default': 20, }, }, 'required': ['customer_id'], 'additionalProperties': False, }, } def call( self, customer_id, page=1, limit=20, request_id='rq_query_customer_unverified_bill_details', ): if self.api_client is None: raise RuntimeError( 'api client is required for query_customer_unverified_bill_details' ) payload = { 'customer_id': self._positive_integer(customer_id, 'customer_id'), '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 _positive_integer(value, field): if isinstance(value, bool) or not isinstance(value, int) or value < 1: raise ValueError('{0} is invalid'.format(field)) return value @classmethod def _bounded_integer(cls, value, field): value = cls._positive_integer(value, field) if value > 100: raise ValueError('{0} is invalid'.format(field)) return value