@cxtms/cx-schema 1.9.67 → 1.9.241

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/cli.js +43 -9
  2. package/dist/cli.js.map +1 -1
  3. package/package.json +1 -1
  4. package/schemas/actions/all.json +5 -1
  5. package/schemas/actions/reload.json +17 -0
  6. package/schemas/actions/setSessionStorage.json +38 -0
  7. package/schemas/actions/sound.json +39 -0
  8. package/schemas/actions/vibrate.json +48 -0
  9. package/schemas/components/avatar.json +1 -0
  10. package/schemas/components/badge.json +79 -0
  11. package/schemas/components/barcodeScanner.json +28 -0
  12. package/schemas/components/camera.json +177 -0
  13. package/schemas/components/card.json +78 -0
  14. package/schemas/components/dashboard-widget.json +39 -0
  15. package/schemas/components/dashboard.json +46 -0
  16. package/schemas/components/dataGrid.json +15 -0
  17. package/schemas/components/field-collection.json +86 -2
  18. package/schemas/components/field.json +39 -4
  19. package/schemas/components/form.json +4 -0
  20. package/schemas/components/index.json +17 -1
  21. package/schemas/components/infoLine.json +1 -0
  22. package/schemas/components/map.json +167 -0
  23. package/schemas/components/module.json +32 -0
  24. package/schemas/components/planner.json +1 -0
  25. package/schemas/components/progressBar.json +1 -0
  26. package/schemas/components/timeline.json +216 -74
  27. package/schemas/components/timelineGrid.json +5 -1
  28. package/schemas/fields/autocomplete-googleplaces.json +2 -2
  29. package/schemas/fields/datetime.json +2 -2
  30. package/schemas/fields/index.json +4 -0
  31. package/schemas/fields/number-select.json +88 -0
  32. package/schemas/fields/rangedatetime.json +10 -2
  33. package/schemas/fields/select-async.json +2 -2
  34. package/schemas/fields/toggle.json +91 -0
  35. package/schemas/schema.graphql +11016 -12171
  36. package/schemas/schemas.json +131 -4
  37. package/schemas/workflows/flow/entity.json +3 -1
  38. package/schemas/workflows/input.json +1 -1
  39. package/schemas/workflows/output.json +1 -1
  40. package/schemas/workflows/tasks/all.json +9 -0
  41. package/schemas/workflows/tasks/commodity.json +8 -0
  42. package/schemas/workflows/tasks/contact-address.json +25 -0
  43. package/schemas/workflows/tasks/dispatch-routes.json +64 -0
  44. package/schemas/workflows/tasks/edi.json +15 -0
  45. package/schemas/workflows/tasks/export.json +21 -0
  46. package/schemas/workflows/tasks/httpRequest.json +4 -0
  47. package/schemas/workflows/tasks/import.json +5 -0
  48. package/schemas/workflows/tasks/order-move.json +38 -0
  49. package/schemas/workflows/tasks/order.json +6 -0
  50. package/schemas/workflows/tasks/organization-config.json +101 -0
  51. package/schemas/workflows/tasks/tracking-event.json +11 -3
  52. package/schemas/workflows/tasks/workflow-execute.json +4 -0
  53. package/schemas/workflows/variable.json +2 -2
  54. package/schemas/workflows/workflow.json +39 -2
  55. package/skills/cxtms-developer/SKILL.md +5 -2
  56. package/skills/cxtms-developer/ref-cli-auth.md +2 -0
  57. package/skills/cxtms-developer/ref-entity-commodity.md +41 -5
  58. package/skills/cxtms-developer/ref-entity-contact.md +46 -0
  59. package/skills/cxtms-developer/ref-entity-dispatch-routing.md +195 -0
  60. package/skills/cxtms-developer/ref-entity-geography.md +26 -1
  61. package/skills/cxtms-developer/ref-entity-job.md +6 -2
  62. package/skills/cxtms-developer/ref-entity-order-sub.md +1 -1
  63. package/skills/cxtms-developer/ref-entity-order.md +36 -3
  64. package/skills/cxtms-developer/ref-entity-organization.md +4 -2
  65. package/skills/cxtms-developer/ref-entity-shared.md +79 -3
  66. package/skills/cxtms-developer/ref-graphql-query.md +246 -4
  67. package/skills/cxtms-module-builder/SKILL.md +33 -6
  68. package/skills/cxtms-module-builder/ref-components-data.md +85 -0
  69. package/skills/cxtms-module-builder/ref-components-display.md +282 -8
  70. package/skills/cxtms-module-builder/ref-components-forms.md +386 -21
  71. package/skills/cxtms-module-builder/ref-components-interactive.md +2 -0
  72. package/skills/cxtms-module-builder/ref-components-layout.md +288 -29
  73. package/skills/cxtms-module-builder/ref-components-specialized.md +168 -20
  74. package/skills/cxtms-workflow-builder/SKILL.md +45 -6
  75. package/skills/cxtms-workflow-builder/ref-entity.md +100 -4
  76. package/skills/cxtms-workflow-builder/ref-expressions-ncalc.md +35 -2
  77. package/skills/cxtms-workflow-builder/ref-expressions-template.md +15 -1
  78. package/skills/cxtms-workflow-builder/ref-flow.md +6 -1
  79. package/skills/cxtms-workflow-builder/ref-query.md +16 -0
  80. package/skills/cxtms-workflow-builder/ref-utilities.md +32 -2
  81. package/templates/workflow-public-api.yaml +1 -0
