@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-change-order",
3
- "version": "1.1.0",
4
- "description": "std-change-order — construction change-order primitive tracking contract scope/cost/schedule modifications with owner approval. Lists orders in `browsing`; opens detail in `viewing_single` with Approve / Reject / Execute / Delete actions. Agents tune the list shape via `config.fields` + `config.itemActions`.",
3
+ "version": "1.2.0",
4
+ "description": "std-change-order — construction change-order ledger with Approve / Reject / Execute / Delete. Listens for SET_STATUS so std-lifecycle can drive automated transitions. Exposes Financial-pattern knobs.",
5
5
  "orbitals": [
6
6
  {
7
7
  "name": "ChangeOrderOrbital",
@@ -275,6 +275,75 @@
275
275
  "type": "string"
276
276
  }
277
277
  ]
278
+ },
279
+ {
280
+ "event": "ChangeOrderUpdated",
281
+ "payloadSchema": [
282
+ {
283
+ "name": "row.id",
284
+ "type": "string",
285
+ "required": true
286
+ },
287
+ {
288
+ "name": "row.coNumber",
289
+ "type": "string",
290
+ "required": true
291
+ },
292
+ {
293
+ "name": "row.description",
294
+ "type": "string",
295
+ "required": true
296
+ },
297
+ {
298
+ "name": "row.reason",
299
+ "type": "string"
300
+ },
301
+ {
302
+ "name": "row.costImpact",
303
+ "type": "number"
304
+ },
305
+ {
306
+ "name": "row.scheduleImpactDays",
307
+ "type": "number"
308
+ },
309
+ {
310
+ "name": "row.status",
311
+ "type": "string"
312
+ },
313
+ {
314
+ "name": "row.requestedBy",
315
+ "type": "string"
316
+ },
317
+ {
318
+ "name": "row.approvedBy",
319
+ "type": "string"
320
+ },
321
+ {
322
+ "name": "row.requestedAt",
323
+ "type": "string"
324
+ },
325
+ {
326
+ "name": "row.approvedAt",
327
+ "type": "string"
328
+ },
329
+ {
330
+ "name": "row.pendingId",
331
+ "type": "string"
332
+ }
333
+ ]
334
+ },
335
+ {
336
+ "event": "ChangeOrderUpdateFailed",
337
+ "payloadSchema": [
338
+ {
339
+ "name": "error",
340
+ "type": "string"
341
+ },
342
+ {
343
+ "name": "code",
344
+ "type": "string"
345
+ }
346
+ ]
278
347
  }
279
348
  ],
280
349
  "stateMachine": {
@@ -352,6 +421,46 @@
352
421
  }
353
422
  ]
354
423
  },
424
+ {
425
+ "key": "SET_STATUS",
426
+ "name": "Set Status",
427
+ "payloadSchema": [
428
+ {
429
+ "name": "entityId",
430
+ "type": "string",
431
+ "required": true
432
+ },
433
+ {
434
+ "name": "newStatus",
435
+ "type": "string",
436
+ "required": true
437
+ }
438
+ ]
439
+ },
440
+ {
441
+ "key": "ChangeOrderUpdated",
442
+ "name": "ChangeOrder updated",
443
+ "payloadSchema": [
444
+ {
445
+ "name": "row",
446
+ "type": "ChangeOrder"
447
+ }
448
+ ]
449
+ },
450
+ {
451
+ "key": "ChangeOrderUpdateFailed",
452
+ "name": "ChangeOrder update failed",
453
+ "payloadSchema": [
454
+ {
455
+ "name": "error",
456
+ "type": "string"
457
+ },
458
+ {
459
+ "name": "code",
460
+ "type": "string"
461
+ }
462
+ ]
463
+ },
355
464
  {
356
465
  "key": "CLOSE_VIEW",
357
466
  "name": "Close View"
@@ -421,22 +530,22 @@
421
530
  "render-ui",
422
531
  "main",
423
532
  {
533
+ "align": "center",
424
534
  "direction": "vertical",
535
+ "type": "stack",
425
536
  "className": "py-12",
426
537
  "children": [
427
538
  {
428
539
  "type": "spinner"
429
540
  },
430
541
  {
431
- "variant": "caption",
432
- "color": "muted",
433
542
  "content": "Loading change orders…",
434
- "type": "typography"
543
+ "variant": "caption",
544
+ "type": "typography",
545
+ "color": "muted"
435
546
  }
436
547
  ],
437
- "type": "stack",
438
- "gap": "md",
439
- "align": "center"
548
+ "gap": "md"
440
549
  }
441
550
  ]
