@almadar/std 15.15.0 → 15.15.1

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 (273) hide show
  1. package/behaviors/registry/app/atoms/std-ap-bill.orb +423 -171
  2. package/behaviors/registry/app/atoms/std-applicant.orb +207 -165
  3. package/behaviors/registry/app/atoms/std-application.orb +300 -188
  4. package/behaviors/registry/app/atoms/std-approval-request.orb +370 -215
  5. package/behaviors/registry/app/atoms/std-campaign-goal.orb +382 -167
  6. package/behaviors/registry/app/atoms/std-change-order.orb +458 -194
  7. package/behaviors/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  8. package/behaviors/registry/app/atoms/std-checkin.orb +215 -151
  9. package/behaviors/registry/app/atoms/std-checkout-terminal.orb +322 -133
  10. package/behaviors/registry/app/atoms/std-class-roster.orb +343 -170
  11. package/behaviors/registry/app/atoms/std-class-session.orb +321 -190
  12. package/behaviors/registry/app/atoms/std-court-deadline.orb +353 -182
  13. package/behaviors/registry/app/atoms/std-customer-account.orb +376 -157
  14. package/behaviors/registry/app/atoms/std-donation-receipt.orb +214 -143
  15. package/behaviors/registry/app/atoms/std-donor.orb +191 -156
  16. package/behaviors/registry/app/atoms/std-drip-sequence.orb +409 -170
  17. package/behaviors/registry/app/atoms/std-driver.orb +440 -202
  18. package/behaviors/registry/app/atoms/std-dunning.orb +431 -167
  19. package/behaviors/registry/app/atoms/std-email-broadcast.orb +386 -143
  20. package/behaviors/registry/app/atoms/std-event.orb +309 -178
  21. package/behaviors/registry/app/atoms/std-form-builder.orb +353 -220
  22. package/behaviors/registry/app/atoms/std-health-score.orb +218 -183
  23. package/behaviors/registry/app/atoms/std-help-article.orb +425 -162
  24. package/behaviors/registry/app/atoms/std-help-category.orb +409 -166
  25. package/behaviors/registry/app/atoms/std-interview-slot.orb +311 -138
  26. package/behaviors/registry/app/atoms/std-invoice.orb +349 -211
  27. package/behaviors/registry/app/atoms/std-kitchen-display.orb +308 -184
  28. package/behaviors/registry/app/atoms/std-lease.orb +411 -178
  29. package/behaviors/registry/app/atoms/std-ledger-entry.orb +266 -195
  30. package/behaviors/registry/app/atoms/std-maintenance-request.orb +396 -177
  31. package/behaviors/registry/app/atoms/std-matter.orb +415 -189
  32. package/behaviors/registry/app/atoms/std-membership.orb +387 -167
  33. package/behaviors/registry/app/atoms/std-menu.orb +232 -175
  34. package/behaviors/registry/app/atoms/std-modifier-group.orb +224 -167
  35. package/behaviors/registry/app/atoms/std-nps-survey.orb +390 -138
  36. package/behaviors/registry/app/atoms/std-offer-letter.orb +242 -133
  37. package/behaviors/registry/app/atoms/std-payout-ledger.orb +428 -176
  38. package/behaviors/registry/app/atoms/std-question-bank.orb +211 -145
  39. package/behaviors/registry/app/atoms/std-receipt.orb +248 -177
  40. package/behaviors/registry/app/atoms/std-recurring-charge.orb +421 -149
  41. package/behaviors/registry/app/atoms/std-renewal-risk.orb +382 -153
  42. package/behaviors/registry/app/atoms/std-rent-charge.orb +476 -176
  43. package/behaviors/registry/app/atoms/std-reorder-rule.orb +246 -176
  44. package/behaviors/registry/app/atoms/std-response-collector.orb +213 -150
  45. package/behaviors/registry/app/atoms/std-rfi.orb +365 -210
  46. package/behaviors/registry/app/atoms/std-route-optimize.orb +195 -146
  47. package/behaviors/registry/app/atoms/std-segment.orb +173 -139
  48. package/behaviors/registry/app/atoms/std-stock-level.orb +205 -135
  49. package/behaviors/registry/app/atoms/std-submittal.orb +323 -166
  50. package/behaviors/registry/app/atoms/std-table-map.orb +187 -63
  51. package/behaviors/registry/app/atoms/std-technician-dispatch.orb +290 -202
  52. package/behaviors/registry/app/atoms/std-telematics-event.orb +156 -128
  53. package/behaviors/registry/app/atoms/std-template-editor.orb +255 -189
  54. package/behaviors/registry/app/atoms/std-tenant.orb +375 -147
  55. package/behaviors/registry/app/atoms/std-ticket-tier.orb +463 -150
  56. package/behaviors/registry/app/atoms/std-time-entry.orb +259 -150
  57. package/behaviors/registry/app/atoms/std-timesheet.orb +292 -183
  58. package/behaviors/registry/app/atoms/std-trial.orb +401 -183
  59. package/behaviors/registry/app/atoms/std-vehicle.orb +447 -205
  60. package/behaviors/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  61. package/behaviors/registry/app/atoms/std-waitlist.orb +308 -177
  62. package/behaviors/registry/app/atoms/std-warehouse.orb +211 -141
  63. package/behaviors/registry/app/atoms/std-work-order.orb +374 -219
  64. package/behaviors/registry/app/organisms/std-subscription-billing.orb +282 -195
  65. package/behaviors/registry/core/atoms/std-approval-gate.orb +703 -0
  66. package/behaviors/registry/core/atoms/std-audit-capture.orb +150 -64
  67. package/behaviors/registry/core/atoms/std-data-erasure.orb +546 -0
  68. package/behaviors/registry/core/atoms/std-lifecycle.orb +343 -0
  69. package/behaviors/registry/core/atoms/std-notify-on-event.orb +132 -46
  70. package/behaviors/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  71. package/behaviors/registry/marketing/atoms/std-marketing-article.orb +96 -0
  72. package/behaviors/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  73. package/behaviors/registry/marketing/atoms/std-marketing-community.orb +134 -0
  74. package/behaviors/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  75. package/behaviors/registry/marketing/atoms/std-marketing-features.orb +193 -0
  76. package/behaviors/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  77. package/behaviors/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  78. package/behaviors/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  79. package/behaviors/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  80. package/behaviors/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  81. package/behaviors/registry/marketing/atoms/std-marketing-split.orb +135 -0
  82. package/behaviors/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  83. package/behaviors/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  84. package/behaviors/registry/marketing/atoms/std-marketing-team.orb +192 -0
  85. package/behaviors/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  86. package/behaviors/registry/marketing/molecules/std-about-page.orb +440 -0
  87. package/behaviors/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  88. package/behaviors/registry/marketing/molecules/std-landing-page.orb +521 -0
  89. package/behaviors/registry/marketing/molecules/std-pricing-page.orb +406 -0
  90. package/behaviors/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  91. package/dist/behaviors/behaviors-registry.json +2913 -156
  92. package/dist/behaviors/registry/app/atoms/std-ap-bill.orb +423 -171
  93. package/dist/behaviors/registry/app/atoms/std-applicant.orb +207 -165
  94. package/dist/behaviors/registry/app/atoms/std-application.orb +300 -188
  95. package/dist/behaviors/registry/app/atoms/std-approval-request.orb +370 -215
  96. package/dist/behaviors/registry/app/atoms/std-campaign-goal.orb +382 -167
  97. package/dist/behaviors/registry/app/atoms/std-change-order.orb +458 -194
  98. package/dist/behaviors/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  99. package/dist/behaviors/registry/app/atoms/std-checkin.orb +215 -151
  100. package/dist/behaviors/registry/app/atoms/std-checkout-terminal.orb +322 -133
  101. package/dist/behaviors/registry/app/atoms/std-class-roster.orb +343 -170
  102. package/dist/behaviors/registry/app/atoms/std-class-session.orb +321 -190
  103. package/dist/behaviors/registry/app/atoms/std-court-deadline.orb +353 -182
  104. package/dist/behaviors/registry/app/atoms/std-customer-account.orb +376 -157
  105. package/dist/behaviors/registry/app/atoms/std-donation-receipt.orb +214 -143
  106. package/dist/behaviors/registry/app/atoms/std-donor.orb +191 -156
  107. package/dist/behaviors/registry/app/atoms/std-drip-sequence.orb +409 -170
  108. package/dist/behaviors/registry/app/atoms/std-driver.orb +440 -202
  109. package/dist/behaviors/registry/app/atoms/std-dunning.orb +431 -167
  110. package/dist/behaviors/registry/app/atoms/std-email-broadcast.orb +386 -143
  111. package/dist/behaviors/registry/app/atoms/std-event.orb +309 -178
  112. package/dist/behaviors/registry/app/atoms/std-form-builder.orb +353 -220
  113. package/dist/behaviors/registry/app/atoms/std-health-score.orb +218 -183
  114. package/dist/behaviors/registry/app/atoms/std-help-article.orb +425 -162
  115. package/dist/behaviors/registry/app/atoms/std-help-category.orb +409 -166
  116. package/dist/behaviors/registry/app/atoms/std-interview-slot.orb +311 -138
  117. package/dist/behaviors/registry/app/atoms/std-invoice.orb +349 -211
  118. package/dist/behaviors/registry/app/atoms/std-kitchen-display.orb +308 -184
  119. package/dist/behaviors/registry/app/atoms/std-lease.orb +411 -178
  120. package/dist/behaviors/registry/app/atoms/std-ledger-entry.orb +266 -195
  121. package/dist/behaviors/registry/app/atoms/std-maintenance-request.orb +396 -177
  122. package/dist/behaviors/registry/app/atoms/std-matter.orb +415 -189
  123. package/dist/behaviors/registry/app/atoms/std-membership.orb +387 -167
  124. package/dist/behaviors/registry/app/atoms/std-menu.orb +232 -175
  125. package/dist/behaviors/registry/app/atoms/std-modifier-group.orb +224 -167
  126. package/dist/behaviors/registry/app/atoms/std-nps-survey.orb +390 -138
  127. package/dist/behaviors/registry/app/atoms/std-offer-letter.orb +242 -133
  128. package/dist/behaviors/registry/app/atoms/std-payout-ledger.orb +428 -176
  129. package/dist/behaviors/registry/app/atoms/std-question-bank.orb +211 -145
  130. package/dist/behaviors/registry/app/atoms/std-receipt.orb +248 -177
  131. package/dist/behaviors/registry/app/atoms/std-recurring-charge.orb +421 -149
  132. package/dist/behaviors/registry/app/atoms/std-renewal-risk.orb +382 -153
  133. package/dist/behaviors/registry/app/atoms/std-rent-charge.orb +476 -176
  134. package/dist/behaviors/registry/app/atoms/std-reorder-rule.orb +246 -176
  135. package/dist/behaviors/registry/app/atoms/std-response-collector.orb +213 -150
  136. package/dist/behaviors/registry/app/atoms/std-rfi.orb +365 -210
  137. package/dist/behaviors/registry/app/atoms/std-route-optimize.orb +195 -146
  138. package/dist/behaviors/registry/app/atoms/std-segment.orb +173 -139
  139. package/dist/behaviors/registry/app/atoms/std-stock-level.orb +205 -135
  140. package/dist/behaviors/registry/app/atoms/std-submittal.orb +323 -166
  141. package/dist/behaviors/registry/app/atoms/std-table-map.orb +187 -63
  142. package/dist/behaviors/registry/app/atoms/std-technician-dispatch.orb +290 -202
  143. package/dist/behaviors/registry/app/atoms/std-telematics-event.orb +156 -128
  144. package/dist/behaviors/registry/app/atoms/std-template-editor.orb +255 -189
  145. package/dist/behaviors/registry/app/atoms/std-tenant.orb +375 -147
  146. package/dist/behaviors/registry/app/atoms/std-ticket-tier.orb +463 -150
  147. package/dist/behaviors/registry/app/atoms/std-time-entry.orb +259 -150
  148. package/dist/behaviors/registry/app/atoms/std-timesheet.orb +292 -183
  149. package/dist/behaviors/registry/app/atoms/std-trial.orb +401 -183
  150. package/dist/behaviors/registry/app/atoms/std-vehicle.orb +447 -205
  151. package/dist/behaviors/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  152. package/dist/behaviors/registry/app/atoms/std-waitlist.orb +308 -177
  153. package/dist/behaviors/registry/app/atoms/std-warehouse.orb +211 -141
  154. package/dist/behaviors/registry/app/atoms/std-work-order.orb +374 -219
  155. package/dist/behaviors/registry/app/organisms/std-subscription-billing.orb +282 -195
  156. package/dist/behaviors/registry/core/atoms/std-approval-gate.orb +703 -0
  157. package/dist/behaviors/registry/core/atoms/std-audit-capture.orb +150 -64
  158. package/dist/behaviors/registry/core/atoms/std-data-erasure.orb +546 -0
  159. package/dist/behaviors/registry/core/atoms/std-lifecycle.orb +343 -0
  160. package/dist/behaviors/registry/core/atoms/std-notify-on-event.orb +132 -46
  161. package/dist/behaviors/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  162. package/dist/behaviors/registry/marketing/atoms/std-marketing-article.orb +96 -0
  163. package/dist/behaviors/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  164. package/dist/behaviors/registry/marketing/atoms/std-marketing-community.orb +134 -0
  165. package/dist/behaviors/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  166. package/dist/behaviors/registry/marketing/atoms/std-marketing-features.orb +193 -0
  167. package/dist/behaviors/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  168. package/dist/behaviors/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  169. package/dist/behaviors/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  170. package/dist/behaviors/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  171. package/dist/behaviors/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  172. package/dist/behaviors/registry/marketing/atoms/std-marketing-split.orb +135 -0
  173. package/dist/behaviors/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  174. package/dist/behaviors/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  175. package/dist/behaviors/registry/marketing/atoms/std-marketing-team.orb +192 -0
  176. package/dist/behaviors/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  177. package/dist/behaviors/registry/marketing/molecules/std-about-page.orb +440 -0
  178. package/dist/behaviors/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  179. package/dist/behaviors/registry/marketing/molecules/std-landing-page.orb +521 -0
  180. package/dist/behaviors/registry/marketing/molecules/std-pricing-page.orb +406 -0
  181. package/dist/behaviors/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  182. package/dist/behaviors-registry.json +2913 -156
  183. package/dist/registry/app/atoms/std-ap-bill.orb +423 -171
  184. package/dist/registry/app/atoms/std-applicant.orb +207 -165
  185. package/dist/registry/app/atoms/std-application.orb +300 -188
  186. package/dist/registry/app/atoms/std-approval-request.orb +370 -215
  187. package/dist/registry/app/atoms/std-campaign-goal.orb +382 -167
  188. package/dist/registry/app/atoms/std-change-order.orb +458 -194
  189. package/dist/registry/app/atoms/std-chart-of-accounts.orb +201 -130
  190. package/dist/registry/app/atoms/std-checkin.orb +215 -151
  191. package/dist/registry/app/atoms/std-checkout-terminal.orb +322 -133
  192. package/dist/registry/app/atoms/std-class-roster.orb +343 -170
  193. package/dist/registry/app/atoms/std-class-session.orb +321 -190
  194. package/dist/registry/app/atoms/std-court-deadline.orb +353 -182
  195. package/dist/registry/app/atoms/std-customer-account.orb +376 -157
  196. package/dist/registry/app/atoms/std-donation-receipt.orb +214 -143
  197. package/dist/registry/app/atoms/std-donor.orb +191 -156
  198. package/dist/registry/app/atoms/std-drip-sequence.orb +409 -170
  199. package/dist/registry/app/atoms/std-driver.orb +440 -202
  200. package/dist/registry/app/atoms/std-dunning.orb +431 -167
  201. package/dist/registry/app/atoms/std-email-broadcast.orb +386 -143
  202. package/dist/registry/app/atoms/std-event.orb +309 -178
  203. package/dist/registry/app/atoms/std-form-builder.orb +353 -220
  204. package/dist/registry/app/atoms/std-health-score.orb +218 -183
  205. package/dist/registry/app/atoms/std-help-article.orb +425 -162
  206. package/dist/registry/app/atoms/std-help-category.orb +409 -166
  207. package/dist/registry/app/atoms/std-interview-slot.orb +311 -138
  208. package/dist/registry/app/atoms/std-invoice.orb +349 -211
  209. package/dist/registry/app/atoms/std-kitchen-display.orb +308 -184
  210. package/dist/registry/app/atoms/std-lease.orb +411 -178
  211. package/dist/registry/app/atoms/std-ledger-entry.orb +266 -195
  212. package/dist/registry/app/atoms/std-maintenance-request.orb +396 -177
  213. package/dist/registry/app/atoms/std-matter.orb +415 -189
  214. package/dist/registry/app/atoms/std-membership.orb +387 -167
  215. package/dist/registry/app/atoms/std-menu.orb +232 -175
  216. package/dist/registry/app/atoms/std-modifier-group.orb +224 -167
  217. package/dist/registry/app/atoms/std-nps-survey.orb +390 -138
  218. package/dist/registry/app/atoms/std-offer-letter.orb +242 -133
  219. package/dist/registry/app/atoms/std-payout-ledger.orb +428 -176
  220. package/dist/registry/app/atoms/std-question-bank.orb +211 -145
  221. package/dist/registry/app/atoms/std-receipt.orb +248 -177
  222. package/dist/registry/app/atoms/std-recurring-charge.orb +421 -149
  223. package/dist/registry/app/atoms/std-renewal-risk.orb +382 -153
  224. package/dist/registry/app/atoms/std-rent-charge.orb +476 -176
  225. package/dist/registry/app/atoms/std-reorder-rule.orb +246 -176
  226. package/dist/registry/app/atoms/std-response-collector.orb +213 -150
  227. package/dist/registry/app/atoms/std-rfi.orb +365 -210
  228. package/dist/registry/app/atoms/std-route-optimize.orb +195 -146
  229. package/dist/registry/app/atoms/std-segment.orb +173 -139
  230. package/dist/registry/app/atoms/std-stock-level.orb +205 -135
  231. package/dist/registry/app/atoms/std-submittal.orb +323 -166
  232. package/dist/registry/app/atoms/std-table-map.orb +187 -63
  233. package/dist/registry/app/atoms/std-technician-dispatch.orb +290 -202
  234. package/dist/registry/app/atoms/std-telematics-event.orb +156 -128
  235. package/dist/registry/app/atoms/std-template-editor.orb +255 -189
  236. package/dist/registry/app/atoms/std-tenant.orb +375 -147
  237. package/dist/registry/app/atoms/std-ticket-tier.orb +463 -150
  238. package/dist/registry/app/atoms/std-time-entry.orb +259 -150
  239. package/dist/registry/app/atoms/std-timesheet.orb +292 -183
  240. package/dist/registry/app/atoms/std-trial.orb +401 -183
  241. package/dist/registry/app/atoms/std-vehicle.orb +447 -205
  242. package/dist/registry/app/atoms/std-vendor-onboarding.orb +289 -245
  243. package/dist/registry/app/atoms/std-waitlist.orb +308 -177
  244. package/dist/registry/app/atoms/std-warehouse.orb +211 -141
  245. package/dist/registry/app/atoms/std-work-order.orb +374 -219
  246. package/dist/registry/app/organisms/std-subscription-billing.orb +282 -195
  247. package/dist/registry/core/atoms/std-approval-gate.orb +703 -0
  248. package/dist/registry/core/atoms/std-audit-capture.orb +150 -64
  249. package/dist/registry/core/atoms/std-data-erasure.orb +546 -0
  250. package/dist/registry/core/atoms/std-lifecycle.orb +343 -0
  251. package/dist/registry/core/atoms/std-notify-on-event.orb +132 -46
  252. package/dist/registry/core/atoms/std-reminder-scheduler.orb +330 -0
  253. package/dist/registry/marketing/atoms/std-marketing-article.orb +96 -0
  254. package/dist/registry/marketing/atoms/std-marketing-case-studies.orb +243 -0
  255. package/dist/registry/marketing/atoms/std-marketing-community.orb +134 -0
  256. package/dist/registry/marketing/atoms/std-marketing-cta.orb +206 -0
  257. package/dist/registry/marketing/atoms/std-marketing-features.orb +193 -0
  258. package/dist/registry/marketing/atoms/std-marketing-footer.orb +192 -0
  259. package/dist/registry/marketing/atoms/std-marketing-hero.orb +262 -0
  260. package/dist/registry/marketing/atoms/std-marketing-nav.orb +190 -0
  261. package/dist/registry/marketing/atoms/std-marketing-pricing.orb +232 -0
  262. package/dist/registry/marketing/atoms/std-marketing-showcase.orb +276 -0
  263. package/dist/registry/marketing/atoms/std-marketing-split.orb +135 -0
  264. package/dist/registry/marketing/atoms/std-marketing-stats.orb +120 -0
  265. package/dist/registry/marketing/atoms/std-marketing-steps.orb +179 -0
  266. package/dist/registry/marketing/atoms/std-marketing-team.orb +192 -0
  267. package/dist/registry/marketing/atoms/std-marketing-testimonials.orb +124 -0
  268. package/dist/registry/marketing/molecules/std-about-page.orb +440 -0
  269. package/dist/registry/marketing/molecules/std-feature-detail-page.orb +371 -0
  270. package/dist/registry/marketing/molecules/std-landing-page.orb +521 -0
  271. package/dist/registry/marketing/molecules/std-pricing-page.orb +406 -0
  272. package/dist/registry/marketing/organisms/std-marketing-site.orb +1654 -0
  273. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "std-dunning",