@@ -108,13 +108,39 @@
108
108
  "label": {
109
109
  "$ref": "#/definitions/localized"
110
110
  },
111
+ "description": {
112
+ "$ref": "#/definitions/localized",
113
+ "description": "Localized tooltip shown for the column header and column selector"
114
+ },
111
115
  "showAs": {
112
116
  "$ref": "#/definitions/component",
113
117
  "description": "Custom component for column rendering"
114
118
  },
115
119
  "isHidden": {
116
- "type": "boolean",
117
- "description": "Whether column is hidden"
120
+ "oneOf": [
121
+ { "type": "boolean" },
122
+ { "$ref": "#/definitions/templateExpression" }
123
+ ],
124
+ "description": "Whether column is hidden; true excludes it from rendering/export"
125
+ },
126
+ "isVisible": {
127
+ "oneOf": [
128
+ { "type": "boolean" },
129
+ { "$ref": "#/definitions/templateExpression" }
130
+ ],
131
+ "description": "Whether column is visible; false excludes it from rendering/export"
132
+ },
133
+ "path": {
134
+ "type": "string",
135
+ "description": "GraphQL/data path for this column when different from name"
136
+ },
137
+ "exportPath": {
138
+ "type": "string",
139
+ "description": "Export field key; overrides path and name when building DataGrid export headers and mappings"
140
+ },
141
+ "exportTemplate": {
142
+ "type": "string",
143
+ "description": "Template expression for export-only formatted value; exposed in DataGrid context store exportTemplates"
118
144
  },
119
145
  "enableEdit": {
120
146
  "type": "boolean",
@@ -127,6 +153,41 @@
127
153
  "onEdit": {
128
154
  "$ref": "#/definitions/actionsList",
129
155
  "description": "Action array executed sequentially when the cell value changes. Receives changedValues and value variables."
156
+ },
157
+ "excludeFromQuery": {
158
+ "type": "boolean",
159
+ "description": "Exclude this column from GraphQL query and export configuration"
160
+ },
161
+ "subQueries": {
162
+ "type": "array",
163
+ "description": "Additional GraphQL field paths to include in the query without rendering them as columns",
164
+ "items": {
165
+ "type": "string"
166
+ }
167
+ },
168
+ "props": {
169
+ "type": "object",
170
+ "description": "Column behavior/export options such as orderByProperty, allowOrderBy, allowFilter, allowSelect, and filterByProperty",
171
+ "properties": {
172
+ "allowOrderBy": { "type": "boolean" },
173
+ "allowFilter": {
174
+ "oneOf": [
175
+ { "type": "boolean" },
176
+ { "$ref": "#/definitions/templateExpression" }
177
+ ],
178
+ "description": "Boolean or template expression controlling whether this column appears in the filter picker"
179
+ },
180
+ "allowSelect": { "type": "boolean" },
181
+ "orderByProperty": {
182
+ "type": "string",
183
+ "description": "Property path used for ordering instead of the displayed column name"
184
+ },
185
+ "filterByProperty": {
186
+ "type": "string",
187
+ "description": "Property path used for filtering instead of the displayed column name"
188
+ }
189
+ },
190
+ "additionalProperties": true
130
191
  }
131
192
  }
