@open-mercato/core 0.6.5-develop.4516.1.88e6ab71a9 → 0.6.5-develop.4544.1.71c003c861

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 (726) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/AGENTS.md +5 -0
  3. package/dist/generated/entities/role/index.js +3 -1
  4. package/dist/generated/entities/role/index.js.map +2 -2
  5. package/dist/generated/entities/step_instance/index.js +2 -0
  6. package/dist/generated/entities/step_instance/index.js.map +2 -2
  7. package/dist/generated/entities/user/index.js +3 -1
  8. package/dist/generated/entities/user/index.js.map +2 -2
  9. package/dist/generated/entities/user_task/index.js +2 -0
  10. package/dist/generated/entities/user_task/index.js.map +2 -2
  11. package/dist/generated/entities/workflow_branch_instance/index.js +39 -0
  12. package/dist/generated/entities/workflow_branch_instance/index.js.map +7 -0
  13. package/dist/generated/entities/workflow_event/index.js +2 -0
  14. package/dist/generated/entities/workflow_event/index.js.map +2 -2
  15. package/dist/generated/entities/workflow_instance/index.js +2 -0
  16. package/dist/generated/entities/workflow_instance/index.js.map +2 -2
  17. package/dist/generated/entities.ids.generated.js +1 -0
  18. package/dist/generated/entities.ids.generated.js.map +2 -2
  19. package/dist/generated/entity-fields-registry.js +26 -0
  20. package/dist/generated/entity-fields-registry.js.map +2 -2
  21. package/dist/helpers/integration/optimisticLockUi.js +104 -0
  22. package/dist/helpers/integration/optimisticLockUi.js.map +7 -0
  23. package/dist/helpers/integration/salesFixtures.js +17 -0
  24. package/dist/helpers/integration/salesFixtures.js.map +2 -2
  25. package/dist/modules/api_keys/backend/api-keys/page.js +9 -5
  26. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  27. package/dist/modules/attachments/components/AttachmentPartitionSettings.js +17 -9
  28. package/dist/modules/attachments/components/AttachmentPartitionSettings.js.map +2 -2
  29. package/dist/modules/auth/api/roles/acl/route.js +32 -13
  30. package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
  31. package/dist/modules/auth/api/roles/route.js +3 -1
  32. package/dist/modules/auth/api/roles/route.js.map +2 -2
  33. package/dist/modules/auth/api/sidebar/preferences/route.js +71 -3
  34. package/dist/modules/auth/api/sidebar/preferences/route.js.map +2 -2
  35. package/dist/modules/auth/api/users/acl/route.js +42 -19
  36. package/dist/modules/auth/api/users/acl/route.js.map +2 -2
  37. package/dist/modules/auth/api/users/route.js +3 -1
  38. package/dist/modules/auth/api/users/route.js.map +2 -2
  39. package/dist/modules/auth/backend/roles/[id]/edit/page.js +24 -4
  40. package/dist/modules/auth/backend/roles/[id]/edit/page.js.map +2 -2
  41. package/dist/modules/auth/backend/roles/page.js +8 -4
  42. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  43. package/dist/modules/auth/backend/users/[id]/edit/page.js +27 -5
  44. package/dist/modules/auth/backend/users/[id]/edit/page.js.map +2 -2
  45. package/dist/modules/auth/backend/users/page.js +6 -2
  46. package/dist/modules/auth/backend/users/page.js.map +2 -2
  47. package/dist/modules/auth/components/AclEditor.js +3 -1
  48. package/dist/modules/auth/components/AclEditor.js.map +2 -2
  49. package/dist/modules/auth/data/entities.js +6 -0
  50. package/dist/modules/auth/data/entities.js.map +2 -2
  51. package/dist/modules/auth/services/sidebarPreferencesService.js +32 -4
  52. package/dist/modules/auth/services/sidebarPreferencesService.js.map +2 -2
  53. package/dist/modules/business_rules/api/rules/route.js +28 -0
  54. package/dist/modules/business_rules/api/rules/route.js.map +2 -2
  55. package/dist/modules/business_rules/api/sets/route.js +28 -0
  56. package/dist/modules/business_rules/api/sets/route.js.map +2 -2
  57. package/dist/modules/business_rules/backend/rules/[id]/page.js +11 -4
  58. package/dist/modules/business_rules/backend/rules/[id]/page.js.map +3 -3
  59. package/dist/modules/business_rules/backend/rules/page.js +20 -11
  60. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  61. package/dist/modules/business_rules/backend/sets/[id]/page.js +11 -4
  62. package/dist/modules/business_rules/backend/sets/[id]/page.js.map +2 -2
  63. package/dist/modules/business_rules/backend/sets/page.js +20 -11
  64. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  65. package/dist/modules/catalog/api/categories/route.js +2 -0
  66. package/dist/modules/catalog/api/categories/route.js.map +2 -2
  67. package/dist/modules/catalog/api/products/route.js +2 -1
  68. package/dist/modules/catalog/api/products/route.js.map +2 -2
  69. package/dist/modules/catalog/backend/catalog/categories/[id]/edit/page.js +2 -0
  70. package/dist/modules/catalog/backend/catalog/categories/[id]/edit/page.js.map +2 -2
  71. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +94 -40
  72. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  73. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js +37 -8
  74. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js.map +2 -2
  75. package/dist/modules/catalog/backend/catalog/products/optionSchemaClient.js.map +2 -2
  76. package/dist/modules/catalog/commands/variants.js +32 -31
  77. package/dist/modules/catalog/commands/variants.js.map +2 -2
  78. package/dist/modules/catalog/components/PriceKindSettings.js +12 -5
  79. package/dist/modules/catalog/components/PriceKindSettings.js.map +2 -2
  80. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  81. package/dist/modules/catalog/components/products/ProductMediaManager.js.map +2 -2
  82. package/dist/modules/catalog/components/products/ProductsDataTable.js +5 -3
  83. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  84. package/dist/modules/catalog/components/products/productForm.js.map +2 -2
  85. package/dist/modules/catalog/components/products/variantForm.js +2 -1
  86. package/dist/modules/catalog/components/products/variantForm.js.map +2 -2
  87. package/dist/modules/communication_channels/backend/profile/communication-channels/page.js +5 -0
  88. package/dist/modules/communication_channels/backend/profile/communication-channels/page.js.map +2 -2
  89. package/dist/modules/currencies/backend/currencies/[id]/page.js +6 -3
  90. package/dist/modules/currencies/backend/currencies/[id]/page.js.map +2 -2
  91. package/dist/modules/currencies/backend/currencies/page.js +18 -11
  92. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  93. package/dist/modules/currencies/backend/exchange-rates/[id]/page.js +1 -0
  94. package/dist/modules/currencies/backend/exchange-rates/[id]/page.js.map +2 -2
  95. package/dist/modules/currencies/backend/exchange-rates/page.js +10 -6
  96. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  97. package/dist/modules/currencies/commands/currencies.js +7 -5
  98. package/dist/modules/currencies/commands/currencies.js.map +2 -2
  99. package/dist/modules/currencies/components/CurrencyFetchingConfig.js +26 -19
  100. package/dist/modules/currencies/components/CurrencyFetchingConfig.js.map +2 -2
  101. package/dist/modules/customer_accounts/api/admin/roles/[id].js +28 -5
  102. package/dist/modules/customer_accounts/api/admin/roles/[id].js.map +2 -2
  103. package/dist/modules/customer_accounts/api/admin/roles.js +4 -2
  104. package/dist/modules/customer_accounts/api/admin/roles.js.map +2 -2
  105. package/dist/modules/customer_accounts/api/admin/users/[id].js +28 -5
  106. package/dist/modules/customer_accounts/api/admin/users/[id].js.map +2 -2
  107. package/dist/modules/customer_accounts/api/admin/users.js +2 -0
  108. package/dist/modules/customer_accounts/api/admin/users.js.map +2 -2
  109. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +16 -8
  110. package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
  111. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +8 -4
  112. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  113. package/dist/modules/customer_accounts/backend/customer_accounts/settings/domain/page.js +8 -4
  114. package/dist/modules/customer_accounts/backend/customer_accounts/settings/domain/page.js.map +2 -2
  115. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +29 -18
  116. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  117. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +18 -11
  118. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  119. package/dist/modules/customers/api/companies/route.js +13 -2
  120. package/dist/modules/customers/api/companies/route.js.map +2 -2
  121. package/dist/modules/customers/api/deals/route.js +2 -0
  122. package/dist/modules/customers/api/deals/route.js.map +2 -2
  123. package/dist/modules/customers/api/people/route.js +11 -2
  124. package/dist/modules/customers/api/people/route.js.map +2 -2
  125. package/dist/modules/customers/api/todos/route.js +1 -0
  126. package/dist/modules/customers/api/todos/route.js.map +2 -2
  127. package/dist/modules/customers/backend/config/customers/deals/page.js.map +2 -2
  128. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js +34 -21
  129. package/dist/modules/customers/backend/config/customers/pipeline-stages/page.js.map +2 -2
  130. package/dist/modules/customers/backend/customers/companies/[id]/page.js +45 -27
  131. package/dist/modules/customers/backend/customers/companies/[id]/page.js.map +2 -2
  132. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  133. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +22 -5
  134. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  135. package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js +30 -8
  136. package/dist/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.js.map +2 -2
  137. package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -0
  138. package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
  139. package/dist/modules/customers/backend/customers/deals/page.js +16 -6
  140. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  141. package/dist/modules/customers/backend/customers/deals/pipeline/page.js +62 -39
  142. package/dist/modules/customers/backend/customers/deals/pipeline/page.js.map +2 -2
  143. package/dist/modules/customers/backend/customers/people/[id]/page.js +41 -26
  144. package/dist/modules/customers/backend/customers/people/[id]/page.js.map +2 -2
  145. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  146. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +50 -23
  147. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  148. package/dist/modules/customers/commands/addresses.js +16 -14
  149. package/dist/modules/customers/commands/addresses.js.map +2 -2
  150. package/dist/modules/customers/commands/companies.js +1 -1
  151. package/dist/modules/customers/commands/companies.js.map +2 -2
  152. package/dist/modules/customers/commands/interactions.js +41 -4
  153. package/dist/modules/customers/commands/interactions.js.map +2 -2
  154. package/dist/modules/customers/commands/people.js +1 -1
  155. package/dist/modules/customers/commands/people.js.map +2 -2
  156. package/dist/modules/customers/commands/personCompanyLinks.js +8 -5
  157. package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
  158. package/dist/modules/customers/commands/pipeline-stages.js +13 -11
  159. package/dist/modules/customers/commands/pipeline-stages.js.map +3 -3
  160. package/dist/modules/customers/components/AddressFormatSettings.js.map +2 -2
  161. package/dist/modules/customers/components/DictionarySettings.js +20 -13
  162. package/dist/modules/customers/components/DictionarySettings.js.map +2 -2
  163. package/dist/modules/customers/components/DictionarySortSettings.js +4 -0
  164. package/dist/modules/customers/components/DictionarySortSettings.js.map +2 -2
  165. package/dist/modules/customers/components/PipelineSettings.js +38 -23
  166. package/dist/modules/customers/components/PipelineSettings.js.map +2 -2
  167. package/dist/modules/customers/components/detail/ActivityTimeline.js +1 -1
  168. package/dist/modules/customers/components/detail/ActivityTimeline.js.map +2 -2
  169. package/dist/modules/customers/components/detail/AddressesSection.js +4 -0
  170. package/dist/modules/customers/components/detail/AddressesSection.js.map +2 -2
  171. package/dist/modules/customers/components/detail/CompanyPeopleSection.js +28 -22
  172. package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
  173. package/dist/modules/customers/components/detail/DealsSection.js +36 -24
  174. package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
  175. package/dist/modules/customers/components/detail/EmailCardActions.js +5 -0
  176. package/dist/modules/customers/components/detail/EmailCardActions.js.map +2 -2
  177. package/dist/modules/customers/components/detail/EntityTagsDialog.js +7 -0
  178. package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
  179. package/dist/modules/customers/components/detail/ManageTagsDialog.js +34 -22
  180. package/dist/modules/customers/components/detail/ManageTagsDialog.js.map +2 -2
  181. package/dist/modules/customers/components/detail/PersonCompaniesSection.js +41 -29
  182. package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
  183. package/dist/modules/customers/components/detail/RoleAssignmentRow.js +14 -8
  184. package/dist/modules/customers/components/detail/RoleAssignmentRow.js.map +2 -2
  185. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +14 -6
  186. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
  187. package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js +29 -13
  188. package/dist/modules/customers/components/detail/hooks/useInteractionMutations.js.map +2 -2
  189. package/dist/modules/customers/components/detail/hooks/useInteractions.js +77 -35
  190. package/dist/modules/customers/components/detail/hooks/useInteractions.js.map +2 -2
  191. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +25 -17
  192. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
  193. package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
  194. package/dist/modules/customers/components/formConfig.js.map +2 -2
  195. package/dist/modules/customers/data/guards.js +66 -0
  196. package/dist/modules/customers/data/guards.js.map +7 -0
  197. package/dist/modules/customers/di.js +37 -0
  198. package/dist/modules/customers/di.js.map +2 -2
  199. package/dist/modules/customers/lib/todoCompatibility.js +11 -0
  200. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  201. package/dist/modules/dashboards/components/WidgetVisibilityEditor.js.map +2 -2
  202. package/dist/modules/data_sync/api/options.js +4 -4
  203. package/dist/modules/data_sync/api/options.js.map +2 -2
  204. package/dist/modules/data_sync/api/schedules/route.js +9 -1
  205. package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
  206. package/dist/modules/data_sync/backend/data-sync/page.js +17 -8
  207. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  208. package/dist/modules/data_sync/components/IntegrationScheduleTab.js +43 -22
  209. package/dist/modules/data_sync/components/IntegrationScheduleTab.js.map +2 -2
  210. package/dist/modules/data_sync/lib/sync-schedule-service.js +9 -0
  211. package/dist/modules/data_sync/lib/sync-schedule-service.js.map +2 -2
  212. package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js +8 -1
  213. package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js.map +2 -2
  214. package/dist/modules/dictionaries/api/[dictionaryId]/route.js +17 -1
  215. package/dist/modules/dictionaries/api/[dictionaryId]/route.js.map +2 -2
  216. package/dist/modules/dictionaries/components/DictionariesManager.js +31 -10
  217. package/dist/modules/dictionaries/components/DictionariesManager.js.map +2 -2
  218. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js +28 -15
  219. package/dist/modules/dictionaries/components/DictionaryEntriesEditor.js.map +2 -2
  220. package/dist/modules/directory/api/organizations/route.js +3 -0
  221. package/dist/modules/directory/api/organizations/route.js.map +2 -2
  222. package/dist/modules/directory/backend/directory/organizations/[id]/edit/page.js +2 -0
  223. package/dist/modules/directory/backend/directory/organizations/[id]/edit/page.js.map +2 -2
  224. package/dist/modules/directory/backend/directory/organizations/page.js +9 -5
  225. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  226. package/dist/modules/directory/backend/directory/tenants/[id]/edit/page.js +7 -3
  227. package/dist/modules/directory/backend/directory/tenants/[id]/edit/page.js.map +2 -2
  228. package/dist/modules/directory/backend/directory/tenants/page.js +8 -4
  229. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  230. package/dist/modules/directory/commands/organizations.js +7 -2
  231. package/dist/modules/directory/commands/organizations.js.map +2 -2
  232. package/dist/modules/entities/api/records.js +66 -0
  233. package/dist/modules/entities/api/records.js.map +2 -2
  234. package/dist/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.js +1 -0
  235. package/dist/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.js.map +2 -2
  236. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +8 -4
  237. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  238. package/dist/modules/entities/lib/helpers.js +17 -0
  239. package/dist/modules/entities/lib/helpers.js.map +2 -2
  240. package/dist/modules/feature_toggles/api/global/[id]/override/route.js +2 -1
  241. package/dist/modules/feature_toggles/api/global/[id]/override/route.js.map +2 -2
  242. package/dist/modules/feature_toggles/api/overrides/route.js +15 -0
  243. package/dist/modules/feature_toggles/api/overrides/route.js.map +2 -2
  244. package/dist/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.js +15 -14
  245. package/dist/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.js.map +2 -2
  246. package/dist/modules/feature_toggles/components/FeatureToggleOverrideCard.js +20 -12
  247. package/dist/modules/feature_toggles/components/FeatureToggleOverrideCard.js.map +2 -2
  248. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +6 -2
  249. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  250. package/dist/modules/feature_toggles/components/formConfig.js +2 -1
  251. package/dist/modules/feature_toggles/components/formConfig.js.map +2 -2
  252. package/dist/modules/feature_toggles/components/overrideFormConfig.js +5 -1
  253. package/dist/modules/feature_toggles/components/overrideFormConfig.js.map +2 -2
  254. package/dist/modules/feature_toggles/data/validators.js +7 -4
  255. package/dist/modules/feature_toggles/data/validators.js.map +2 -2
  256. package/dist/modules/inbox_ops/api/settings/route.js +17 -2
  257. package/dist/modules/inbox_ops/api/settings/route.js.map +2 -2
  258. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js +13 -8
  259. package/dist/modules/inbox_ops/backend/inbox-ops/settings/page.js.map +2 -2
  260. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js +9 -4
  261. package/dist/modules/inbox_ops/components/proposals/EditActionDialog.js.map +2 -2
  262. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +18 -11
  263. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  264. package/dist/modules/integrations/backend/integrations/page.js +12 -8
  265. package/dist/modules/integrations/backend/integrations/page.js.map +2 -2
  266. package/dist/modules/messages/commands/messages.js +13 -10
  267. package/dist/modules/messages/commands/messages.js.map +2 -2
  268. package/dist/modules/perspectives/api/[tableId]/route.js +39 -30
  269. package/dist/modules/perspectives/api/[tableId]/route.js.map +2 -2
  270. package/dist/modules/perspectives/services/perspectiveService.js +7 -0
  271. package/dist/modules/perspectives/services/perspectiveService.js.map +2 -2
  272. package/dist/modules/planner/backend/planner/availability-rulesets/[id]/page.js +6 -14
  273. package/dist/modules/planner/backend/planner/availability-rulesets/[id]/page.js.map +3 -3
  274. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +4 -2
  275. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  276. package/dist/modules/planner/components/AvailabilityRuleSetForm.js +2 -0
  277. package/dist/modules/planner/components/AvailabilityRuleSetForm.js.map +2 -2
  278. package/dist/modules/planner/components/AvailabilityRulesEditor.js +36 -11
  279. package/dist/modules/planner/components/AvailabilityRulesEditor.js.map +2 -2
  280. package/dist/modules/planner/components/AvailabilitySchedule.js +9 -5
  281. package/dist/modules/planner/components/AvailabilitySchedule.js.map +2 -2
  282. package/dist/modules/progress/api/jobs/[id]/route.js +7 -1
  283. package/dist/modules/progress/api/jobs/[id]/route.js.map +2 -2
  284. package/dist/modules/query_index/lib/engine.js +19 -0
  285. package/dist/modules/query_index/lib/engine.js.map +2 -2
  286. package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js +1 -0
  287. package/dist/modules/resources/backend/resources/resource-types/[id]/edit/page.js.map +2 -2
  288. package/dist/modules/resources/backend/resources/resource-types/page.js +4 -2
  289. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  290. package/dist/modules/resources/backend/resources/resources/[id]/page.js +14 -3
  291. package/dist/modules/resources/backend/resources/resources/[id]/page.js.map +2 -2
  292. package/dist/modules/resources/backend/resources/resources/page.js +8 -4
  293. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  294. package/dist/modules/resources/components/ResourceCrudForm.js +2 -0
  295. package/dist/modules/resources/components/ResourceCrudForm.js.map +2 -2
  296. package/dist/modules/resources/components/ResourceTypeCrudForm.js +1 -0
  297. package/dist/modules/resources/components/ResourceTypeCrudForm.js.map +2 -2
  298. package/dist/modules/sales/api/documents/factory.js +7 -2
  299. package/dist/modules/sales/api/documents/factory.js.map +2 -2
  300. package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js +3 -1
  301. package/dist/modules/sales/backend/sales/channels/[channelId]/edit/page.js.map +2 -2
  302. package/dist/modules/sales/backend/sales/channels/offers/page.js +13 -4
  303. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  304. package/dist/modules/sales/backend/sales/channels/page.js +16 -4
  305. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  306. package/dist/modules/sales/backend/sales/documents/[id]/page.js +68 -22
  307. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  308. package/dist/modules/sales/backend/sales/documents/create/page.js.map +2 -2
  309. package/dist/modules/sales/commands/documentAddresses.js +181 -2
  310. package/dist/modules/sales/commands/documentAddresses.js.map +2 -2
  311. package/dist/modules/sales/commands/documents.js +29 -1
  312. package/dist/modules/sales/commands/documents.js.map +2 -2
  313. package/dist/modules/sales/commands/returns.js +12 -2
  314. package/dist/modules/sales/commands/returns.js.map +2 -2
  315. package/dist/modules/sales/commands/shared.js +15 -0
  316. package/dist/modules/sales/commands/shared.js.map +2 -2
  317. package/dist/modules/sales/commands/shipments.js +4 -1
  318. package/dist/modules/sales/commands/shipments.js.map +2 -2
  319. package/dist/modules/sales/components/AdjustmentKindSettings.js +19 -11
  320. package/dist/modules/sales/components/AdjustmentKindSettings.js.map +2 -2
  321. package/dist/modules/sales/components/DocumentNumberSettings.js.map +2 -2
  322. package/dist/modules/sales/components/OrderEditingSettings.js.map +2 -2
  323. package/dist/modules/sales/components/PaymentMethodsSettings.js +12 -4
  324. package/dist/modules/sales/components/PaymentMethodsSettings.js.map +2 -2
  325. package/dist/modules/sales/components/ShippingMethodsSettings.js +12 -4
  326. package/dist/modules/sales/components/ShippingMethodsSettings.js.map +2 -2
  327. package/dist/modules/sales/components/StatusSettings.js +18 -11
  328. package/dist/modules/sales/components/StatusSettings.js.map +2 -2
  329. package/dist/modules/sales/components/TaxRatesSettings.js +12 -4
  330. package/dist/modules/sales/components/TaxRatesSettings.js.map +2 -2
  331. package/dist/modules/sales/components/channels/ChannelOfferForm.js +47 -16
  332. package/dist/modules/sales/components/channels/ChannelOfferForm.js.map +2 -2
  333. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +8 -4
  334. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  335. package/dist/modules/sales/components/documents/AddressesSection.js +44 -25
  336. package/dist/modules/sales/components/documents/AddressesSection.js.map +2 -2
  337. package/dist/modules/sales/components/documents/AdjustmentsSection.js +43 -23
  338. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  339. package/dist/modules/sales/components/documents/ItemsSection.js +22 -13
  340. package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
  341. package/dist/modules/sales/components/documents/LineItemDialog.js +23 -10
  342. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  343. package/dist/modules/sales/components/documents/PaymentDialog.js +29 -14
  344. package/dist/modules/sales/components/documents/PaymentDialog.js.map +2 -2
  345. package/dist/modules/sales/components/documents/PaymentsSection.js +20 -10
  346. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  347. package/dist/modules/sales/components/documents/ReturnDialog.js +26 -17
  348. package/dist/modules/sales/components/documents/ReturnDialog.js.map +2 -2
  349. package/dist/modules/sales/components/documents/ReturnsSection.js +3 -1
  350. package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
  351. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +10 -5
  352. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  353. package/dist/modules/sales/components/documents/ShipmentDialog.js +21 -7
  354. package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
  355. package/dist/modules/sales/components/documents/ShipmentsSection.js +19 -10
  356. package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
  357. package/dist/modules/sales/components/documents/optimisticLock.js +27 -0
  358. package/dist/modules/sales/components/documents/optimisticLock.js.map +7 -0
  359. package/dist/modules/sales/di.js +18 -0
  360. package/dist/modules/sales/di.js.map +2 -2
  361. package/dist/modules/shipping_carriers/api/cancel/route.js +2 -2
  362. package/dist/modules/shipping_carriers/api/cancel/route.js.map +2 -2
  363. package/dist/modules/shipping_carriers/lib/status-sync.js +8 -1
  364. package/dist/modules/shipping_carriers/lib/status-sync.js.map +2 -2
  365. package/dist/modules/staff/api/job-histories.js +11 -2
  366. package/dist/modules/staff/api/job-histories.js.map +2 -2
  367. package/dist/modules/staff/api/timesheets/time-entries/route.js +11 -4
  368. package/dist/modules/staff/api/timesheets/time-entries/route.js.map +2 -2
  369. package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js +13 -8
  370. package/dist/modules/staff/backend/staff/leave-requests/[id]/page.js.map +2 -2
  371. package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js +2 -1
  372. package/dist/modules/staff/backend/staff/my-leave-requests/[id]/page.js.map +2 -2
  373. package/dist/modules/staff/backend/staff/team-members/[id]/page.js +7 -4
  374. package/dist/modules/staff/backend/staff/team-members/[id]/page.js.map +2 -2
  375. package/dist/modules/staff/backend/staff/team-members/page.js +4 -2
  376. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  377. package/dist/modules/staff/backend/staff/team-roles/[id]/edit/page.js +1 -0
  378. package/dist/modules/staff/backend/staff/team-roles/[id]/edit/page.js.map +2 -2
  379. package/dist/modules/staff/backend/staff/team-roles/page.js +4 -2
  380. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  381. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +5 -2
  382. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  383. package/dist/modules/staff/backend/staff/teams/page.js +12 -3
  384. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  385. package/dist/modules/staff/backend/staff/timesheets/page.js +4 -1
  386. package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
  387. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +2 -2
  388. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +12 -3
  389. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  390. package/dist/modules/staff/commands/job-histories.js +40 -3
  391. package/dist/modules/staff/commands/job-histories.js.map +2 -2
  392. package/dist/modules/staff/components/LeaveRequestForm.js +1 -0
  393. package/dist/modules/staff/components/LeaveRequestForm.js.map +2 -2
  394. package/dist/modules/staff/components/TeamForm.js +1 -0
  395. package/dist/modules/staff/components/TeamForm.js.map +2 -2
  396. package/dist/modules/staff/components/TeamMemberForm.js +1 -0
  397. package/dist/modules/staff/components/TeamMemberForm.js.map +2 -2
  398. package/dist/modules/staff/components/TeamRoleForm.js +1 -0
  399. package/dist/modules/staff/components/TeamRoleForm.js.map +2 -2
  400. package/dist/modules/staff/components/detail/JobHistorySection.js +20 -7
  401. package/dist/modules/staff/components/detail/JobHistorySection.js.map +2 -2
  402. package/dist/modules/staff/data/validators.js +7 -1
  403. package/dist/modules/staff/data/validators.js.map +2 -2
  404. package/dist/modules/staff/lib/leaveRequestHelpers.js +2 -1
  405. package/dist/modules/staff/lib/leaveRequestHelpers.js.map +2 -2
  406. package/dist/modules/translations/components/TranslationManager.js +12 -8
  407. package/dist/modules/translations/components/TranslationManager.js.map +2 -2
  408. package/dist/modules/workflows/api/definitions/[id]/route.js +106 -0
  409. package/dist/modules/workflows/api/definitions/[id]/route.js.map +2 -2
  410. package/dist/modules/workflows/backend/definitions/[id]/page.js +11 -3
  411. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  412. package/dist/modules/workflows/backend/definitions/page.js +19 -8
  413. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  414. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +29 -16
  415. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  416. package/dist/modules/workflows/components/NodeEditDialog.js +3 -1
  417. package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
  418. package/dist/modules/workflows/components/WorkflowGraphImpl.js +4 -2
  419. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +2 -2
  420. package/dist/modules/workflows/components/formConfig.js +4 -1
  421. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  422. package/dist/modules/workflows/components/nodes/ParallelForkNode.js +49 -0
  423. package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +7 -0
  424. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +49 -0
  425. package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +7 -0
  426. package/dist/modules/workflows/components/nodes/index.js +4 -0
  427. package/dist/modules/workflows/components/nodes/index.js.map +2 -2
  428. package/dist/modules/workflows/data/entities.js +81 -0
  429. package/dist/modules/workflows/data/entities.js.map +2 -2
  430. package/dist/modules/workflows/data/validators.js +146 -1
  431. package/dist/modules/workflows/data/validators.js.map +2 -2
  432. package/dist/modules/workflows/di.js +12 -0
  433. package/dist/modules/workflows/di.js.map +2 -2
  434. package/dist/modules/workflows/events.js +7 -1
  435. package/dist/modules/workflows/events.js.map +2 -2
  436. package/dist/modules/workflows/lib/activity-executor.js +4 -2
  437. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  438. package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
  439. package/dist/modules/workflows/lib/event-logger.js +2 -0
  440. package/dist/modules/workflows/lib/event-logger.js.map +2 -2
  441. package/dist/modules/workflows/lib/execution-token.js +98 -0
  442. package/dist/modules/workflows/lib/execution-token.js.map +7 -0
  443. package/dist/modules/workflows/lib/node-type-icons.js +14 -5
  444. package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
  445. package/dist/modules/workflows/lib/parallel-handler.js +364 -0
  446. package/dist/modules/workflows/lib/parallel-handler.js.map +7 -0
  447. package/dist/modules/workflows/lib/signal-handler.js +63 -1
  448. package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
  449. package/dist/modules/workflows/lib/step-handler.js +74 -30
  450. package/dist/modules/workflows/lib/step-handler.js.map +2 -2
  451. package/dist/modules/workflows/lib/task-handler.js +26 -0
  452. package/dist/modules/workflows/lib/task-handler.js.map +2 -2
  453. package/dist/modules/workflows/lib/timer-handler.js +26 -1
  454. package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
  455. package/dist/modules/workflows/lib/transition-handler.js +33 -21
  456. package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
  457. package/dist/modules/workflows/lib/workflow-executor.js +39 -1
  458. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  459. package/dist/modules/workflows/migrations/Migration20260602120000.js +24 -0
  460. package/dist/modules/workflows/migrations/Migration20260602120000.js.map +7 -0
  461. package/dist/modules/workflows/workers/workflow-activities.worker.js +8 -4
  462. package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
  463. package/generated/entities/role/index.ts +1 -0
  464. package/generated/entities/step_instance/index.ts +1 -0
  465. package/generated/entities/user/index.ts +1 -0
  466. package/generated/entities/user_task/index.ts +1 -0
  467. package/generated/entities/workflow_branch_instance/index.ts +18 -0
  468. package/generated/entities/workflow_event/index.ts +1 -0
  469. package/generated/entities/workflow_instance/index.ts +1 -0
  470. package/generated/entities.ids.generated.ts +1 -0
  471. package/generated/entity-fields-registry.ts +26 -0
  472. package/jest.setup.ts +17 -0
  473. package/package.json +8 -7
  474. package/src/helpers/integration/optimisticLockUi.ts +172 -0
  475. package/src/helpers/integration/salesFixtures.ts +29 -0
  476. package/src/modules/api_keys/backend/api-keys/page.tsx +10 -5
  477. package/src/modules/attachments/components/AttachmentPartitionSettings.tsx +19 -9
  478. package/src/modules/auth/api/roles/acl/route.ts +37 -11
  479. package/src/modules/auth/api/roles/route.ts +2 -0
  480. package/src/modules/auth/api/sidebar/preferences/route.ts +73 -0
  481. package/src/modules/auth/api/users/acl/route.ts +46 -18
  482. package/src/modules/auth/api/users/route.ts +2 -0
  483. package/src/modules/auth/backend/roles/[id]/edit/page.tsx +29 -4
  484. package/src/modules/auth/backend/roles/page.tsx +9 -4
  485. package/src/modules/auth/backend/users/[id]/edit/page.tsx +37 -4
  486. package/src/modules/auth/backend/users/page.tsx +7 -2
  487. package/src/modules/auth/components/AclEditor.tsx +10 -1
  488. package/src/modules/auth/data/entities.ts +7 -1
  489. package/src/modules/auth/services/sidebarPreferencesService.ts +38 -4
  490. package/src/modules/business_rules/api/rules/route.ts +30 -0
  491. package/src/modules/business_rules/api/sets/route.ts +30 -0
  492. package/src/modules/business_rules/backend/rules/[id]/page.tsx +16 -4
  493. package/src/modules/business_rules/backend/rules/page.tsx +20 -11
  494. package/src/modules/business_rules/backend/sets/[id]/page.tsx +16 -4
  495. package/src/modules/business_rules/backend/sets/page.tsx +20 -11
  496. package/src/modules/catalog/api/categories/route.ts +3 -0
  497. package/src/modules/catalog/api/products/route.ts +4 -0
  498. package/src/modules/catalog/backend/catalog/categories/[id]/edit/page.tsx +5 -0
  499. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +112 -35
  500. package/src/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.tsx +56 -7
  501. package/src/modules/catalog/backend/catalog/products/optionSchemaClient.ts +2 -0
  502. package/src/modules/catalog/commands/variants.ts +32 -32
  503. package/src/modules/catalog/components/PriceKindSettings.tsx +20 -7
  504. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +1 -0
  505. package/src/modules/catalog/components/products/ProductMediaManager.tsx +2 -0
  506. package/src/modules/catalog/components/products/ProductsDataTable.tsx +8 -4
  507. package/src/modules/catalog/components/products/productForm.ts +3 -0
  508. package/src/modules/catalog/components/products/variantForm.ts +9 -0
  509. package/src/modules/communication_channels/backend/profile/communication-channels/page.tsx +5 -0
  510. package/src/modules/currencies/backend/currencies/[id]/page.tsx +13 -6
  511. package/src/modules/currencies/backend/currencies/page.tsx +18 -11
  512. package/src/modules/currencies/backend/exchange-rates/[id]/page.tsx +3 -0
  513. package/src/modules/currencies/backend/exchange-rates/page.tsx +10 -6
  514. package/src/modules/currencies/commands/currencies.ts +10 -5
  515. package/src/modules/currencies/components/CurrencyFetchingConfig.tsx +31 -21
  516. package/src/modules/customer_accounts/api/admin/roles/[id].ts +35 -5
  517. package/src/modules/customer_accounts/api/admin/roles.ts +2 -0
  518. package/src/modules/customer_accounts/api/admin/users/[id].ts +38 -5
  519. package/src/modules/customer_accounts/api/admin/users.ts +2 -0
  520. package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +34 -20
  521. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +9 -4
  522. package/src/modules/customer_accounts/backend/customer_accounts/settings/domain/page.tsx +11 -4
  523. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +28 -17
  524. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +19 -11
  525. package/src/modules/customers/AGENTS.md +2 -2
  526. package/src/modules/customers/api/companies/route.ts +14 -1
  527. package/src/modules/customers/api/deals/route.ts +3 -0
  528. package/src/modules/customers/api/people/route.ts +12 -1
  529. package/src/modules/customers/api/todos/route.ts +1 -0
  530. package/src/modules/customers/backend/config/customers/deals/page.tsx +1 -0
  531. package/src/modules/customers/backend/config/customers/pipeline-stages/page.tsx +36 -21
  532. package/src/modules/customers/backend/customers/companies/[id]/page.tsx +52 -27
  533. package/src/modules/customers/backend/customers/companies/page.tsx +2 -0
  534. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +27 -5
  535. package/src/modules/customers/backend/customers/deals/[id]/hooks/useDealFormHandlers.ts +39 -7
  536. package/src/modules/customers/backend/customers/deals/[id]/page.tsx +1 -0
  537. package/src/modules/customers/backend/customers/deals/page.tsx +18 -6
  538. package/src/modules/customers/backend/customers/deals/pipeline/page.tsx +64 -39
  539. package/src/modules/customers/backend/customers/people/[id]/page.tsx +46 -26
  540. package/src/modules/customers/backend/customers/people/page.tsx +2 -0
  541. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +84 -24
  542. package/src/modules/customers/commands/addresses.ts +16 -14
  543. package/src/modules/customers/commands/companies.ts +3 -1
  544. package/src/modules/customers/commands/interactions.ts +50 -4
  545. package/src/modules/customers/commands/people.ts +2 -1
  546. package/src/modules/customers/commands/personCompanyLinks.ts +8 -5
  547. package/src/modules/customers/commands/pipeline-stages.ts +16 -16
  548. package/src/modules/customers/components/AddressFormatSettings.tsx +1 -0
  549. package/src/modules/customers/components/DictionarySettings.tsx +18 -13
  550. package/src/modules/customers/components/DictionarySortSettings.tsx +4 -0
  551. package/src/modules/customers/components/PipelineSettings.tsx +42 -21
  552. package/src/modules/customers/components/detail/ActivityTimeline.tsx +3 -3
  553. package/src/modules/customers/components/detail/AddressesSection.tsx +4 -0
  554. package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +2 -0
  555. package/src/modules/customers/components/detail/DealsSection.tsx +4 -0
  556. package/src/modules/customers/components/detail/EmailCardActions.tsx +5 -0
  557. package/src/modules/customers/components/detail/EntityTagsDialog.tsx +7 -0
  558. package/src/modules/customers/components/detail/ManageTagsDialog.tsx +4 -0
  559. package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +4 -0
  560. package/src/modules/customers/components/detail/RoleAssignmentRow.tsx +2 -0
  561. package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +23 -7
  562. package/src/modules/customers/components/detail/hooks/useInteractionMutations.ts +25 -15
  563. package/src/modules/customers/components/detail/hooks/useInteractions.ts +76 -35
  564. package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +30 -17
  565. package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +2 -0
  566. package/src/modules/customers/components/detail/types.ts +1 -0
  567. package/src/modules/customers/components/formConfig.tsx +2 -0
  568. package/src/modules/customers/data/guards.ts +67 -0
  569. package/src/modules/customers/di.ts +66 -0
  570. package/src/modules/customers/i18n/de.json +2 -0
  571. package/src/modules/customers/i18n/en.json +2 -0
  572. package/src/modules/customers/i18n/es.json +2 -0
  573. package/src/modules/customers/i18n/pl.json +2 -0
  574. package/src/modules/customers/lib/todoCompatibility.ts +14 -0
  575. package/src/modules/dashboards/components/WidgetVisibilityEditor.tsx +2 -0
  576. package/src/modules/data_sync/api/options.ts +7 -4
  577. package/src/modules/data_sync/api/schedules/route.ts +9 -1
  578. package/src/modules/data_sync/backend/data-sync/page.tsx +18 -5
  579. package/src/modules/data_sync/components/IntegrationScheduleTab.tsx +46 -19
  580. package/src/modules/data_sync/lib/sync-schedule-service.ts +11 -0
  581. package/src/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.ts +8 -1
  582. package/src/modules/dictionaries/api/[dictionaryId]/route.ts +23 -0
  583. package/src/modules/dictionaries/components/DictionariesManager.tsx +32 -9
  584. package/src/modules/dictionaries/components/DictionaryEntriesEditor.tsx +30 -14
  585. package/src/modules/dictionaries/i18n/de.json +1 -0
  586. package/src/modules/dictionaries/i18n/en.json +1 -0
  587. package/src/modules/dictionaries/i18n/es.json +1 -0
  588. package/src/modules/dictionaries/i18n/pl.json +1 -0
  589. package/src/modules/directory/api/organizations/route.ts +3 -0
  590. package/src/modules/directory/backend/directory/organizations/[id]/edit/page.tsx +8 -0
  591. package/src/modules/directory/backend/directory/organizations/page.tsx +10 -5
  592. package/src/modules/directory/backend/directory/tenants/[id]/edit/page.tsx +16 -5
  593. package/src/modules/directory/backend/directory/tenants/page.tsx +8 -4
  594. package/src/modules/directory/commands/organizations.ts +7 -4
  595. package/src/modules/entities/api/records.ts +99 -0
  596. package/src/modules/entities/backend/entities/user/[entityId]/records/[recordId]/page.tsx +7 -0
  597. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +8 -4
  598. package/src/modules/entities/lib/helpers.ts +17 -0
  599. package/src/modules/feature_toggles/api/global/[id]/override/route.ts +1 -0
  600. package/src/modules/feature_toggles/api/overrides/route.ts +19 -0
  601. package/src/modules/feature_toggles/backend/feature-toggles/global/[id]/edit/page.tsx +19 -13
  602. package/src/modules/feature_toggles/components/FeatureToggleOverrideCard.tsx +22 -12
  603. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +7 -2
  604. package/src/modules/feature_toggles/components/formConfig.tsx +2 -1
  605. package/src/modules/feature_toggles/components/overrideFormConfig.tsx +10 -1
  606. package/src/modules/feature_toggles/data/validators.ts +11 -3
  607. package/src/modules/inbox_ops/api/settings/route.ts +18 -0
  608. package/src/modules/inbox_ops/backend/inbox-ops/settings/page.tsx +15 -10
  609. package/src/modules/inbox_ops/components/proposals/EditActionDialog.tsx +9 -4
  610. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +20 -11
  611. package/src/modules/integrations/backend/integrations/page.tsx +13 -8
  612. package/src/modules/messages/commands/messages.ts +27 -15
  613. package/src/modules/perspectives/api/[tableId]/route.ts +11 -2
  614. package/src/modules/perspectives/services/perspectiveService.ts +13 -1
  615. package/src/modules/planner/backend/planner/availability-rulesets/[id]/page.tsx +16 -14
  616. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +6 -3
  617. package/src/modules/planner/components/AvailabilityRuleSetForm.tsx +3 -0
  618. package/src/modules/planner/components/AvailabilityRulesEditor.tsx +58 -15
  619. package/src/modules/planner/components/AvailabilitySchedule.tsx +22 -7
  620. package/src/modules/progress/api/jobs/[id]/route.ts +7 -0
  621. package/src/modules/query_index/lib/engine.ts +34 -0
  622. package/src/modules/resources/backend/resources/resource-types/[id]/edit/page.tsx +7 -1
  623. package/src/modules/resources/backend/resources/resource-types/page.tsx +6 -3
  624. package/src/modules/resources/backend/resources/resources/[id]/page.tsx +23 -3
  625. package/src/modules/resources/backend/resources/resources/page.tsx +15 -4
  626. package/src/modules/resources/components/ResourceCrudForm.tsx +3 -0
  627. package/src/modules/resources/components/ResourceTypeCrudForm.tsx +2 -0
  628. package/src/modules/sales/api/documents/factory.ts +13 -1
  629. package/src/modules/sales/backend/sales/channels/[channelId]/edit/page.tsx +6 -0
  630. package/src/modules/sales/backend/sales/channels/offers/page.tsx +10 -4
  631. package/src/modules/sales/backend/sales/channels/page.tsx +19 -4
  632. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +73 -20
  633. package/src/modules/sales/backend/sales/documents/create/page.tsx +2 -0
  634. package/src/modules/sales/commands/documentAddresses.ts +226 -4
  635. package/src/modules/sales/commands/documents.ts +28 -0
  636. package/src/modules/sales/commands/returns.ts +12 -3
  637. package/src/modules/sales/commands/shared.ts +36 -0
  638. package/src/modules/sales/commands/shipments.ts +17 -1
  639. package/src/modules/sales/components/AdjustmentKindSettings.tsx +20 -11
  640. package/src/modules/sales/components/DocumentNumberSettings.tsx +1 -0
  641. package/src/modules/sales/components/OrderEditingSettings.tsx +1 -0
  642. package/src/modules/sales/components/PaymentMethodsSettings.tsx +12 -4
  643. package/src/modules/sales/components/ShippingMethodsSettings.tsx +12 -4
  644. package/src/modules/sales/components/StatusSettings.tsx +20 -11
  645. package/src/modules/sales/components/TaxRatesSettings.tsx +12 -5
  646. package/src/modules/sales/components/channels/ChannelOfferForm.tsx +67 -14
  647. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +7 -4
  648. package/src/modules/sales/components/documents/AddressesSection.tsx +35 -25
  649. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +50 -25
  650. package/src/modules/sales/components/documents/ItemsSection.tsx +24 -13
  651. package/src/modules/sales/components/documents/LineItemDialog.tsx +26 -9
  652. package/src/modules/sales/components/documents/PaymentDialog.tsx +33 -14
  653. package/src/modules/sales/components/documents/PaymentsSection.tsx +22 -10
  654. package/src/modules/sales/components/documents/ReturnDialog.tsx +28 -17
  655. package/src/modules/sales/components/documents/ReturnsSection.tsx +4 -1
  656. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +11 -4
  657. package/src/modules/sales/components/documents/ShipmentDialog.tsx +23 -8
  658. package/src/modules/sales/components/documents/ShipmentsSection.tsx +20 -10
  659. package/src/modules/sales/components/documents/optimisticLock.ts +34 -0
  660. package/src/modules/sales/components/documents/shipmentTypes.ts +1 -0
  661. package/src/modules/sales/di.ts +35 -0
  662. package/src/modules/sales/i18n/de.json +3 -0
  663. package/src/modules/sales/i18n/en.json +3 -0
  664. package/src/modules/sales/i18n/es.json +3 -0
  665. package/src/modules/sales/i18n/pl.json +3 -0
  666. package/src/modules/shipping_carriers/api/cancel/route.ts +2 -2
  667. package/src/modules/shipping_carriers/lib/status-sync.ts +19 -0
  668. package/src/modules/staff/api/job-histories.ts +12 -2
  669. package/src/modules/staff/api/timesheets/time-entries/route.ts +16 -4
  670. package/src/modules/staff/backend/staff/leave-requests/[id]/page.tsx +12 -7
  671. package/src/modules/staff/backend/staff/my-leave-requests/[id]/page.tsx +2 -0
  672. package/src/modules/staff/backend/staff/team-members/[id]/page.tsx +16 -5
  673. package/src/modules/staff/backend/staff/team-members/page.tsx +6 -2
  674. package/src/modules/staff/backend/staff/team-roles/[id]/edit/page.tsx +8 -0
  675. package/src/modules/staff/backend/staff/team-roles/page.tsx +6 -2
  676. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +13 -3
  677. package/src/modules/staff/backend/staff/teams/page.tsx +9 -3
  678. package/src/modules/staff/backend/staff/timesheets/page.tsx +10 -1
  679. package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -0
  680. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +9 -3
  681. package/src/modules/staff/commands/job-histories.ts +42 -3
  682. package/src/modules/staff/components/LeaveRequestForm.tsx +2 -0
  683. package/src/modules/staff/components/TeamForm.tsx +2 -0
  684. package/src/modules/staff/components/TeamMemberForm.tsx +2 -0
  685. package/src/modules/staff/components/TeamRoleForm.tsx +2 -0
  686. package/src/modules/staff/components/detail/JobHistorySection.tsx +28 -6
  687. package/src/modules/staff/data/validators.ts +6 -0
  688. package/src/modules/staff/i18n/de.json +1 -0
  689. package/src/modules/staff/i18n/en.json +1 -0
  690. package/src/modules/staff/i18n/es.json +1 -0
  691. package/src/modules/staff/i18n/pl.json +1 -0
  692. package/src/modules/staff/lib/leaveRequestHelpers.ts +4 -0
  693. package/src/modules/translations/components/TranslationManager.tsx +13 -8
  694. package/src/modules/workflows/api/definitions/[id]/route.ts +112 -0
  695. package/src/modules/workflows/backend/definitions/[id]/page.tsx +20 -4
  696. package/src/modules/workflows/backend/definitions/page.tsx +20 -9
  697. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +29 -16
  698. package/src/modules/workflows/components/NodeEditDialog.tsx +2 -0
  699. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +3 -1
  700. package/src/modules/workflows/components/formConfig.tsx +5 -0
  701. package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +66 -0
  702. package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +66 -0
  703. package/src/modules/workflows/components/nodes/index.ts +6 -0
  704. package/src/modules/workflows/data/entities.ts +109 -0
  705. package/src/modules/workflows/data/validators.ts +223 -0
  706. package/src/modules/workflows/di.ts +20 -0
  707. package/src/modules/workflows/events.ts +7 -0
  708. package/src/modules/workflows/i18n/de.json +13 -0
  709. package/src/modules/workflows/i18n/en.json +13 -0
  710. package/src/modules/workflows/i18n/es.json +13 -0
  711. package/src/modules/workflows/i18n/pl.json +13 -0
  712. package/src/modules/workflows/lib/activity-executor.ts +8 -2
  713. package/src/modules/workflows/lib/activity-queue-types.ts +3 -0
  714. package/src/modules/workflows/lib/event-logger.ts +3 -0
  715. package/src/modules/workflows/lib/execution-token.ts +166 -0
  716. package/src/modules/workflows/lib/node-type-icons.ts +11 -2
  717. package/src/modules/workflows/lib/parallel-handler.ts +575 -0
  718. package/src/modules/workflows/lib/signal-handler.ts +72 -1
  719. package/src/modules/workflows/lib/step-handler.ts +94 -34
  720. package/src/modules/workflows/lib/task-handler.ts +32 -0
  721. package/src/modules/workflows/lib/timer-handler.ts +30 -1
  722. package/src/modules/workflows/lib/transition-handler.ts +56 -24
  723. package/src/modules/workflows/lib/workflow-executor.ts +53 -1
  724. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +263 -0
  725. package/src/modules/workflows/migrations/Migration20260602120000.ts +25 -0
  726. package/src/modules/workflows/workers/workflow-activities.worker.ts +9 -4