3
- "version": "1.1.0",
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. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-dunning — failed-payment escalation ladder. Lists / escalates / resolves / suspends dunning cases. Listens for SET_STATUS so std-lifecycle can drive automated transitions. Exposes Financial-pattern knobs.",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "DunningCaseOrbital",
@@ -199,6 +199,75 @@
199
199
  "type": "string"
200
200
  }
201
201
  ]
202
+ },
203
+ {
204
+ "event": "DunningCaseUpdated",
205
+ "payloadSchema": [
206
+ {
207
+ "name": "row.id",
208
+ "type": "string",
209
+ "required": true
210
+ },
211
+ {
212
+ "name": "row.subscriptionId",
213
+ "type": "string",
214
+ "required": true
215
+ },
216
+ {
217
+ "name": "row.customerId",
218
+ "type": "string",
219
+ "required": true
220
+ },
221
+ {
222
+ "name": "row.severity",
223
+ "type": "string"
224
+ },
225
+ {
226
+ "name": "row.attemptNumber",
227
+ "type": "number"
228
+ },
229
+ {
230
+ "name": "row.attemptsTotal",
231
+ "type": "number"
232
+ },
233
+ {
234
+ "name": "row.failedAt",
235
+ "type": "string"
236
+ },
237
+ {
238
+ "name": "row.nextRetryAt",
239
+ "type": "string"
240
+ },
241
+ {
242
+ "name": "row.amountDue",
243
+ "type": "number"
244
+ },
245
+ {
246
+ "name": "row.currency",
247
+ "type": "string"
248
+ },
249
+ {
250
+ "name": "row.resolvedAt",
251
+ "type": "string"
252
+ },
253
+ {
254
+ "name": "row.status",
255
+ "type": "string"
256
+ }
257
+ ]
258
+ },
259
+ {
260
+ "event": "DunningCaseUpdateFailed",
261
+ "payloadSchema": [
262
+ {
263
+ "name": "error",
264
+ "type": "string"
265
+ },
266
+ {
267
+ "name": "code",
268
+ "type": "string"
269
+ }
270
+ ]
202
271
  }