442
551
  ]
@@ -450,29 +559,26 @@
450
559
  "render-ui",
451
560
  "main",
452
561
  {
453
- "gap": "md",
454
- "type": "stack",
562
+ "direction": "vertical",
455
563
  "children": [
456
564
  {
457
- "type": "stack",
458
- "align": "center",
459
- "direction": "horizontal",
565
+ "gap": "sm",
460
566
  "children": [
461
567
  {
462
- "type": "icon",
463
- "name": "file-text"
568
+ "name": "file-text",
569
+ "type": "icon"
464
570
  },
465
571
  {
572
+ "type": "typography",
466
573
  "content": "@config.title",
467
- "variant": "h3",
468
- "type": "typography"
574
+ "variant": "h3"
469
575
  }
470
576
  ],
471
- "gap": "sm"
577
+ "direction": "horizontal",
578
+ "type": "stack",
579
+ "align": "center"
472
580
  },
473
581
  {
474
- "type": "simple-grid",
475
- "cols": 4.0,
476
582
  "children": [
477
583
  {
478
584
  "type": "stat-display",
@@ -481,38 +587,41 @@
481
587
  "label": "Total orders"
482
588
  },
483
589
  {
590
+ "value": "11",
484
591
  "label": "Pending approval",
485
592
  "icon": "clock",
486
- "type": "stat-display",
487
- "value": "11"
593
+ "type": "stat-display"
488
594
  },
489
595
  {
490
- "value": "$184,500",
491
596
  "type": "stat-display",
597
+ "value": "$184,500",
492
598
  "label": "Cost impact",
493
599
  "icon": "dollar-sign"
494
600
  },
495
601
  {
496
602
  "label": "Days added",
497
- "icon": "calendar",
603
+ "value": "47",
498
604
  "type": "stat-display",
499
- "value": "47"
605
+ "icon": "calendar"
500
606
  }
501
- ]
607
+ ],
608
+ "type": "simple-grid",
609
+ "cols": 4.0
502
610
  },
503
611
  {
504
612
  "type": "divider"
505
613
  },
506
614
  {
507
- "entity": "@payload.data",
508
- "cols": 1.0,
509
615
  "itemActions": "@config.itemActions",
510
- "type": "data-grid",
616
+ "cols": 1.0,
511
617
  "fields": "@config.fields",
618
+ "entity": "@payload.data",
619
+ "type": "data-grid",
512
620
  "gap": "sm"
513
621
  }
514
622
  ],
515
- "direction": "vertical"
623
+ "type": "stack",
624
+ "gap": "md"
516
625
  }
517
626
  ]
518
627
  ]
@@ -526,8 +635,8 @@
526
635
  "render-ui",
527
636
  "main",
528
637
  {
529
- "type": "alert",
530
638
  "variant": "error",
639
+ "type": "alert",
531
640
  "message": "@payload.error"
532
641
  }
533
642
  ]
@@ -598,35 +707,36 @@
598
707
  "main",