@@ -12,6 +12,7 @@
12
12
  import { EntityManager } from '@mikro-orm/core'
13
13
  import {
14
14
  WorkflowInstance,
15
+ WorkflowBranchInstance,
15
16
  WorkflowDefinition,
16
17
  StepInstance,
17
18
  UserTask,
@@ -36,7 +37,7 @@ export interface StepExecutionResult {
36
37
  status: 'COMPLETED' | 'WAITING' | 'FAILED'
37
38
  outputData?: any
38
39
  nextSteps?: string[] // For parallel forks (Phase 7)
39
- waitReason?: 'USER_TASK' | 'SIGNAL' | 'TIMER'
40
+ waitReason?: 'USER_TASK' | 'SIGNAL' | 'TIMER' | 'FORK'
40
41
  error?: string
41
42
  }
42
43
 
@@ -68,7 +69,8 @@ export async function enterStep(
68
69
  em: EntityManager,
69
70
  instance: WorkflowInstance,
70
71
  stepId: string,
71
- context: StepExecutionContext
72
+ context: StepExecutionContext,
73
+ branch?: WorkflowBranchInstance | null
72
74
  ): Promise<StepInstance> {
73
75
  // Load workflow definition to get step details
74
76
  const definition = await em.findOne(WorkflowDefinition, {
@@ -98,6 +100,7 @@ export async function enterStep(
98
100
  // Create step instance
99
101
  const stepInstance = em.create(StepInstance, {
100
102
  workflowInstanceId: instance.id,
103
+ branchInstanceId: branch ? branch.id : null,
101
104
  stepId: stepDef.stepId,
102
105
  stepName: stepDef.stepName,
103
106
  stepType: stepDef.stepType,
@@ -117,6 +120,7 @@ export async function enterStep(
117
120
  await logStepEvent(em, {
118
121
  workflowInstanceId: instance.id,
119
122
  stepInstanceId: stepInstance.id,
123
+ ...(branch ? { branchInstanceId: branch.id } : {}),
120
124
  eventType: 'STEP_ENTERED',
121
125
  eventData: {
122
126
  stepId: stepDef.stepId,
@@ -198,11 +202,12 @@ export async function executeStep(
198
202
  instance: WorkflowInstance,
199
203
  stepId: string,
200
204
  context: StepExecutionContext,
201
- container?: any
205
+ container?: any,
206
+ branch?: WorkflowBranchInstance | null
202
207
  ): Promise<StepExecutionResult> {
203
208
  try {
204
209
  // Enter the step (create step instance)
205
- const stepInstance = await enterStep(em, instance, stepId, context)
210
+ const stepInstance = await enterStep(em, instance, stepId, context, branch)
206
211
 
207
212
  // Load workflow definition to get step configuration
208
213
  const definition = await em.findOne(WorkflowDefinition, {
@@ -233,7 +238,8 @@ export async function executeStep(
233
238
  stepInstance,
234
239
  stepDef,
235
240
  context,
236
- container
241
+ container,
242
+ branch
237
243
  )
238
244
 
239
245
  // If step completed, exit it
@@ -305,7 +311,8 @@ async function executeStepByType(
305
311
  stepInstance: StepInstance,
306
312
  stepDef: any,
307
313
  context: StepExecutionContext,
308
- container?: any
314
+ container?: any,
315
+ branch?: WorkflowBranchInstance | null
309
316
  ): Promise<StepExecutionResult> {
310
317
  const stepType: WorkflowStepType = stepDef.stepType
311
318
 
@@ -317,10 +324,10 @@ async function executeStepByType(
317
324
  return handleEndStep(stepDef, context)
318
325
 
319
326
  case 'AUTOMATED':
320
- return await handleAutomatedStep(em, instance, stepInstance, stepDef, context, container)
327
+ return await handleAutomatedStep(em, instance, stepInstance, stepDef, context, container, branch)
321
328
 
322
329
  case 'USER_TASK':
323
- return await handleUserTaskStep(em, instance, stepInstance, stepDef, context)
330
+ return await handleUserTaskStep(em, instance, stepInstance, stepDef, context, branch)
324
331
 
325
332
  case 'SUB_WORKFLOW':
326
333
  if (!container) {
@@ -333,19 +340,40 @@ async function executeStepByType(
333
340
  return await handleSubWorkflowStep(em, container, instance, stepInstance, stepDef, context)
334
341
 
335
342
  case 'WAIT_FOR_SIGNAL':
336
- return await handleWaitForSignalStep(em, instance, stepInstance, stepDef, context)
343
+ return await handleWaitForSignalStep(em, instance, stepInstance, stepDef, context, branch)
337
344
 
338
345
  case 'WAIT_FOR_TIMER':
339
- return await handleWaitForTimerStep(em, instance, stepInstance, stepDef, context)
346
+ return await handleWaitForTimerStep(em, instance, stepInstance, stepDef, context, branch)
347
+
348
+ case 'PARALLEL_FORK': {
349
+ // Entering a fork opens branch tokens and parks the root token in the
350
+ // FORKED state; the interleaved loop in the executor drives the branches.
351
+ if (branch) {
352
+ // Nested forks are rejected by definition validation; fail closed.
353
+ throw new StepExecutionError(
354
+ 'Nested PARALLEL_FORK is not supported',
355
+ 'NESTED_FORK_NOT_SUPPORTED',
356
+ { stepType, stepId: stepDef.stepId }
357
+ )
358
+ }
359
+ const definition = await em.findOne(WorkflowDefinition, { id: instance.definitionId })
360
+ if (!definition) {
361
+ throw new StepExecutionError(
362
+ `Workflow definition not found: ${instance.definitionId}`,
363
+ 'DEFINITION_NOT_FOUND',
364
+ { definitionId: instance.definitionId }
365
+ )
366
+ }
367
+ const { openFork } = await import('./parallel-handler')
368
+ await openFork(em, instance, definition, stepDef)
369
+ return { status: 'WAITING', waitReason: 'FORK', outputData: { stepType: 'PARALLEL_FORK', forkStepId: stepDef.stepId } }
370
+ }
340
371
 
341
- case 'PARALLEL_FORK':
342
372
  case 'PARALLEL_JOIN':
343
- // These will be implemented in later phases
344
- throw new StepExecutionError(
345
- `Step type not yet implemented: ${stepType}`,
346
- 'STEP_TYPE_NOT_IMPLEMENTED',
347
- { stepType }
348
- )
373
+ // The join is a synchronization point handled by the parallel loop
374
+ // (branches are marked COMPLETED on arrival; the loop fires the join).
375
+ // Executing the step itself is a no-op.
376
+ return { status: 'COMPLETED', outputData: { stepType: 'PARALLEL_JOIN', timestamp: new Date().toISOString() } }
349
377
 
350
378
  default:
351
379
  throw new StepExecutionError(
@@ -401,7 +429,8 @@ async function handleAutomatedStep(
401
429
  stepInstance: StepInstance,
402
430
  stepDef: any,
403
431
  context: StepExecutionContext,
404
- container?: any
432
+ container?: any,
433
+ branch?: WorkflowBranchInstance | null
405
434
  ): Promise<StepExecutionResult> {
406
435
  // Extract activities from step definition
407
436
  const activities = stepDef.activities || []
@@ -434,9 +463,15 @@ async function handleAutomatedStep(
434
463
  const pendingActivities = results.filter(r => r.async && !r.success)
435
464
  if (pendingActivities.length > 0) {
436
465
  // Workflow should pause and wait for async activities
437
- instance.status = 'WAITING_FOR_ACTIVITIES'
438
- instance.pausedAt = new Date()
439
- instance.updatedAt = new Date()
466
+ const now = new Date()
467
+ if (branch) {
468
+ branch.status = 'WAITING_FOR_ACTIVITIES'
469
+ branch.updatedAt = now
470
+ } else {
471
+ instance.status = 'WAITING_FOR_ACTIVITIES'
472
+ instance.pausedAt = now
473
+ instance.updatedAt = now
474
+ }
440
475
  await em.flush()
441
476
 
442
477
  return {
@@ -506,7 +541,8 @@ async function handleUserTaskStep(
506
541
  instance: WorkflowInstance,
507
542
  stepInstance: StepInstance,
508
543
  stepDef: any,
509
- context: StepExecutionContext
544
+ context: StepExecutionContext,
545
+ branch?: WorkflowBranchInstance | null
510
546
  ): Promise<StepExecutionResult> {
511
547
  const userTaskConfig = stepDef.userTaskConfig || {}
512
548
 
@@ -524,6 +560,7 @@ async function handleUserTaskStep(
524
560
  const userTask = em.create(UserTask, {
525
561
  workflowInstanceId: instance.id,
526
562
  stepInstanceId: stepInstance.id,
563
+ branchInstanceId: branch ? branch.id : null,
527
564
  taskName: stepDef.stepName,
528
565
  description: stepDef.description || null,
529
566
  status: 'PENDING',
@@ -544,6 +581,7 @@ async function handleUserTaskStep(
544
581
  await logStepEvent(em, {
545
582
  workflowInstanceId: instance.id,
546
583
  stepInstanceId: stepInstance.id,
584
+ ...(branch ? { branchInstanceId: branch.id } : {}),
547
585
  eventType: 'USER_TASK_CREATED',
548
586
  eventData: {
549
587
  userTaskId: userTask.id,
@@ -555,9 +593,15 @@ async function handleUserTaskStep(
555
593
  organizationId: instance.organizationId,
556
594
  })
557
595
 
558
- // Pause workflow execution - workflow waits for user task completion
559
- instance.status = 'PAUSED'
560
- instance.updatedAt = now
596
+ // Pause execution - waits for user task completion. For a branch, only the
597
+ // branch pauses; sibling branches keep running.
598
+ if (branch) {
599
+ branch.status = 'PAUSED'
600
+ branch.updatedAt = now
601
+ } else {
602
+ instance.status = 'PAUSED'
603
+ instance.updatedAt = now
604
+ }
561
605
  await em.flush()
562
606
 
563
607
  return {
@@ -719,7 +763,8 @@ async function handleWaitForSignalStep(
719
763
  instance: WorkflowInstance,
720
764
  stepInstance: StepInstance,
721
765
  stepDef: any,
722
- context: StepExecutionContext
766
+ context: StepExecutionContext,
767
+ branch?: WorkflowBranchInstance | null
723
768
  ): Promise<StepExecutionResult> {
724
769
  const signalConfig = stepDef.signalConfig || {}
725
770
  const signalName = signalConfig.signalName || stepDef.stepId
@@ -731,6 +776,7 @@ async function handleWaitForSignalStep(
731
776
  await logStepEvent(em, {
732
777
  workflowInstanceId: instance.id,
733
778
  stepInstanceId: stepInstance.id,
779
+ ...(branch ? { branchInstanceId: branch.id } : {}),
734
780
  eventType: 'SIGNAL_AWAITING',
735
781
  eventData: {
736
782
  signalName,
@@ -742,10 +788,15 @@ async function handleWaitForSignalStep(
742
788
  organizationId: instance.organizationId,
743
789
  })
744
790
 
745
- // Pause workflow execution
746
- instance.status = 'PAUSED'
747
- instance.pausedAt = now
748
- instance.updatedAt = now
791
+ // Pause execution (branch-scoped when running inside a parallel branch)
792
+ if (branch) {
793
+ branch.status = 'PAUSED'
794
+ branch.updatedAt = now
795
+ } else {
796
+ instance.status = 'PAUSED'
797
+ instance.pausedAt = now
798
+ instance.updatedAt = now
799
+ }
749
800
  await em.flush()
750
801
 
751
802
  // Return WAITING status to halt executor
@@ -774,7 +825,8 @@ async function handleWaitForTimerStep(
774
825
  instance: WorkflowInstance,
775
826
  stepInstance: StepInstance,
776
827
  stepDef: any,
777
- context: StepExecutionContext
828
+ context: StepExecutionContext,
829
+ branch?: WorkflowBranchInstance | null
778
830
  ): Promise<StepExecutionResult> {
779
831
  const timerConfig = stepDef.config || stepDef.timerConfig || {}
780
832
  const duration: string | undefined = timerConfig.duration
@@ -828,6 +880,7 @@ async function handleWaitForTimerStep(
828
880
  const jobId = await enqueueTimerJob({
829
881
  workflowInstanceId: instance.id,
830
882
  stepInstanceId: stepInstance.id,
883
+ branchInstanceId: branch ? branch.id : undefined,
831
884
  tenantId: instance.tenantId,
832
885
  organizationId: instance.organizationId,
833
886
  userId: context.userId,
@@ -838,6 +891,7 @@ async function handleWaitForTimerStep(
838
891
  await logWorkflowEvent(em, {
839
892
  workflowInstanceId: instance.id,
840
893
  stepInstanceId: stepInstance.id,
894
+ ...(branch ? { branchInstanceId: branch.id } : {}),
841
895
  eventType: 'TIMER_AWAITING',
842
896
  eventData: {
843
897
  fireAt: fireAt.toISOString(),
@@ -850,9 +904,14 @@ async function handleWaitForTimerStep(
850
904
  organizationId: instance.organizationId,
851
905
  })
852
906
 
853
- instance.status = 'PAUSED'
854
- instance.pausedAt = now
855
- instance.updatedAt = now
907
+ if (branch) {
908
+ branch.status = 'PAUSED'
909
+ branch.updatedAt = now
910
+ } else {
911
+ instance.status = 'PAUSED'
912
+ instance.pausedAt = now
913
+ instance.updatedAt = now
914
+ }
856
915
  await em.flush()
857
916
 
858
917
  return {
@@ -881,6 +940,7 @@ async function logStepEvent(
881
940
  event: {
882
941
  workflowInstanceId: string
883
942
  stepInstanceId: string
943
+ branchInstanceId?: string | null
884
944
  eventType: string
885
945
  eventData: any
886
946
  userId?: string
@@ -120,6 +120,37 @@ export async function completeUserTask(
120
120
  )
121
121
  }
122
122
 
123
+ // Branch-scoped completion: when the task belongs to a parallel branch,
124
+ // merge form data into the branch namespace and resume just that branch.
125
+ if (task.branchInstanceId) {
126
+ await logWorkflowEvent(em, {
127
+ workflowInstanceId: instance.id,
128
+ stepInstanceId: task.stepInstanceId,
129
+ branchInstanceId: task.branchInstanceId,
130
+ eventType: 'USER_TASK_COMPLETED',
131
+ eventData: { taskId: task.id, taskName: task.taskName, completedBy: userId, formData },
132
+ userId,
133
+ tenantId: instance.tenantId,
134
+ organizationId: instance.organizationId,
135
+ })
136
+
137
+ const { resumeBranch } = await import('./parallel-handler')
138
+ const resumed = await resumeBranch(em, {
139
+ instanceId: instance.id,
140
+ branchInstanceId: task.branchInstanceId,
141
+ tenantId: instance.tenantId,
142
+ organizationId: instance.organizationId,
143
+ contextMerge: formData,
144
+ exitStepInstanceId: task.stepInstanceId,
145
+ exitOutput: { userTaskId: task.id, formData },
146
+ })
147
+
148
+ if (resumed) {
149
+ await executeWorkflow(em, container, instance.id, { userId })
150
+ }
151
+ return
152
+ }
153
+
123
154
  // Merge form data into workflow context
124
155
  instance.context = {
125
156
  ...instance.context,
@@ -307,6 +338,7 @@ async function logWorkflowEvent(
307
338
  event: {
308
339
  workflowInstanceId: string
309
340
  stepInstanceId: string | null
341
+ branchInstanceId?: string | null
310
342
  eventType: string
311
343
  eventData: any
312
344
  userId?: string
@@ -18,6 +18,7 @@ import type * as workflowExecutorModule from './workflow-executor'
18
18
  export interface FireTimerOptions {
19
19
  instanceId: string
20
20
  stepInstanceId?: string
21
+ branchInstanceId?: string | null
21
22
  userId?: string
22
23
  tenantId: string
23
24
  organizationId: string
@@ -46,13 +47,41 @@ export async function fireTimer(
46
47
  container: AwilixContainer,
47
48
  options: FireTimerOptions
48
49
  ): Promise<void> {
49
- const { instanceId, stepInstanceId, userId, tenantId, organizationId } = options
50
+ const { instanceId, stepInstanceId, branchInstanceId, userId, tenantId, organizationId } = options
50
51
 
51
52
  const eventLogger = container.resolve<typeof eventLoggerModule>('eventLogger')
52
53
  const stepHandler = container.resolve<typeof stepHandlerModule>('stepHandler')
53
54
  const transitionHandler = container.resolve<typeof transitionHandlerModule>('transitionHandler')
54
55
  const workflowExecutor = container.resolve<typeof workflowExecutorModule>('workflowExecutor')
55
56
 
57
+ // Branch-scoped timer: the instance is FORKED and the branch is PAUSED at the
58
+ // WAIT_FOR_TIMER step. Resume just that branch, then drive the parallel loop.
59
+ if (branchInstanceId) {
60
+ await eventLogger.logWorkflowEvent(em, {
61
+ workflowInstanceId: instanceId,
62
+ stepInstanceId,
63
+ branchInstanceId,
64
+ eventType: 'TIMER_FIRED',
65
+ eventData: { firedAt: new Date().toISOString(), branch: true },
66
+ userId,
67
+ tenantId,
68
+ organizationId,
69
+ })
70
+ const { resumeBranch } = await import('./parallel-handler')
71
+ const resumed = await resumeBranch(em, {
72
+ instanceId,
73
+ branchInstanceId,
74
+ tenantId,
75
+ organizationId,
76
+ exitStepInstanceId: stepInstanceId,
77
+ exitOutput: { firedAt: new Date().toISOString() },
78
+ })
79
+ if (resumed) {
80
+ await workflowExecutor.executeWorkflow(em, container, instanceId, { userId })
81
+ }
82
+ return
83
+ }
84
+
56
85
  const instance = await findOneWithDecryption(
57
86
  em as PostgreSqlEntityManager,
58
87
  WorkflowInstance,
@@ -23,6 +23,18 @@ import * as ruleEngine from '../../business_rules/lib/rule-engine'
23
23
  import * as activityExecutor from './activity-executor'
24
24
  import type { ActivityDefinition } from './activity-executor'
25
25
  import * as stepHandler from './step-handler'
26
+ import {
27
+ type ExecutionToken,
28
+ rootToken,
29
+ tokenBranchInstanceId,
30
+ tokenReadContext,
31
+ setTokenCurrentStepId,
32
+ applyTokenContextWrites,
33
+ mergeTokenContext,
34
+ setTokenWaitingForActivities,
35
+ setTokenPendingTransition,
36
+ touchToken,
37
+ } from './execution-token'
26
38
 
27
39
  // ============================================================================
28
40
  // Types and Interfaces
@@ -311,6 +323,28 @@ export async function executeTransition(
311
323
  toStepId: string,
312
324
  context: TransitionExecutionContext
313
325
  ): Promise<TransitionExecutionResult> {
326
+ // Public DI signature preserved: the root token adapts the instance, so the
327
+ // single-token path is behaviourally unchanged.
328
+ return executeTransitionForToken(em, container, rootToken(instance), fromStepId, toStepId, context)
329
+ }
330
+
331
+ /**
332
+ * Token-aware transition execution. The root token wraps a WorkflowInstance
333
+ * (legacy single-token path); a branch token wraps a WorkflowBranchInstance so
334
+ * a parallel branch advances independently with its own context namespace,
335
+ * status and pending transition.
336
+ */
337
+ export async function executeTransitionForToken(
338
+ em: EntityManager,
339
+ container: AwilixContainer,
340
+ token: ExecutionToken,
341
+ fromStepId: string,
342
+ toStepId: string,
343
+ context: TransitionExecutionContext
344
+ ): Promise<TransitionExecutionResult> {
345
+ const instance = token.instance
346
+ const branch = token.kind === 'branch' ? token.branch : null
347
+ const branchInstanceId = tokenBranchInstanceId(token)
314
348
  try {
315
349
  let eventBus: Pick<EventBus, 'emitEvent'> | null = null
316
350
  try {
@@ -394,9 +428,10 @@ export async function executeTransition(
394
428
  const activityContext: activityExecutor.ActivityContext = {
395
429
  workflowInstance: instance,
396
430
  workflowContext: {
397
- ...instance.context,
431
+ ...tokenReadContext(token),
398
432
  ...context.workflowContext,
399
433
  },
434
+ branchInstanceId,
400
435
  userId: context.userId,
401
436
  }
402
437
 
@@ -466,29 +501,27 @@ export async function executeTransition(
466
501
  .filter(a => a.async && a.jobId)
467
502
  .map(a => ({ activityId: a.activityId, jobId: a.jobId }))
468
503
 
469
- // Store pending transition state
470
- instance.pendingTransition = {
504
+ // Store pending transition state (per-token: branch or instance)
505
+ setTokenPendingTransition(token, {
471
506
  toStepId,
472
507
  activityResults,
473
508
  timestamp: new Date(),
474
- }
509
+ })
475
510
 
476
- // Store pending activities in context for tracking
477
- instance.context = {
478
- ...instance.context,
479
- ...context.workflowContext,
480
- ...activityOutputs,
481
- _pendingAsyncActivities: pendingJobIds,
482
- }
511
+ // Store activity outputs + pending-activity tracking in the token's own
512
+ // context scope (instance.context for root, branch namespace for a branch)
513
+ applyTokenContextWrites(token, context.workflowContext, activityOutputs)
514
+ mergeTokenContext(token, { _pendingAsyncActivities: pendingJobIds })
483
515
 
484
- // Set status to waiting
485
- instance.status = 'WAITING_FOR_ACTIVITIES'
486
- instance.updatedAt = new Date()
516
+ // Set status to waiting (branch-scoped when running inside a branch)
517
+ setTokenWaitingForActivities(token)
518
+ touchToken(token, new Date())
487
519
  await em.flush()
488
520
 
489
521
  // Log event
490
522
  await logTransitionEvent(em, {
491
523
  workflowInstanceId: instance.id,
524
+ branchInstanceId,
492
525
  eventType: 'TRANSITION_PAUSED_FOR_ACTIVITIES',
493
526
  eventData: {
494
527
  fromStepId,
@@ -514,14 +547,11 @@ export async function executeTransition(
514
547
  }
515
548
  }
516
549
 
517
- // Update workflow instance - set current step and update context atomically
518
- instance.currentStepId = toStepId
519
- instance.context = {
520
- ...instance.context,
521
- ...context.workflowContext,
522
- ...activityOutputs, // Include activity outputs
523
- }
524
- instance.updatedAt = new Date()
550
+ // Advance the token cursor and update context atomically (instance for the
551
+ // root token; branch cursor + namespace for a branch token).
552
+ setTokenCurrentStepId(token, toStepId)
553
+ applyTokenContextWrites(token, context.workflowContext, activityOutputs)
554
+ touchToken(token, new Date())
525
555
 
526
556
  await em.flush()
527
557
 
@@ -531,11 +561,12 @@ export async function executeTransition(
531
561
  instance,
532
562
  toStepId,
533
563
  {
534
- workflowContext: instance.context || {},
564
+ workflowContext: tokenReadContext(token),
535
565
  userId: context.userId,
536
566
  triggerData: context.triggerData,
537
567
  },
538
- container
568
+ container,
569
+ branch
539
570
  )
540
571
 
541
572
  // Flush to database after step execution completes to make state visible to UI
@@ -958,6 +989,7 @@ async function logTransitionEvent(
958
989
  em: EntityManager,
959
990
  event: {
960
991
  workflowInstanceId: string
992
+ branchInstanceId?: string | null
961
993
  eventType: string
962
994
  eventData: any
963
995
  userId?: string
@@ -302,6 +302,43 @@ export async function executeWorkflow(
302
302
  )
303
303
  }
304
304
 
305
+ // Parallel execution: while the instance is FORKED, drive the branches.
306
+ if (currentInstance.status === 'FORKED') {
307
+ const { advanceBranches } = await import('./parallel-handler')
308
+ const branchResult = await advanceBranches(trx, container, currentInstance, definition, {
309
+ userId: context?.userId,
310
+ })
311
+
312
+ if (branchResult.outcome === 'joined') {
313
+ // Instance resumed at the post-join step; continue single-token.
314
+ continue
315
+ }
316
+
317
+ if (branchResult.outcome === 'failed') {
318
+ errors.push(branchResult.error || 'Parallel branch failed')
319
+ await completeWorkflow(trx, container, instanceId, 'FAILED', {
320
+ error: branchResult.error || 'Parallel branch failed',
321
+ })
322
+ return {
323
+ status: 'FAILED',
324
+ currentStep: currentInstance.currentStepId,
325
+ context: currentInstance.context,
326
+ events,
327
+ errors,
328
+ executionTime: Date.now() - startTime,
329
+ }
330
+ }
331
+
332
+ // 'waiting' — all branches paused for external resume (task/signal/timer/async).
333
+ return {
334
+ status: 'RUNNING',
335
+ currentStep: currentInstance.currentStepId,
336
+ context: currentInstance.context,
337
+ events,
338
+ executionTime: Date.now() - startTime,
339
+ }
340
+ }
341
+
305
342
  const currentStep = definition.definition.steps.find(
306
343
  (s: any) => s.stepId === currentInstance.currentStepId
307
344
  )
@@ -643,12 +680,27 @@ export async function completeWorkflow(
643
680
  export async function resumeWorkflowAfterActivities(
644
681
  em: EntityManager,
645
682
  container: AwilixContainer,
646
- instanceId: string
683
+ instanceId: string,
684
+ branchInstanceId?: string | null
647
685
  ): Promise<void> {
648
686
  const transactionalEm = em as EntityManager & {
649
687
  transactional?: <TResult>(callback: (trx: EntityManager) => Promise<TResult>) => Promise<TResult>
650
688
  }
651
689
 
690
+ // Branch-scoped async resume: the instance is FORKED and the branch (not the
691
+ // instance) is WAITING_FOR_ACTIVITIES. Resume just that branch, then let the
692
+ // interleaved loop continue. Missing branchInstanceId → legacy instance path.
693
+ if (branchInstanceId) {
694
+ const { resumeBranchAfterActivities } = await import('./parallel-handler')
695
+ const branchResume = typeof transactionalEm.transactional === 'function'
696
+ ? await transactionalEm.transactional((trx) => resumeBranchAfterActivities(trx, container, instanceId, branchInstanceId))
697
+ : await resumeBranchAfterActivities(em, container, instanceId, branchInstanceId)
698
+ if (branchResume.continueExecution) {
699
+ await executeWorkflow(em, container, instanceId)
700
+ }
701
+ return
702
+ }
703
+
652
704
  const runResume = async (trx: EntityManager): Promise<{ continueExecution: boolean }> => {
653
705
  const instance = await trx.findOne(WorkflowInstance, {
654
706
  id: instanceId,