203
272
  ],
204
273
  "stateMachine": {
@@ -272,6 +341,46 @@
272
341
  }
273
342
  ]
274
343
  },
344
+ {
345
+ "key": "SET_STATUS",
346
+ "name": "Set Status",
347
+ "payloadSchema": [
348
+ {
349
+ "name": "entityId",
350
+ "type": "string",
351
+ "required": true
352
+ },
353
+ {
354
+ "name": "newStatus",
355
+ "type": "string",
356
+ "required": true
357
+ }
358
+ ]
359
+ },
360
+ {
361
+ "key": "DunningCaseUpdated",
362
+ "name": "DunningCase updated",
363
+ "payloadSchema": [
364
+ {
365
+ "name": "row",
366
+ "type": "DunningCase"
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "key": "DunningCaseUpdateFailed",
372
+ "name": "DunningCase update failed",
373
+ "payloadSchema": [
374
+ {
375
+ "name": "error",
376
+ "type": "string"
377
+ },
378
+ {
379
+ "name": "code",
380
+ "type": "string"
381
+ }
382
+ ]
383
+ },
275
384
  {
276
385
  "key": "CLOSE_VIEW",
277
386
  "name": "Close View"
@@ -319,22 +428,22 @@
319
428
  "render-ui",
320
429
  "main",
321
430
  {
322
- "type": "stack",
323
- "align": "center",
324
- "className": "py-12",
325
431
  "children": [
326
432
  {
327
433
  "type": "spinner"
328
434
  },
329
435
  {
330
436
  "content": "Loading dunning cases…",
331
- "color": "muted",
332
437
  "variant": "caption",
333
- "type": "typography"
438
+ "type": "typography",
439
+ "color": "muted"
334
440
  }
335
441
  ],
336
442
  "gap": "md",
337
- "direction": "vertical"
443
+ "direction": "vertical",
444
+ "type": "stack",
445
+ "className": "py-12",
446
+ "align": "center"
338
447
  }
339
448
  ]
340
449
  ]
@@ -348,12 +457,11 @@
348
457
  "render-ui",
349
458
  "main",
350
459
  {
460
+ "gap": "md",
351
461
  "type": "stack",
462
+ "direction": "vertical",
352
463
  "children": [
353
464
  {
354
- "align": "center",
355
- "type": "stack",
356
- "direction": "horizontal",
357
465
  "children": [
358
466
  {
359
467
  "name": "alert-triangle",
@@ -361,56 +469,57 @@
361
469
  },
362
470
  {
363
471
  "content": "@config.title",
364
- "variant": "h3",
365
- "type": "typography"
472
+ "type": "typography",
473
+ "variant": "h3"
366
474
  }
367
475
  ],
368
- "gap": "sm"
476
+ "direction": "horizontal",
477
+ "type": "stack",
478
+ "gap": "sm",
479
+ "align": "center"
369
480
  },
370
481
  {
482
+ "type": "simple-grid",
371
483
  "cols": 4.0,
372
484
  "children": [
373
485
  {
374
- "icon": "alert-triangle",
375
- "type": "stat-display",
376
486
  "label": "Open cases",
377
- "value": "@payload.data.length"
487
+ "icon": "alert-triangle",
488
+ "value": "@payload.data.length",
489
+ "type": "stat-display"
378
490
  },
379
491
  {
380
- "icon": "check-circle",
492
+ "label": "Recovered",
381
493
  "value": "18",
382
494
  "type": "stat-display",
383
- "label": "Recovered"
495
+ "icon": "check-circle"
384
496
  },
385
497
  {
386
- "type": "stat-display",
387
- "icon": "ban",
388
498
  "value": "3",
389
- "label": "Suspended"
499
+ "label": "Suspended",
500
+ "type": "stat-display",
501
+ "icon": "ban"
390
502
  },
391
503
  {
392
504
  "type": "stat-display",
393
- "value": "62%",
394
505
  "icon": "trending-up",
506
+ "value": "62%",
395
507
  "label": "Recovery rate"
396
508
  }
397
- ],
398
- "type": "simple-grid"
509
+ ]
399
510
  },
400
511
  {
401
512
  "type": "divider"
402
513
  },
403
514
  {
404
515
  "type": "data-grid",
516
+ "gap": "sm",
405
517
  "entity": "@payload.data",
406
- "fields": "@config.fields",
407
518
  "cols": 1.0,
408
- "gap": "sm",
519
+ "fields": "@config.fields",
409
520
  "itemActions": "@config.itemActions"
410
521
  }
411
- ],
412
- "direction": "vertical",
413
- "gap": "md"
522
+ ]
414
523
  }