132
193
  }
@@ -135,6 +196,10 @@
135
196
  "type": "string",
136
197
  "description": "Filter expression for this view"
137
198
  },
199
+ "search": {
200
+ "type": "string",
201
+ "description": "Default search term seeded once when the grid first loads this view. Supports template expressions; URL search parameters and user input take precedence."
202
+ },
138
203
  "childViews": {
139
204
  "type": "array",
140
205
  "description": "Nested child views",
@@ -142,9 +207,43 @@
142
207
  "$ref": "#/definitions/dataGridView"
143
208
  }
144
209
  },
210
+ "stickyColumns": {
211
+ "type": "object",
212
+ "description": "User-pinned DataGrid columns for this view. Left-pinned columns render first, normal columns render next, and right-pinned columns render last.",
213
+ "properties": {
214
+ "left": {
215
+ "type": "array",
216
+ "items": { "type": "string" },
217
+ "description": "Column names pinned to the left edge in pin order"
218
+ },
219
+ "right": {
220
+ "type": "array",
221
+ "items": { "type": "string" },
222
+ "description": "Column names pinned to the right edge in pin order"
223
+ }
224
+ },
225
+ "additionalProperties": false
226
+ },
145
227
  "showHeader": {
146
228
  "type": "boolean",
147
229
  "description": "Whether to show header for child views"
230
+ },
231
+ "enableResize": {
232
+ "type": "boolean",
233
+ "description": "Enable drag-to-resize columns for this view. Overrides the grid-level enableResize option."
234
+ },
235
+ "includeEntityKeysInExport": {
236
+ "type": "boolean",
237
+ "description": "Include the grid entityKeys/primary keys in exports for this view so re-import can match rows by ID. Defaults to the grid option, then true."
238
+ },
239
+ "pageSize": {
240
+ "type": "number",
241
+ "description": "Rows per page for this view"
242
+ },
243
+ "paginationPosition": {
244
+ "type": "string",
245
+ "enum": ["top", "bottom"],
246
+ "description": "Render pagination controls above or below the grid rows. Defaults to bottom."
148
247
  }
149
248
  },
150
249
  "required": ["name"]
@@ -169,6 +268,10 @@
169
268
  "type": "string"
170
269
  }
171
270
  },
271
+ "includeEntityKeysInExport": {
272
+ "type": "boolean",
273
+ "description": "Default export behavior: when true or omitted, missing entityKeys are prepended to export headers so ID-first imports can update existing rows"
274
+ },
172
275
  "navigationType": {
173
276
  "type": "string",
174
277
  "enum": ["navigate", "dialog", "store"],
@@ -202,6 +305,10 @@
202
305
  "type": "string",
203
306
  "description": "Default view name"
204
307
  },
