@documentation-robotics/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/PYTHON_CLI_PARITY.md +265 -0
  2. package/PYTHON_CLI_STRUCTURE_UPDATE.md +246 -0
  3. package/README.md +926 -0
  4. package/biome.json +42 -0
  5. package/bunfig.toml +3 -0
  6. package/dist/ai/claude-client.js +71 -0
  7. package/dist/ai/claude-client.js.map +7 -0
  8. package/dist/ai/context-provider.js +129 -0
  9. package/dist/ai/context-provider.js.map +7 -0
  10. package/dist/ai/tools.js +231 -0
  11. package/dist/ai/tools.js.map +7 -0
  12. package/dist/cli.js +224 -0
  13. package/dist/cli.js.map +7 -0
  14. package/dist/commands/add.js +51 -0
  15. package/dist/commands/add.js.map +7 -0
  16. package/dist/commands/changeset.js +174 -0
  17. package/dist/commands/changeset.js.map +7 -0
  18. package/dist/commands/chat.js +111 -0
  19. package/dist/commands/chat.js.map +7 -0
  20. package/dist/commands/conformance.js +132 -0
  21. package/dist/commands/conformance.js.map +7 -0
  22. package/dist/commands/delete.js +31 -0
  23. package/dist/commands/delete.js.map +7 -0
  24. package/dist/commands/element.js +28 -0
  25. package/dist/commands/element.js.map +7 -0
  26. package/dist/commands/export.js +65 -0
  27. package/dist/commands/export.js.map +7 -0
  28. package/dist/commands/info.js +40 -0
  29. package/dist/commands/info.js.map +7 -0
  30. package/dist/commands/init.js +45 -0
  31. package/dist/commands/init.js.map +7 -0
  32. package/dist/commands/list.js +32 -0
  33. package/dist/commands/list.js.map +7 -0
  34. package/dist/commands/migrate.js +36 -0
  35. package/dist/commands/migrate.js.map +7 -0
  36. package/dist/commands/project.js +74 -0
  37. package/dist/commands/project.js.map +7 -0
  38. package/dist/commands/relationship.js +118 -0
  39. package/dist/commands/relationship.js.map +7 -0
  40. package/dist/commands/search.js +48 -0
  41. package/dist/commands/search.js.map +7 -0
  42. package/dist/commands/show.js +38 -0
  43. package/dist/commands/show.js.map +7 -0
  44. package/dist/commands/trace.js +60 -0
  45. package/dist/commands/trace.js.map +7 -0
  46. package/dist/commands/update.js +37 -0
  47. package/dist/commands/update.js.map +7 -0
  48. package/dist/commands/upgrade.js +152 -0
  49. package/dist/commands/upgrade.js.map +7 -0
  50. package/dist/commands/validate.js +71 -0
  51. package/dist/commands/validate.js.map +7 -0
  52. package/dist/commands/version.js +20 -0
  53. package/dist/commands/version.js.map +7 -0
  54. package/dist/commands/visualize.js +51 -0
  55. package/dist/commands/visualize.js.map +7 -0
  56. package/dist/core/active-changeset.js +52 -0
  57. package/dist/core/active-changeset.js.map +7 -0
  58. package/dist/core/changeset.js +244 -0
  59. package/dist/core/changeset.js.map +7 -0
  60. package/dist/core/dependency-tracker.js +322 -0
  61. package/dist/core/dependency-tracker.js.map +7 -0
  62. package/dist/core/element.js +65 -0
  63. package/dist/core/element.js.map +7 -0
  64. package/dist/core/layer.js +75 -0
  65. package/dist/core/layer.js.map +7 -0
  66. package/dist/core/manifest.js +57 -0
  67. package/dist/core/manifest.js.map +7 -0
  68. package/dist/core/migration-registry.js +131 -0
  69. package/dist/core/migration-registry.js.map +7 -0
  70. package/dist/core/model.js +455 -0
  71. package/dist/core/model.js.map +7 -0
  72. package/dist/core/projection-engine.js +288 -0
  73. package/dist/core/projection-engine.js.map +7 -0
  74. package/dist/core/reference-registry.js +188 -0
  75. package/dist/core/reference-registry.js.map +7 -0
  76. package/dist/core/relationship-registry.js +114 -0
  77. package/dist/core/relationship-registry.js.map +7 -0
  78. package/dist/core/relationships.js +78 -0
  79. package/dist/core/relationships.js.map +7 -0
  80. package/dist/export/archimate-exporter.js +111 -0
  81. package/dist/export/archimate-exporter.js.map +7 -0
  82. package/dist/export/export-manager.js +63 -0
  83. package/dist/export/export-manager.js.map +7 -0
  84. package/dist/export/graphml-exporter.js +39 -0
  85. package/dist/export/graphml-exporter.js.map +7 -0
  86. package/dist/export/index.js +17 -0
  87. package/dist/export/index.js.map +7 -0
  88. package/dist/export/json-schema-exporter.js +60 -0
  89. package/dist/export/json-schema-exporter.js.map +7 -0
  90. package/dist/export/markdown-exporter.js +99 -0
  91. package/dist/export/markdown-exporter.js.map +7 -0
  92. package/dist/export/openapi-exporter.js +85 -0
  93. package/dist/export/openapi-exporter.js.map +7 -0
  94. package/dist/export/plantuml-exporter.js +60 -0
  95. package/dist/export/plantuml-exporter.js.map +7 -0
  96. package/dist/export/types.js +36 -0
  97. package/dist/export/types.js.map +7 -0
  98. package/dist/schemas/bundled/01-motivation-layer.schema.json +942 -0
  99. package/dist/schemas/bundled/02-business-layer.schema.json +1293 -0
  100. package/dist/schemas/bundled/03-security-layer.schema.json +2177 -0
  101. package/dist/schemas/bundled/04-application-layer.schema.json +1328 -0
  102. package/dist/schemas/bundled/05-technology-layer.schema.json +1465 -0
  103. package/dist/schemas/bundled/06-api-layer.schema.json +1743 -0
  104. package/dist/schemas/bundled/07-data-model-layer.schema.json +1253 -0
  105. package/dist/schemas/bundled/08-datastore-layer.schema.json +892 -0
  106. package/dist/schemas/bundled/09-ux-layer.schema.json +1506 -0
  107. package/dist/schemas/bundled/10-navigation-layer.schema.json +843 -0
  108. package/dist/schemas/bundled/11-apm-observability-layer.schema.json +1430 -0
  109. package/dist/schemas/bundled/12-testing-layer.schema.json +1091 -0
  110. package/dist/schemas/bundled/common/layer-extensions.schema.json +266 -0
  111. package/dist/schemas/bundled/common/predicates.schema.json +493 -0
  112. package/dist/schemas/bundled/common/relationships.schema.json +791 -0
  113. package/dist/schemas/bundled/common/source-references.schema.json +71 -0
  114. package/dist/schemas/bundled/link-registry.json +1839 -0
  115. package/dist/schemas/bundled/link-registry.schema.json +339 -0
  116. package/dist/schemas/bundled/relationship-catalog.json +1302 -0
  117. package/dist/schemas/bundled/relationship-type.schema.json +221 -0
  118. package/dist/server/server.js +1207 -0
  119. package/dist/server/server.js.map +7 -0
  120. package/dist/server/telemetry-middleware.js +24 -0
  121. package/dist/server/telemetry-middleware.js.map +7 -0
  122. package/dist/telemetry/console-interceptor.js +34 -0
  123. package/dist/telemetry/console-interceptor.js.map +7 -0
  124. package/dist/telemetry/index.js +54 -0
  125. package/dist/telemetry/index.js.map +7 -0
  126. package/dist/telemetry/resilient-exporter.js +41 -0
  127. package/dist/telemetry/resilient-exporter.js.map +7 -0
  128. package/dist/telemetry/resilient-log-exporter.js +41 -0
  129. package/dist/telemetry/resilient-log-exporter.js.map +7 -0
  130. package/dist/telemetry/test-instrumentation.js +32 -0
  131. package/dist/telemetry/test-instrumentation.js.map +7 -0
  132. package/dist/types/index.js +1 -0
  133. package/dist/types/index.js.map +7 -0
  134. package/dist/utils/element-utils.js +11 -0
  135. package/dist/utils/element-utils.js.map +7 -0
  136. package/dist/utils/errors.js +105 -0
  137. package/dist/utils/errors.js.map +7 -0
  138. package/dist/utils/file-io.js +69 -0
  139. package/dist/utils/file-io.js.map +7 -0
  140. package/dist/utils/globals.js +28 -0
  141. package/dist/utils/globals.js.map +7 -0
  142. package/dist/utils/model-path.js +22 -0
  143. package/dist/utils/model-path.js.map +7 -0
  144. package/dist/utils/project-paths.js +45 -0
  145. package/dist/utils/project-paths.js.map +7 -0
  146. package/dist/utils/spec-installer.js +85 -0
  147. package/dist/utils/spec-installer.js.map +7 -0
  148. package/dist/utils/spec-version.js +33 -0
  149. package/dist/utils/spec-version.js.map +7 -0
  150. package/dist/validators/index.js +15 -0
  151. package/dist/validators/index.js.map +7 -0
  152. package/dist/validators/naming-validator.js +82 -0
  153. package/dist/validators/naming-validator.js.map +7 -0
  154. package/dist/validators/reference-validator.js +106 -0
  155. package/dist/validators/reference-validator.js.map +7 -0
  156. package/dist/validators/schema-validator.js +148 -0
  157. package/dist/validators/schema-validator.js.map +7 -0
  158. package/dist/validators/semantic-validator.js +80 -0
  159. package/dist/validators/semantic-validator.js.map +7 -0
  160. package/dist/validators/types.js +48 -0
  161. package/dist/validators/types.js.map +7 -0
  162. package/dist/validators/validator.js +67 -0
  163. package/dist/validators/validator.js.map +7 -0
  164. package/docs/TEST-INSTRUMENTATION.md +405 -0
  165. package/docs/telemetry.md +427 -0
  166. package/package.json +70 -0
  167. package/test-debug.js +33 -0
  168. package/test-special.mjs +46 -0
  169. package/test_runner.ts +7 -0