415
524
  ]
416
525
  ]
@@ -424,9 +533,9 @@
424
533
  "render-ui",
425
534
  "main",
426
535
  {
427
- "variant": "error",
428
536
  "message": "@payload.error",
429
- "type": "alert"
537
+ "type": "alert",
538
+ "variant": "error"
430
539
  }
431
540
  ]
432
541
  ]
@@ -500,28 +609,23 @@
500
609
  "render-ui",
501
610
  "main",
502
611
  {
503
- "gap": "md",
504
- "type": "stack",
505
612
  "children": [
506
613
  {
507
- "direction": "horizontal",
508
- "gap": "sm",
509
- "type": "stack",
510
614
  "children": [
511
615
  {
616
+ "label": "Back",
512
617
  "variant": "ghost",
513
- "action": "CLOSE_VIEW",
514
618
  "type": "button",
515
- "label": "Back"
619
+ "action": "CLOSE_VIEW"
516
620
  },
517
621
  {
518
- "name": "alert-triangle",
519
- "type": "icon"
622
+ "type": "icon",
623
+ "name": "alert-triangle"
520
624
  },
521
625
  {
626
+ "variant": "h3",
522
627
  "type": "typography",
523
- "content": "@entity.subscriptionId",
524
- "variant": "h3"
628
+ "content": "@entity.subscriptionId"
525
629
  },
526
630
  {
527
631
  "label": "@entity.severity",
@@ -529,61 +633,68 @@
529
633
  "type": "badge"
530
634
  },
531
635
  {
636
+ "type": "badge",
532
637
  "label": "@entity.status",
533
- "variant": "default",
534
- "type": "badge"
638
+ "variant": "default"
535
639
  }
536
640
  ],
641
+ "type": "stack",
642
+ "gap": "sm",
643
+ "direction": "horizontal",
537
644
  "align": "center"
538
645
  },
539
646
  {
540
647
  "type": "divider"
541
648
  },
542
649
  {
650
+ "gap": "sm",
543
651
  "type": "stack",
544
652
  "children": [
545
653
  {
546
- "gap": "md",
547
654
  "direction": "horizontal",
548
655
  "children": [
549
656
  {
550
- "type": "typography",
551
- "color": "muted",
657
+ "variant": "caption",
552
658
  "content": "Customer",
553
- "variant": "caption"
659
+ "color": "muted",
660
+ "type": "typography"
554
661
  },
555
662
  {
556
- "content": "@entity.customerId",
557
663
  "type": "typography",
558
- "variant": "body"
664
+ "variant": "body",
665
+ "content": "@entity.customerId"
559
666
  }
560
667
  ],
668
+ "gap": "md",
561
669
  "type": "stack"
562
670
  },
563
671
  {
564
672
  "type": "stack",
673
+ "gap": "md",
565
674
  "children": [
566
675
  {
567
- "type": "typography",
568
676
  "variant": "caption",
569
- "color": "muted",
570
- "content": "Currency"
677
+ "type": "typography",
678
+ "content": "Currency",
679
+ "color": "muted"
571
680
  },
572
681
  {
573
- "variant": "body",
682
+ "content": "@entity.currency",
574
683
  "type": "typography",
575
- "content": "@entity.currency"
684
+ "variant": "body"
576
685
  }
577
686
  ],
578
- "direction": "horizontal",
579
- "gap": "md"
687
+ "direction": "horizontal"
580
688
  },
581
689
  {
690
+ "type": "stack",
691
+ "direction": "horizontal",
692
+ "gap": "md",
582
693
  "children": [
583
694
  {
584
- "type": "typography",
585
- "color": "muted",
586
695
  "variant": "caption",
696
+ "color": "muted",
697
+ "type": "typography",
587
698
  "content": "Failed at"
588
699
  },
589
700
  {
@@ -591,32 +702,28 @@
591
702
  "content": "@entity.failedAt",
592
703
  "type": "typography"
593
704
  }
594
- ],
595
- "gap": "md",
596
- "type": "stack",
597
- "direction": "horizontal"
705
+ ]
598
706
  },
599
707
  {
600
708
  "children": [
601
709
  {
602
- "content": "Next retry",
603
710
  "variant": "caption",
604
- "color": "muted",
605
- "type": "typography"
711
+ "type": "typography",
712
+ "content": "Next retry",
713
+ "color": "muted"
606
714
  },
607
715
  {
608
716
  "variant": "body",
609
- "type": "typography",
610
- "content": "@entity.nextRetryAt"
717
+ "content": "@entity.nextRetryAt",
718
+ "type": "typography"
611
719
  }
612
720
  ],
613
- "type": "stack",
614
721
  "gap": "md",
722
+ "type": "stack",
615
723
  "direction": "horizontal"
616
724
  }
617
725
  ],
618
- "direction": "vertical",
619
- "gap": "sm"
726
+ "direction": "vertical"
620
727
  },
621
728
  {
622
729
  "type": "divider"
@@ -626,67 +733,69 @@
626
733
  "cols": 4.0,
627
734
  "children": [
628
735
  {
629
- "icon": "dollar-sign",
630
736
  "label": "Amount due",
631
737
  "type": "stat-display",
738
+ "icon": "dollar-sign",
632
739
  "value": "@entity.amountDue"
633
740
  },
634
741
  {
635
- "icon": "repeat",
636
742
  "label": "Attempt",
637
- "value": "@entity.attemptNumber",
638
- "type": "stat-display"
743
+ "type": "stat-display",
744
+ "icon": "repeat",
745
+ "value": "@entity.attemptNumber"
639
746
  },
640
747
  {
641
- "value": "@entity.attemptsTotal",
642
748
  "icon": "list",
749
+ "value": "@entity.attemptsTotal",
643
750
  "type": "stat-display",
644
751
  "label": "Total attempts"
645
752
  },
646
753
  {
754
+ "value": "@entity.resolvedAt",
647
755
  "label": "Resolved at",
648
- "icon": "check-circle",
649
756
  "type": "stat-display",
650
- "value": "@entity.resolvedAt"
757
+ "icon": "check-circle"
651
758
  }
652
759
  ]
653
760
  },
654
761
  {
762
+ "direction": "horizontal",
763
+ "align": "center",
655
764
  "type": "stack",
656
765
  "children": [
657
766
  {
658
- "type": "button",
659
- "label": "Escalate",
660
- "variant": "primary",
661
- "action": "ESCALATE",
662
767
  "actionPayload": {
663
768
  "id": "@entity.id"
664
- }
769
+ },
770
+ "label": "Escalate",
771
+ "variant": "primary",
772
+ "type": "button",
773
+ "action": "ESCALATE"
665
774
  },
666
775
  {
776
+ "action": "RESOLVE",
667
777
  "variant": "secondary",
778
+ "type": "button",
779
+ "label": "Resolve",
668
780
  "actionPayload": {
669
781
  "id": "@entity.id"
670
- },
671
- "type": "button",
672
- "action": "RESOLVE",
673
- "label": "Resolve"
782
+ }
674
783
  },
675
784
  {
676
- "label": "Suspend",
677
- "variant": "danger",
678
785
  "actionPayload": {
679
786
  "id": "@entity.id"
680
787
  },
788
+ "label": "Suspend",
681
789
  "type": "button",
790
+ "variant": "danger",
682
791
  "action": "SUSPEND"
683
792
  }
684
793
  ],