308
+ "defaultExpandedRows": {
309
+ "type": "boolean",
310
+ "description": "Pre-expand parent rows on first load when childViews are configured; preserves user collapse/expand choices on refresh"
311
+ },
205
312
  "onRowClick": {
206
313
  "oneOf": [
207
314
  { "$ref": "#/definitions/actionsList" },
@@ -340,13 +447,29 @@
340
447
  "fieldType": { "type": "string" },
341
448
  "isCustomField": { "type": "boolean", "description": "Whether this is a custom field" },
342
449
  "isInactive": { "type": "boolean" },
450
+ "priority": {
451
+ "type": "integer",
452
+ "default": 0,
453
+ "description": "Module-level field override precedence; highest active priority wins for duplicate entity field names"
454
+ },
343
455
  "props": {
344
456
  "type": "object",
345
457
  "description": "Additional field properties",
346
458
  "properties": {
347
459
  "showAs": { "$ref": "#/definitions/component" },
348
460
  "allowOrderBy": { "type": "boolean" },
349
- "allowFilter": { "type": "boolean" },
461
+ "allowFilter": {
462
+ "oneOf": [
463
+ { "type": "boolean" },
464
+ { "$ref": "#/definitions/templateExpression" }
465
+ ],
466
+ "description": "Boolean or template expression controlling whether this field appears in the filter picker"
467
+ },
468
+ "allowSelect": { "type": "boolean" },
469
+ "filterByProperty": {
470
+ "type": "string",
471
+ "description": "Property path used for filtering instead of the displayed field name"
472
+ },
350
473
  "filter": {
351
474
  "type": "object",
352
475
  "description": "Field-level filter selector configuration",
@@ -604,7 +727,11 @@
604
727
 
605
728
  "timeline-grid": {
606
729
  "$ref": "components/timelineGrid.json"
607
- }
730
+ },
731
+ "avatar": { "$ref": "components/avatar.json" },
732
+ "infoLine": { "$ref": "components/infoLine.json" },
733
+ "progressBar": { "$ref": "components/progressBar.json" },
734
+ "planner": { "$ref": "components/planner.json" }
608
735
  }
609
736
  }
610
737
  }
@@ -17,7 +17,9 @@
17
17
  "Attachment",
18
18
  "OrderCommodity",
19
19
  "TrackingEvent",
20
- "JobOrder"
20
+ "JobOrder",
21
+ "OrderMove",
22
+ "DispatchRoute"
21
23
  ],
22
24
  "description": "The entity name whose lifecycle this flow manages"
23
25
  },
@@ -65,7 +65,7 @@
65
65
  "description": "Item type for array inputs (e.g., 'number', 'text')"
66
66
  },
67
67
  "schema": {
68
- "description": "Input validation schema. Can be a type assertion (e.g., {type: 'string'}), an object field list (multiline string), or an array field list with types/conditions.",
68
+ "description": "Input validation/OpenAPI schema. For PublicApi body inputs, supports recursive schema fields such as type, properties, required, items, format, description, and enum.",
69
69
  "oneOf": [
70
70
  {
71
71
  "type": "string",
@@ -26,7 +26,7 @@
26
26
  },
27
27
  "schema": {
28
28
  "type": "object",
29
- "description": "JSON Schema describing the response structure",
29
+ "description": "Recursive OpenAPI schema describing the response structure. Supports type, properties, required, items, format, description, and enum.",
30
30
  "additionalProperties": true
31
31
  }
32
32
  },
@@ -40,6 +40,9 @@
40
40
  {
41
41
  "$ref": "csv.json"
42
42
  },
43
+ {
44
+ "$ref": "dispatch-routes.json"
45
+ },
43
46
  {
44
47
  "$ref": "document-render.json"
45
48
  },
@@ -100,12 +103,18 @@
100
103
  {
101
104
  "$ref": "number.json"
102
105
  },
106
+ {
107
+ "$ref": "organization-config.json"
108
+ },
103
109
  {
104
110
  "$ref": "order-tracking-event.json"
105
111
  },
106
112
  {
107
113
  "$ref": "order.json"
108
114
  },
115
+ {
116
+ "$ref": "order-move.json"
117
+ },
109
118
  {
110
119
  "$ref": "payment.json"
111
120
  },
@@ -67,6 +67,14 @@
67
67
  "partial": {
68
68
  "type": "boolean",
69
69
  "description": "Partial update (patch)"
70
+ },
71
+ "cascadeToChildren": {
72
+ "type": "boolean",
73
+ "description": "For Commodity/Update: copy inputs.entity/customValues to direct child commodities after updating this commodity"
74
+ },
75
+ "promoteParentWhenAllChildren": {
76
+ "type": "boolean",
77
+ "description": "For Commodity/Update: copy inputs.entity/customValues to the parent once every direct non-deleted sibling has the same custom-value keys"
70
78
  }
71
79
  },
