@tbox.cn/app-contracts-mall 0.2.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +16 -2
  2. package/dist/alipay-activity/cards.d.ts +305 -0
  3. package/dist/assembly.d.ts +31 -6
  4. package/dist/chunk-KIZD6FZ2.js +43 -0
  5. package/dist/deployment.d.ts +32 -33
  6. package/dist/domain/activity.d.ts +64 -0
  7. package/dist/domain/coupon.d.ts +2 -0
  8. package/dist/domain/entitlement.d.ts +53 -0
  9. package/dist/domain/offer.d.ts +111 -0
  10. package/dist/domain/operation.d.ts +22 -0
  11. package/dist/domain/parking.d.ts +195 -12
  12. package/dist/domain/points.d.ts +3 -2
  13. package/dist/domain/shopping-guide.d.ts +201 -0
  14. package/dist/index.d.ts +14 -2
  15. package/dist/member/cards.d.ts +636 -213
  16. package/dist/parking/cards.d.ts +1271 -0
  17. package/dist/promotion/cards.d.ts +2529 -0
  18. package/dist/query-context.d.ts +47 -0
  19. package/dist/runtime.d.ts +11 -2
  20. package/dist/runtime.js +910 -86
  21. package/dist/scope.d.ts +42 -15
  22. package/dist/server/index.d.ts +11 -0
  23. package/dist/server/index.js +80 -0
  24. package/dist/server/mall-context.d.ts +24 -0
  25. package/dist/server/mall-control-plane.d.ts +8 -0
  26. package/dist/server/request-credentials.d.ts +22 -0
  27. package/dist/services/customer-service.d.ts +11 -0
  28. package/dist/services/mall-info.d.ts +26 -0
  29. package/dist/services/member.d.ts +173 -31
  30. package/dist/services/parking.d.ts +105 -12
  31. package/dist/services/promotion.d.ts +100 -4
  32. package/dist/services/shopping-guide.d.ts +97 -0
  33. package/dist/shared/cards.d.ts +42 -0
  34. package/dist/shopping-guide/cards.d.ts +3399 -561
  35. package/package.json +18 -7
  36. package/src/alipay-activity/cards.ts +66 -0
  37. package/src/assembly.ts +103 -0
  38. package/src/deployment.ts +44 -0
  39. package/src/domain/activity.ts +66 -0
  40. package/src/domain/coupon.ts +11 -0
  41. package/src/domain/discount.ts +6 -0
  42. package/src/domain/entitlement.ts +56 -0
  43. package/src/domain/offer.ts +120 -0
  44. package/src/domain/operation.ts +40 -0
  45. package/src/domain/parking.ts +207 -0
  46. package/src/domain/points.ts +15 -0
  47. package/src/domain/shopping-guide.ts +242 -0
  48. package/src/events/index.ts +10 -0
  49. package/src/guard.ts +48 -0
  50. package/src/index.ts +33 -0
  51. package/src/member/cards.ts +209 -0
  52. package/src/parking/cards.ts +233 -0
  53. package/src/promotion/cards.ts +290 -0
  54. package/src/query-context.ts +81 -0
  55. package/src/runtime.ts +41 -0
  56. package/src/scope.ts +92 -0
  57. package/src/server/index.ts +11 -0
  58. package/src/server/mall-context.ts +39 -0
  59. package/src/server/mall-control-plane.ts +56 -0
  60. package/src/server/request-credentials.ts +43 -0
  61. package/src/service-slots.json +23 -0
  62. package/src/services/customer-service.ts +12 -0
  63. package/src/services/mall-info.ts +31 -0
  64. package/src/services/member.ts +366 -0
  65. package/src/services/parking.ts +166 -0
  66. package/src/services/promotion.ts +126 -0
  67. package/src/services/shopping-guide.ts +138 -0
  68. package/src/shared/cards.ts +25 -0
  69. package/src/shopping-guide/cards.ts +438 -0
  70. package/tests/assembly-validate-scope.test.ts +132 -0
  71. package/tests/cards.test.ts +586 -0
  72. package/tests/context-unification.test.ts +73 -0
  73. package/tests/mall-control-plane.test.ts +86 -0
  74. package/tests/member-status.test.ts +197 -0
  75. package/tests/query-context.test.ts +111 -0
  76. package/tests/request-credentials.test.ts +38 -0
  77. package/tests/resolve-primitives.test.ts +55 -0
  78. package/tests/service-slots.test.ts +78 -0
  79. package/tsconfig.build.json +15 -0
  80. package/tsconfig.json +5 -0
  81. package/dist/shopping-guide/ports.d.ts +0 -216