599
708
  {
600
709
  "type": "stack",
710
+ "direction": "vertical",
601
711
  "gap": "md",
602
712
  "children": [
603
713
  {
604
- "direction": "horizontal",
714
+ "type": "stack",
605
715
  "gap": "sm",
716
+ "direction": "horizontal",
717
+ "align": "center",
606
718
  "children": [
607
719
  {
720
+ "variant": "ghost",
608
721
  "type": "button",
609
722
  "label": "Back",
610
- "action": "CLOSE_VIEW",
611
- "variant": "ghost"
723
+ "action": "CLOSE_VIEW"
612
724
  },
613
725
  {
614
726
  "type": "icon",
615
727
  "name": "file-text"
616
728
  },
617
729
  {
618
- "content": "@entity.coNumber",
619
730
  "type": "typography",
620
- "variant": "h3"
731
+ "variant": "h3",
732
+ "content": "@entity.coNumber"
621
733
  },
622
734
  {
623
- "type": "badge",
624
735
  "label": "@entity.status",
625
- "variant": "primary"
736
+ "variant": "primary",
737
+ "type": "badge"
626
738
  }
627
- ],
628
- "align": "center",
629
- "type": "stack"
739
+ ]
630
740
  },
631
741
  {
632
742
  "type": "divider"
@@ -634,170 +744,169 @@
634
744
  {
635
745
  "gap": "sm",
636
746
  "type": "stack",
637
- "direction": "vertical",
638
747
  "children": [
639
748
  {
640
- "gap": "md",
641
- "type": "stack",
642
- "direction": "horizontal",
643
749
  "children": [
644
750
  {
645
751
  "type": "typography",
752
+ "variant": "caption",
646
753
  "color": "muted",
647
- "content": "Description",
648
- "variant": "caption"
754
+ "content": "Description"
649
755
  },
650
756
  {
757
+ "content": "@entity.description",
651
758
  "type": "typography",
652
- "variant": "body",
653
- "content": "@entity.description"
759
+ "variant": "body"
654
760
  }
655
- ]
761
+ ],
762
+ "direction": "horizontal",
763
+ "type": "stack",
764
+ "gap": "md"
656
765
  },
657
766
  {
658
767
  "children": [
659
768
  {
660
- "type": "typography",
661
769
  "variant": "caption",
662
770
  "content": "Reason",
771
+ "type": "typography",
663
772
  "color": "muted"
664
773
  },
665
774
  {
666
- "type": "typography",
775
+ "variant": "body",
667
776
  "content": "@entity.reason",
668
- "variant": "body"
777
+ "type": "typography"
669
778
  }
670
779
  ],
671
- "type": "stack",
672
780
  "direction": "horizontal",
673
- "gap": "md"
781
+ "gap": "md",
782
+ "type": "stack"
674
783
  },
675
784
  {
676
- "direction": "horizontal",
677
- "gap": "md",
678
785
  "children": [
679
786
  {
787
+ "color": "muted",
680
788
  "content": "Requested by",
681
789
  "type": "typography",
682
- "variant": "caption",
683
- "color": "muted"
790
+ "variant": "caption"
684
791
  },
685
792
  {
686
- "type": "typography",
687
793
  "content": "@entity.requestedBy",
794
+ "type": "typography",
688
795
  "variant": "body"
689
796
  }
690
797
  ],
798
+ "gap": "md",
799
+ "direction": "horizontal",
691
800
  "type": "stack"
692
801
  },
693
802
  {
803
+ "type": "stack",
804
+ "gap": "md",
805
+ "direction": "horizontal",
694
806
  "children": [
695
807
  {
696
808
  "content": "Approved by",
697
- "type": "typography",
698
809
  "variant": "caption",
699
- "color": "muted"
810
+ "color": "muted",
811
+ "type": "typography"
700
812
  },
701
813
  {
702
- "type": "typography",
703
814
  "variant": "body",
704
- "content": "@entity.approvedBy"
815
+ "content": "@entity.approvedBy",
816
+ "type": "typography"
705
817
  }
706
- ],
707
- "gap": "md",
708
- "direction": "horizontal",
709
- "type": "stack"
818
+ ]
710
819
  }
711
- ]
820
+ ],
821
+ "direction": "vertical"
712
822
  },
713
823
  {
714
824
  "type": "divider"
715
825
  },
716
826
  {
717
827
  "type": "simple-grid",
718
- "cols": 4.0,
719
828
  "children": [
720
829
  {
721
- "type": "stat-display",
722
830
  "icon": "dollar-sign",
723
831
  "label": "Cost impact",
724
- "value": "@entity.costImpact"
832
+ "value": "@entity.costImpact",
833
+ "type": "stat-display"
725
834
  },
726
835
  {
727
- "value": "@entity.scheduleImpactDays",
728
- "icon": "calendar",
729
836
  "type": "stat-display",
730
- "label": "Schedule days"
837
+ "value": "@entity.scheduleImpactDays",
838
+ "label": "Schedule days",
839
+ "icon": "calendar"
731
840
  },
732
841
  {
733
842
  "icon": "clock",
734
- "type": "stat-display",
735
843
  "label": "Requested",
844
+ "type": "stat-display",
736
845
  "value": "@entity.requestedAt"
737
846
  },
738
847
  {
739
- "label": "Approved",
740
848
  "value": "@entity.approvedAt",
741
- "type": "stat-display",
742
- "icon": "check-circle"
849
+ "label": "Approved",
850
+ "icon": "check-circle",
851
+ "type": "stat-display"
743
852
  }
744
- ]
853
+ ],
854
+ "cols": 4.0
745
855
  },