72
80
  "additionalProperties": true
@@ -39,6 +39,10 @@
39
39
  "type": "object",
40
40
  "description": "Contact address operation inputs",
41
41
  "properties": {
42
+ "organizationId": {
43
+ "type": "string",
44
+ "description": "Organization/tenant ID for scoped operations and imports"
45
+ },
42
46
  "contactId": {
43
47
  "type": "string",
44
48
  "description": "Parent contact ID"
@@ -47,6 +51,27 @@
47
51
  "type": "string",
48
52
  "description": "Address ID (for update/delete)"
49
53
  },
54
+ "fileUrl": {
55
+ "type": "string",
56
+ "description": "URL for import source file"
57
+ },
58
+ "fileType": {
59
+ "type": "string",
60
+ "description": "Import file type, such as Csv or Excel"
61
+ },
62
+ "stream": {
63
+ "description": "Import stream payload"
64
+ },
65
+ "matchByFields": {
66
+ "type": "array",
67
+ "description": "Business-key fields used after ID-first ContactAddressId/contactAddressId matching. When supplied, imports selectively fetch existing address candidates using row-level Lucene filters instead of loading all addresses for the contact.",
68
+ "items": { "type": "string" }
69
+ },
70
+ "columnMappings": {
71
+ "type": "object",
72
+ "description": "Import column-to-field mappings",
73
+ "additionalProperties": { "type": "string" }
74
+ },
50
75
  "entity": {
51
76
  "type": "object",
52
77
  "description": "Address entity data",
@@ -0,0 +1,64 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Dispatch Route Tasks",
4
+ "description": "Dispatch route workflow operations",
5
+ "type": "object",
6
+ "properties": {
7
+ "task": {
8
+ "type": "string",
9
+ "enum": ["DispatchRoutes/Generate@1"],
10
+ "description": "Task type identifier"
11
+ },
12
+ "name": { "type": "string", "description": "Step name identifier" },
13
+ "description": { "type": "string", "description": "Step description" },
14
+ "conditions": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "properties": { "expression": { "type": "string" } },
19
+ "required": ["expression"]
20
+ }
21
+ },
22
+ "continueOnError": { "type": "boolean" },
23
+ "inputs": {
24
+ "type": "object",
25
+ "description": "Dispatch route generation inputs",
26
+ "properties": {
27
+ "organizationId": { "type": "string", "description": "Organization ID" },
28
+ "dispatchRouteStatusId": { "type": "string", "description": "Status assigned to generated routes" },
29
+ "routeDate": { "type": "string", "description": "Route date in yyyy-MM-dd format; defaults to today UTC when omitted" },
30
+ "dispatchRouteTemplateId": { "type": "string", "description": "Optional template ID; omit to generate all matching templates" }
31
+ },
32
+ "required": ["organizationId", "dispatchRouteStatusId"],
33
+ "additionalProperties": true
34
+ },
35
+ "outputs": {
36
+ "type": "array",
37
+ "description": "Task outputs",
38
+ "items": {
39
+ "type": "object",
40
+ "properties": {
41
+ "name": { "type": "string" },
42
+ "mapping": { "type": "string" }
43
+ },
44
+ "required": ["name", "mapping"]
45
+ }
46
+ }
47
+ },
48
+ "required": ["task", "name", "inputs"],
49
+ "additionalProperties": true,
50
+ "x-example": {
51
+ "task": "DispatchRoutes/Generate@1",
52
+ "name": "GenerateDispatchRoutes",
53
+ "inputs": {
54
+ "organizationId": "{{ inputs.organizationId }}",
55
+ "dispatchRouteStatusId": "{{ inputs.dispatchRouteStatusId }}",
56
+ "routeDate": "{{ inputs.routeDate }}"
57
+ },
58
+ "outputs": [
59
+ { "name": "createdCount", "mapping": "createdCount" },
60
+ { "name": "skippedCount", "mapping": "skippedCount" },
61
+ { "name": "createdRouteIds", "mapping": "createdRouteIds" }
62
+ ]
63
+ }
64
+ }
@@ -124,6 +124,21 @@
124
124
  }