685
- "direction": "horizontal",
686
- "align": "center",
687
794
  "gap": "sm"
688
795
  }
689
796
  ],
797
+ "type": "stack",
798
+ "gap": "md",
690
799
  "direction": "vertical"
691
800
  }
692
801
  ]
@@ -707,8 +816,8 @@
707
816
  "DunningCase",
708
817
  {
709
818
  "emit": {
710
- "success": "DunningCaseLoaded",
711
- "failure": "DunningCaseLoadFailed"
819
+ "failure": "DunningCaseLoadFailed",
820
+ "success": "DunningCaseLoaded"
712
821
  }
713
822
  }
714
823
  ],
@@ -716,30 +825,81 @@
716
825
  "render-ui",
717
826
  "main",
718
827
  {
828
+ "gap": "md",
719
829
  "children": [
720
830
  {
721
831
  "type": "spinner"
722
832
  },
723
833
  {
724
834
  "variant": "caption",
725
- "color": "muted",
726
835
  "content": "Suspending service…",
836
+ "color": "muted",
727
837
  "type": "typography"
728
838
  }
729
839
  ],
730
840
  "type": "stack",
731
- "gap": "md",
841
+ "direction": "vertical",
732
842
  "align": "center",
843
+ "className": "py-12"
844
+ }
845
+ ]
846
+ ]
847
+ },
848
+ {
849
+ "from": "browsing",
850
+ "to": "loading",
851
+ "event": "SET_STATUS",
852
+ "effects": [
853
+ [
854
+ "set",
855
+ "@entity.id",
856
+ "@payload.entityId"
857
+ ],
858
+ [
859
+ "set",
860
+ "@entity.status",
861
+ "@payload.newStatus"
862
+ ],
863
+ [
864
+ "persist",
865
+ "update",
866
+ "DunningCase",
867
+ "@entity",
868
+ {
869
+ "emit": {
870
+ "failure": "DunningCaseUpdateFailed",
871
+ "success": "DunningCaseUpdated"
872
+ }
873
+ }
874
+ ],
875
+ [
876
+ "render-ui",
877
+ "main",
878
+ {
733
879
  "className": "py-12",
734
- "direction": "vertical"
880
+ "type": "stack",
881
+ "children": [
882
+ {
883
+ "type": "spinner"
884
+ },
885
+ {
886
+ "type": "typography",
887
+ "color": "muted",
888
+ "variant": "caption",
889
+ "content": "Updating case status…"
890
+ }
891
+ ],
892
+ "direction": "vertical",
893
+ "gap": "md",
894
+ "align": "center"
735
895
  }
736
896
  ]
737
897
  ]
738
898
  },