746
856
  {
857
+ "direction": "horizontal",
747
858
  "align": "center",
748
- "type": "stack",
749
859
  "gap": "sm",
750
- "direction": "horizontal",
860
+ "type": "stack",
751
861
  "children": [
752
862
  {
753
863
  "label": "Submit",
864
+ "action": "SUBMIT_FOR_APPROVAL",
754
865
  "variant": "primary",
755
866
  "type": "button",
756
- "action": "SUBMIT_FOR_APPROVAL",
757
867
  "actionPayload": {
758
868
  "id": "@entity.id"
759
869
  }
760
870
  },
761
871
  {
762
872
  "type": "button",
763
- "label": "Approve",
764
- "variant": "primary",
765
873
  "action": "APPROVE",
766
874
  "actionPayload": {
767
875
  "id": "@entity.id"
768
- }
876
+ },
877
+ "label": "Approve",
878
+ "variant": "primary"
769
879
  },
770
880
  {
771
- "action": "REJECT",
772
881
  "variant": "danger",
773
- "label": "Reject",
774
882
  "type": "button",
883
+ "action": "REJECT",
775
884
  "actionPayload": {
776
885
  "id": "@entity.id"
777
- }
886
+ },
887
+ "label": "Reject"
778
888
  },
779
889
  {
780
890
  "type": "button",
891
+ "variant": "primary",
892
+ "action": "EXECUTE",
781
893
  "actionPayload": {
782
894
  "id": "@entity.id"
783
895
  },
784
- "label": "Execute",
785
- "variant": "primary",
786
- "action": "EXECUTE"
896
+ "label": "Execute"
787
897
  },
788
898
  {
789
- "type": "button",
790
899
  "action": "REQUEST_DELETE",
791
- "variant": "danger",
792
- "label": "Delete",
793
900
  "actionPayload": {
794
901
  "id": "@entity.id"
795
- }
902
+ },
903
+ "label": "Delete",
904
+ "variant": "danger",
905
+ "type": "button"
796
906
  }
797
907
  ]
798
908
  }
799
- ],
800
- "direction": "vertical"
909
+ ]
801
910
  }
802
911
  ]
803
912
  ]
@@ -817,8 +926,8 @@
817
926
  "ChangeOrder",
818
927
  {
819
928
  "emit": {
820
- "success": "ChangeOrderLoaded",
821
- "failure": "ChangeOrderLoadFailed"
929
+ "failure": "ChangeOrderLoadFailed",
930
+ "success": "ChangeOrderLoaded"
822
931
  }
823
932
  }
824
933
  ],
@@ -826,9 +935,7 @@
826
935
  "render-ui",
827
936
  "main",