125
125
  }
126
126
  },
127
+ "freeText": {
128
+ "type": "array",
129
+ "description": "Free text segments (FTX). Each entry produces one FTX segment in the EDIFACT message.",
130
+ "items": {
131
+ "type": "object",
132
+ "properties": {
133
+ "qualifier": { "type": "string", "description": "Text subject code qualifier (4451). Common values: AAA (General), AAI (Instructions), CCI (Customs/Compliance), DOC (Document), BLC (B/L Clause)." },
134
+ "functionCode": { "type": "string", "description": "Free text function code (4453)." },
135
+ "textReferenceCode": { "type": "string", "description": "C107/4441 free text value code. When qualifier=CCI: MFS (Manifest Filer Status), ENS (Entry Summary Declaration), HBL (House Bill Indicator). When qualifier=DOC: SMI (Single Message Indicator). When qualifier=BLC: clause code (01-45, CB, CC, etc.)." },
136
+ "text": { "type": "string", "description": "C108/4440 free text value, line 1 (max 512 chars)." },
137
+ "text2": { "type": "string", "description": "C108/4440 free text value, line 2 (max 512 chars)." },
138
+ "text3": { "type": "string", "description": "C108/4440 free text value, line 3 (max 512 chars). When textReferenceCode=MFS: Manifest Filer Identification (SCAC). When textReferenceCode=HBL: To Order Shipment indicator (TOS)." }
139
+ }
140
+ }
141
+ },
127
142
  "equipment": {
128
143
  "type": "array",
129
144
  "description": "Container/equipment details",
@@ -48,6 +48,27 @@
48
48
  "type": "string",
49
49
  "description": "Output file name"
50
50
  },
