@almadar/std 14.26.0 → 14.28.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 (175) hide show
  1. package/behaviors/registry/app/atoms/std-applicant.orb +496 -42
  2. package/behaviors/registry/app/atoms/std-approval-chain.orb +106 -0
  3. package/behaviors/registry/app/atoms/std-approval-request.orb +433 -593
  4. package/behaviors/registry/app/atoms/std-campaign-goal.orb +438 -228
  5. package/behaviors/registry/app/atoms/std-change-order.orb +565 -307
  6. package/behaviors/registry/app/atoms/std-chart-of-accounts.orb +434 -97
  7. package/behaviors/registry/app/atoms/std-checkin.orb +434 -270
  8. package/behaviors/registry/app/atoms/std-class-roster.orb +495 -61
  9. package/behaviors/registry/app/atoms/std-class-session.orb +485 -104
  10. package/behaviors/registry/app/atoms/std-court-deadline.orb +519 -88
  11. package/behaviors/registry/app/atoms/std-customer-account.orb +577 -97
  12. package/behaviors/registry/app/atoms/std-donation-receipt.orb +498 -55
  13. package/behaviors/registry/app/atoms/std-donor.orb +445 -135
  14. package/behaviors/registry/app/atoms/std-drip-sequence.orb +445 -62
  15. package/behaviors/registry/app/atoms/std-driver.orb +465 -480
  16. package/behaviors/registry/app/atoms/std-dunning.orb +450 -512
  17. package/behaviors/registry/app/atoms/std-email-broadcast.orb +517 -64
  18. package/behaviors/registry/app/atoms/std-event.orb +465 -667
  19. package/behaviors/registry/app/atoms/std-health-score.orb +368 -371
  20. package/behaviors/registry/app/atoms/std-help-article.orb +373 -506
  21. package/behaviors/registry/app/atoms/std-help-category.orb +344 -359
  22. package/behaviors/registry/app/atoms/std-interview-slot.orb +490 -48
  23. package/behaviors/registry/app/atoms/std-invoice.orb +494 -291
  24. package/behaviors/registry/app/atoms/std-kitchen-display.orb +588 -96
  25. package/behaviors/registry/app/atoms/std-lease.orb +506 -190
  26. package/behaviors/registry/app/atoms/std-ledger-entry.orb +483 -154
  27. package/behaviors/registry/app/atoms/std-maintenance-request.orb +642 -192
  28. package/behaviors/registry/app/atoms/std-matter.orb +486 -318
  29. package/behaviors/registry/app/atoms/std-membership.orb +512 -102
  30. package/behaviors/registry/app/atoms/std-menu.orb +775 -183
  31. package/behaviors/registry/app/atoms/std-modifier-group.orb +522 -104
  32. package/behaviors/registry/app/atoms/std-multi-party-transaction.orb +130 -0
  33. package/behaviors/registry/app/atoms/std-nps-survey.orb +319 -327
  34. package/behaviors/registry/app/atoms/std-offer-letter.orb +497 -47
  35. package/behaviors/registry/app/atoms/std-payout-ledger.orb +378 -362
  36. package/behaviors/registry/app/atoms/std-pipeline.orb +139 -0
  37. package/behaviors/registry/app/atoms/std-question-bank.orb +379 -346
  38. package/behaviors/registry/app/atoms/std-receipt.orb +553 -44
  39. package/behaviors/registry/app/atoms/std-recurring-charge.orb +419 -832
  40. package/behaviors/registry/app/atoms/std-recurring-schedule.orb +94 -0
  41. package/behaviors/registry/app/atoms/std-renewal-risk.orb +370 -421
  42. package/behaviors/registry/app/atoms/std-rent-charge.orb +657 -55
  43. package/behaviors/registry/app/atoms/std-reorder-rule.orb +510 -59
  44. package/behaviors/registry/app/atoms/std-response-collector.orb +451 -144
  45. package/behaviors/registry/app/atoms/std-rfi.orb +502 -461
  46. package/behaviors/registry/app/atoms/std-route-optimize.orb +448 -158
  47. package/behaviors/registry/app/atoms/std-segment.orb +360 -98
  48. package/behaviors/registry/app/atoms/std-stock-level.orb +486 -103
  49. package/behaviors/registry/app/atoms/std-submittal.orb +538 -526
  50. package/behaviors/registry/app/atoms/std-table-map.orb +88 -51
  51. package/behaviors/registry/app/atoms/std-technician-dispatch.orb +653 -71
  52. package/behaviors/registry/app/atoms/std-telematics-event.orb +310 -215
  53. package/behaviors/registry/app/atoms/std-template-editor.orb +513 -90
  54. package/behaviors/registry/app/atoms/std-tenant.orb +525 -66
  55. package/behaviors/registry/app/atoms/std-ticket-tier.orb +472 -460
  56. package/behaviors/registry/app/atoms/std-time-entry.orb +354 -317
  57. package/behaviors/registry/app/atoms/std-timeline.orb +108 -0
  58. package/behaviors/registry/app/atoms/std-timesheet.orb +551 -284
  59. package/behaviors/registry/app/atoms/std-trial.orb +410 -317
  60. package/behaviors/registry/app/atoms/std-vehicle.orb +398 -563
  61. package/behaviors/registry/app/atoms/std-waitlist.orb +372 -283
  62. package/behaviors/registry/app/atoms/std-warehouse.orb +273 -214
  63. package/behaviors/registry/app/atoms/std-wizard-branching.orb +129 -0
  64. package/behaviors/registry/app/atoms/std-work-order.orb +628 -240
  65. package/behaviors/registry/app/molecules/std-applicant-form.orb +89 -83
  66. package/behaviors/registry/app/molecules/std-application.orb +178 -263
  67. package/behaviors/registry/app/molecules/std-broadcast-builder.orb +67 -176
  68. package/behaviors/registry/app/molecules/std-cart.orb +78 -72
  69. package/behaviors/registry/app/molecules/std-form-builder.orb +437 -176
  70. package/behaviors/registry/app/molecules/std-ledger-entry-form.orb +608 -89
  71. package/behaviors/registry/app/molecules/std-stock-adjustment.orb +501 -102
  72. package/behaviors/registry/app/molecules/std-vendor-onboarding.orb +383 -469
  73. package/behaviors/registry/core/atoms/std-billable-hour.orb +495 -91
  74. package/behaviors/registry/core/atoms/std-board.orb +1367 -0
  75. package/behaviors/registry/core/atoms/std-branching-logic.orb +271 -600
  76. package/behaviors/registry/core/atoms/std-event-log.orb +777 -0
  77. package/behaviors/registry/core/atoms/std-file-store.orb +534 -164
  78. package/behaviors/registry/core/atoms/std-gallery.orb +118 -101
  79. package/behaviors/registry/core/atoms/std-image-upload-multi.orb +87 -57
  80. package/behaviors/registry/core/atoms/std-multi-party-flow.orb +1313 -0
  81. package/behaviors/registry/core/atoms/std-page-tree.orb +342 -484
  82. package/behaviors/registry/core/atoms/std-recurrence.orb +937 -0
  83. package/behaviors/registry/core/atoms/std-rich-editor.orb +288 -416
  84. package/behaviors/registry/core/atoms/std-step-flow.orb +1155 -0
  85. package/behaviors/registry/core/atoms/std-version-history.orb +454 -430
  86. package/behaviors/registry/core/atoms/std-wizard.orb +1085 -0
  87. package/behaviors/registry/core/molecules/std-wizard-form.orb +222 -147
  88. package/dist/behaviors/registry/app/atoms/std-applicant.orb +496 -42
  89. package/dist/behaviors/registry/app/atoms/std-approval-chain.orb +106 -0
  90. package/dist/behaviors/registry/app/atoms/std-approval-request.orb +433 -593
  91. package/dist/behaviors/registry/app/atoms/std-campaign-goal.orb +438 -228
  92. package/dist/behaviors/registry/app/atoms/std-change-order.orb +565 -307
  93. package/dist/behaviors/registry/app/atoms/std-chart-of-accounts.orb +434 -97
  94. package/dist/behaviors/registry/app/atoms/std-checkin.orb +434 -270
  95. package/dist/behaviors/registry/app/atoms/std-class-roster.orb +495 -61
  96. package/dist/behaviors/registry/app/atoms/std-class-session.orb +485 -104
  97. package/dist/behaviors/registry/app/atoms/std-court-deadline.orb +519 -88
  98. package/dist/behaviors/registry/app/atoms/std-customer-account.orb +577 -97
  99. package/dist/behaviors/registry/app/atoms/std-donation-receipt.orb +498 -55
  100. package/dist/behaviors/registry/app/atoms/std-donor.orb +445 -135
  101. package/dist/behaviors/registry/app/atoms/std-drip-sequence.orb +445 -62
  102. package/dist/behaviors/registry/app/atoms/std-driver.orb +465 -480
  103. package/dist/behaviors/registry/app/atoms/std-dunning.orb +450 -512
  104. package/dist/behaviors/registry/app/atoms/std-email-broadcast.orb +517 -64
  105. package/dist/behaviors/registry/app/atoms/std-event.orb +465 -667
  106. package/dist/behaviors/registry/app/atoms/std-health-score.orb +368 -371
  107. package/dist/behaviors/registry/app/atoms/std-help-article.orb +373 -506
  108. package/dist/behaviors/registry/app/atoms/std-help-category.orb +344 -359
  109. package/dist/behaviors/registry/app/atoms/std-interview-slot.orb +490 -48
  110. package/dist/behaviors/registry/app/atoms/std-invoice.orb +494 -291
  111. package/dist/behaviors/registry/app/atoms/std-kitchen-display.orb +588 -96
  112. package/dist/behaviors/registry/app/atoms/std-lease.orb +506 -190
  113. package/dist/behaviors/registry/app/atoms/std-ledger-entry.orb +483 -154
  114. package/dist/behaviors/registry/app/atoms/std-maintenance-request.orb +642 -192
  115. package/dist/behaviors/registry/app/atoms/std-matter.orb +486 -318
  116. package/dist/behaviors/registry/app/atoms/std-membership.orb +512 -102
  117. package/dist/behaviors/registry/app/atoms/std-menu.orb +775 -183
  118. package/dist/behaviors/registry/app/atoms/std-modifier-group.orb +522 -104
  119. package/dist/behaviors/registry/app/atoms/std-multi-party-transaction.orb +130 -0
  120. package/dist/behaviors/registry/app/atoms/std-nps-survey.orb +319 -327
  121. package/dist/behaviors/registry/app/atoms/std-offer-letter.orb +497 -47
  122. package/dist/behaviors/registry/app/atoms/std-payout-ledger.orb +378 -362
  123. package/dist/behaviors/registry/app/atoms/std-pipeline.orb +139 -0
  124. package/dist/behaviors/registry/app/atoms/std-question-bank.orb +379 -346
  125. package/dist/behaviors/registry/app/atoms/std-receipt.orb +553 -44
  126. package/dist/behaviors/registry/app/atoms/std-recurring-charge.orb +419 -832
  127. package/dist/behaviors/registry/app/atoms/std-recurring-schedule.orb +94 -0
  128. package/dist/behaviors/registry/app/atoms/std-renewal-risk.orb +370 -421
  129. package/dist/behaviors/registry/app/atoms/std-rent-charge.orb +657 -55
  130. package/dist/behaviors/registry/app/atoms/std-reorder-rule.orb +510 -59
  131. package/dist/behaviors/registry/app/atoms/std-response-collector.orb +451 -144
  132. package/dist/behaviors/registry/app/atoms/std-rfi.orb +502 -461
  133. package/dist/behaviors/registry/app/atoms/std-route-optimize.orb +448 -158
  134. package/dist/behaviors/registry/app/atoms/std-segment.orb +360 -98
  135. package/dist/behaviors/registry/app/atoms/std-stock-level.orb +486 -103
  136. package/dist/behaviors/registry/app/atoms/std-submittal.orb +538 -526
  137. package/dist/behaviors/registry/app/atoms/std-table-map.orb +88 -51
  138. package/dist/behaviors/registry/app/atoms/std-technician-dispatch.orb +653 -71
  139. package/dist/behaviors/registry/app/atoms/std-telematics-event.orb +310 -215
  140. package/dist/behaviors/registry/app/atoms/std-template-editor.orb +513 -90
  141. package/dist/behaviors/registry/app/atoms/std-tenant.orb +525 -66
  142. package/dist/behaviors/registry/app/atoms/std-ticket-tier.orb +472 -460
  143. package/dist/behaviors/registry/app/atoms/std-time-entry.orb +354 -317
  144. package/dist/behaviors/registry/app/atoms/std-timeline.orb +108 -0
  145. package/dist/behaviors/registry/app/atoms/std-timesheet.orb +551 -284
  146. package/dist/behaviors/registry/app/atoms/std-trial.orb +410 -317
  147. package/dist/behaviors/registry/app/atoms/std-vehicle.orb +398 -563
  148. package/dist/behaviors/registry/app/atoms/std-waitlist.orb +372 -283
  149. package/dist/behaviors/registry/app/atoms/std-warehouse.orb +273 -214
  150. package/dist/behaviors/registry/app/atoms/std-wizard-branching.orb +129 -0
  151. package/dist/behaviors/registry/app/atoms/std-work-order.orb +628 -240
  152. package/dist/behaviors/registry/app/molecules/std-applicant-form.orb +89 -83
  153. package/dist/behaviors/registry/app/molecules/std-application.orb +178 -263
  154. package/dist/behaviors/registry/app/molecules/std-broadcast-builder.orb +67 -176
  155. package/dist/behaviors/registry/app/molecules/std-cart.orb +78 -72
  156. package/dist/behaviors/registry/app/molecules/std-form-builder.orb +437 -176
  157. package/dist/behaviors/registry/app/molecules/std-ledger-entry-form.orb +608 -89
  158. package/dist/behaviors/registry/app/molecules/std-stock-adjustment.orb +501 -102
  159. package/dist/behaviors/registry/app/molecules/std-vendor-onboarding.orb +383 -469
  160. package/dist/behaviors/registry/core/atoms/std-billable-hour.orb +495 -91
  161. package/dist/behaviors/registry/core/atoms/std-board.orb +1367 -0
  162. package/dist/behaviors/registry/core/atoms/std-branching-logic.orb +271 -600
  163. package/dist/behaviors/registry/core/atoms/std-event-log.orb +777 -0
  164. package/dist/behaviors/registry/core/atoms/std-file-store.orb +534 -164
  165. package/dist/behaviors/registry/core/atoms/std-gallery.orb +118 -101
  166. package/dist/behaviors/registry/core/atoms/std-image-upload-multi.orb +87 -57
  167. package/dist/behaviors/registry/core/atoms/std-multi-party-flow.orb +1313 -0
  168. package/dist/behaviors/registry/core/atoms/std-page-tree.orb +342 -484
  169. package/dist/behaviors/registry/core/atoms/std-recurrence.orb +937 -0
  170. package/dist/behaviors/registry/core/atoms/std-rich-editor.orb +288 -416
  171. package/dist/behaviors/registry/core/atoms/std-step-flow.orb +1155 -0
  172. package/dist/behaviors/registry/core/atoms/std-version-history.orb +454 -430
  173. package/dist/behaviors/registry/core/atoms/std-wizard.orb +1085 -0
  174. package/dist/behaviors/registry/core/molecules/std-wizard-form.orb +222 -147
  175. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "std-dunning",