828
937
  {
829
- "type": "stack",
830
938
  "direction": "vertical",
831
- "gap": "md",
832
939
  "align": "center",
833
940
  "children": [
834
941
  {
@@ -836,12 +943,98 @@
836
943
  },
837
944
  {
838
945
  "type": "typography",
839
- "content": "Deleting change order…",
946
+ "variant": "caption",
840
947
  "color": "muted",
948
+ "content": "Deleting change order…"
949
+ }
950
+ ],
951
+ "type": "stack",
952
+ "className": "py-12",
953
+ "gap": "md"
954
+ }
955
+ ]
956
+ ]
957
+ },
958
+ {
959
+ "from": "browsing",
960
+ "to": "loading",
961
+ "event": "SET_STATUS",
962
+ "effects": [
963
+ [
964
+ "set",
965
+ "@entity.id",
966
+ "@payload.entityId"
967
+ ],
968
+ [
969
+ "set",
970
+ "@entity.status",
971
+ "@payload.newStatus"
972
+ ],
973
+ [
974
+ "persist",
975
+ "update",
976
+ "ChangeOrder",
977
+ "@entity",
978
+ {
979
+ "emit": {
980
+ "success": "ChangeOrderUpdated",
981
+ "failure": "ChangeOrderUpdateFailed"
982
+ }
983
+ }
984
+ ],
985
+ [
986
+ "render-ui",
987
+ "main",
988
+ {
989
+ "children": [
990
+ {
991
+ "type": "spinner"
992
+ },
993
+ {
994
+ "color": "muted",
995
+ "content": "Updating change-order status…",
996
+ "type": "typography",
841
997
  "variant": "caption"
842
998
  }
843
999
  ],
844
- "className": "py-12"
1000
+ "align": "center",
1001
+ "type": "stack",
1002
+ "className": "py-12",
1003
+ "gap": "md",
1004
+ "direction": "vertical"
1005
+ }
1006
+ ]
1007
+ ]
1008
+ },
1009
+ {
1010
+ "from": "browsing",
1011
+ "to": "loading",
1012
+ "event": "ChangeOrderUpdated",
1013
+ "effects": [
1014
+ [
1015
+ "fetch",
1016
+ "ChangeOrder",
1017
+ {
1018
+ "emit": {
1019
+ "success": "ChangeOrderLoaded",
1020
+ "failure": "ChangeOrderLoadFailed"
1021
+ }
1022
+ }
1023
+ ]
1024
+ ]
1025
+ },
1026
+ {
1027
+ "from": "browsing",
1028
+ "to": "browsing",
1029
+ "event": "ChangeOrderUpdateFailed",
1030
+ "effects": [
1031
+ [
1032
+ "render-ui",
1033
+ "main",
1034
+ {
1035
+ "type": "alert",
1036
+ "variant": "error",
1037
+ "message": "@payload.error"
845
1038
  }
846
1039
  ]
847
1040
  ]
@@ -856,8 +1049,8 @@
856
1049
  "ChangeOrder",
857
1050
  {
858
1051
  "emit": {
859
- "failure": "ChangeOrderLoadFailed",
860
- "success": "ChangeOrderLoaded"
1052
+ "success": "ChangeOrderLoaded",
1053
+ "failure": "ChangeOrderLoadFailed"
861
1054
  }
862
1055
  }
863
1056
  ],
@@ -865,22 +1058,22 @@
865
1058
  "render-ui",
866
1059
  "main",
867
1060
  {
868
- "direction": "vertical",
1061
+ "type": "stack",
1062
+ "className": "py-12",
869
1063
  "gap": "md",
1064
+ "direction": "vertical",
1065
+ "align": "center",
870
1066
  "children": [
871
1067
  {
872
1068
  "type": "spinner"
873
1069
  },
874
1070
  {
875
- "variant": "caption",
876
1071
  "color": "muted",
1072
+ "content": "Loading change orders…",
877
1073
  "type": "typography",
878
- "content": "Loading change orders…"
1074
+ "variant": "caption"
879
1075
  }
880
- ],
881
- "type": "stack",
882
- "align": "center",
883
- "className": "py-12"
1076
+ ]
884
1077
  }
885
1078
  ]
886
1079
  ]
@@ -909,22 +1102,22 @@
909
1102
  "render-ui",
910
1103
  "main",
911
1104
  {
1105
+ "gap": "md",
1106
+ "direction": "vertical",
912
1107
  "align": "center",
1108
+ "type": "stack",
913
1109
  "className": "py-12",
914
1110
  "children": [
915
1111
  {
916
1112
  "type": "spinner"
917
1113
  },
918
1114
  {
1115
+ "variant": "caption",
919
1116
  "type": "typography",
920
1117
  "color": "muted",
921
- "variant": "caption",
922
1118
  "content": "Submitting for approval…"
923
1119
  }
924
- ],
925
- "gap": "md",
926
- "direction": "vertical",
927
- "type": "stack"
1120
+ ]
928
1121
  }
929
1122
  ]
930
1123
  ]
@@ -944,8 +1137,8 @@
944
1137
  "ChangeOrder",
945
1138
  {
946
1139
  "emit": {
947
- "success": "ChangeOrderLoaded",
948
- "failure": "ChangeOrderLoadFailed"
1140
+ "failure": "ChangeOrderLoadFailed",
1141
+ "success": "ChangeOrderLoaded"
949
1142
  }
950
1143
  }
951
1144
  ],
@@ -953,22 +1146,22 @@
953
1146
  "render-ui",
954
1147
  "main",