51
+ "headers": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "string"
55
+ },
56
+ "description": "Optional ordered list of flattened field/header paths to include"
57
+ },
58
+ "columnMappings": {
59
+ "type": "object",
60
+ "additionalProperties": {
61
+ "type": "string"
62
+ },
63
+ "description": "Optional map of field/header path to output display label"
64
+ },
65
+ "exportTemplates": {
66
+ "type": "object",
67
+ "additionalProperties": {
68
+ "type": "string"
69
+ },
70
+ "description": "Optional map of output header name to NCalc expression evaluated against each original row"
71
+ },
51
72
  "columns": {
52
73
  "type": "array",
53
74
  "items": {
@@ -40,6 +40,10 @@
40
40
  "type": "string",
41
41
  "description": "Request URL"
42
42
  },
43
+ "params": {
44
+ "type": "object",
45
+ "description": "URL query parameters. Keys and values are automatically URL-encoded and appended to the URL. Use when query string parameters come from workflow variables."
46
+ },
43
47
  "method": {
44
48
  "type": "string",
45
49
  "enum": ["GET", "POST", "PUT", "PATCH", "DELETE"],
@@ -43,6 +43,11 @@
43
43
  "format": {
44
44
  "type": "string",
45
45
  "description": "Import format (e.g., csv)"
46
+ },
47
+ "columnMappings": {
48
+ "type": "object",
49
+ "description": "Optional map of internal field paths to inbound CSV/XLSX column headers. Example: {\"contact.name\": \"Customer Name\"}",
50
+ "additionalProperties": { "type": "string" }
46
51
  }
47
52
  },
48
53
  "additionalProperties": true
@@ -0,0 +1,38 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Order Move Tasks",
4
+ "type": "object",
5
+ "properties": {
6
+ "task": { "type": "string", "enum": ["OrderMove/Create@1", "OrderMove/Update@1", "OrderMove/Delete@1"] },
7
+ "name": { "type": "string" },
8
+ "description": { "type": "string" },
9
+ "conditions": { "type": "array", "items": { "type": "object", "properties": { "expression": { "type": "string" } }, "required": ["expression"] } },
10
+ "continueOnError": { "type": "boolean" },
11
+ "inputs": {
12
+ "type": "object",
13
+ "properties": {
14
+ "organizationId": {},
15
+ "orderMoveId": {},
16
+ "orderMove": {
17
+ "type": "object",
18
+ "properties": {
19
+ "orderId": {}, "sequence": {}, "name": {}, "assignedDriverContactId": {},
20
+ "orderMoveStatusId": {}, "startDate": {}, "endDate": {}, "customValues": { "type": "object" },
21
+ "orderMoveLegs": { "type": "array", "items": { "type": "object" } }
22
+ },
23
+ "additionalProperties": true
24
+ }
25
+ },
26
+ "required": ["organizationId"],
27
+ "additionalProperties": true
28
+ },
29
+ "outputs": { "type": "array", "items": { "type": "object", "additionalProperties": true } }
30
+ },
31
+ "required": ["task", "name", "inputs"],
32
+ "allOf": [
33
+ { "if": { "properties": { "task": { "const": "OrderMove/Create@1" } } }, "then": { "properties": { "inputs": { "required": ["organizationId", "orderMove"] } } } },
34
+ { "if": { "properties": { "task": { "enum": ["OrderMove/Update@1", "OrderMove/Delete@1"] } } }, "then": { "properties": { "inputs": { "required": ["organizationId", "orderMoveId"] } } } },
35
+ { "if": { "properties": { "task": { "const": "OrderMove/Update@1" } } }, "then": { "properties": { "inputs": { "required": ["organizationId", "orderMoveId", "orderMove"] } } } }
36
+ ],
37
+ "additionalProperties": true
38
+ }
@@ -131,6 +131,12 @@
131
131
  "items": { "type": "string" },
132
132
  "description": "Fields to match existing commodities."
133
133
  },