3
3
  "version": "1.0.0",
4
- "description": "std-dunning — failed-payment escalation ladder for subscriptions. Owns a DunningCase entity and a single trait that loads open cases, renders them in a data-grid alongside a per-case dunning-banner, and advances severity (soft -> urgent -> final -> suspend) or marks resolved.",
4
+ "description": "std-dunning — failed-payment escalation ladder for subscriptions. Lists open dunning cases in `browsing`; opens detail in `viewing_single` with Escalate / Resolve / Suspend actions.",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "DunningCaseOrbital",
@@ -85,7 +85,7 @@
85
85
  "linkedEntity": "DunningCase",
86
86
  "emits": [
87
87
  {
88
- "event": "ESCALATE",
88
+ "event": "OPEN_CASE",
89
89
  "payloadSchema": [
90
90
  {
91
91
  "name": "id",
@@ -146,63 +146,25 @@
146
146
  ]
147
147
  },
148
148
  {
149
- "event": "RESOLVE",
149
+ "event": "CLOSE_VIEW"
150
+ },
151
+ {
152
+ "event": "ESCALATE",
150
153
  "payloadSchema": [
151
154
  {
152
155
  "name": "id",
153
156
  "type": "string",
154
157
  "required": true
155
- },
156
- {
157
- "name": "row.id",
158
- "type": "string",
159
- "required": true
160
- },
161
- {
162
- "name": "row.subscriptionId",
163
- "type": "string",
164
- "required": true
165
- },
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "event": "RESOLVE",
163
+ "payloadSchema": [
166
164
  {
167
- "name": "row.customerId",
165
+ "name": "id",
168
166
  "type": "string",
169
167
  "required": true
170
- },
171
- {
172
- "name": "row.severity",
173
- "type": "string"
174
- },
175
- {
176
- "name": "row.attemptNumber",
177
- "type": "number"
178
- },
179
- {
180
- "name": "row.attemptsTotal",
181
- "type": "number"
182
- },
183
- {
184
- "name": "row.failedAt",
185
- "type": "string"
186
- },
187
- {
188
- "name": "row.nextRetryAt",
189
- "type": "string"
190
- },
191
- {
192
- "name": "row.amountDue",
193
- "type": "number"
194
- },
195
- {
196
- "name": "row.currency",
197
- "type": "string"
198
- },
199
- {
200
- "name": "row.resolvedAt",
201
- "type": "string"
202
- },
203
- {
204
- "name": "row.status",
205
- "type": "string"
206
168
  }
207
169
  ]
208
170
  },
@@ -213,57 +175,6 @@
213
175
  "name": "id",
214
176
  "type": "string",
215
177
  "required": true
216
- },
217
- {
218
- "name": "row.id",
219
- "type": "string",
220
- "required": true
221
- },
222
- {
223
- "name": "row.subscriptionId",
224
- "type": "string",
225
- "required": true
226
- },
227
- {
228
- "name": "row.customerId",
229
- "type": "string",
230
- "required": true
231
- },
232
- {
233
- "name": "row.severity",
234
- "type": "string"
235
- },
236
- {
237
- "name": "row.attemptNumber",
238
- "type": "number"
239
- },
240
- {
241
- "name": "row.attemptsTotal",
242
- "type": "number"
243
- },
244
- {
245
- "name": "row.failedAt",
246
- "type": "string"
247
- },
248
- {
249
- "name": "row.nextRetryAt",
250
- "type": "string"
251
- },
252
- {
253
- "name": "row.amountDue",
254
- "type": "number"
255
- },
256
- {
257
- "name": "row.currency",
258
- "type": "string"
259
- },
260
- {
261
- "name": "row.resolvedAt",
262
- "type": "string"
263
- },
264
- {
265
- "name": "row.status",
266
- "type": "string"
267
178
  }
268
179
  ]
269
180
  },