@@ -0,0 +1,1293 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/schemas/02-business-layer.schema.json",
4
+ "title": "Business Layer Layer Schema",
5
+ "description": "Represents business services, processes, actors, and objects that define the organization's operational structure and capabilities.",
6
+ "layerMetadata": {
7
+ "layerId": "02-business-layer",
8
+ "layerName": "Business Layer",
9
+ "intraLayerRelationshipSupport": true,
10
+ "crossLayerRelationshipSupport": true,
11
+ "relationshipCatalogVersion": "2.1.0"
12
+ },
13
+ "intraLayerRelationships": {
14
+ "$comment": "Relationships between entities within this layer. References relationship-catalog.json by ID.",
15
+ "allowed": [
16
+ {
17
+ "relationshipTypeId": "composition",
18
+ "sourceTypes": ["BusinessCollaboration", "TestCoverageModel", "TestCoverageTarget"],
19
+ "targetTypes": ["BusinessRole", "OutcomeCategory", "TestCoverageTarget"],
20
+ "examples": [
21
+ {
22
+ "source": "BusinessCollaboration",
23
+ "target": "BusinessRole",
24
+ "description": "Business collaboration composes business roles that participate in it"
25
+ },
26
+ {
27
+ "source": "TestCoverageModel",
28
+ "target": "TestCoverageTarget",
29
+ "description": "Coverage model composes targets defining what needs testing",
30
+ "layer": "12-testing"
31
+ },
32
+ {
33
+ "source": "TestCoverageTarget",
34
+ "target": "OutcomeCategory",
35
+ "description": "Coverage target composes expected outcome categories",
36
+ "layer": "12-testing"
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ "relationshipTypeId": "aggregation",
42
+ "sourceTypes": ["CoverageRequirement", "Goal", "InputPartitionSelection"],
43
+ "targetTypes": ["ContextVariation", "Goal", "PartitionValue"],
44
+ "examples": [
45
+ {
46
+ "source": "Goal",
47
+ "target": "Goal",
48
+ "description": "High-level goal aggregates sub-goals",
49
+ "layer": "01-motivation"
50
+ },
51
+ {
52
+ "source": "InputPartitionSelection",
53
+ "target": "PartitionValue",
54
+ "description": "Partition selection aggregates multiple partition values to cover",
55
+ "layer": "12-testing"
56
+ },
57
+ {
58
+ "source": "CoverageRequirement",
59
+ "target": "ContextVariation",
60
+ "description": "Requirement aggregates selected contexts for testing",
61
+ "layer": "12-testing"
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "relationshipTypeId": "specialization",
67
+ "sourceTypes": ["PremiumAccount", "Schema"],
68
+ "targetTypes": ["Account", "Schema"],
69
+ "examples": [
70
+ {
71
+ "source": "PremiumAccount",
72
+ "target": "Account",
73
+ "description": "Premium account specializes the general account concept"
74
+ },
75
+ {
76
+ "source": "Schema",
77
+ "target": "Schema",
78
+ "description": "API schema specializes another via allOf/oneOf/anyOf composition",
79
+ "layer": "06-api"
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "relationshipTypeId": "realization",
85
+ "sourceTypes": ["ApplicationService", "Goal", "Outcome"],
86
+ "targetTypes": ["BusinessService", "Goal", "Value"],
87
+ "examples": [
88
+ {
89
+ "source": "Goal",
90
+ "target": "Value",
91
+ "description": "Goal realizes value for stakeholders",
92
+ "layer": "01-motivation"
93
+ },
94
+ {
95
+ "source": "Outcome",
96
+ "target": "Goal",
97
+ "description": "Outcome realizes achievement of goal",
98
+ "layer": "01-motivation"
99
+ },
100
+ {
101
+ "source": "ApplicationService",
102
+ "target": "BusinessService",
103
+ "description": "Application service realizes business service capability"
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "relationshipTypeId": "assignment",
109
+ "sourceTypes": ["BusinessActor"],
110
+ "targetTypes": ["BusinessRole"],
111
+ "examples": [
112
+ {
113
+ "source": "BusinessActor",
114
+ "target": "BusinessRole",
115
+ "description": "Business actor assigned to business role"
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "relationshipTypeId": "association",
121
+ "sourceTypes": ["Requirement", "Stakeholder"],
122
+ "targetTypes": ["Constraint", "Driver", "Goal"],
123
+ "examples": [
124
+ {
125
+ "source": "Stakeholder",
126
+ "target": "Driver",
127
+ "description": "Stakeholder has concern represented by driver",
128
+ "layer": "01-motivation"
129
+ },
130
+ {
131
+ "source": "Stakeholder",
132
+ "target": "Goal",
133
+ "description": "Stakeholder has interest in goal",
134
+ "layer": "01-motivation"
135
+ },
136
+ {
137
+ "source": "Requirement",
138
+ "target": "Constraint",
139
+ "description": "Requirement is limited by constraint",
140
+ "layer": "01-motivation"
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "relationshipTypeId": "influence",
146
+ "sourceTypes": ["Assessment", "Driver"],
147
+ "targetTypes": ["Assessment", "Goal"],
148
+ "examples": [
149
+ {
150
+ "source": "Driver",
151
+ "target": "Assessment",
152
+ "description": "Driver creates need for assessment",
153
+ "layer": "01-motivation"
154
+ },
155
+ {
156
+ "source": "Driver",
157
+ "target": "Goal",
158
+ "description": "Driver motivates goal definition",
159
+ "layer": "01-motivation"
160
+ },
161
+ {
162
+ "source": "Assessment",
163
+ "target": "Goal",
164
+ "description": "Assessment informs goal setting",
165
+ "layer": "01-motivation"
166
+ }
167
+ ]
168
+ },
169
+ {
170
+ "relationshipTypeId": "triggering",
171
+ "sourceTypes": ["BusinessEvent", "CoverageGap", "PartitionDependency"],
172
+ "targetTypes": ["BusinessProcess", "CoverageRequirement", "PartitionValue"],
173
+ "examples": [
174
+ {
175
+ "source": "BusinessEvent",
176
+ "target": "BusinessProcess",
177
+ "description": "Business event triggers business process execution"
178
+ },
179
+ {
180
+ "source": "PartitionDependency",
181
+ "target": "PartitionValue",
182
+ "description": "Dependency condition triggers inclusion/exclusion of partition values",
183
+ "layer": "12-testing"
184
+ },
185
+ {
186
+ "source": "CoverageGap",
187
+ "target": "CoverageRequirement",
188
+ "description": "Identified gap triggers need for additional coverage",
189
+ "layer": "12-testing"
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ "relationshipTypeId": "flow",
195
+ "sourceTypes": ["BusinessProcess", "CoverageRequirement", "TestCoverageTarget"],
196
+ "targetTypes": ["BusinessProcess", "CoverageRequirement", "TestCaseSketch"],
197
+ "examples": [
198
+ {
199
+ "source": "BusinessProcess",
200
+ "target": "BusinessProcess",
201
+ "description": "One business process flows to the next in sequence"
202
+ },
203
+ {
204
+ "source": "TestCoverageTarget",
205
+ "target": "CoverageRequirement",
206
+ "description": "Target flows to requirements that specify its coverage",
207
+ "layer": "12-testing"
208
+ },
209
+ {
210
+ "source": "CoverageRequirement",
211
+ "target": "TestCaseSketch",
212
+ "description": "Requirement flows to sketches that implement it",
213
+ "layer": "12-testing"
214
+ }
215
+ ]
216
+ },
217
+ {
218
+ "relationshipTypeId": "serving",
219
+ "sourceTypes": ["BusinessService", "ContextVariation", "InputSpacePartition"],
220
+ "targetTypes": ["BusinessActor", "TestCoverageTarget"],
221
+ "examples": [
222
+ {
223
+ "source": "BusinessService",
224
+ "target": "BusinessActor",
225
+ "description": "Business service serves business actor"
226
+ },
227
+ {
228
+ "source": "InputSpacePartition",
229
+ "target": "TestCoverageTarget",
230
+ "description": "Partition serves target by defining testable input space",
231
+ "layer": "12-testing"
232
+ },
233
+ {
234
+ "source": "ContextVariation",
235
+ "target": "TestCoverageTarget",
236
+ "description": "Context serves target by defining execution environments",
237
+ "layer": "12-testing"
238
+ }
239
+ ]
240
+ },
241
+ {
242
+ "relationshipTypeId": "access",
243
+ "sourceTypes": ["BusinessProcess", "CoverageRequirement", "TestCaseSketch"],
244
+ "targetTypes": ["BusinessObject", "InputPartitionSelection", "InputSelection"],
245
+ "examples": [
246
+ {
247
+ "source": "BusinessProcess",
248
+ "target": "BusinessObject",
249
+ "description": "Business process accesses business object data"
250
+ },
251
+ {
252
+ "source": "TestCaseSketch",
253
+ "target": "InputSelection",
254
+ "description": "Test sketch accesses input selections for test execution",
255
+ "layer": "12-testing"
256
+ },
257
+ {
258
+ "source": "CoverageRequirement",
259
+ "target": "InputPartitionSelection",
260
+ "description": "Requirement accesses partition selections for coverage",
261
+ "layer": "12-testing"
262
+ }
263
+ ]
264
+ },
265
+ {
266
+ "relationshipTypeId": "uses",
267
+ "sourceTypes": ["ApplicationComponent"],
268
+ "targetTypes": ["TechnologyService"],
269
+ "examples": [
270
+ {
271
+ "source": "ApplicationComponent",
272
+ "target": "TechnologyService",
273
+ "description": "Application component uses technology service"
274
+ }
275
+ ]
276
+ },
277
+ {
278
+ "relationshipTypeId": "supports-goals",
279
+ "sourceTypes": ["BusinessService", "Operation"],
280
+ "targetTypes": ["Goal"],
281
+ "examples": [
282
+ {
283
+ "source": "BusinessService",
284
+ "sourceLayer": "02-business",
285
+ "target": "Goal",
286
+ "targetLayer": "01-motivation",
287
+ "value": "goal-revenue-growth",
288
+ "description": "Payment service supports revenue growth goal"
289
+ },
290
+ {
291
+ "source": "Operation",
292
+ "sourceLayer": "06-api",
293
+ "target": "Goal",
294
+ "targetLayer": "01-motivation",
295
+ "value": "goal-customer-satisfaction",
296
+ "description": "GET /products operation supports customer satisfaction goal"
297
+ }
298
+ ]
299
+ },
300
+ {
301
+ "relationshipTypeId": "fulfills-requirements",
302
+ "sourceTypes": ["ApplicationService", "Operation"],
303
+ "targetTypes": ["Requirement"],
304
+ "examples": [
305
+ {
306
+ "source": "ApplicationService",
307
+ "target": "Requirement",
308
+ "description": "OAuth service fulfills authentication requirement"
309
+ },
310
+ {
311
+ "source": "Operation",
312
+ "sourceLayer": "06-api",
313
+ "target": "Requirement",
314
+ "targetLayer": "01-motivation",
315
+ "value": "req-product-creation-capability",
316
+ "description": "POST /products operation fulfills product creation requirement"
317
+ }
318
+ ]
319
+ },
320
+ {
321
+ "relationshipTypeId": "delivers-value",
322
+ "sourceTypes": ["BusinessService"],
323
+ "targetTypes": ["Value"],
324
+ "examples": [
325
+ {
326
+ "source": "BusinessService",
327
+ "target": "Value",
328
+ "description": "Loyalty program delivers customer retention value"
329
+ }
330
+ ]
331
+ },
332
+ {
333
+ "relationshipTypeId": "governed-by-principles",
334
+ "sourceTypes": ["APIOperation"],
335
+ "targetTypes": ["Principle"],
336
+ "examples": [
337
+ {
338
+ "source": "APIOperation",
339
+ "target": "Principle",
340
+ "description": "REST API governed by RESTful design principles"
341
+ }
342
+ ]
343
+ }
344
+ ]
345
+ },
346
+ "crossLayerRelationships": {
347
+ "$comment": "Relationships to/from entities in other layers",
348
+ "outgoing": [
349
+ {
350
+ "id": "archimate-application-master-data-source",
351
+ "predicate": "master-data-source",
352
+ "inversePredicate": "referenced-by",
353
+ "targetLayer": "04-application",
354
+ "targetTypes": ["MasterDataSource"],
355
+ "sourceTypes": ["BusinessObject"],
356
+ "fieldPath": "application.master-data-source",
357
+ "cardinality": "single",
358
+ "format": "string",
359
+ "strength": "medium",
360
+ "required": false,
361
+ "description": "BusinessObject master data source from DataObject",
362
+ "examples": []
363
+ },
364
+ {
365
+ "id": "archimate-application-process-steps",
366
+ "predicate": "process-steps",
367
+ "inversePredicate": "referenced-by",
368
+ "targetLayer": "04-application",
369
+ "targetTypes": ["ProcessStep"],
370
+ "sourceTypes": ["BusinessProcess"],
371
+ "fieldPath": "application.process-steps",
372
+ "cardinality": "array",
373
+ "format": "reference",
374
+ "strength": "medium",
375
+ "required": false,
376
+ "description": "which specific ApplicationProcess steps realize this business process",
377
+ "examples": []
378
+ },
379
+ {
380
+ "id": "archimate-application-realized-by-process",
381
+ "predicate": "realized-by-process",
382
+ "inversePredicate": "referenced-by",
383
+ "targetLayer": "04-application",
384
+ "targetTypes": ["RealizedByProces"],
385
+ "sourceTypes": ["BusinessProcess"],
386
+ "fieldPath": "application.realized-by-process",
387
+ "cardinality": "single",
388
+ "format": "reference",
389
+ "strength": "medium",
390
+ "required": false,
391
+ "description": "ApplicationService - **BusinessProcess** automated by ApplicationProcess",
392
+ "examples": []
393
+ },
394
+ {
395
+ "id": "archimate-application-represented-by-dataobject",
396
+ "predicate": "represented-by-dataobject",
397
+ "inversePredicate": "referenced-by",
398
+ "targetLayer": "04-application",
399
+ "targetTypes": ["RepresentedByDataobject"],
400
+ "sourceTypes": ["BusinessObject"],
401
+ "fieldPath": "application.represented-by-dataobject",
402
+ "cardinality": "single",
403
+ "format": "string",
404
+ "strength": "medium",
405
+ "required": false,
406
+ "description": "BusinessObject represented in DataObject",
407
+ "examples": []
408
+ },
409
+ {
410
+ "id": "business-apm-business-metrics",
411
+ "predicate": "business-metrics",
412
+ "inversePredicate": "referenced-by",
413
+ "targetLayer": "02-business",
414
+ "targetTypes": ["BusinessMetric"],
415
+ "sourceTypes": ["BusinessProcess"],
416
+ "fieldPath": "apm.business-metrics",
417
+ "cardinality": "array",
418
+ "format": "reference",
419
+ "strength": "medium",
420
+ "required": false,
421
+ "description": "comma-separated business metric IDs this service tracks",
422
+ "examples": [
423
+ {
424
+ "elementType": "BusinessProcess",
425
+ "elementId": "order-process",
426
+ "elementName": "Order Fulfillment Process",
427
+ "fieldPath": "apm.business-metrics",
428
+ "value": "metric-order-fulfillment-time,metric-order-success-rate",
429
+ "layer": "02-business"
430
+ }
431
+ ]
432
+ },
433
+ {
434
+ "id": "data-governance-owner",
435
+ "predicate": "governance-owner",
436
+ "inversePredicate": "referenced-by",
437
+ "targetLayer": "07-data-model",
438
+ "targetTypes": ["GovernanceOwner"],
439
+ "sourceTypes": ["BusinessObject"],
440
+ "fieldPath": "data.governance-owner",
441
+ "cardinality": "single",
442
+ "format": "reference",
443
+ "strength": "medium",
444
+ "required": false,
445
+ "description": "BusinessObject ownership by BusinessActor",
446
+ "examples": [
447
+ {
448
+ "elementType": "BusinessObject",
449
+ "elementId": "order-object",
450
+ "elementName": "Order",
451
+ "fieldPath": "data.governance-owner",
452
+ "value": "sales-rep",
453
+ "layer": "02-business"
454
+ }
455
+ ]
456
+ },
457
+ {
458
+ "id": "motivation-delivers-value",
459
+ "predicate": "delivers-value",
460
+ "inversePredicate": "delivered-by",
461
+ "targetLayer": "01-motivation",
462
+ "targetTypes": ["DeliversValue"],
463
+ "sourceTypes": ["BusinessService"],
464
+ "fieldPath": "motivation.delivers-value",
465
+ "cardinality": "array",
466
+ "format": "reference",
467
+ "strength": "medium",
468
+ "required": false,
469
+ "description": "BusinessService delivers Value",
470
+ "examples": [
471
+ {
472
+ "elementType": "BusinessService",
473
+ "elementId": "order-service",
474
+ "elementName": "Order Processing Service",
475
+ "fieldPath": "motivation.delivers-value",
476
+ "value": "value-customer-convenience,value-operational-efficiency",
477
+ "layer": "02-business"
478
+ },
479
+ {
480
+ "elementType": "ApplicationService",
481
+ "elementId": "product-service",
482
+ "elementName": "product-service",
483
+ "fieldPath": "motivation.delivers-value",
484
+ "value": "value-customer-convenience",
485
+ "layer": "04-application"
486
+ }
487
+ ]
488
+ },
489
+ {
490
+ "id": "motivation-governed-by-principles",
491
+ "predicate": "governed-by-principles",
492
+ "inversePredicate": "governs",
493
+ "targetLayer": "01-motivation",
494
+ "targetTypes": ["GovernedByPrinciple"],
495
+ "sourceTypes": ["BusinessService"],
496
+ "fieldPath": "motivation.governed-by-principles",
497
+ "cardinality": "array",
498
+ "format": "reference",
499
+ "strength": "high",
500
+ "required": false,
501
+ "description": "BusinessService governed by Principles",
502
+ "examples": [
503
+ {
504
+ "elementType": "BusinessService",
505
+ "elementId": "order-service",
506
+ "elementName": "Order Processing Service",
507
+ "fieldPath": "motivation.governed-by-principles",
508
+ "value": "principle-customer-first,principle-automation",
509
+ "layer": "02-business"
510
+ },
511
+ {
512
+ "elementType": "ApplicationService",
513
+ "elementId": "product-service",
514
+ "elementName": "product-service",
515
+ "fieldPath": "motivation.governed-by-principles",
516
+ "value": "principle-api-first,principle-cloud-native",
517
+ "layer": "04-application"
518
+ }
519
+ ]
520
+ },
521
+ {
522
+ "id": "motivation-supports-goals",
523
+ "predicate": "supports-goals",
524
+ "inversePredicate": "supported-by",
525
+ "targetLayer": "01-motivation",
526
+ "targetTypes": ["SupportsGoal"],
527
+ "sourceTypes": ["BusinessService"],
528
+ "fieldPath": "motivation.supports-goals",
529
+ "cardinality": "array",
530
+ "format": "reference",
531
+ "strength": "high",
532
+ "required": false,
533
+ "description": "BusinessService supports Goals",
534
+ "examples": [
535
+ {
536
+ "elementType": "BusinessService",
537
+ "elementId": "order-service",
538
+ "elementName": "Order Processing Service",
539
+ "fieldPath": "motivation.supports-goals",
540
+ "value": "goal-customer-satisfaction,goal-revenue-growth",
541
+ "layer": "02-business"
542
+ },
543
+ {
544
+ "elementType": "ApplicationService",
545
+ "elementId": "product-service",
546
+ "elementName": "product-service",
547
+ "fieldPath": "motivation.supports-goals",
548
+ "value": "goal-product-catalog-accuracy,goal-customer-satisfaction",
549
+ "layer": "04-application"
550
+ }
551
+ ]
552
+ },
553
+ {
554
+ "id": "security-classification",
555
+ "predicate": "classification",
556
+ "inversePredicate": "referenced-by",
557
+ "targetLayer": "03-security",
558
+ "targetTypes": ["Classification"],
559
+ "sourceTypes": ["Artifact"],
560
+ "fieldPath": "security.classification",
561
+ "cardinality": "single",
562
+ "format": "string",
563
+ "strength": "low",
564
+ "required": false,
565
+ "description": "Links to Classification in target layer",
566
+ "examples": [
567
+ {
568
+ "elementType": "Artifact",
569
+ "elementId": "product-db",
570
+ "elementName": "product-db",
571
+ "fieldPath": "security.classification",
572
+ "value": "internal",
573
+ "layer": "05-technology"
574
+ },
575
+ {
576
+ "elementType": "Artifact",
577
+ "elementId": "customer-db",
578
+ "elementName": "customer-db",
579
+ "fieldPath": "security.classification",
580
+ "value": "restricted",
581
+ "layer": "05-technology"
582
+ }
583
+ ]
584
+ },
585
+ {
586
+ "id": "security-process-security-controls",
587
+ "predicate": "security-controls",
588
+ "inversePredicate": "referenced-by",
589
+ "targetLayer": "03-security",
590
+ "targetTypes": ["SecurityControl"],
591
+ "sourceTypes": ["BusinessProcess"],
592
+ "fieldPath": "process.security-controls",
593
+ "cardinality": "array",
594
+ "format": "string",
595
+ "strength": "high",
596
+ "required": false,
597
+ "description": "security control references",
598
+ "examples": [
599
+ {
600
+ "elementType": "BusinessProcess",
601
+ "elementId": "order-process",
602
+ "elementName": "Order Fulfillment Process",
603
+ "fieldPath": "process.security-controls",
604
+ "value": "control-order-approval,control-payment-verification",
605
+ "layer": "02-business"
606
+ }
607
+ ]
608
+ },
609
+ {
610
+ "id": "security-process-separation-of-duty",
611
+ "predicate": "separation-of-duty",
612
+ "inversePredicate": "referenced-by",
613
+ "targetLayer": "03-security",
614
+ "targetTypes": ["SeparationOfDuty"],
615
+ "sourceTypes": ["BusinessProcess"],
616
+ "fieldPath": "process.separation-of-duty",
617
+ "cardinality": "single",
618
+ "format": "boolean",
619
+ "strength": "medium",
620
+ "required": false,
621
+ "description": "Links to SeparationOfDuty in target layer",
622
+ "examples": [
623
+ {
624
+ "elementType": "BusinessProcess",
625
+ "elementId": "order-process",
626
+ "elementName": "Order Fulfillment Process",
627
+ "fieldPath": "process.separation-of-duty",
628
+ "value": "true",
629
+ "layer": "02-business"
630
+ }
631
+ ]
632
+ }
633
+ ],
634
+ "incoming": [
635
+ {
636
+ "id": "business-apm-business-metrics",
637
+ "predicate": "referenced-by",
638
+ "inversePredicate": "business-metrics",
639
+ "sourceLayer": "02-business",
640
+ "sourceTypes": ["BusinessProcess"],
641
+ "targetTypes": ["BusinessMetric"],
642
+ "fieldPath": "apm.business-metrics",
643
+ "cardinality": "array",
644
+ "description": "Inverse of: comma-separated business metric IDs this service tracks"
645
+ },
646
+ {
647
+ "id": "business-apm-business-metrics",
648
+ "predicate": "referenced-by",
649
+ "inversePredicate": "business-metrics",
650
+ "sourceLayer": "04-application",
651
+ "sourceTypes": ["ApplicationService"],
652
+ "targetTypes": ["BusinessMetric"],
653
+ "fieldPath": "apm.business-metrics",
654
+ "cardinality": "array",
655
+ "description": "Inverse of: comma-separated business metric IDs this service tracks"
656
+ },
657
+ {
658
+ "id": "business-apm-business-metrics",
659
+ "predicate": "referenced-by",
660
+ "inversePredicate": "business-metrics",
661
+ "sourceLayer": "06-api",
662
+ "sourceTypes": ["Operation", "SecurityScheme"],
663
+ "targetTypes": ["BusinessMetric"],
664
+ "fieldPath": "apm.business-metrics",
665
+ "cardinality": "array",
666
+ "description": "Inverse of: comma-separated business metric IDs this service tracks"
667
+ },
668
+ {
669
+ "id": "business-interface-ref",
670
+ "predicate": "referenced-by",
671
+ "inversePredicate": "business-interface-ref",
672
+ "sourceLayer": "06-api",
673
+ "sourceTypes": ["Operation", "SecurityScheme"],
674
+ "targetTypes": ["BusinessInterface"],
675
+ "fieldPath": "x-business-interface-ref",
676
+ "cardinality": "single",
677
+ "description": "Inverse of: string (BusinessInterface.id, optional)"
678
+ },
679
+ {
680
+ "id": "business-object-ref",
681
+ "predicate": "referenced-by",
682
+ "inversePredicate": "business-object-ref",
683
+ "sourceLayer": "07-data-model",
684
+ "sourceTypes": ["JSONSchema", "x-business-object-ref Extension", "x-security Extension"],
685
+ "targetTypes": ["BusinessObject"],
686
+ "fieldPath": "x-business-object-ref",
687
+ "cardinality": "single",
688
+ "description": "Inverse of: string (BusinessObject.id reference, optional)"
689
+ },
690
+ {
691
+ "id": "business-service-ref",
692
+ "predicate": "referenced-by",
693
+ "inversePredicate": "business-service-ref",
694
+ "sourceLayer": "06-api",
695
+ "sourceTypes": ["Operation", "SecurityScheme"],
696
+ "targetTypes": ["BusinessService"],
697
+ "fieldPath": "x-business-service-ref",
698
+ "cardinality": "single",
699
+ "description": "Inverse of: string (BusinessService.id, optional)"
700
+ }
701
+ ]
702
+ },
703
+ "type": "object",
704
+ "properties": {
705
+ "business-actors": {
706
+ "type": "array",
707
+ "description": "Collection of BusinessActor entities",
708
+ "items": {
709
+ "$ref": "#/definitions/BusinessActor"
710
+ }
711
+ },
712
+ "business-roles": {
713
+ "type": "array",
714
+ "description": "Collection of BusinessRole entities",
715
+ "items": {
716
+ "$ref": "#/definitions/BusinessRole"
717
+ }
718
+ },
719
+ "business-collaborations": {
720
+ "type": "array",
721
+ "description": "Collection of BusinessCollaboration entities",
722
+ "items": {
723
+ "$ref": "#/definitions/BusinessCollaboration"
724
+ }
725
+ },
726
+ "business-interfaces": {
727
+ "type": "array",
728
+ "description": "Collection of BusinessInterface entities",
729
+ "items": {
730
+ "$ref": "#/definitions/BusinessInterface"
731
+ }
732
+ },
733
+ "business-processes": {
734
+ "type": "array",
735
+ "description": "Collection of BusinessProcess entities",
736
+ "items": {
737
+ "$ref": "#/definitions/BusinessProcess"
738
+ }
739
+ },
740
+ "business-functions": {
741
+ "type": "array",
742
+ "description": "Collection of BusinessFunction entities",
743
+ "items": {
744
+ "$ref": "#/definitions/BusinessFunction"
745
+ }
746
+ },
747
+ "business-interactions": {
748
+ "type": "array",
749
+ "description": "Collection of BusinessInteraction entities",
750
+ "items": {
751
+ "$ref": "#/definitions/BusinessInteraction"
752
+ }
753
+ },
754
+ "business-events": {
755
+ "type": "array",
756
+ "description": "Collection of BusinessEvent entities",
757
+ "items": {
758
+ "$ref": "#/definitions/BusinessEvent"
759
+ }
760
+ },
761
+ "business-services": {
762
+ "type": "array",
763
+ "description": "Collection of BusinessService entities",
764
+ "items": {
765
+ "$ref": "#/definitions/BusinessService"
766
+ }
767
+ },
768
+ "business-objects": {
769
+ "type": "array",
770
+ "description": "Collection of BusinessObject entities",
771
+ "items": {
772
+ "$ref": "#/definitions/BusinessObject"
773
+ }
774
+ },
775
+ "contracts": {
776
+ "type": "array",
777
+ "description": "Collection of Contract entities",
778
+ "items": {
779
+ "$ref": "#/definitions/Contract"
780
+ }
781
+ },
782
+ "representations": {
783
+ "type": "array",
784
+ "description": "Collection of Representation entities",
785
+ "items": {
786
+ "$ref": "#/definitions/Representation"
787
+ }
788
+ },
789
+ "products": {
790
+ "type": "array",
791
+ "description": "Collection of Product entities",
792
+ "items": {
793
+ "$ref": "#/definitions/Product"
794
+ }
795
+ }
796
+ },
797
+ "definitions": {
798
+ "EventType": {
799
+ "type": "string",
800
+ "enum": ["time-driven", "state-change", "external"]
801
+ },
802
+ "RepresentationFormat": {
803
+ "type": "string",
804
+ "enum": ["document", "report", "form", "message"]
805
+ },
806
+ "BusinessActor": {
807
+ "type": "object",
808
+ "description": "An organizational entity capable of performing behavior",
809
+ "required": ["id", "name"],
810
+ "properties": {
811
+ "id": {
812
+ "type": "string",
813
+ "format": "uuid",
814
+ "minLength": 1
815
+ },
816
+ "name": {
817
+ "type": "string",
818
+ "minLength": 1
819
+ },
820
+ "documentation": {
821
+ "type": "string",
822
+ "minLength": 1
823
+ }
824
+ }
825
+ },
826
+ "BusinessRole": {
827
+ "type": "object",
828
+ "description": "The responsibility for performing specific behavior",
829
+ "required": ["id", "name"],
830
+ "properties": {
831
+ "id": {
832
+ "type": "string",
833
+ "format": "uuid",
834
+ "minLength": 1
835
+ },
836
+ "name": {
837
+ "type": "string",
838
+ "minLength": 1
839
+ },
840
+ "documentation": {
841
+ "type": "string",
842
+ "minLength": 1
843
+ }
844
+ }
845
+ },
846
+ "BusinessCollaboration": {
847
+ "type": "object",
848
+ "description": "Aggregate of business roles working together",
849
+ "required": ["id", "name"],
850
+ "properties": {
851
+ "id": {
852
+ "type": "string",
853
+ "format": "uuid",
854
+ "minLength": 1
855
+ },
856
+ "name": {
857
+ "type": "string",
858
+ "minLength": 1
859
+ },
860
+ "documentation": {
861
+ "type": "string",
862
+ "minLength": 1
863
+ },
864
+ "properties": {
865
+ "type": "object",
866
+ "description": "Cross-layer properties",
867
+ "properties": {
868
+ "collaboration": {
869
+ "type": "object",
870
+ "properties": {
871
+ "security-actors": {
872
+ "type": "string",
873
+ "description": "optional, Security Actor IDs"
874
+ },
875
+ "shared-permissions": {
876
+ "type": "string",
877
+ "description": "optional"
878
+ }
879
+ }
880
+ }
881
+ }
882
+ }
883
+ }
884
+ },
885
+ "BusinessInterface": {
886
+ "type": "object",
887
+ "description": "Point of access where business service is available",
888
+ "required": ["id", "name"],
889
+ "properties": {
890
+ "id": {
891
+ "type": "string",
892
+ "format": "uuid",
893
+ "minLength": 1
894
+ },
895
+ "name": {
896
+ "type": "string",
897
+ "minLength": 1
898
+ },
899
+ "documentation": {
900
+ "type": "string",
901
+ "minLength": 1
902
+ },
903
+ "properties": {
904
+ "type": "object",
905
+ "description": "Cross-layer properties",
906
+ "properties": {
907
+ "interface": {
908
+ "type": "object",
909
+ "properties": {
910
+ "api-operations": {
911
+ "type": "string",
912
+ "description": "optional, comma-separated OpenAPI operation IDs"
913
+ },
914
+ "digital-channel": {
915
+ "type": "string",
916
+ "description": "optional"
917
+ }
918
+ }
919
+ }
920
+ }
921
+ }
922
+ }
923
+ },
924
+ "BusinessProcess": {
925
+ "type": "object",
926
+ "description": "Sequence of business behaviors achieving a result",
927
+ "required": ["id", "name"],
928
+ "properties": {
929
+ "id": {
930
+ "type": "string",
931
+ "format": "uuid",
932
+ "minLength": 1
933
+ },
934
+ "name": {
935
+ "type": "string",
936
+ "minLength": 1
937
+ },
938
+ "documentation": {
939
+ "type": "string",
940
+ "minLength": 1
941
+ },
942
+ "properties": {
943
+ "type": "object",
944
+ "description": "Cross-layer properties",
945
+ "properties": {
946
+ "process": {
947
+ "type": "object",
948
+ "properties": {
949
+ "bpmn": {
950
+ "type": "string",
951
+ "description": "optional"
952
+ },
953
+ "security-controls": {
954
+ "type": "string",
955
+ "description": "optional, security control references"
956
+ },
957
+ "audit-required": {
958
+ "type": "string",
959
+ "description": "optional"
960
+ },
961
+ "separation-of-duty": {
962
+ "type": "string",
963
+ "description": "optional"
964
+ },
965
+ "kpi-target": {
966
+ "type": "string",
967
+ "description": "optional"
968
+ }
969
+ }
970
+ },
971
+ "apm": {
972
+ "type": "object",
973
+ "properties": {
974
+ "business-metrics": {
975
+ "type": "string",
976
+ "description": "optional, business metric IDs"
977
+ }
978
+ }
979
+ },
980
+ "application": {
981
+ "type": "object",
982
+ "properties": {
983
+ "realized-by-process": {
984
+ "type": "string",
985
+ "description": "optional, ApplicationProcess ID that automates this business process"
986
+ },
987
+ "process-steps": {
988
+ "type": "string",
989
+ "description": "optional, which specific ApplicationProcess steps realize this business process"
990
+ }
991
+ }
992
+ }
993
+ }
994
+ }
995
+ }
996
+ },
997
+ "BusinessFunction": {
998
+ "type": "object",
999
+ "description": "Collection of business behavior based on criteria",
1000
+ "required": ["id", "name"],
1001
+ "properties": {
1002
+ "id": {
1003
+ "type": "string",
1004
+ "format": "uuid",
1005
+ "minLength": 1
1006
+ },
1007
+ "name": {
1008
+ "type": "string",
1009
+ "minLength": 1
1010
+ },
1011
+ "documentation": {
1012
+ "type": "string",
1013
+ "minLength": 1
1014
+ }
1015
+ }
1016
+ },
1017
+ "BusinessInteraction": {
1018
+ "type": "object",
1019
+ "description": "Unit of collective behavior by collaboration",
1020
+ "required": ["id", "name"],
1021
+ "properties": {
1022
+ "id": {
1023
+ "type": "string",
1024
+ "format": "uuid",
1025
+ "minLength": 1
1026
+ },
1027
+ "name": {
1028
+ "type": "string",
1029
+ "minLength": 1
1030
+ },
1031
+ "documentation": {
1032
+ "type": "string",
1033
+ "minLength": 1
1034
+ }
1035
+ }
1036
+ },
1037
+ "BusinessEvent": {
1038
+ "type": "object",
1039
+ "description": "Something that happens and influences behavior",
1040
+ "required": ["id", "name", "type"],
1041
+ "properties": {
1042
+ "id": {
1043
+ "type": "string",
1044
+ "format": "uuid",
1045
+ "minLength": 1
1046
+ },
1047
+ "name": {
1048
+ "type": "string",
1049
+ "minLength": 1
1050
+ },
1051
+ "documentation": {
1052
+ "type": "string",
1053
+ "minLength": 1
1054
+ },
1055
+ "type": {
1056
+ "$ref": "#/definitions/EventType"
1057
+ },
1058
+ "properties": {
1059
+ "type": "object",
1060
+ "description": "Cross-layer properties",
1061
+ "properties": {
1062
+ "event": {
1063
+ "type": "object",
1064
+ "properties": {
1065
+ "application-ref": {
1066
+ "type": "string",
1067
+ "description": "optional, reference to ApplicationEvent"
1068
+ },
1069
+ "topic": {
1070
+ "type": "string",
1071
+ "description": "optional, event bus topic"
1072
+ }
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ },
1079
+ "BusinessService": {
1080
+ "type": "object",
1081
+ "description": "Service that fulfills a business need",
1082
+ "required": ["id", "name"],
1083
+ "properties": {
1084
+ "id": {
1085
+ "type": "string",
1086
+ "format": "uuid",
1087
+ "minLength": 1
1088
+ },
1089
+ "name": {
1090
+ "type": "string",
1091
+ "minLength": 1
1092
+ },
1093
+ "documentation": {
1094
+ "type": "string",
1095
+ "minLength": 1
1096
+ },
1097
+ "properties": {
1098
+ "type": "object",
1099
+ "description": "Cross-layer properties",
1100
+ "properties": {
1101
+ "sla": {
1102
+ "type": "object",
1103
+ "properties": {
1104
+ "availability": {
1105
+ "type": "string",
1106
+ "description": "optional"
1107
+ },
1108
+ "response-time": {
1109
+ "type": "string",
1110
+ "description": "optional"
1111
+ }
1112
+ }
1113
+ },
1114
+ "motivation": {
1115
+ "type": "object",
1116
+ "properties": {
1117
+ "delivers-value": {
1118
+ "type": "string",
1119
+ "description": "optional, comma-separated Value IDs"
1120
+ },
1121
+ "supports-goals": {
1122
+ "type": "string",
1123
+ "description": "optional, comma-separated Goal IDs"
1124
+ },
1125
+ "governed-by-principles": {
1126
+ "type": "string",
1127
+ "description": "optional, comma-separated Principle IDs"
1128
+ }
1129
+ }
1130
+ }
1131
+ }
1132
+ }
1133
+ }
1134
+ },
1135
+ "BusinessObject": {
1136
+ "type": "object",
1137
+ "description": "Concept used within business domain",
1138
+ "required": ["id", "name"],
1139
+ "properties": {
1140
+ "id": {
1141
+ "type": "string",
1142
+ "format": "uuid",
1143
+ "minLength": 1
1144
+ },
1145
+ "name": {
1146
+ "type": "string",
1147
+ "minLength": 1
1148
+ },
1149
+ "documentation": {
1150
+ "type": "string",
1151
+ "minLength": 1
1152
+ },
1153
+ "properties": {
1154
+ "type": "object",
1155
+ "description": "Cross-layer properties",
1156
+ "properties": {
1157
+ "spec": {
1158
+ "type": "object",
1159
+ "properties": {
1160
+ "schema": {
1161
+ "type": "string",
1162
+ "description": "optional"
1163
+ },
1164
+ "schema-id": {
1165
+ "type": "string",
1166
+ "description": "optional, formal reference to Data Model Layer"
1167
+ }
1168
+ }
1169
+ },
1170
+ "data": {
1171
+ "type": "object",
1172
+ "properties": {
1173
+ "governance-owner": {
1174
+ "type": "string",
1175
+ "description": "optional, data owner reference"
1176
+ }
1177
+ }
1178
+ },
1179
+ "application": {
1180
+ "type": "object",
1181
+ "properties": {
1182
+ "represented-by-dataobject": {
1183
+ "type": "string",
1184
+ "description": "optional, DataObject ID that represents this business concept in applications"
1185
+ },
1186
+ "master-data-source": {
1187
+ "type": "string",
1188
+ "description": "optional, authoritative DataObject for this business object"
1189
+ }
1190
+ }
1191
+ }
1192
+ }
1193
+ }
1194
+ }
1195
+ },
1196
+ "Contract": {
1197
+ "type": "object",
1198
+ "description": "Formal specification of agreement",
1199
+ "required": ["id", "name"],
1200
+ "properties": {
1201
+ "id": {
1202
+ "type": "string",
1203
+ "format": "uuid",
1204
+ "minLength": 1
1205
+ },
1206
+ "name": {
1207
+ "type": "string",
1208
+ "minLength": 1
1209
+ },
1210
+ "documentation": {
1211
+ "type": "string",
1212
+ "minLength": 1
1213
+ },
1214
+ "properties": {
1215
+ "type": "object",
1216
+ "description": "Cross-layer properties",
1217
+ "properties": {
1218
+ "contract": {
1219
+ "type": "object",
1220
+ "properties": {
1221
+ "constraint-refs": {
1222
+ "type": "string",
1223
+ "description": "optional, comma-separated Constraint IDs"
1224
+ },
1225
+ "sla-metrics": {
1226
+ "type": "string",
1227
+ "description": "optional, measurable SLA commitments"
1228
+ }
1229
+ }
1230
+ }
1231
+ }
1232
+ }
1233
+ }
1234
+ },
1235
+ "Representation": {
1236
+ "type": "object",
1237
+ "description": "Perceptible form of business object",
1238
+ "required": ["id", "name", "format"],
1239
+ "properties": {
1240
+ "id": {
1241
+ "type": "string",
1242
+ "format": "uuid",
1243
+ "minLength": 1
1244
+ },
1245
+ "name": {
1246
+ "type": "string",
1247
+ "minLength": 1
1248
+ },
1249
+ "documentation": {
1250
+ "type": "string",
1251
+ "minLength": 1
1252
+ },
1253
+ "format": {
1254
+ "$ref": "#/definitions/RepresentationFormat"
1255
+ }
1256
+ }
1257
+ },
1258
+ "Product": {
1259
+ "type": "object",
1260
+ "description": "Coherent collection of services with a value",
1261
+ "required": ["id", "name"],
1262
+ "properties": {
1263
+ "id": {
1264
+ "type": "string",
1265
+ "format": "uuid",
1266
+ "minLength": 1
1267
+ },
1268
+ "name": {
1269
+ "type": "string",
1270
+ "minLength": 1
1271
+ },
1272
+ "documentation": {
1273
+ "type": "string",
1274
+ "minLength": 1
1275
+ },
1276
+ "services": {
1277
+ "type": "array",
1278
+ "description": "Contains relationship",
1279
+ "items": {
1280
+ "type": "string"
1281
+ }
1282
+ },
1283
+ "contracts": {
1284
+ "type": "array",
1285
+ "description": "Contains relationship",
1286
+ "items": {
1287
+ "type": "string"
1288
+ }
1289
+ }
1290
+ }
1291
+ }
1292
+ }
1293
+ }