955
1148
  {
956
- "type": "stack",
957
- "className": "py-12",
1149
+ "align": "center",
958
1150
  "children": [
959
1151
  {
960
1152
  "type": "spinner"
961
1153
  },
962
1154
  {
963
1155
  "type": "typography",
1156
+ "variant": "caption",
964
1157
  "color": "muted",
965
- "content": "Approving change order…",
966
- "variant": "caption"
1158
+ "content": "Approving change order…"
967
1159
  }
968
1160
  ],
969
- "align": "center",
970
- "gap": "md",
971
- "direction": "vertical"
1161
+ "type": "stack",
1162
+ "direction": "vertical",
1163
+ "className": "py-12",
1164
+ "gap": "md"
972
1165
  }
973
1166
  ]
974
1167
  ]
@@ -988,8 +1181,8 @@
988
1181
  "ChangeOrder",
989
1182
  {
990
1183
  "emit": {
991
- "success": "ChangeOrderLoaded",
992
- "failure": "ChangeOrderLoadFailed"
1184
+ "failure": "ChangeOrderLoadFailed",
1185
+ "success": "ChangeOrderLoaded"
993
1186
  }
994
1187
  }
995
1188
  ],
@@ -997,21 +1190,21 @@
997
1190
  "render-ui",
998
1191
  "main",
999
1192
  {
1000
- "direction": "vertical",
1001
- "align": "center",
1002
1193
  "className": "py-12",
1003
1194
  "children": [
1004
1195
  {
1005
1196
  "type": "spinner"
1006
1197
  },
1007
1198
  {
1008
- "color": "muted",
1009
1199
  "content": "Rejecting change order…",
1010
- "type": "typography",
1011
- "variant": "caption"
1200
+ "variant": "caption",
1201
+ "color": "muted",
1202
+ "type": "typography"
1012
1203
  }
1013
1204
  ],
1205
+ "direction": "vertical",
1014
1206
  "type": "stack",
1207
+ "align": "center",
1015
1208
  "gap": "md"
1016
1209
  }
1017
1210
  ]
@@ -1042,21 +1235,21 @@
1042
1235
  "main",
1043
1236
  {
1044
1237
  "align": "center",
1238
+ "gap": "md",
1239
+ "type": "stack",
1240
+ "direction": "vertical",
1241
+ "className": "py-12",
1045
1242
  "children": [
1046
1243
  {
1047
1244
  "type": "spinner"
1048
1245
  },
1049
1246
  {
1247
+ "type": "typography",
1050
1248
  "content": "Executing change order…",
1051
- "color": "muted",
1052
1249
  "variant": "caption",
1053
- "type": "typography"
1250
+ "color": "muted"
1054
1251
  }
1055
- ],
1056
- "className": "py-12",
1057
- "gap": "md",
1058
- "type": "stack",
1059
- "direction": "vertical"
1252
+ ]
1060
1253
  }
1061
1254
  ]
1062
1255
  ]
@@ -1076,8 +1269,8 @@
1076
1269
  "ChangeOrder",
1077
1270
  {
1078
1271
  "emit": {
1079
- "success": "ChangeOrderLoaded",
1080
- "failure": "ChangeOrderLoadFailed"
1272
+ "failure": "ChangeOrderLoadFailed",
1273
+ "success": "ChangeOrderLoaded"
1081
1274
  }
1082
1275
  }
1083
1276
  ],
@@ -1086,21 +1279,21 @@
1086
1279
  "main",
1087
1280
  {
1088
1281
  "align": "center",
1282
+ "type": "stack",
1283
+ "className": "py-12",
1089
1284
  "gap": "md",
1285
+ "direction": "vertical",
1090
1286
  "children": [
1091
1287
  {
1092
1288
  "type": "spinner"
1093
1289
  },
1094
1290
  {
1095
- "content": "Deleting change order…",
1096
- "color": "muted",
1097
1291
  "type": "typography",
1292
+ "color": "muted",
1293
+ "content": "Deleting change order…",
1098
1294
  "variant": "caption"
1099
1295
  }
1100
- ],
1101
- "type": "stack",
1102
- "className": "py-12",
1103
- "direction": "vertical"
1296
+ ]
1104
1297
  }
1105
1298
  ]
1106
1299
  ]
@@ -1115,8 +1308,8 @@
1115
1308
  "ChangeOrder",