@@ -288,131 +199,6 @@
288
199
  "type": "string"
289
200
  }
290
201
  ]
291
- },
292
- {
293
- "event": "DunningCaseUpdated",
294
- "payloadSchema": [
295
- {
296
- "name": "row.id",
297
- "type": "string",
298
- "required": true
299
- },
300
- {
301
- "name": "row.subscriptionId",
302
- "type": "string",
303
- "required": true
304
- },
305
- {
306
- "name": "row.customerId",
307
- "type": "string",
308
- "required": true
309
- },
310
- {
311
- "name": "row.severity",
312
- "type": "string"
313
- },
314
- {
315
- "name": "row.attemptNumber",
316
- "type": "number"
317
- },
318
- {
319
- "name": "row.attemptsTotal",
320
- "type": "number"
321
- },
322
- {
323
- "name": "row.failedAt",
324
- "type": "string"
325
- },
326
- {
327
- "name": "row.nextRetryAt",
328
- "type": "string"
329
- },
330
- {
331
- "name": "row.amountDue",
332
- "type": "number"
333
- },
334
- {
335
- "name": "row.currency",
336
- "type": "string"
337
- },
338
- {
339
- "name": "row.resolvedAt",
340
- "type": "string"
341
- },
342
- {
343
- "name": "row.status",
344
- "type": "string"
345
- }
346
- ]
347
- },
348
- {
349
- "event": "DunningCaseUpdateFailed",
350
- "payloadSchema": [
351
- {
352
- "name": "error",
353
- "type": "string"
354
- },
355
- {
356
- "name": "code",
357
- "type": "string"
358
- }
359
- ]
360
- },
361
- {
362
- "event": "ServiceSuspended",
363
- "payloadSchema": [
364
- {
365
- "name": "row.id",
366
- "type": "string",
367
- "required": true
368
- },
369
- {
370
- "name": "row.subscriptionId",
371
- "type": "string",
372
- "required": true
373
- },
374
- {
375
- "name": "row.customerId",
376
- "type": "string",
377
- "required": true
378
- },
379
- {
380
- "name": "row.severity",
381
- "type": "string"
382
- },
383
- {
384
- "name": "row.attemptNumber",
385
- "type": "number"
386
- },
387
- {
388
- "name": "row.attemptsTotal",
389
- "type": "number"
390
- },
391
- {
392
- "name": "row.failedAt",
393
- "type": "string"
394
- },
395
- {
396
- "name": "row.nextRetryAt",
397
- "type": "string"
398
- },
399
- {
400
- "name": "row.amountDue",
401
- "type": "number"
402
- },
403
- {
404
- "name": "row.currency",
405
- "type": "string"
406
- },
407
- {
408
- "name": "row.resolvedAt",
409
- "type": "string"
410
- },
411
- {
412
- "name": "row.status",
413
- "type": "string"
414
- }
415
- ]
416
202
  }