739
899
  {
740
- "from": "viewing_single",
900
+ "from": "browsing",
741
901
  "to": "loading",
742
- "event": "CLOSE_VIEW",
902
+ "event": "DunningCaseUpdated",
743
903
  "effects": [
744
904
  [
745
905
  "fetch",
@@ -750,27 +910,60 @@
750
910
  "success": "DunningCaseLoaded"
751
911
  }
752
912
  }
913
+ ]
914
+ ]
915
+ },
916
+ {
917
+ "from": "browsing",
918
+ "to": "browsing",
919
+ "event": "DunningCaseUpdateFailed",
920
+ "effects": [
921
+ [
922
+ "render-ui",
923
+ "main",
924
+ {
925
+ "type": "alert",
926
+ "variant": "error",
927
+ "message": "@payload.error"
928
+ }
929
+ ]
930
+ ]
931
+ },
932
+ {
933
+ "from": "viewing_single",
934
+ "to": "loading",
935
+ "event": "CLOSE_VIEW",
936
+ "effects": [
937
+ [
938
+ "fetch",
939
+ "DunningCase",
940
+ {
941
+ "emit": {
942
+ "success": "DunningCaseLoaded",
943
+ "failure": "DunningCaseLoadFailed"
944
+ }
945
+ }
753
946
  ],
754
947
  [
755
948
  "render-ui",
756
949
  "main",
757
950
  {
951
+ "gap": "md",
758
952
  "type": "stack",
953
+ "align": "center",
954
+ "className": "py-12",
759
955
  "children": [
760
956
  {
761
957
  "type": "spinner"
762
958
  },
763
959
  {
764
- "variant": "caption",
765
960
  "type": "typography",
766
- "color": "muted",
767
- "content": "Loading dunning cases…"
961
+ "content": "Loading dunning cases…",
962
+ "variant": "caption",
963
+ "color": "muted"
768
964
  }
769
965
  ],
770
- "direction": "vertical",
771
- "className": "py-12",
772
- "align": "center",
773
- "gap": "md"
966
+ "direction": "vertical"
774
967
  }
775
968
  ]
776
969
  ]
@@ -799,22 +992,22 @@
799
992
  "render-ui",
800
993
  "main",
801
994
  {
802
- "gap": "md",
803
- "type": "stack",
804
- "direction": "vertical",
805
995
  "align": "center",
996
+ "gap": "md",
806
997
  "className": "py-12",
807
998
  "children": [
808
999
  {
809
1000
  "type": "spinner"
810
1001
  },
811
1002
  {
812
- "variant": "caption",
813
1003
  "type": "typography",
814
- "color": "muted",
815
- "content": "Escalating case…"
1004
+ "variant": "caption",
1005
+ "content": "Escalating case…",
1006
+ "color": "muted"
816
1007
  }
817
- ]
1008
+ ],
1009
+ "direction": "vertical",
1010
+ "type": "stack"
818
1011
  }