134
+ "commodityMatchConflict": {
135
+ "type": "string",
136
+ "enum": ["Link", "Error"],
137
+ "default": "Link",
138
+ "description": "Handling when a matched top-level commodity already belongs to another order of the same type. Link reuses it; Error skips it and records an import error."
139
+ },
134
140
  "createEventDefinitions": {
135
141
  "type": "boolean",
136
142
  "description": "Auto-create missing tracking event definitions during import. Default: true."
@@ -0,0 +1,101 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Organization Config Tasks",
4
+ "description": "Organization configuration workflow operations",
5
+ "type": "object",
6
+ "properties": {
7
+ "task": {
8
+ "type": "string",
9
+ "enum": [
10
+ "OrganizationConfig/Update@1"
11
+ ],
12
+ "description": "Task type identifier"
13
+ },
14
+ "name": {
15
+ "type": "string",
16
+ "description": "Step name identifier"
17
+ },
18
+ "description": {
19
+ "type": "string",
20
+ "description": "Step description"
21
+ },
22
+ "conditions": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "object",
26
+ "properties": {
27
+ "expression": {
28
+ "type": "string"
29
+ }
30
+ },
31
+ "required": [
32
+ "expression"
33
+ ]
34
+ }
35
+ },
36
+ "continueOnError": {
37
+ "type": "boolean"
38
+ },
39
+ "inputs": {
40
+ "type": "object",
41
+ "description": "OrganizationConfig update inputs",
42
+ "properties": {
43
+ "organizationId": {
44
+ "oneOf": [
45
+ {
46
+ "type": "integer"
47
+ },
48
+ {
49
+ "type": "string"
50
+ }
51
+ ],
52
+ "description": "Organization ID"
53
+ },
54
+ "organizationConfigId": {
55
+ "oneOf": [
56
+ {
57
+ "type": "integer"
58
+ },
59
+ {
60
+ "type": "string"
61
+ }
62
+ ],
63
+ "description": "OrganizationConfig ID to update"
64
+ },
65
+ "organizationConfig": {
66
+ "type": "object",
67
+ "description": "Dynamic OrganizationConfig values to update",
68
+ "additionalProperties": true
69
+ }
70
+ },
71
+ "required": [
72
+ "organizationId",
73
+ "organizationConfigId",
74
+ "organizationConfig"
75
+ ],
76
+ "additionalProperties": true
77
+ },
78
+ "outputs": {
79
+ "type": "array",
80
+ "items": {
81
+ "type": "object",
82
+ "properties": {
83
+ "name": {
84
+ "type": "string"
85
+ },
86
+ "mapping": {
87
+ "type": "string"
88
+ }
89
+ },
90
+ "required": [
91
+ "name",
92
+ "mapping"
93
+ ]
94
+ }
95
+ }
96
+ },
97
+ "required": [
98
+ "task"
99
+ ],
100
+ "additionalProperties": true
101
+ }
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "inputs": {
39
39
  "type": "object",
40
- "description": "TrackingEvent/Create inputs (organizationId, eventDefinitionId or eventDefinitionName, orderId/commodityId/commodityIds, description, location, includeInTracking, sendEmail, eventDate, customValues, skipIfExists, eventDefinitionValues) OR TrackingEvent/Import inputs",
40
+ "description": "TrackingEvent/Create inputs (organizationId, eventDefinitionId or eventDefinitionName, order/commodity/dispatch-route target, description, location, includeInTracking, sendEmail, eventDate, customValues, skipIfExists, eventDefinitionValues) OR TrackingEvent/Import inputs",
41
41
  "properties": {
42
42
  "organizationId": {
43
43
  "type": ["integer", "string"],
@@ -45,7 +45,7 @@
45
45
  },
46
46
  "orderId": {
47
47
  "type": ["integer", "string"],
48
- "description": "Target order ID. Required for TrackingEvent/Import@1; for TrackingEvent/Create@1 at least one of orderId, commodityId, or commodityIds must be provided."
48
+ "description": "Target order ID. TrackingEvent/Import@1 requires exactly one of orderId, dispatchRouteId, or dispatchRouteStopId. TrackingEvent/Create@1 requires at least one supported target."
49
49
  },
50
50
  "commodityId": {
51
51
  "type": ["integer", "string"],
@@ -58,6 +58,14 @@
58
58
  "type": ["integer", "string"]
59
59
  }
60
60
  },
61
+ "dispatchRouteId": {
62
+ "type": ["integer", "string"],
63
+ "description": "Target dispatch route ID. For TrackingEvent/Import@1 it is mutually exclusive with orderId and dispatchRouteStopId."
64
+ },
65
+ "dispatchRouteStopId": {
66
+ "type": ["integer", "string"],
67
+ "description": "Target dispatch route stop ID. For TrackingEvent/Import@1 it is mutually exclusive with orderId and dispatchRouteId."
68
+ },
61
69
  "eventDefinitionId": {
62
70
  "type": ["integer", "string"],
63
71
  "description": "(TrackingEvent/Create@1) ID of an existing event definition. Required if eventDefinitionName is not provided."
@@ -148,7 +156,7 @@
148
156
  },
149
157
  "skipIfExists": {
150
158
  "type": ["boolean", "string"],
151
- "description": "(TrackingEvent/Import@1) Skip event if duplicate found via matchByFields. Default: true. (TrackingEvent/Create@1) Skip if an event with the same event definition already exists on the target order or commodity."
159
+ "description": "(TrackingEvent/Import@1) Skip event if duplicate found via matchByFields. Default: true. (TrackingEvent/Create@1) Skip if an event with the same event definition already exists on a target order, commodity, dispatch route, or dispatch route stop."
152
160
  },
153
161
  "createEventDefinitions": {
154
162
  "type": ["boolean", "string"],