417
203
  ],
418
204
  "stateMachine": {
@@ -425,7 +211,7 @@
425
211
  "name": "browsing"
426
212
  },
427
213
  {
428
- "name": "escalating"
214
+ "name": "viewing_single"
429
215
  },
430
216
  {
431
217
  "name": "error"
@@ -461,8 +247,8 @@
461
247
  ]
462
248
  },
463
249
  {
464
- "key": "ESCALATE",
465
- "name": "Escalate",
250
+ "key": "OPEN_CASE",
251
+ "name": "Open Case",
466
252
  "payloadSchema": [
467
253
  {
468
254
  "name": "id",
@@ -476,66 +262,39 @@
476
262
  ]
477
263
  },
478
264
  {
479
- "key": "RESOLVE",
480
- "name": "Resolve",
265
+ "key": "SUSPEND",
266
+ "name": "Suspend",
481
267
  "payloadSchema": [
482
268
  {
483
269
  "name": "id",
484
270
  "type": "string",
485
271
  "required": true
486
- },
487
- {
488
- "name": "row",
489
- "type": "DunningCase"
490
272
  }
491
273
  ]
492
274
  },
493
275
  {
494
- "key": "SUSPEND",
495
- "name": "Suspend",
276
+ "key": "CLOSE_VIEW",
277
+ "name": "Close View"
278
+ },
279
+ {
280
+ "key": "ESCALATE",
281
+ "name": "Escalate",
496
282
  "payloadSchema": [
497
283
  {
498
284
  "name": "id",
499
285
  "type": "string",
500
286
  "required": true
501
- },
502
- {
503
- "name": "row",
504
- "type": "DunningCase"
505
287
  }
506
288
  ]
507
289
  },
508
290
  {
509
- "key": "DunningCaseUpdated",
510
- "name": "DunningCase updated",
291
+ "key": "RESOLVE",
292
+ "name": "Resolve",
511
293
  "payloadSchema": [
512
294
  {
513
- "name": "row",
514
- "type": "DunningCase"
515
- }
516
- ]
517
- },
518
- {
519
- "key": "ServiceSuspended",
520
- "name": "Service suspended",
521
- "payloadSchema": [
522
- {
523
- "name": "row",
524
- "type": "DunningCase"
525
- }
526
- ]
527
- },
528
- {
529
- "key": "DunningCaseUpdateFailed",
530
- "name": "DunningCase update failed",
531
- "payloadSchema": [
532
- {
533
- "name": "error",
534
- "type": "string"
535
- },
536
- {
537
- "name": "code",
538
- "type": "string"
295
+ "name": "id",
296
+ "type": "string",
297
+ "required": true
539
298
  }
540
299
  ]
541
300
  }
@@ -551,8 +310,8 @@
551
310
  "DunningCase",
552
311
  {
553
312
  "emit": {
554
- "failure": "DunningCaseLoadFailed",
555
- "success": "DunningCaseLoaded"
313
+ "success": "DunningCaseLoaded",
314
+ "failure": "DunningCaseLoadFailed"
556
315
  }
557
316
  }
558
317
  ],