819
1012
  ]
820
1013
  ]
@@ -843,10 +1036,6 @@
843
1036
  "render-ui",
844
1037
  "main",
845
1038
  {
846
- "align": "center",
847
- "direction": "vertical",
848
- "className": "py-12",
849
- "type": "stack",
850
1039
  "children": [
851
1040
  {
852
1041
  "type": "spinner"
@@ -854,11 +1043,15 @@
854
1043
  {
855
1044
  "variant": "caption",
856
1045
  "type": "typography",
857
- "color": "muted",
858
- "content": "Resolving case…"
1046
+ "content": "Resolving case…",
1047
+ "color": "muted"
859
1048
  }
860
1049
  ],
861
- "gap": "md"
1050
+ "direction": "vertical",
1051
+ "type": "stack",
1052
+ "align": "center",
1053
+ "gap": "md",
1054
+ "className": "py-12"
862
1055
  }
863
1056
  ]
864
1057
  ]
@@ -887,22 +1080,22 @@
887
1080
  "render-ui",
888
1081
  "main",
889
1082
  {
1083
+ "className": "py-12",
1084
+ "type": "stack",
890
1085
  "children": [
891
1086
  {
892
1087
  "type": "spinner"
893
1088
  },
894
1089
  {
895
- "content": "Suspending service…",
896
- "color": "muted",
1090
+ "type": "typography",
897
1091
  "variant": "caption",
898
- "type": "typography"
1092
+ "color": "muted",
1093
+ "content": "Suspending service…"
899
1094
  }
900
1095
  ],
1096
+ "direction": "vertical",
901
1097
  "gap": "md",
902
- "type": "stack",
903
- "align": "center",
904
- "className": "py-12",
905
- "direction": "vertical"
1098
+ "align": "center"
906
1099
  }
907
1100
  ]
908
1101
  ]
@@ -917,8 +1110,8 @@
917
1110
  "DunningCase",
918
1111
  {
919
1112
  "emit": {
920
- "failure": "DunningCaseLoadFailed",
921
- "success": "DunningCaseLoaded"
1113
+ "success": "DunningCaseLoaded",
1114
+ "failure": "DunningCaseLoadFailed"
922
1115
  }
923
1116
  }
924
1117
  ],
@@ -935,30 +1128,75 @@
935
1128
  ]
936
1129
  },