1116
1309
  {
1117
1310
  "emit": {
1118
- "failure": "ChangeOrderLoadFailed",
1119
- "success": "ChangeOrderLoaded"
1311
+ "success": "ChangeOrderLoaded",
1312
+ "failure": "ChangeOrderLoadFailed"
1120
1313
  }
1121
1314
  }
1122
1315
  ],
@@ -1124,8 +1317,8 @@
1124
1317
  "render-ui",
1125
1318
  "main",
1126
1319
  {
1127
- "size": "sm",
1128
- "type": "spinner"
1320
+ "type": "spinner",
1321
+ "size": "sm"
1129
1322
  }
1130
1323
  ]
1131
1324
  ]
@@ -1133,18 +1326,84 @@
1133
1326
  ]
1134
1327
  },
1135
1328
  "config": {
1329
+ "lateFeePolicy": {
1330
+ "type": "string",
1331
+ "default": "none",
1332
+ "label": "Late fee policy",
1333
+ "description": "Penalty when change order execution slips past approved date. Declarative; wiring deferred.",
1334
+ "tier": "customization",
1335
+ "values": [
1336
+ "none",
1337
+ "flat",
1338
+ "percent"
1339
+ ]
1340
+ },
1341
+ "retentionYears": {
1342
+ "type": "number",
1343
+ "default": 7.0,
1344
+ "label": "Retention (years)",
1345
+ "description": "Years to keep change-order records for compliance.",
1346
+ "tier": "advanced"
1347
+ },
1348
+ "currency": {
1349
+ "type": "string",
1350
+ "default": "USD",
1351
+ "label": "Default currency",
1352
+ "description": "ISO 4217 currency code (USD, EUR, GBP, …) for cost impact.",
1353
+ "tier": "essential"
1354
+ },
1355
+ "gracePeriodDays": {
1356
+ "type": "number",
1357
+ "default": 7.0,
1358
+ "label": "Grace period (days)",
1359
+ "description": "Days a pending approval can sit before escalation. Wire via sibling std-lifecycle rule.",
1360
+ "tier": "customization"
1361
+ },
1362
+ "lateFeeAmount": {
1363
+ "type": "number",
1364
+ "default": 0.0,
1365
+ "label": "Late fee amount",
1366
+ "description": "Flat cash amount or percentage (per lateFeePolicy).",
1367
+ "tier": "customization"
1368
+ },
1369
+ "complianceJurisdiction": {
1370
+ "type": "string",
1371
+ "default": "",
1372
+ "label": "Compliance jurisdiction",
1373
+ "description": "Drives contracting + retention rules per locale: 'US-CA', 'EU-DE', 'UK', etc. Declarative.",
1374
+ "tier": "advanced"
1375
+ },
1376
+ "taxStrategy": {
1377
+ "type": "string",
1378
+ "default": "exclusive",
1379
+ "label": "Tax strategy",
1380
+ "description": "inclusive = tax baked into the cost impact; exclusive = tax added on top; none = no tax.",
1381
+ "tier": "customization",
1382
+ "values": [
1383
+ "inclusive",
1384
+ "exclusive",
1385
+ "none"
1386
+ ]
1387
+ },
1388
+ "title": {
1389
+ "type": "string",
1390
+ "default": "Change Orders",
1391
+ "label": "Section title",
1392
+ "description": "Heading shown above the change-order log",
1393
+ "tier": "customization"
1394
+ },
1136
1395
  "itemActions": {
1137
1396
  "type": "[ItemAction]",
1138
1397
  "default": [
1139
1398
  {
1399
+ "icon": "arrow-right",
1140
1400
  "variant": "primary",
1141
1401
  "label": "Open",
1142
- "event": "OPEN_CHANGE_ORDER",
1143
- "icon": "arrow-right"
1402
+ "event": "OPEN_CHANGE_ORDER"
1144
1403
  },
1145
1404
  {
1146
- "label": "Delete",
1147
1405
  "variant": "danger",
1406
+ "label": "Delete",
1148
1407
  "event": "REQUEST_DELETE"
1149
1408
  }
1150
1409
  ],
@@ -1154,8 +1413,8 @@
1154
1413
  "items": {
1155
1414
  "type": "object",
1156
1415
  "properties": {
1157
- "label": {
1158
- "name": "label",
1416
+ "event": {
1417
+ "name": "event",
1159
1418
  "type": "string",
1160
1419
  "required": true
1161
1420
  },
@@ -1164,8 +1423,8 @@
1164
1423
  "type": "string",
1165
1424
  "required": false
1166
1425
  },
1167
- "event": {
1168
- "name": "event",
1426
+ "label": {
1427
+ "name": "label",
1169
1428
  "type": "string",
1170
1429
  "required": true
1171
1430
  },
@@ -1177,38 +1436,50 @@
1177
1436
  }
1178
1437
  }
1179
1438
  },
1439
+ "roundingMode": {
1440
+ "type": "string",
1441
+ "default": "half-up",
1442
+ "label": "Rounding mode",
1443
+ "description": "Sub-cent rounding behavior for cost impact calculations.",
1444
+ "tier": "advanced",
1445
+ "values": [
1446
+ "bankers",
1447
+ "half-up",
1448
+ "down"
1449
+ ]
1450
+ },
1180
1451
  "fields": {
1181
1452
  "type": "[FieldSpec]",
1182
1453
  "default": [
1183
1454
  {
1184
- "label": "CO #",
1455
+ "variant": "caption",
1185
1456
  "name": "coNumber",
1186
- "variant": "caption"
1457
+ "label": "CO #"
1187
1458
  },
1188
1459
  {
1189
- "name": "description",
1190
1460
  "label": "Description",
1191
- "variant": "caption"
1461
+ "variant": "caption",
1462
+ "name": "description"
1192
1463
  },
1193
1464
  {
1194
- "variant": "caption",
1195
1465
  "label": "Cost Impact",
1196
- "name": "costImpact"
1466
+ "name": "costImpact",
1467
+ "variant": "caption"
1197
1468
  },
1198
1469
  {
1199
- "variant": "caption",
1200
1470
  "name": "scheduleImpactDays",
1471
+ "variant": "caption",
1201
1472
  "label": "Days"
1202
1473
  },
1203
1474
  {
1204
- "name": "status",
1205
1475
  "label": "Status",
1206
- "variant": "badge"
1476
+ "variant": "badge",
1477
+ "name": "status"
1207
1478
  },
1208
1479
  {
1209
- "name": "requestedBy",
1210
1480
  "label": "Requested By",
1211
- "variant": "caption"
1481
+ "variant": "caption",
1482
+ "name": "requestedBy"
1212
1483
  }
1213
1484
  ],
1214
1485
  "label": "Columns to show",
@@ -1217,23 +1488,18 @@
1217
1488
  "items": {
1218
1489
  "type": "object",
1219
1490
  "properties": {
1220
- "format": {
1221
- "name": "format",
1222
- "type": "string",
1223
- "required": false
1224
- },
1225
1491
  "variant": {
1226
1492
  "name": "variant",
1227
1493
  "type": "string",
1228
1494
  "required": false
1229
1495
  },
1230
- "key": {
1231
- "name": "key",
1496
+ "name": {
1497
+ "name": "name",
1232
1498
  "type": "string",
1233
- "required": false
1499
+ "required": true
1234
1500
  },
1235
- "header": {
1236
- "name": "header",
1501
+ "icon": {
1502
+ "name": "icon",
1237
1503
  "type": "string",
1238
1504
  "required": false
1239
1505
  },
@@ -1242,25 +1508,23 @@
1242
1508
  "type": "string",
1243
1509
  "required": false
1244
1510
  },
1245
- "name": {
1246
- "name": "name",
1511
+ "format": {
1512
+ "name": "format",
1247
1513
  "type": "string",
1248
- "required": true
1514
+ "required": false
1249
1515
  },
1250
- "icon": {
1251
- "name": "icon",
1516
+ "key": {
1517
+ "name": "key",
1518
+ "type": "string",
1519
+ "required": false
1520
+ },
1521
+ "header": {
1522
+ "name": "header",
1252
1523
  "type": "string",
1253
1524
  "required": false
1254
1525
  }
1255
1526
  }
1256
1527
  }
1257
- },
1258
- "title": {
1259
- "type": "string",
1260
- "default": "Change Orders",
1261
- "label": "Section title",
1262
- "description": "Heading shown above the change-order log",
1263
- "tier": "customization"
1264
1528
  }
1265
1529
  },
1266
1530
  "scope": "collection"
@@ -1279,4 +1543,4 @@
1279
1543
  ]
1280
1544
  }
1281
1545
  ]
1282
- }
1546
+ }