@@ -560,22 +319,22 @@
560
319
  "render-ui",
561
320
  "main",
562
321
  {
563
- "type": "stack",
564
- "direction": "vertical",
565
- "className": "py-12",
566
322
  "children": [
567
323
  {
568
324
  "type": "spinner"
569
325
  },
570
326
  {
571
327
  "color": "muted",
328
+ "content": "Loading dunning cases…",
572
329
  "type": "typography",
573
- "variant": "caption",
574
- "content": "Loading dunning cases…"
330
+ "variant": "caption"
575
331
  }
576
332
  ],
333
+ "type": "stack",
334
+ "direction": "vertical",
335
+ "align": "center",
577
336
  "gap": "md",
578
- "align": "center"
337
+ "className": "py-12"
579
338
  }
580
339
  ]
581
340
  ]
@@ -591,11 +350,9 @@
591
350
  {
592
351
  "direction": "vertical",
593
352
  "type": "stack",
594
- "gap": "md",
595
353
  "children": [
596
354
  {
597
- "type": "stack",
598
- "gap": "sm",
355
+ "direction": "horizontal",
599
356
  "children": [
600
357
  {
601
358
  "type": "icon",
@@ -603,199 +360,101 @@
603
360
  },
604
361
  {
605
362
  "content": "@config.title",
606
- "type": "typography",
607
- "variant": "h3"
363
+ "variant": "h3",
364
+ "type": "typography"
608
365
  }
609
366
  ],
610
- "direction": "horizontal"
611
- },
612
- {
613
- "type": "divider"
614
- },
615
- {
616
- "type": "split-section",
617
- "imagePosition": "right",
618
- "background": "alt",
619
- "title": "Collections health",
620
- "bullets": [
621
- "Severity ladders from soft to final",
622
- "Auto-suspend at the last attempt",
623
- "Resolve when payment recovers"
624
- ],
625
- "description": "Track recovery against open cases and route the right escalation to each customer."
367
+ "gap": "sm",
368
+ "type": "stack",
369
+ "align": "center"
626
370
  },
627
371
  {
628
- "type": "stats-grid",
629
- "stats": [
372
+ "type": "simple-grid",
373
+ "cols": 4.0,
374
+ "children": [
630
375
  {
631
- "value": "42",
376
+ "type": "stat-display",
377
+ "value": "@payload.data.length",
378
+ "icon": "alert-triangle",
632
379
  "label": "Open cases"
633
380
  },
634
381
  {
382
+ "label": "Recovered",
383
+ "type": "stat-display",
635
384
  "value": "18",
636
- "label": "Recovered"
385
+ "icon": "check-circle"
637
386
  },
638
387
  {
388
+ "label": "Suspended",
639
389
  "value": "3",
640
- "label": "Suspended"
390
+ "icon": "ban",
391
+ "type": "stat-display"
641
392
  },
642
393
  {
394
+ "type": "stat-display",
395
+ "icon": "trending-up",
643
396
  "value": "62%",
644
397
  "label": "Recovery rate"
645
398
  }
646
- ],
647
- "columns": 4.0
399
+ ]
648
400
  },
649
401
  {
650
- "direction": "horizontal",
651
- "gap": "md",
652
- "type": "stack",
653
- "children": [
654
- {
655
- "description": "Final notice. Suspension in 2 days.",
656
- "image": {
657
- "alt": "Acme",
658
- "src": "https://picsum.photos/seed/dun-acme/600/400"
659
- },
660
- "type": "showcase-card",
661
- "title": "Acme Corp",
662
- "badge": "Final",
663
- "accentColor": "danger"
664
- },
665
- {
666
- "type": "showcase-card",
667
- "description": "Urgent — second retry failed.",
668
- "image": {
669
- "alt": "Globex",
670
- "src": "https://picsum.photos/seed/dun-globex/600/400"
671
- },
672
- "badge": "Urgent",
673
- "accentColor": "warning",
674
- "title": "Globex Ltd"
675
- }
676
- ]
402
+ "type": "divider"
677
403
  },
678
404
  {
679
- "type": "swipeable-row",
680
- "threshold": 80.0,
681
- "rightActions": [
405
+ "itemActions": [
406
+ {
407
+ "variant": "primary",
408
+ "label": "Open",
409
+ "event": "OPEN_CASE",
410
+ "icon": "arrow-right"
411
+ },
682
412
  {
413
+ "label": "Suspend",
683
414
  "event": "SUSPEND",
684
415
  "variant": "danger",
685
- "label": "Suspend"
686
- }
687
- ],
688
- "leftActions": [
689
- {
690
- "label": "Resolve",
691
- "event": "RESOLVE",
692
- "variant": "primary"
416
+ "icon": "ban"
693
417
  }
694
418
  ],
695
- "children": {
696
- "children": [
697
- {
698
- "type": "icon",
699
- "name": "alert-triangle"
700
- },
701
- {
702
- "content": "Swipe a case row for quick actions",
703
- "variant": "body",
704
- "type": "typography"
705
- }
706
- ],
707
- "align": "center",
708
- "direction": "horizontal",
709
- "gap": "md",
710
- "type": "stack"
711
- }
712
- },
713
- {
419
+ "type": "data-grid",
714
420
  "gap": "sm",
715
421
  "fields": [
716
422
  {
717
- "label": "Subscription",
423
+ "variant": "caption",
718
424
  "name": "subscriptionId",
719
- "variant": "caption"
425
+ "label": "Subscription"
720
426
  },
721
427
  {
722
- "label": "Customer",
723
428
  "variant": "caption",
724
- "name": "customerId"
429
+ "name": "customerId",
430
+ "label": "Customer"
725
431
  },
726
432
  {
727
433
  "variant": "badge",
728
- "name": "severity",
729
- "label": "Severity"
434
+ "label": "Severity",
435
+ "name": "severity"
730
436
  },
731
437
  {
438
+ "name": "attemptNumber",
732
439
  "label": "Attempt",
733
- "variant": "caption",
734
- "name": "attemptNumber"
440
+ "variant": "caption"
735
441
  },
736
442
  {
737
- "variant": "caption",
738
443
  "name": "amountDue",
444
+ "variant": "caption",
739
445
  "label": "Amount Due"
740
446
  },
741
447
  {
742
- "name": "status",
743
448
  "label": "Status",
744
- "variant": "badge"
745
- }
746
- ],
747
- "cols": 1.0,
748
- "type": "data-grid",
749
- "itemActions": [
750
- {
751
- "event": "ESCALATE",
752
- "variant": "primary",
753
- "label": "Escalate",
754
- "icon": "arrow-up"
755
- },
756
- {
757
- "icon": "check",
758
- "variant": "secondary",
759
- "label": "Resolve",
760
- "event": "RESOLVE"
761
- },
762
- {
763
- "label": "Suspend",
764
- "icon": "ban",
765
- "variant": "danger",
766
- "event": "SUSPEND"
767
- }
768
- ],
769
- "entity": "@payload.data"
770
- },
771
- {
772
- "width": "md",
773
- "position": "right",
774
- "children": [
775
- {
776
- "type": "stack",
777
- "direction": "vertical",
778
- "children": [
779
- {
780
- "type": "typography",
781
- "variant": "caption",
782
- "color": "muted",
783
- "content": "Selected case"
784
- },
785
- {
786
- "variant": "body",
787
- "type": "typography",
788
- "content": "Use the grid actions to escalate, resolve, or suspend."
789
- }
790
- ],
791
- "gap": "sm"
449
+ "variant": "badge",
450
+ "name": "status"
792
451
  }
793
452
  ],
794
- "isOpen": false,
795
- "title": "Case detail",
796
- "type": "drawer"
453
+ "entity": "@payload.data",
454
+ "cols": 1.0
797
455
  }
798
- ]
456
+ ],
457
+ "gap": "md"
799
458
  }