937
1130
  "config": {
938
- "title": {
1131
+ "roundingMode": {
939
1132
  "type": "string",
940
- "default": "Dunning Cases",
941
- "label": "Section title",
942
- "description": "Heading shown above the failed-payment cases",
1133
+ "default": "half-up",
1134
+ "label": "Rounding mode",
1135
+ "description": "Sub-cent rounding behavior for amount calculations.",
1136
+ "tier": "advanced",
1137
+ "values": [
1138
+ "bankers",
1139
+ "half-up",
1140
+ "down"
1141
+ ]
1142
+ },
1143
+ "lateFeeAmount": {
1144
+ "type": "number",
1145
+ "default": 0.0,
1146
+ "label": "Late fee amount",
1147
+ "description": "Flat cash amount or percentage (per lateFeePolicy).",
1148
+ "tier": "customization"
1149
+ },
1150
+ "retentionYears": {
1151
+ "type": "number",
1152
+ "default": 7.0,
1153
+ "label": "Retention (years)",
1154
+ "description": "Years to keep dunning records for compliance.",
1155
+ "tier": "advanced"
1156
+ },
1157
+ "gracePeriodDays": {
1158
+ "type": "number",
1159
+ "default": 7.0,
1160
+ "label": "Grace period (days)",
1161
+ "description": "Days after failure before escalation severity rises. Wire via sibling std-lifecycle rule.",
943
1162
  "tier": "customization"
944
1163
  },
1164
+ "currency": {
1165
+ "type": "string",
1166
+ "default": "USD",
1167
+ "label": "Default currency",
1168
+ "description": "ISO 4217 currency code (USD, EUR, GBP, …) for amounts displayed on dunning cases.",
1169
+ "tier": "essential"
1170
+ },
1171
+ "taxStrategy": {
1172
+ "type": "string",
1173
+ "default": "none",
1174
+ "label": "Tax strategy",
1175
+ "description": "inclusive = tax baked into amounts; exclusive = tax added on top; none = no tax.",
1176
+ "tier": "customization",
1177
+ "values": [
1178
+ "inclusive",
1179
+ "exclusive",
1180
+ "none"
1181
+ ]
1182
+ },
945
1183
  "fields": {
946
1184
  "type": "[FieldSpec]",
947
1185
  "default": [
948
1186
  {
949
- "label": "Subscription",
1187
+ "variant": "caption",
950
1188
  "name": "subscriptionId",
951
- "variant": "caption"
1189
+ "label": "Subscription"
952
1190
  },
953
1191
  {
954
1192
  "name": "customerId",
955
- "label": "Customer",
956
- "variant": "caption"
1193
+ "variant": "caption",
1194
+ "label": "Customer"
957
1195
  },
958
1196
  {
959
1197
  "label": "Severity",
960
- "variant": "badge",
961
- "name": "severity"
1198
+ "name": "severity",
1199
+ "variant": "badge"
962
1200
  },
963
1201
  {
964
1202
  "label": "Attempt",
@@ -966,14 +1204,14 @@
966
1204
  "variant": "caption"
967
1205
  },
968
1206
  {
1207
+ "variant": "caption",
969
1208
  "name": "amountDue",
970
- "label": "Amount Due",
971
- "variant": "caption"
1209
+ "label": "Amount Due"
972
1210
  },
973
1211
  {
974
- "name": "status",
975
1212
  "label": "Status",
976
- "variant": "badge"
1213
+ "variant": "badge",
1214
+ "name": "status"
977
1215
  }
978
1216
  ],
979
1217
  "label": "Columns to show",
@@ -982,21 +1220,16 @@
982
1220
  "items": {
983
1221
  "type": "object",
984
1222
  "properties": {
985
- "label": {
986
- "name": "label",
1223
+ "name": {
1224
+ "name": "name",
987
1225
  "type": "string",
988
- "required": false
1226
+ "required": true
989
1227
  },
990
1228
  "icon": {
991
1229
  "name": "icon",
992
1230
  "type": "string",
993
1231
  "required": false
994
1232
  },
995
- "format": {
996
- "name": "format",
997
- "type": "string",
998
- "required": false
999
- },
1000
1233
  "key": {
1001
1234
  "name": "key",
1002
1235
  "type": "string",
@@ -1007,33 +1240,50 @@
1007
1240
  "type": "string",
1008
1241
  "required": false
1009
1242
  },
1010
- "variant": {
1011
- "name": "variant",
1243
+ "label": {
1244
+ "name": "label",
1012
1245
  "type": "string",
1013
1246
  "required": false
1014
1247
  },
1015
- "name": {
1016
- "name": "name",
1248
+ "format": {
1249
+ "name": "format",
1017
1250
  "type": "string",
1018
- "required": true
1251
+ "required": false
1252
+ },
1253
+ "variant": {
1254
+ "name": "variant",
1255
+ "type": "string",
1256
+ "required": false
1019
1257
  }
1020
1258
  }
1021
1259
  }
1022
1260
  },
1261
+ "lateFeePolicy": {
1262
+ "type": "string",
1263
+ "default": "none",
1264
+ "label": "Late fee policy",
1265
+ "description": "How late fees compute on overdue cases. Declarative; wiring deferred.",
1266
+ "tier": "customization",
1267
+ "values": [
1268
+ "none",
1269
+ "flat",
1270
+ "percent"
1271
+ ]
1272
+ },
1023
1273
  "itemActions": {
1024
1274
  "type": "[ItemAction]",
1025
1275
  "default": [
1026
1276
  {
1027
- "icon": "arrow-right",
1028
1277
  "label": "Open",
1029
1278
  "variant": "primary",
1030
- "event": "OPEN_CASE"
1279
+ "event": "OPEN_CASE",
1280
+ "icon": "arrow-right"
1031
1281
  },
1032
1282
  {
1033
- "event": "SUSPEND",
1034
- "variant": "danger",
1035
1283
  "icon": "ban",
1036
- "label": "Suspend"
1284
+ "label": "Suspend",
1285
+ "event": "SUSPEND",
1286
+ "variant": "danger"
1037
1287
  }
1038
1288
  ],
1039
1289
  "label": "Row actions",
@@ -1042,16 +1292,16 @@
1042
1292
  "items": {
1043
1293
  "type": "object",
1044
1294
  "properties": {
1045
- "event": {
1046
- "name": "event",
1047
- "type": "string",
1048
- "required": true
1049
- },
1050
1295
  "variant": {
1051
1296
  "name": "variant",
1052
1297
  "type": "string",
1053
1298
  "required": false
1054
1299
  },
1300
+ "event": {
1301
+ "name": "event",
1302
+ "type": "string",
1303
+ "required": true
1304
+ },
1055
1305
  "icon": {
1056
1306
  "name": "icon",
1057
1307
  "type": "string",
@@ -1064,6 +1314,20 @@
1064
1314
  }
1065
1315
  }
1066
1316
  }
1317
+ },
1318
+ "title": {
1319
+ "type": "string",
1320
+ "default": "Dunning Cases",
1321
+ "label": "Section title",
1322
+ "description": "Heading shown above the failed-payment cases",
1323
+ "tier": "customization"
1324
+ },
1325
+ "complianceJurisdiction": {
1326
+ "type": "string",
1327
+ "default": "",
1328
+ "label": "Compliance jurisdiction",
1329
+ "description": "Drives debt-collection regulations per locale: 'US-CA', 'EU-DE', 'UK', etc. Declarative.",
1330
+ "tier": "advanced"
1067
1331
  }
1068
1332
  },
1069
1333
  "scope": "collection"
@@ -1082,4 +1346,4 @@
1082
1346
  ]
1083
1347
  }
1084
1348
  ]
1085
- }
1349
+ }