@@ -0,0 +1,1271 @@
1
+ /**
2
+ * 停车域卡片数据契约(015:parking 5 卡 zod schema,TIER1)。
3
+ * 源:POC parking 11 卡型收敛(V6/D7);金额展示层字符串化(D11)。
4
+ */
5
+ import { z } from 'zod';
6
+ /** parking-payment:缴费确认主卡(报价 + 权益 + revision) */
7
+ /**
8
+ * 厂商协议 openParkingPay 的 orderInfo zod schema(与 ParkingPayOrderInfo 对齐)。
9
+ * 壳用这些字段自己拼确认页,不回查费。parkingId 协议已定 string。
10
+ */
11
+ export declare const parkingOrderInfoSchema: z.ZodObject<{
12
+ /** 停车秒数 */
13
+ staySecond: z.ZodOptional<z.ZodNumber>;
14
+ /** 停车费,单位分 */
15
+ parkingFee: z.ZodOptional<z.ZodNumber>;
16
+ /** 车牌绑定状态 */
17
+ bindingStatus: z.ZodOptional<z.ZodNumber>;
18
+ /** 车牌 */
19
+ plateNumber: z.ZodOptional<z.ZodString>;
20
+ /** 1=在场缴费,2=逃费/欠费 */
21
+ orderType: z.ZodNumber;
22
+ /** 车场侧订单号 */
23
+ spParkingOrderId: z.ZodOptional<z.ZodString>;
24
+ /** 车场 ID(协议定 string) */
25
+ parkingId: z.ZodString;
26
+ /** 入场时间 */
27
+ entranceTime: z.ZodOptional<z.ZodString>;
28
+ /** 逗号分隔的能力枚举,如 "LEVEL_DISCOUNT,POINT_DISCOUNT,COUPON" */
29
+ supportDiscount: z.ZodOptional<z.ZodString>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ orderType: number;
32
+ parkingId: string;
33
+ staySecond?: number | undefined;
34
+ parkingFee?: number | undefined;
35
+ bindingStatus?: number | undefined;
36
+ plateNumber?: string | undefined;
37
+ spParkingOrderId?: string | undefined;
38
+ entranceTime?: string | undefined;
39
+ supportDiscount?: string | undefined;
40
+ }, {
41
+ orderType: number;
42
+ parkingId: string;
43
+ staySecond?: number | undefined;
44
+ parkingFee?: number | undefined;
45
+ bindingStatus?: number | undefined;
46
+ plateNumber?: string | undefined;
47
+ spParkingOrderId?: string | undefined;
48
+ entranceTime?: string | undefined;
49
+ supportDiscount?: string | undefined;
50
+ }>;
51
+ export declare const parkingPaymentCardDataSchema: z.ZodObject<{
52
+ quoteRef: z.ZodString;
53
+ plateNo: z.ZodString;
54
+ entryAtText: z.ZodOptional<z.ZodString>;
55
+ durationText: z.ZodOptional<z.ZodString>;
56
+ /** 费用明细(label + 金额字符串) */
57
+ feeItems: z.ZodArray<z.ZodObject<{
58
+ name: z.ZodString;
59
+ amountText: z.ZodString;
60
+ }, "strip", z.ZodTypeAny, {
61
+ name: string;
62
+ amountText: string;
63
+ }, {
64
+ name: string;
65
+ amountText: string;
66
+ }>, "many">;
67
+ totalText: z.ZodString;
68
+ discountText: z.ZodOptional<z.ZodString>;
69
+ payableText: z.ZodString;
70
+ /** 当前请求主体的会员状态;旧历史卡可缺省。 */
71
+ membership: z.ZodOptional<z.ZodObject<{
72
+ state: z.ZodEnum<["unauthenticated", "unknown", "active", "not_enrolled", "closed", "unavailable"]>;
73
+ availablePoints: z.ZodOptional<z.ZodNumber>;
74
+ }, "strip", z.ZodTypeAny, {
75
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
76
+ availablePoints?: number | undefined;
77
+ }, {
78
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
79
+ availablePoints?: number | undefined;
80
+ }>>;
81
+ /** 服务端归一化后的支付入口;客户端不解析权益标题。 */
82
+ paymentOptions: z.ZodOptional<z.ZodObject<{
83
+ direct: z.ZodObject<{
84
+ /** 已应用积分时 Provider 未必能预览无积分金额;缺省时客户端不得提前承诺金额。 */
85
+ payableText: z.ZodOptional<z.ZodString>;
86
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
87
+ }, "strip", z.ZodTypeAny, {
88
+ benefitRefs: string[];
89
+ payableText?: string | undefined;
90
+ }, {
91
+ benefitRefs: string[];
92
+ payableText?: string | undefined;
93
+ }>;
94
+ points: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
95
+ kind: z.ZodLiteral<"exact">;
96
+ pointsToUse: z.ZodNumber;
97
+ payableText: z.ZodString;
98
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
99
+ }, "strip", z.ZodTypeAny, {
100
+ kind: "exact";
101
+ payableText: string;
102
+ benefitRefs: string[];
103
+ pointsToUse: number;
104
+ }, {
105
+ kind: "exact";
106
+ payableText: string;
107
+ benefitRefs: string[];
108
+ pointsToUse: number;
109
+ }>, z.ZodObject<{
110
+ kind: z.ZodLiteral<"requires_reprice">;
111
+ title: z.ZodString;
112
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
113
+ }, "strip", z.ZodTypeAny, {
114
+ title: string;
115
+ kind: "requires_reprice";
116
+ benefitRefs: string[];
117
+ }, {
118
+ title: string;
119
+ kind: "requires_reprice";
120
+ benefitRefs: string[];
121
+ }>]>>;
122
+ }, "strip", z.ZodTypeAny, {
123
+ direct: {
124
+ benefitRefs: string[];
125
+ payableText?: string | undefined;
126
+ };
127
+ points?: {
128
+ kind: "exact";
129
+ payableText: string;
130
+ benefitRefs: string[];
131
+ pointsToUse: number;
132
+ } | {
133
+ title: string;
134
+ kind: "requires_reprice";
135
+ benefitRefs: string[];
136
+ } | undefined;
137
+ }, {
138
+ direct: {
139
+ benefitRefs: string[];
140
+ payableText?: string | undefined;
141
+ };
142
+ points?: {
143
+ kind: "exact";
144
+ payableText: string;
145
+ benefitRefs: string[];
146
+ pointsToUse: number;
147
+ } | {
148
+ title: string;
149
+ kind: "requires_reprice";
150
+ benefitRefs: string[];
151
+ } | undefined;
152
+ }>>;
153
+ /** 已生效权益 */
154
+ appliedBenefits: z.ZodArray<z.ZodObject<{
155
+ benefitRef: z.ZodString;
156
+ title: z.ZodString;
157
+ discountText: z.ZodOptional<z.ZodString>;
158
+ }, "strip", z.ZodTypeAny, {
159
+ title: string;
160
+ benefitRef: string;
161
+ discountText?: string | undefined;
162
+ }, {
163
+ title: string;
164
+ benefitRef: string;
165
+ discountText?: string | undefined;
166
+ }>, "many">;
167
+ /** 可变更权益(reprice 候选;autoSelected 预勾选) */
168
+ selectableBenefits: z.ZodArray<z.ZodObject<{
169
+ benefitRef: z.ZodString;
170
+ title: z.ZodString;
171
+ autoSelected: z.ZodBoolean;
172
+ description: z.ZodOptional<z.ZodString>;
173
+ /** 权益类型(券 / 积分抵扣 / 等级权益);客户端据此分组与判定互斥,不得从标题猜测 */
174
+ kind: z.ZodOptional<z.ZodEnum<["points", "discount", "coupon", "other"]>>;
175
+ /** 预估优惠金额文案(本地展示用;权威金额以 reprice 回填为准) */
176
+ discountText: z.ZodOptional<z.ZodString>;
177
+ /**
178
+ * 与本权益互斥的类型。三类优惠默认可叠加,互斥是厂商按券配置的例外——
179
+ * 标记 ['points'] 表示该券不可与积分抵扣叠加。判定双向生效。
180
+ */
181
+ exclusiveWithKinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["points", "discount", "coupon"]>, "many">>;
182
+ }, "strip", z.ZodTypeAny, {
183
+ title: string;
184
+ benefitRef: string;
185
+ autoSelected: boolean;
186
+ description?: string | undefined;
187
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
188
+ discountText?: string | undefined;
189
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
190
+ }, {
191
+ title: string;
192
+ benefitRef: string;
193
+ autoSelected: boolean;
194
+ description?: string | undefined;
195
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
196
+ discountText?: string | undefined;
197
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
198
+ }>, "many">;
199
+ /** 乐观锁(提交校验;过期 → 提示重新查询) */
200
+ revision: z.ZodNumber;
201
+ caveats: z.ZodArray<z.ZodString, "many">;
202
+ /**
203
+ * 支付交接包:客户端卡据 kind 调壳 tbox 能力收款——
204
+ * kind:'pay' → openParkingPay(传 orderInfo,壳跳确认页/收银台);kind:'unpaid' → openParkingUnpaidOrder(传 orderNo)。
205
+ * 缺省 = 走内部 confirm-payment(line)支付链。
206
+ */
207
+ payHandoff: z.ZodOptional<z.ZodObject<{
208
+ kind: z.ZodEnum<["pay", "unpaid"]>;
209
+ parkingStoreId: z.ZodOptional<z.ZodString>;
210
+ orderInfo: z.ZodOptional<z.ZodObject<{
211
+ /** 停车秒数 */
212
+ staySecond: z.ZodOptional<z.ZodNumber>;
213
+ /** 停车费,单位分 */
214
+ parkingFee: z.ZodOptional<z.ZodNumber>;
215
+ /** 车牌绑定状态 */
216
+ bindingStatus: z.ZodOptional<z.ZodNumber>;
217
+ /** 车牌 */
218
+ plateNumber: z.ZodOptional<z.ZodString>;
219
+ /** 1=在场缴费,2=逃费/欠费 */
220
+ orderType: z.ZodNumber;
221
+ /** 车场侧订单号 */
222
+ spParkingOrderId: z.ZodOptional<z.ZodString>;
223
+ /** 车场 ID(协议定 string) */
224
+ parkingId: z.ZodString;
225
+ /** 入场时间 */
226
+ entranceTime: z.ZodOptional<z.ZodString>;
227
+ /** 逗号分隔的能力枚举,如 "LEVEL_DISCOUNT,POINT_DISCOUNT,COUPON" */
228
+ supportDiscount: z.ZodOptional<z.ZodString>;
229
+ }, "strip", z.ZodTypeAny, {
230
+ orderType: number;
231
+ parkingId: string;
232
+ staySecond?: number | undefined;
233
+ parkingFee?: number | undefined;
234
+ bindingStatus?: number | undefined;
235
+ plateNumber?: string | undefined;
236
+ spParkingOrderId?: string | undefined;
237
+ entranceTime?: string | undefined;
238
+ supportDiscount?: string | undefined;
239
+ }, {
240
+ orderType: number;
241
+ parkingId: string;
242
+ staySecond?: number | undefined;
243
+ parkingFee?: number | undefined;
244
+ bindingStatus?: number | undefined;
245
+ plateNumber?: string | undefined;
246
+ spParkingOrderId?: string | undefined;
247
+ entranceTime?: string | undefined;
248
+ supportDiscount?: string | undefined;
249
+ }>>;
250
+ orderNo: z.ZodOptional<z.ZodString>;
251
+ }, "strip", z.ZodTypeAny, {
252
+ kind: "pay" | "unpaid";
253
+ parkingStoreId?: string | undefined;
254
+ orderInfo?: {
255
+ orderType: number;
256
+ parkingId: string;
257
+ staySecond?: number | undefined;
258
+ parkingFee?: number | undefined;
259
+ bindingStatus?: number | undefined;
260
+ plateNumber?: string | undefined;
261
+ spParkingOrderId?: string | undefined;
262
+ entranceTime?: string | undefined;
263
+ supportDiscount?: string | undefined;
264
+ } | undefined;
265
+ orderNo?: string | undefined;
266
+ }, {
267
+ kind: "pay" | "unpaid";
268
+ parkingStoreId?: string | undefined;
269
+ orderInfo?: {
270
+ orderType: number;
271
+ parkingId: string;
272
+ staySecond?: number | undefined;
273
+ parkingFee?: number | undefined;
274
+ bindingStatus?: number | undefined;
275
+ plateNumber?: string | undefined;
276
+ spParkingOrderId?: string | undefined;
277
+ entranceTime?: string | undefined;
278
+ supportDiscount?: string | undefined;
279
+ } | undefined;
280
+ orderNo?: string | undefined;
281
+ }>>;
282
+ /**
283
+ * 支付进度(缺省 = 未发起):一经写入这张报价单即终结,按钮恒置灰。
284
+ * 报价是一次性的(token singleUse + revision 乐观锁),发起支付后不可再提交。
285
+ */
286
+ settlement: z.ZodOptional<z.ZodObject<{
287
+ state: z.ZodEnum<["paying", "paid", "failed"]>;
288
+ text: z.ZodString;
289
+ }, "strip", z.ZodTypeAny, {
290
+ text: string;
291
+ state: "failed" | "paying" | "paid";
292
+ }, {
293
+ text: string;
294
+ state: "failed" | "paying" | "paid";
295
+ }>>;
296
+ }, "strip", z.ZodTypeAny, {
297
+ caveats: string[];
298
+ quoteRef: string;
299
+ plateNo: string;
300
+ feeItems: {
301
+ name: string;
302
+ amountText: string;
303
+ }[];
304
+ totalText: string;
305
+ payableText: string;
306
+ appliedBenefits: {
307
+ title: string;
308
+ benefitRef: string;
309
+ discountText?: string | undefined;
310
+ }[];
311
+ selectableBenefits: {
312
+ title: string;
313
+ benefitRef: string;
314
+ autoSelected: boolean;
315
+ description?: string | undefined;
316
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
317
+ discountText?: string | undefined;
318
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
319
+ }[];
320
+ revision: number;
321
+ entryAtText?: string | undefined;
322
+ durationText?: string | undefined;
323
+ discountText?: string | undefined;
324
+ membership?: {
325
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
326
+ availablePoints?: number | undefined;
327
+ } | undefined;
328
+ paymentOptions?: {
329
+ direct: {
330
+ benefitRefs: string[];
331
+ payableText?: string | undefined;
332
+ };
333
+ points?: {
334
+ kind: "exact";
335
+ payableText: string;
336
+ benefitRefs: string[];
337
+ pointsToUse: number;
338
+ } | {
339
+ title: string;
340
+ kind: "requires_reprice";
341
+ benefitRefs: string[];
342
+ } | undefined;
343
+ } | undefined;
344
+ payHandoff?: {
345
+ kind: "pay" | "unpaid";
346
+ parkingStoreId?: string | undefined;
347
+ orderInfo?: {
348
+ orderType: number;
349
+ parkingId: string;
350
+ staySecond?: number | undefined;
351
+ parkingFee?: number | undefined;
352
+ bindingStatus?: number | undefined;
353
+ plateNumber?: string | undefined;
354
+ spParkingOrderId?: string | undefined;
355
+ entranceTime?: string | undefined;
356
+ supportDiscount?: string | undefined;
357
+ } | undefined;
358
+ orderNo?: string | undefined;
359
+ } | undefined;
360
+ settlement?: {
361
+ text: string;
362
+ state: "failed" | "paying" | "paid";
363
+ } | undefined;
364
+ }, {
365
+ caveats: string[];
366
+ quoteRef: string;
367
+ plateNo: string;
368
+ feeItems: {
369
+ name: string;
370
+ amountText: string;
371
+ }[];
372
+ totalText: string;
373
+ payableText: string;
374
+ appliedBenefits: {
375
+ title: string;
376
+ benefitRef: string;
377
+ discountText?: string | undefined;
378
+ }[];
379
+ selectableBenefits: {
380
+ title: string;
381
+ benefitRef: string;
382
+ autoSelected: boolean;
383
+ description?: string | undefined;
384
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
385
+ discountText?: string | undefined;
386
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
387
+ }[];
388
+ revision: number;
389
+ entryAtText?: string | undefined;
390
+ durationText?: string | undefined;
391
+ discountText?: string | undefined;
392
+ membership?: {
393
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
394
+ availablePoints?: number | undefined;
395
+ } | undefined;
396
+ paymentOptions?: {
397
+ direct: {
398
+ benefitRefs: string[];
399
+ payableText?: string | undefined;
400
+ };
401
+ points?: {
402
+ kind: "exact";
403
+ payableText: string;
404
+ benefitRefs: string[];
405
+ pointsToUse: number;
406
+ } | {
407
+ title: string;
408
+ kind: "requires_reprice";
409
+ benefitRefs: string[];
410
+ } | undefined;
411
+ } | undefined;
412
+ payHandoff?: {
413
+ kind: "pay" | "unpaid";
414
+ parkingStoreId?: string | undefined;
415
+ orderInfo?: {
416
+ orderType: number;
417
+ parkingId: string;
418
+ staySecond?: number | undefined;
419
+ parkingFee?: number | undefined;
420
+ bindingStatus?: number | undefined;
421
+ plateNumber?: string | undefined;
422
+ spParkingOrderId?: string | undefined;
423
+ entranceTime?: string | undefined;
424
+ supportDiscount?: string | undefined;
425
+ } | undefined;
426
+ orderNo?: string | undefined;
427
+ } | undefined;
428
+ settlement?: {
429
+ text: string;
430
+ state: "failed" | "paying" | "paid";
431
+ } | undefined;
432
+ }>;
433
+ export type ParkingPaymentCardData = z.infer<typeof parkingPaymentCardDataSchema>;
434
+ /** parking-payment-result:支付结果(reconcile 权威) */
435
+ export declare const parkingPaymentResultCardDataSchema: z.ZodObject<{
436
+ paymentRef: z.ZodString;
437
+ plateNo: z.ZodString;
438
+ status: z.ZodEnum<["PAID", "CANCELLED", "UNKNOWN"]>;
439
+ amountText: z.ZodOptional<z.ZodString>;
440
+ message: z.ZodString;
441
+ /** 失败/取消:可重新发起(重新查询报价) */
442
+ retryable: z.ZodOptional<z.ZodBoolean>;
443
+ /** 离场时限提醒(PAID:缴费后免费离场窗口,超时重新计费) */
444
+ leaveNotice: z.ZodOptional<z.ZodString>;
445
+ /** 回执明细(车牌 / 停车时长 / 缴费时间等,服务端已格式化) */
446
+ details: z.ZodOptional<z.ZodArray<z.ZodObject<{
447
+ label: z.ZodString;
448
+ value: z.ZodString;
449
+ }, "strip", z.ZodTypeAny, {
450
+ value: string;
451
+ label: string;
452
+ }, {
453
+ value: string;
454
+ label: string;
455
+ }>, "many">>;
456
+ }, "strip", z.ZodTypeAny, {
457
+ message: string;
458
+ status: "PAID" | "UNKNOWN" | "CANCELLED";
459
+ plateNo: string;
460
+ paymentRef: string;
461
+ amountText?: string | undefined;
462
+ retryable?: boolean | undefined;
463
+ leaveNotice?: string | undefined;
464
+ details?: {
465
+ value: string;
466
+ label: string;
467
+ }[] | undefined;
468
+ }, {
469
+ message: string;
470
+ status: "PAID" | "UNKNOWN" | "CANCELLED";
471
+ plateNo: string;
472
+ paymentRef: string;
473
+ amountText?: string | undefined;
474
+ retryable?: boolean | undefined;
475
+ leaveNotice?: string | undefined;
476
+ details?: {
477
+ value: string;
478
+ label: string;
479
+ }[] | undefined;
480
+ }>;
481
+ export type ParkingPaymentResultCardData = z.infer<typeof parkingPaymentResultCardDataSchema>;
482
+ /** parking-payment-records:缴费记录 */
483
+ export declare const parkingPaymentRecordsCardDataSchema: z.ZodObject<{
484
+ items: z.ZodArray<z.ZodObject<{
485
+ recordRef: z.ZodString;
486
+ plateNo: z.ZodString;
487
+ amountText: z.ZodString;
488
+ paidAtText: z.ZodString;
489
+ status: z.ZodEnum<["PAID", "REFUNDED", "CLOSED", "UNKNOWN"]>;
490
+ statusText: z.ZodOptional<z.ZodString>;
491
+ parkName: z.ZodOptional<z.ZodString>;
492
+ plazaName: z.ZodOptional<z.ZodString>;
493
+ /** 展开态字段(entry/exit/单号脱敏) */
494
+ entryAtText: z.ZodOptional<z.ZodString>;
495
+ exitAtText: z.ZodOptional<z.ZodString>;
496
+ payOrderNoMasked: z.ZodOptional<z.ZodString>;
497
+ orderCompleted: z.ZodOptional<z.ZodBoolean>;
498
+ invoiceEligible: z.ZodOptional<z.ZodBoolean>;
499
+ invoiceIssued: z.ZodOptional<z.ZodBoolean>;
500
+ }, "strip", z.ZodTypeAny, {
501
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
502
+ plateNo: string;
503
+ amountText: string;
504
+ recordRef: string;
505
+ paidAtText: string;
506
+ entryAtText?: string | undefined;
507
+ statusText?: string | undefined;
508
+ parkName?: string | undefined;
509
+ plazaName?: string | undefined;
510
+ exitAtText?: string | undefined;
511
+ payOrderNoMasked?: string | undefined;
512
+ orderCompleted?: boolean | undefined;
513
+ invoiceEligible?: boolean | undefined;
514
+ invoiceIssued?: boolean | undefined;
515
+ }, {
516
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
517
+ plateNo: string;
518
+ amountText: string;
519
+ recordRef: string;
520
+ paidAtText: string;
521
+ entryAtText?: string | undefined;
522
+ statusText?: string | undefined;
523
+ parkName?: string | undefined;
524
+ plazaName?: string | undefined;
525
+ exitAtText?: string | undefined;
526
+ payOrderNoMasked?: string | undefined;
527
+ orderCompleted?: boolean | undefined;
528
+ invoiceEligible?: boolean | undefined;
529
+ invoiceIssued?: boolean | undefined;
530
+ }>, "many">;
531
+ total: z.ZodNumber;
532
+ hasMore: z.ZodBoolean;
533
+ /** 厂商口径 caveats(厂商事实,7 条并入) */
534
+ caveats: z.ZodArray<z.ZodString, "many">;
535
+ /** 详情加载、开票提交等动作反馈 */
536
+ message: z.ZodOptional<z.ZodString>;
537
+ }, "strip", z.ZodTypeAny, {
538
+ total: number;
539
+ hasMore: boolean;
540
+ items: {
541
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
542
+ plateNo: string;
543
+ amountText: string;
544
+ recordRef: string;
545
+ paidAtText: string;
546
+ entryAtText?: string | undefined;
547
+ statusText?: string | undefined;
548
+ parkName?: string | undefined;
549
+ plazaName?: string | undefined;
550
+ exitAtText?: string | undefined;
551
+ payOrderNoMasked?: string | undefined;
552
+ orderCompleted?: boolean | undefined;
553
+ invoiceEligible?: boolean | undefined;
554
+ invoiceIssued?: boolean | undefined;
555
+ }[];
556
+ caveats: string[];
557
+ message?: string | undefined;
558
+ }, {
559
+ total: number;
560
+ hasMore: boolean;
561
+ items: {
562
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
563
+ plateNo: string;
564
+ amountText: string;
565
+ recordRef: string;
566
+ paidAtText: string;
567
+ entryAtText?: string | undefined;
568
+ statusText?: string | undefined;
569
+ parkName?: string | undefined;
570
+ plazaName?: string | undefined;
571
+ exitAtText?: string | undefined;
572
+ payOrderNoMasked?: string | undefined;
573
+ orderCompleted?: boolean | undefined;
574
+ invoiceEligible?: boolean | undefined;
575
+ invoiceIssued?: boolean | undefined;
576
+ }[];
577
+ caveats: string[];
578
+ message?: string | undefined;
579
+ }>;
580
+ export type ParkingPaymentRecordsCardData = z.infer<typeof parkingPaymentRecordsCardDataSchema>;
581
+ /** parking-vehicle-management:绑定车辆列表(parked 缺省 = provider 无入场查询能力) */
582
+ export declare const parkingVehicleManagementCardDataSchema: z.ZodObject<{
583
+ bound: z.ZodArray<z.ZodObject<{
584
+ vehicleRef: z.ZodString;
585
+ plateNo: z.ZodString;
586
+ parked: z.ZodOptional<z.ZodBoolean>;
587
+ }, "strip", z.ZodTypeAny, {
588
+ plateNo: string;
589
+ vehicleRef: string;
590
+ parked?: boolean | undefined;
591
+ }, {
592
+ plateNo: string;
593
+ vehicleRef: string;
594
+ parked?: boolean | undefined;
595
+ }>, "many">;
596
+ message: z.ZodOptional<z.ZodString>;
597
+ /**
598
+ * 会员状态(缺省 = 未探测):仅 not_enrolled 才展示入会引导。
599
+ * 与 parking-payment 的 membership 同源,避免两张卡对同一用户给出不同判断。
600
+ */
601
+ membership: z.ZodOptional<z.ZodObject<{
602
+ state: z.ZodEnum<["unauthenticated", "unknown", "active", "not_enrolled", "closed", "unavailable"]>;
603
+ }, "strip", z.ZodTypeAny, {
604
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
605
+ }, {
606
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
607
+ }>>;
608
+ }, "strip", z.ZodTypeAny, {
609
+ bound: {
610
+ plateNo: string;
611
+ vehicleRef: string;
612
+ parked?: boolean | undefined;
613
+ }[];
614
+ message?: string | undefined;
615
+ membership?: {
616
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
617
+ } | undefined;
618
+ }, {
619
+ bound: {
620
+ plateNo: string;
621
+ vehicleRef: string;
622
+ parked?: boolean | undefined;
623
+ }[];
624
+ message?: string | undefined;
625
+ membership?: {
626
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
627
+ } | undefined;
628
+ }>;
629
+ export type ParkingVehicleManagementCardData = z.infer<typeof parkingVehicleManagementCardDataSchema>;
630
+ /**
631
+ * 中国大陆车牌正则(双端单一真源):server zod 入参与 client plateValid
632
+ * 同源引用——曾双份漂移(server 严格 / client 宽松 ≥5 字符)。
633
+ * 首位放开字母:支持省份汉字 + 字母(A-HJ-NP-Z,无 I/O)双形态首位。
634
+ * 普通牌 = 首位 + 字母 + 5 位字母数字(末位可含挂学警港澳)= 7 字符;
635
+ * 新能源 = 首位 + 字母 + 字母数字 + 5 位字母数字 = 8 字符。
636
+ */
637
+ export declare const PARKING_PLATE_PATTERN: RegExp;
638
+ /** parking-info:综合信息(三合一 kind;待支付单已并入 parking-payment) */
639
+ export declare const parkingInfoCardDataSchema: z.ZodObject<{
640
+ kind: z.ZodEnum<["chargeRules", "benefitPolicy", "vehicleLocation"]>;
641
+ title: z.ZodString;
642
+ entries: z.ZodArray<z.ZodObject<{
643
+ label: z.ZodString;
644
+ value: z.ZodString;
645
+ }, "strip", z.ZodTypeAny, {
646
+ value: string;
647
+ label: string;
648
+ }, {
649
+ value: string;
650
+ label: string;
651
+ }>, "many">;
652
+ }, "strip", z.ZodTypeAny, {
653
+ entries: {
654
+ value: string;
655
+ label: string;
656
+ }[];
657
+ title: string;
658
+ kind: "chargeRules" | "benefitPolicy" | "vehicleLocation";
659
+ }, {
660
+ entries: {
661
+ value: string;
662
+ label: string;
663
+ }[];
664
+ title: string;
665
+ kind: "chargeRules" | "benefitPolicy" | "vehicleLocation";
666
+ }>;
667
+ export type ParkingInfoCardData = z.infer<typeof parkingInfoCardDataSchema>;
668
+ /** 5 卡 schema map(cardType → dataSchema) */
669
+ export declare const parkingCardDataSchemas: {
670
+ readonly 'parking-payment': z.ZodObject<{
671
+ quoteRef: z.ZodString;
672
+ plateNo: z.ZodString;
673
+ entryAtText: z.ZodOptional<z.ZodString>;
674
+ durationText: z.ZodOptional<z.ZodString>;
675
+ /** 费用明细(label + 金额字符串) */
676
+ feeItems: z.ZodArray<z.ZodObject<{
677
+ name: z.ZodString;
678
+ amountText: z.ZodString;
679
+ }, "strip", z.ZodTypeAny, {
680
+ name: string;
681
+ amountText: string;
682
+ }, {
683
+ name: string;
684
+ amountText: string;
685
+ }>, "many">;
686
+ totalText: z.ZodString;
687
+ discountText: z.ZodOptional<z.ZodString>;
688
+ payableText: z.ZodString;
689
+ /** 当前请求主体的会员状态;旧历史卡可缺省。 */
690
+ membership: z.ZodOptional<z.ZodObject<{
691
+ state: z.ZodEnum<["unauthenticated", "unknown", "active", "not_enrolled", "closed", "unavailable"]>;
692
+ availablePoints: z.ZodOptional<z.ZodNumber>;
693
+ }, "strip", z.ZodTypeAny, {
694
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
695
+ availablePoints?: number | undefined;
696
+ }, {
697
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
698
+ availablePoints?: number | undefined;
699
+ }>>;
700
+ /** 服务端归一化后的支付入口;客户端不解析权益标题。 */
701
+ paymentOptions: z.ZodOptional<z.ZodObject<{
702
+ direct: z.ZodObject<{
703
+ /** 已应用积分时 Provider 未必能预览无积分金额;缺省时客户端不得提前承诺金额。 */
704
+ payableText: z.ZodOptional<z.ZodString>;
705
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
706
+ }, "strip", z.ZodTypeAny, {
707
+ benefitRefs: string[];
708
+ payableText?: string | undefined;
709
+ }, {
710
+ benefitRefs: string[];
711
+ payableText?: string | undefined;
712
+ }>;
713
+ points: z.ZodOptional<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
714
+ kind: z.ZodLiteral<"exact">;
715
+ pointsToUse: z.ZodNumber;
716
+ payableText: z.ZodString;
717
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
718
+ }, "strip", z.ZodTypeAny, {
719
+ kind: "exact";
720
+ payableText: string;
721
+ benefitRefs: string[];
722
+ pointsToUse: number;
723
+ }, {
724
+ kind: "exact";
725
+ payableText: string;
726
+ benefitRefs: string[];
727
+ pointsToUse: number;
728
+ }>, z.ZodObject<{
729
+ kind: z.ZodLiteral<"requires_reprice">;
730
+ title: z.ZodString;
731
+ benefitRefs: z.ZodArray<z.ZodString, "many">;
732
+ }, "strip", z.ZodTypeAny, {
733
+ title: string;
734
+ kind: "requires_reprice";
735
+ benefitRefs: string[];
736
+ }, {
737
+ title: string;
738
+ kind: "requires_reprice";
739
+ benefitRefs: string[];
740
+ }>]>>;
741
+ }, "strip", z.ZodTypeAny, {
742
+ direct: {
743
+ benefitRefs: string[];
744
+ payableText?: string | undefined;
745
+ };
746
+ points?: {
747
+ kind: "exact";
748
+ payableText: string;
749
+ benefitRefs: string[];
750
+ pointsToUse: number;
751
+ } | {
752
+ title: string;
753
+ kind: "requires_reprice";
754
+ benefitRefs: string[];
755
+ } | undefined;
756
+ }, {
757
+ direct: {
758
+ benefitRefs: string[];
759
+ payableText?: string | undefined;
760
+ };
761
+ points?: {
762
+ kind: "exact";
763
+ payableText: string;
764
+ benefitRefs: string[];
765
+ pointsToUse: number;
766
+ } | {
767
+ title: string;
768
+ kind: "requires_reprice";
769
+ benefitRefs: string[];
770
+ } | undefined;
771
+ }>>;
772
+ /** 已生效权益 */
773
+ appliedBenefits: z.ZodArray<z.ZodObject<{
774
+ benefitRef: z.ZodString;
775
+ title: z.ZodString;
776
+ discountText: z.ZodOptional<z.ZodString>;
777
+ }, "strip", z.ZodTypeAny, {
778
+ title: string;
779
+ benefitRef: string;
780
+ discountText?: string | undefined;
781
+ }, {
782
+ title: string;
783
+ benefitRef: string;
784
+ discountText?: string | undefined;
785
+ }>, "many">;
786
+ /** 可变更权益(reprice 候选;autoSelected 预勾选) */
787
+ selectableBenefits: z.ZodArray<z.ZodObject<{
788
+ benefitRef: z.ZodString;
789
+ title: z.ZodString;
790
+ autoSelected: z.ZodBoolean;
791
+ description: z.ZodOptional<z.ZodString>;
792
+ /** 权益类型(券 / 积分抵扣 / 等级权益);客户端据此分组与判定互斥,不得从标题猜测 */
793
+ kind: z.ZodOptional<z.ZodEnum<["points", "discount", "coupon", "other"]>>;
794
+ /** 预估优惠金额文案(本地展示用;权威金额以 reprice 回填为准) */
795
+ discountText: z.ZodOptional<z.ZodString>;
796
+ /**
797
+ * 与本权益互斥的类型。三类优惠默认可叠加,互斥是厂商按券配置的例外——
798
+ * 标记 ['points'] 表示该券不可与积分抵扣叠加。判定双向生效。
799
+ */
800
+ exclusiveWithKinds: z.ZodOptional<z.ZodArray<z.ZodEnum<["points", "discount", "coupon"]>, "many">>;
801
+ }, "strip", z.ZodTypeAny, {
802
+ title: string;
803
+ benefitRef: string;
804
+ autoSelected: boolean;
805
+ description?: string | undefined;
806
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
807
+ discountText?: string | undefined;
808
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
809
+ }, {
810
+ title: string;
811
+ benefitRef: string;
812
+ autoSelected: boolean;
813
+ description?: string | undefined;
814
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
815
+ discountText?: string | undefined;
816
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
817
+ }>, "many">;
818
+ /** 乐观锁(提交校验;过期 → 提示重新查询) */
819
+ revision: z.ZodNumber;
820
+ caveats: z.ZodArray<z.ZodString, "many">;
821
+ /**
822
+ * 支付交接包:客户端卡据 kind 调壳 tbox 能力收款——
823
+ * kind:'pay' → openParkingPay(传 orderInfo,壳跳确认页/收银台);kind:'unpaid' → openParkingUnpaidOrder(传 orderNo)。
824
+ * 缺省 = 走内部 confirm-payment(line)支付链。
825
+ */
826
+ payHandoff: z.ZodOptional<z.ZodObject<{
827
+ kind: z.ZodEnum<["pay", "unpaid"]>;
828
+ parkingStoreId: z.ZodOptional<z.ZodString>;
829
+ orderInfo: z.ZodOptional<z.ZodObject<{
830
+ /** 停车秒数 */
831
+ staySecond: z.ZodOptional<z.ZodNumber>;
832
+ /** 停车费,单位分 */
833
+ parkingFee: z.ZodOptional<z.ZodNumber>;
834
+ /** 车牌绑定状态 */
835
+ bindingStatus: z.ZodOptional<z.ZodNumber>;
836
+ /** 车牌 */
837
+ plateNumber: z.ZodOptional<z.ZodString>;
838
+ /** 1=在场缴费,2=逃费/欠费 */
839
+ orderType: z.ZodNumber;
840
+ /** 车场侧订单号 */
841
+ spParkingOrderId: z.ZodOptional<z.ZodString>;
842
+ /** 车场 ID(协议定 string) */
843
+ parkingId: z.ZodString;
844
+ /** 入场时间 */
845
+ entranceTime: z.ZodOptional<z.ZodString>;
846
+ /** 逗号分隔的能力枚举,如 "LEVEL_DISCOUNT,POINT_DISCOUNT,COUPON" */
847
+ supportDiscount: z.ZodOptional<z.ZodString>;
848
+ }, "strip", z.ZodTypeAny, {
849
+ orderType: number;
850
+ parkingId: string;
851
+ staySecond?: number | undefined;
852
+ parkingFee?: number | undefined;
853
+ bindingStatus?: number | undefined;
854
+ plateNumber?: string | undefined;
855
+ spParkingOrderId?: string | undefined;
856
+ entranceTime?: string | undefined;
857
+ supportDiscount?: string | undefined;
858
+ }, {
859
+ orderType: number;
860
+ parkingId: string;
861
+ staySecond?: number | undefined;
862
+ parkingFee?: number | undefined;
863
+ bindingStatus?: number | undefined;
864
+ plateNumber?: string | undefined;
865
+ spParkingOrderId?: string | undefined;
866
+ entranceTime?: string | undefined;
867
+ supportDiscount?: string | undefined;
868
+ }>>;
869
+ orderNo: z.ZodOptional<z.ZodString>;
870
+ }, "strip", z.ZodTypeAny, {
871
+ kind: "pay" | "unpaid";
872
+ parkingStoreId?: string | undefined;
873
+ orderInfo?: {
874
+ orderType: number;
875
+ parkingId: string;
876
+ staySecond?: number | undefined;
877
+ parkingFee?: number | undefined;
878
+ bindingStatus?: number | undefined;
879
+ plateNumber?: string | undefined;
880
+ spParkingOrderId?: string | undefined;
881
+ entranceTime?: string | undefined;
882
+ supportDiscount?: string | undefined;
883
+ } | undefined;
884
+ orderNo?: string | undefined;
885
+ }, {
886
+ kind: "pay" | "unpaid";
887
+ parkingStoreId?: string | undefined;
888
+ orderInfo?: {
889
+ orderType: number;
890
+ parkingId: string;
891
+ staySecond?: number | undefined;
892
+ parkingFee?: number | undefined;
893
+ bindingStatus?: number | undefined;
894
+ plateNumber?: string | undefined;
895
+ spParkingOrderId?: string | undefined;
896
+ entranceTime?: string | undefined;
897
+ supportDiscount?: string | undefined;
898
+ } | undefined;
899
+ orderNo?: string | undefined;
900
+ }>>;
901
+ /**
902
+ * 支付进度(缺省 = 未发起):一经写入这张报价单即终结,按钮恒置灰。
903
+ * 报价是一次性的(token singleUse + revision 乐观锁),发起支付后不可再提交。
904
+ */
905
+ settlement: z.ZodOptional<z.ZodObject<{
906
+ state: z.ZodEnum<["paying", "paid", "failed"]>;
907
+ text: z.ZodString;
908
+ }, "strip", z.ZodTypeAny, {
909
+ text: string;
910
+ state: "failed" | "paying" | "paid";
911
+ }, {
912
+ text: string;
913
+ state: "failed" | "paying" | "paid";
914
+ }>>;
915
+ }, "strip", z.ZodTypeAny, {
916
+ caveats: string[];
917
+ quoteRef: string;
918
+ plateNo: string;
919
+ feeItems: {
920
+ name: string;
921
+ amountText: string;
922
+ }[];
923
+ totalText: string;
924
+ payableText: string;
925
+ appliedBenefits: {
926
+ title: string;
927
+ benefitRef: string;
928
+ discountText?: string | undefined;
929
+ }[];
930
+ selectableBenefits: {
931
+ title: string;
932
+ benefitRef: string;
933
+ autoSelected: boolean;
934
+ description?: string | undefined;
935
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
936
+ discountText?: string | undefined;
937
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
938
+ }[];
939
+ revision: number;
940
+ entryAtText?: string | undefined;
941
+ durationText?: string | undefined;
942
+ discountText?: string | undefined;
943
+ membership?: {
944
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
945
+ availablePoints?: number | undefined;
946
+ } | undefined;
947
+ paymentOptions?: {
948
+ direct: {
949
+ benefitRefs: string[];
950
+ payableText?: string | undefined;
951
+ };
952
+ points?: {
953
+ kind: "exact";
954
+ payableText: string;
955
+ benefitRefs: string[];
956
+ pointsToUse: number;
957
+ } | {
958
+ title: string;
959
+ kind: "requires_reprice";
960
+ benefitRefs: string[];
961
+ } | undefined;
962
+ } | undefined;
963
+ payHandoff?: {
964
+ kind: "pay" | "unpaid";
965
+ parkingStoreId?: string | undefined;
966
+ orderInfo?: {
967
+ orderType: number;
968
+ parkingId: string;
969
+ staySecond?: number | undefined;
970
+ parkingFee?: number | undefined;
971
+ bindingStatus?: number | undefined;
972
+ plateNumber?: string | undefined;
973
+ spParkingOrderId?: string | undefined;
974
+ entranceTime?: string | undefined;
975
+ supportDiscount?: string | undefined;
976
+ } | undefined;
977
+ orderNo?: string | undefined;
978
+ } | undefined;
979
+ settlement?: {
980
+ text: string;
981
+ state: "failed" | "paying" | "paid";
982
+ } | undefined;
983
+ }, {
984
+ caveats: string[];
985
+ quoteRef: string;
986
+ plateNo: string;
987
+ feeItems: {
988
+ name: string;
989
+ amountText: string;
990
+ }[];
991
+ totalText: string;
992
+ payableText: string;
993
+ appliedBenefits: {
994
+ title: string;
995
+ benefitRef: string;
996
+ discountText?: string | undefined;
997
+ }[];
998
+ selectableBenefits: {
999
+ title: string;
1000
+ benefitRef: string;
1001
+ autoSelected: boolean;
1002
+ description?: string | undefined;
1003
+ kind?: "points" | "discount" | "coupon" | "other" | undefined;
1004
+ discountText?: string | undefined;
1005
+ exclusiveWithKinds?: ("points" | "discount" | "coupon")[] | undefined;
1006
+ }[];
1007
+ revision: number;
1008
+ entryAtText?: string | undefined;
1009
+ durationText?: string | undefined;
1010
+ discountText?: string | undefined;
1011
+ membership?: {
1012
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
1013
+ availablePoints?: number | undefined;
1014
+ } | undefined;
1015
+ paymentOptions?: {
1016
+ direct: {
1017
+ benefitRefs: string[];
1018
+ payableText?: string | undefined;
1019
+ };
1020
+ points?: {
1021
+ kind: "exact";
1022
+ payableText: string;
1023
+ benefitRefs: string[];
1024
+ pointsToUse: number;
1025
+ } | {
1026
+ title: string;
1027
+ kind: "requires_reprice";
1028
+ benefitRefs: string[];
1029
+ } | undefined;
1030
+ } | undefined;
1031
+ payHandoff?: {
1032
+ kind: "pay" | "unpaid";
1033
+ parkingStoreId?: string | undefined;
1034
+ orderInfo?: {
1035
+ orderType: number;
1036
+ parkingId: string;
1037
+ staySecond?: number | undefined;
1038
+ parkingFee?: number | undefined;
1039
+ bindingStatus?: number | undefined;
1040
+ plateNumber?: string | undefined;
1041
+ spParkingOrderId?: string | undefined;
1042
+ entranceTime?: string | undefined;
1043
+ supportDiscount?: string | undefined;
1044
+ } | undefined;
1045
+ orderNo?: string | undefined;
1046
+ } | undefined;
1047
+ settlement?: {
1048
+ text: string;
1049
+ state: "failed" | "paying" | "paid";
1050
+ } | undefined;
1051
+ }>;
1052
+ readonly 'parking-payment-result': z.ZodObject<{
1053
+ paymentRef: z.ZodString;
1054
+ plateNo: z.ZodString;
1055
+ status: z.ZodEnum<["PAID", "CANCELLED", "UNKNOWN"]>;
1056
+ amountText: z.ZodOptional<z.ZodString>;
1057
+ message: z.ZodString;
1058
+ /** 失败/取消:可重新发起(重新查询报价) */
1059
+ retryable: z.ZodOptional<z.ZodBoolean>;
1060
+ /** 离场时限提醒(PAID:缴费后免费离场窗口,超时重新计费) */
1061
+ leaveNotice: z.ZodOptional<z.ZodString>;
1062
+ /** 回执明细(车牌 / 停车时长 / 缴费时间等,服务端已格式化) */
1063
+ details: z.ZodOptional<z.ZodArray<z.ZodObject<{
1064
+ label: z.ZodString;
1065
+ value: z.ZodString;
1066
+ }, "strip", z.ZodTypeAny, {
1067
+ value: string;
1068
+ label: string;
1069
+ }, {
1070
+ value: string;
1071
+ label: string;
1072
+ }>, "many">>;
1073
+ }, "strip", z.ZodTypeAny, {
1074
+ message: string;
1075
+ status: "PAID" | "UNKNOWN" | "CANCELLED";
1076
+ plateNo: string;
1077
+ paymentRef: string;
1078
+ amountText?: string | undefined;
1079
+ retryable?: boolean | undefined;
1080
+ leaveNotice?: string | undefined;
1081
+ details?: {
1082
+ value: string;
1083
+ label: string;
1084
+ }[] | undefined;
1085
+ }, {
1086
+ message: string;
1087
+ status: "PAID" | "UNKNOWN" | "CANCELLED";
1088
+ plateNo: string;
1089
+ paymentRef: string;
1090
+ amountText?: string | undefined;
1091
+ retryable?: boolean | undefined;
1092
+ leaveNotice?: string | undefined;
1093
+ details?: {
1094
+ value: string;
1095
+ label: string;
1096
+ }[] | undefined;
1097
+ }>;
1098
+ readonly 'parking-payment-records': z.ZodObject<{
1099
+ items: z.ZodArray<z.ZodObject<{
1100
+ recordRef: z.ZodString;
1101
+ plateNo: z.ZodString;
1102
+ amountText: z.ZodString;
1103
+ paidAtText: z.ZodString;
1104
+ status: z.ZodEnum<["PAID", "REFUNDED", "CLOSED", "UNKNOWN"]>;
1105
+ statusText: z.ZodOptional<z.ZodString>;
1106
+ parkName: z.ZodOptional<z.ZodString>;
1107
+ plazaName: z.ZodOptional<z.ZodString>;
1108
+ /** 展开态字段(entry/exit/单号脱敏) */
1109
+ entryAtText: z.ZodOptional<z.ZodString>;
1110
+ exitAtText: z.ZodOptional<z.ZodString>;
1111
+ payOrderNoMasked: z.ZodOptional<z.ZodString>;
1112
+ orderCompleted: z.ZodOptional<z.ZodBoolean>;
1113
+ invoiceEligible: z.ZodOptional<z.ZodBoolean>;
1114
+ invoiceIssued: z.ZodOptional<z.ZodBoolean>;
1115
+ }, "strip", z.ZodTypeAny, {
1116
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
1117
+ plateNo: string;
1118
+ amountText: string;
1119
+ recordRef: string;
1120
+ paidAtText: string;
1121
+ entryAtText?: string | undefined;
1122
+ statusText?: string | undefined;
1123
+ parkName?: string | undefined;
1124
+ plazaName?: string | undefined;
1125
+ exitAtText?: string | undefined;
1126
+ payOrderNoMasked?: string | undefined;
1127
+ orderCompleted?: boolean | undefined;
1128
+ invoiceEligible?: boolean | undefined;
1129
+ invoiceIssued?: boolean | undefined;
1130
+ }, {
1131
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
1132
+ plateNo: string;
1133
+ amountText: string;
1134
+ recordRef: string;
1135
+ paidAtText: string;
1136
+ entryAtText?: string | undefined;
1137
+ statusText?: string | undefined;
1138
+ parkName?: string | undefined;
1139
+ plazaName?: string | undefined;
1140
+ exitAtText?: string | undefined;
1141
+ payOrderNoMasked?: string | undefined;
1142
+ orderCompleted?: boolean | undefined;
1143
+ invoiceEligible?: boolean | undefined;
1144
+ invoiceIssued?: boolean | undefined;
1145
+ }>, "many">;
1146
+ total: z.ZodNumber;
1147
+ hasMore: z.ZodBoolean;
1148
+ /** 厂商口径 caveats(厂商事实,7 条并入) */
1149
+ caveats: z.ZodArray<z.ZodString, "many">;
1150
+ /** 详情加载、开票提交等动作反馈 */
1151
+ message: z.ZodOptional<z.ZodString>;
1152
+ }, "strip", z.ZodTypeAny, {
1153
+ total: number;
1154
+ hasMore: boolean;
1155
+ items: {
1156
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
1157
+ plateNo: string;
1158
+ amountText: string;
1159
+ recordRef: string;
1160
+ paidAtText: string;
1161
+ entryAtText?: string | undefined;
1162
+ statusText?: string | undefined;
1163
+ parkName?: string | undefined;
1164
+ plazaName?: string | undefined;
1165
+ exitAtText?: string | undefined;
1166
+ payOrderNoMasked?: string | undefined;
1167
+ orderCompleted?: boolean | undefined;
1168
+ invoiceEligible?: boolean | undefined;
1169
+ invoiceIssued?: boolean | undefined;
1170
+ }[];
1171
+ caveats: string[];
1172
+ message?: string | undefined;
1173
+ }, {
1174
+ total: number;
1175
+ hasMore: boolean;
1176
+ items: {
1177
+ status: "PAID" | "REFUNDED" | "CLOSED" | "UNKNOWN";
1178
+ plateNo: string;
1179
+ amountText: string;
1180
+ recordRef: string;
1181
+ paidAtText: string;
1182
+ entryAtText?: string | undefined;
1183
+ statusText?: string | undefined;
1184
+ parkName?: string | undefined;
1185
+ plazaName?: string | undefined;
1186
+ exitAtText?: string | undefined;
1187
+ payOrderNoMasked?: string | undefined;
1188
+ orderCompleted?: boolean | undefined;
1189
+ invoiceEligible?: boolean | undefined;
1190
+ invoiceIssued?: boolean | undefined;
1191
+ }[];
1192
+ caveats: string[];
1193
+ message?: string | undefined;
1194
+ }>;
1195
+ readonly 'parking-vehicle-management': z.ZodObject<{
1196
+ bound: z.ZodArray<z.ZodObject<{
1197
+ vehicleRef: z.ZodString;
1198
+ plateNo: z.ZodString;
1199
+ parked: z.ZodOptional<z.ZodBoolean>;
1200
+ }, "strip", z.ZodTypeAny, {
1201
+ plateNo: string;
1202
+ vehicleRef: string;
1203
+ parked?: boolean | undefined;
1204
+ }, {
1205
+ plateNo: string;
1206
+ vehicleRef: string;
1207
+ parked?: boolean | undefined;
1208
+ }>, "many">;
1209
+ message: z.ZodOptional<z.ZodString>;
1210
+ /**
1211
+ * 会员状态(缺省 = 未探测):仅 not_enrolled 才展示入会引导。
1212
+ * 与 parking-payment 的 membership 同源,避免两张卡对同一用户给出不同判断。
1213
+ */
1214
+ membership: z.ZodOptional<z.ZodObject<{
1215
+ state: z.ZodEnum<["unauthenticated", "unknown", "active", "not_enrolled", "closed", "unavailable"]>;
1216
+ }, "strip", z.ZodTypeAny, {
1217
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
1218
+ }, {
1219
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
1220
+ }>>;
1221
+ }, "strip", z.ZodTypeAny, {
1222
+ bound: {
1223
+ plateNo: string;
1224
+ vehicleRef: string;
1225
+ parked?: boolean | undefined;
1226
+ }[];
1227
+ message?: string | undefined;
1228
+ membership?: {
1229
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
1230
+ } | undefined;
1231
+ }, {
1232
+ bound: {
1233
+ plateNo: string;
1234
+ vehicleRef: string;
1235
+ parked?: boolean | undefined;
1236
+ }[];
1237
+ message?: string | undefined;
1238
+ membership?: {
1239
+ state: "unknown" | "unavailable" | "unauthenticated" | "active" | "not_enrolled" | "closed";
1240
+ } | undefined;
1241
+ }>;
1242
+ readonly 'parking-info': z.ZodObject<{
1243
+ kind: z.ZodEnum<["chargeRules", "benefitPolicy", "vehicleLocation"]>;
1244
+ title: z.ZodString;
1245
+ entries: z.ZodArray<z.ZodObject<{
1246
+ label: z.ZodString;
1247
+ value: z.ZodString;
1248
+ }, "strip", z.ZodTypeAny, {
1249
+ value: string;
1250
+ label: string;
1251
+ }, {
1252
+ value: string;
1253
+ label: string;
1254
+ }>, "many">;
1255
+ }, "strip", z.ZodTypeAny, {
1256
+ entries: {
1257
+ value: string;
1258
+ label: string;
1259
+ }[];
1260
+ title: string;
1261
+ kind: "chargeRules" | "benefitPolicy" | "vehicleLocation";
1262
+ }, {
1263
+ entries: {
1264
+ value: string;
1265
+ label: string;
1266
+ }[];
1267
+ title: string;
1268
+ kind: "chargeRules" | "benefitPolicy" | "vehicleLocation";
1269
+ }>;
1270
+ };
1271
+ export type ParkingCardType = keyof typeof parkingCardDataSchemas;