800
459
  ]
801
460
  ]
@@ -809,51 +468,42 @@
809
468
  "render-ui",
810
469
  "main",
811
470
  {
812
- "message": "@payload.error",
813
471
  "type": "alert",
814
- "variant": "error"
472
+ "variant": "error",
473
+ "message": "@payload.error"
815
474
  }
816
475
  ]
817
476
  ]
818
477
  },
819
478
  {
820
479
  "from": "browsing",
821
- "to": "escalating",
822
- "event": "ESCALATE",
480
+ "to": "viewing_single",
481
+ "event": "OPEN_CASE",
823
482
  "effects": [
824
483
  [
825
484
  "set",
826
485
  "@entity.id",
827
- "@payload.id"
486
+ "@payload.row.id"
487
+ ],
488
+ [
489
+ "set",
490
+ "@entity.subscriptionId",
491
+ "@payload.row.subscriptionId"
492
+ ],
493
+ [
494
+ "set",
495
+ "@entity.customerId",
496
+ "@payload.row.customerId"
828
497
  ],
829
498
  [
830
499
  "set",
831
500
  "@entity.severity",
832
- [
833
- "cond",
834
- [
835
- "=",
836
- "@payload.row.severity",
837
- "soft"
838
- ],
839
- "urgent",
840
- [
841
- "=",
842
- "@payload.row.severity",
843
- "urgent"
844
- ],
845
- "final",
846
- "final"
847
- ]
501
+ "@payload.row.severity"
848
502
  ],
849
503
  [
850
504
  "set",
851
505
  "@entity.attemptNumber",
852
- [
853
- "+",
854
- "@payload.row.attemptNumber",
855
- 1.0
856
- ]
506
+ "@payload.row.attemptNumber"
857
507
  ],
858
508
  [
859
509
  "set",
@@ -881,34 +531,215 @@
881
531
  "@payload.row.currency"
882
532
  ],
883
533
  [
884
- "render-ui",
885
- "main",
886
- {
887
- "type": "alert",
888
- "message": "Attempt @entity.attemptNumber of @entity.attemptsTotal — amount @entity.amountDue @entity.currency. Next retry @entity.nextRetryAt.",
889
- "variant": "warning",
890
- "title": "Payment failed",
891
- "dismissible": false
892
- }
534
+ "set",
535
+ "@entity.resolvedAt",
536
+ "@payload.row.resolvedAt"
893
537
  ],
894
538
  [
895
- "persist",
896
- "update",
897
- "DunningCase",
898
- "@entity",
539
+ "set",
540
+ "@entity.status",
541
+ "@payload.row.status"
542
+ ],
543
+ [
544
+ "render-ui",
545
+ "main",
899
546
  {
900
- "emit": {
901
- "success": "DunningCaseUpdated",
902
- "failure": "DunningCaseUpdateFailed"
903
- }
547
+ "children": [
548
+ {
549
+ "type": "stack",
550
+ "align": "center",
551
+ "children": [
552
+ {
553
+ "type": "button",
554
+ "label": "Back",
555
+ "action": "CLOSE_VIEW",
556
+ "variant": "ghost"
557
+ },
558
+ {
559
+ "type": "icon",
560
+ "name": "alert-triangle"
561
+ },
562
+ {
563
+ "content": "@entity.subscriptionId",
564
+ "variant": "h3",
565
+ "type": "typography"
566
+ },
567
+ {
568
+ "label": "@entity.severity",
569
+ "type": "badge",
570
+ "variant": "primary"
571
+ },
572
+ {
573
+ "label": "@entity.status",
574
+ "type": "badge",
575
+ "variant": "default"
576
+ }
577
+ ],
578
+ "direction": "horizontal",
579
+ "gap": "sm"
580
+ },
581
+ {
582
+ "type": "divider"
583
+ },
584
+ {
585
+ "type": "stack",
586
+ "direction": "vertical",
587
+ "children": [
588
+ {
589
+ "gap": "md",
590
+ "direction": "horizontal",
591
+ "children": [
592
+ {
593
+ "content": "Customer",
594
+ "variant": "caption",
595
+ "type": "typography",
596
+ "color": "muted"
597
+ },
598
+ {
599
+ "content": "@entity.customerId",
600
+ "variant": "body",
601
+ "type": "typography"
602
+ }
603
+ ],
604
+ "type": "stack"
605
+ },
606
+ {
607
+ "children": [
608
+ {
609
+ "variant": "caption",
610
+ "color": "muted",
611
+ "type": "typography",
612
+ "content": "Currency"
613
+ },
614
+ {
615
+ "type": "typography",
616
+ "variant": "body",
617
+ "content": "@entity.currency"
618
+ }
619
+ ],
620
+ "type": "stack",
621
+ "direction": "horizontal",
622
+ "gap": "md"
623
+ },
624
+ {
625
+ "children": [
626
+ {
627
+ "variant": "caption",
628
+ "color": "muted",
629
+ "type": "typography",
630
+ "content": "Failed at"
631
+ },
632
+ {
633
+ "type": "typography",
634
+ "content": "@entity.failedAt",
635
+ "variant": "body"
636
+ }
637
+ ],
638
+ "direction": "horizontal",
639
+ "gap": "md",
640
+ "type": "stack"
641
+ },
642
+ {
643
+ "children": [
644
+ {
645
+ "variant": "caption",
646
+ "content": "Next retry",
647
+ "type": "typography",
648
+ "color": "muted"
649
+ },
650
+ {
651
+ "variant": "body",
652
+ "content": "@entity.nextRetryAt",
653
+ "type": "typography"
654
+ }
655
+ ],
656
+ "direction": "horizontal",
657
+ "type": "stack",
658
+ "gap": "md"
659
+ }
660
+ ],
661
+ "gap": "sm"
662
+ },
663
+ {
664
+ "type": "divider"
665
+ },
666
+ {
667
+ "cols": 4.0,
668
+ "type": "simple-grid",
669
+ "children": [
670
+ {
671
+ "value": "@entity.amountDue",
672
+ "label": "Amount due",
673
+ "icon": "dollar-sign",
674
+ "type": "stat-display"
675
+ },
676
+ {
677
+ "type": "stat-display",
678
+ "label": "Attempt",
679
+ "icon": "repeat",
680
+ "value": "@entity.attemptNumber"
681
+ },
682
+ {
683
+ "type": "stat-display",
684
+ "label": "Total attempts",
685
+ "icon": "list",
686
+ "value": "@entity.attemptsTotal"
687
+ },
688
+ {
689
+ "label": "Resolved at",
690
+ "type": "stat-display",
691
+ "value": "@entity.resolvedAt",
692
+ "icon": "check-circle"
693
+ }
694
+ ]
695
+ },
696
+ {
697
+ "gap": "sm",
698
+ "direction": "horizontal",
699
+ "align": "center",
700
+ "type": "stack",
701
+ "children": [
702
+ {
703
+ "action": "ESCALATE",
704
+ "variant": "primary",
705
+ "label": "Escalate",
706
+ "type": "button",
707
+ "actionPayload": {
708
+ "id": "@entity.id"
709
+ }
710
+ },
711
+ {
712
+ "type": "button",
713
+ "label": "Resolve",
714
+ "action": "RESOLVE",
715
+ "actionPayload": {
716
+ "id": "@entity.id"
717
+ },
718
+ "variant": "secondary"
719
+ },
720
+ {
721
+ "label": "Suspend",
722
+ "variant": "danger",
723
+ "action": "SUSPEND",
724
+ "actionPayload": {
725
+ "id": "@entity.id"
726
+ },
727
+ "type": "button"
728
+ }
729
+ ]
730
+ }
731
+ ],
732
+ "gap": "md",
733
+ "direction": "vertical",
734
+ "type": "stack"
904
735
  }
905
736
  ]
906
737
  ]
907
738
  },
908
739
  {
909
740
  "from": "browsing",
910
- "to": "escalating",
911
- "event": "RESOLVE",
741
+ "to": "loading",
742
+ "event": "SUSPEND",
912
743
  "effects": [
913
744
  [
914
745
  "set",
@@ -916,28 +747,82 @@
916
747
  "@payload.id"
917
748
  ],
918
749
  [
919
- "set",
920
- "@entity.status",
921
- "resolved"
750
+ "fetch",
751
+ "DunningCase",
752
+ {
753
+ "emit": {
754
+ "failure": "DunningCaseLoadFailed",
755
+ "success": "DunningCaseLoaded"
756
+ }
757
+ }
922
758
  ],
923
759
  [
924
- "persist",
925
- "update",
760
+ "render-ui",
761
+ "main",
762
+ {
763
+ "align": "center",
764
+ "direction": "vertical",
765
+ "className": "py-12",
766
+ "children": [
767
+ {
768
+ "type": "spinner"
769
+ },
770
+ {
771
+ "variant": "caption",
772
+ "type": "typography",
773
+ "color": "muted",
774
+ "content": "Suspending service…"
775
+ }
776
+ ],
777
+ "type": "stack",
778
+ "gap": "md"
779
+ }
780
+ ]
781
+ ]
782
+ },
783
+ {
784
+ "from": "viewing_single",
785
+ "to": "loading",
786
+ "event": "CLOSE_VIEW",
787
+ "effects": [
788
+ [
789
+ "fetch",
926
790
  "DunningCase",
927
- "@entity",
928
791
  {
929
792
  "emit": {
930
- "failure": "DunningCaseUpdateFailed",
931
- "success": "DunningCaseUpdated"
793
+ "failure": "DunningCaseLoadFailed",
794
+ "success": "DunningCaseLoaded"
932
795
  }
933
796
  }
797
+ ],
798
+ [
799
+ "render-ui",
800
+ "main",
801
+ {
802
+ "align": "center",
803
+ "direction": "vertical",
804
+ "type": "stack",
805
+ "children": [
806
+ {
807
+ "type": "spinner"
808
+ },
809
+ {
810
+ "content": "Loading dunning cases…",
811
+ "color": "muted",
812
+ "variant": "caption",
813
+ "type": "typography"
814
+ }
815
+ ],
816
+ "className": "py-12",
817
+ "gap": "md"
818
+ }
934
819
  ]
935
820
  ]
936
821
  },
937
822
  {
938
- "from": "browsing",
939
- "to": "escalating",
940
- "event": "SUSPEND",
823
+ "from": "viewing_single",
824
+ "to": "loading",
825
+ "event": "ESCALATE",
941
826
  "effects": [
942
827
  [
943
828
  "set",
@@ -945,29 +830,49 @@
945
830
  "@payload.id"
946
831
  ],
947
832
  [
948
- "set",
949
- "@entity.status",
950
- "suspended"
951
- ],
952
- [
953
- "persist",
954
- "update",
833
+ "fetch",
955
834
  "DunningCase",
956
- "@entity",
957
835
  {
958
836
  "emit": {
959
- "success": "ServiceSuspended",
960
- "failure": "DunningCaseUpdateFailed"
837
+ "failure": "DunningCaseLoadFailed",
838
+ "success": "DunningCaseLoaded"
961
839
  }
962
840
  }
841
+ ],
842
+ [
843
+ "render-ui",
844
+ "main",
845
+ {
846
+ "type": "stack",
847
+ "direction": "vertical",
848
+ "align": "center",
849
+ "className": "py-12",
850
+ "children": [
851
+ {
852
+ "type": "spinner"
853
+ },
854
+ {
855
+ "type": "typography",
856
+ "variant": "caption",
857
+ "color": "muted",
858
+ "content": "Escalating case…"
859
+ }
860
+ ],
861
+ "gap": "md"
862
+ }
963
863
  ]
964
864
  ]
965
865
  },
966
866
  {
967
- "from": "escalating",
867
+ "from": "viewing_single",
968
868
  "to": "loading",
969
- "event": "DunningCaseUpdated",
869
+ "event": "RESOLVE",
970
870
  "effects": [
871
+ [
872
+ "set",
873
+ "@entity.id",
874
+ "@payload.id"
875
+ ],
971
876
  [
972
877
  "fetch",
973
878
  "DunningCase",
@@ -977,38 +882,71 @@
977
882
  "failure": "DunningCaseLoadFailed"
978
883
  }
979
884
  }
885
+ ],
886
+ [
887
+ "render-ui",
888
+ "main",
889
+ {
890
+ "children": [
891
+ {
892
+ "type": "spinner"
893
+ },
894
+ {
895
+ "variant": "caption",
896
+ "content": "Resolving case…",
897
+ "color": "muted",
898
+ "type": "typography"
899
+ }
900
+ ],
901
+ "direction": "vertical",
902
+ "gap": "md",
903
+ "align": "center",
904
+ "className": "py-12",
905
+ "type": "stack"
906
+ }
980
907
  ]
981
908
  ]
982
909
  },
983
910
  {
984
- "from": "escalating",
911
+ "from": "viewing_single",
985
912
  "to": "loading",
986
- "event": "ServiceSuspended",
913
+ "event": "SUSPEND",
987
914
  "effects": [
915
+ [
916
+ "set",
917
+ "@entity.id",
918
+ "@payload.id"
919
+ ],
988
920
  [
989
921
  "fetch",
990
922
  "DunningCase",
991
923
  {
992
924
  "emit": {
993
- "success": "DunningCaseLoaded",
994
- "failure": "DunningCaseLoadFailed"
925
+ "failure": "DunningCaseLoadFailed",
926
+ "success": "DunningCaseLoaded"
995
927
  }
996
928
  }
997
- ]
998
- ]
999
- },
1000
- {
1001
- "from": "escalating",
1002
- "to": "browsing",
1003
- "event": "DunningCaseUpdateFailed",
1004
- "effects": [
929
+ ],
1005
930
  [
1006
931
  "render-ui",
1007
932
  "main",
1008
933
  {
1009
- "variant": "error",
1010
- "type": "alert",
1011
- "message": "@payload.error"
934
+ "children": [
935
+ {
936
+ "type": "spinner"
937
+ },
938
+ {
939
+ "type": "typography",
940
+ "color": "muted",
941
+ "content": "Suspending service…",
942
+ "variant": "caption"
943
+ }
944
+ ],
945
+ "type": "stack",
946
+ "className": "py-12",
947
+ "gap": "md",
948
+ "direction": "vertical",
949
+ "align": "center"
1012
950
  }
1013
951
  ]
1014
952
  ]
@@ -1023,8 +961,8 @@
1023
961
  "DunningCase",
1024
962
  {
1025
963
  "emit": {
1026
- "success": "DunningCaseLoaded",
1027
- "failure": "DunningCaseLoadFailed"
964
+ "failure": "DunningCaseLoadFailed",
965
+ "success": "DunningCaseLoaded"
1028
966
  }
1029
967
  }
1030
968
  ],
@@ -1032,8 +970,8 @@
1032
970
  "render-ui",
1033
971
  "main",
1034
972
  {
1035
- "size": "sm",
1036
- "type": "spinner"
973
+ "type": "spinner",
974
+ "size": "sm"
1037
975
  }
1038
976
  ]
1039
977
  ]