datex-studio-cli 0.3.1__tar.gz → 0.3.3__tar.gz

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 (165) hide show
  1. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/.gitignore +9 -0
  2. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/PKG-INFO +8 -1
  3. datex_studio_cli-0.3.3/examples/bill-of-lading/01-schema-exploration.md +303 -0
  4. datex_studio_cli-0.3.3/examples/bill-of-lading/02-field-mapping.md +192 -0
  5. datex_studio_cli-0.3.3/examples/bill-of-lading/bill-of-lading.data.json +105 -0
  6. datex_studio_cli-0.3.3/examples/bill-of-lading/bill-of-lading.rdlx-json +857 -0
  7. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/pyproject.toml +15 -2
  8. datex_studio_cli-0.3.3/report-creator.skill +0 -0
  9. datex_studio_cli-0.3.3/scripts/analyze_corpus.py +286 -0
  10. datex_studio_cli-0.3.3/scripts/generate_rdlx_schema.py +433 -0
  11. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/__init__.py +1 -1
  12. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/cli.py +19 -29
  13. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/auth.py +2 -2
  14. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/branch.py +10 -2
  15. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/crm.py +13 -23
  16. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/datasource.py +116 -102
  17. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/devops.py +164 -18
  18. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/document.py +5 -9
  19. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/explore.py +2 -2
  20. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/odata.py +2 -2
  21. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/organization.py +17 -5
  22. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/release_notes.py +7 -21
  23. datex_studio_cli-0.3.3/src/dxs/commands/report/__init__.py +396 -0
  24. datex_studio_cli-0.3.3/src/dxs/commands/report/add_cmds.py +1456 -0
  25. datex_studio_cli-0.3.3/src/dxs/commands/report/api.py +716 -0
  26. datex_studio_cli-0.3.3/src/dxs/commands/report/batch.py +350 -0
  27. datex_studio_cli-0.3.3/src/dxs/commands/report/create.py +264 -0
  28. datex_studio_cli-0.3.3/src/dxs/commands/report/data.py +192 -0
  29. datex_studio_cli-0.3.3/src/dxs/commands/report/dataset.py +200 -0
  30. datex_studio_cli-0.3.3/src/dxs/commands/report/edit.py +296 -0
  31. datex_studio_cli-0.3.3/src/dxs/commands/report/preview.py +326 -0
  32. datex_studio_cli-0.3.3/src/dxs/commands/report/schema_cmds.py +84 -0
  33. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/schema.py +715 -224
  34. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/source.py +2 -6
  35. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/studio.py +133 -26
  36. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/api/client.py +2 -6
  37. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/api/endpoints.py +15 -1
  38. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/datasource/generator.py +416 -131
  39. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/datasource/models.py +57 -5
  40. datex_studio_cli-0.3.3/src/dxs/core/datasource/parsers.py +432 -0
  41. datex_studio_cli-0.3.3/src/dxs/core/datasource/resolver.py +210 -0
  42. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/datasource/validator.py +5 -89
  43. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/devops/client.py +67 -0
  44. datex_studio_cli-0.3.3/src/dxs/core/devops/helpers.py +76 -0
  45. datex_studio_cli-0.3.3/src/dxs/core/devops/models.py +297 -0
  46. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/dynamics/client.py +15 -10
  47. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/output/csv_fmt.py +17 -0
  48. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/output/formatter.py +13 -9
  49. datex_studio_cli-0.3.3/src/dxs/core/output/redaction.py +70 -0
  50. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/output/yaml_fmt.py +14 -12
  51. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/release_notes.py +12 -8
  52. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/datasource_binding.py +16 -4
  53. datex_studio_cli-0.3.3/src/dxs/report/engine.py +1164 -0
  54. datex_studio_cli-0.3.3/src/dxs/report/models.py +392 -0
  55. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/owned_datasource.py +47 -74
  56. datex_studio_cli-0.3.3/src/dxs/report/preview.py +184 -0
  57. datex_studio_cli-0.3.1/src/dxs/report/preview.py → datex_studio_cli-0.3.3/src/dxs/report/preview_arjs.py +86 -160
  58. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/schema.py +420 -13
  59. datex_studio_cli-0.3.3/src/dxs/report/svg_renderer.py +147 -0
  60. datex_studio_cli-0.3.3/src/dxs/report/validate_arjs.py +142 -0
  61. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/validator.py +161 -2
  62. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/wrapper.py +3 -1
  63. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/config.py +3 -0
  64. datex_studio_cli-0.3.3/src/dxs/utils/image.py +43 -0
  65. datex_studio_cli-0.3.3/src/dxs/utils/paths.py +131 -0
  66. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/resolvers.py +36 -1
  67. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/app.py +24 -7
  68. datex_studio_cli-0.3.3/src/dxs/web/design.py +345 -0
  69. datex_studio_cli-0.3.3/src/dxs/web/static/404/index.html +1 -0
  70. datex_studio_cli-0.3.3/src/dxs/web/static/404.html +1 -0
  71. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +1 -0
  72. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +1 -0
  73. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/538-0c48d257061c2519.js +1 -0
  74. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +1 -0
  75. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +1 -0
  76. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +1 -0
  77. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +1 -0
  78. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +1 -0
  79. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +1 -0
  80. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +1 -0
  81. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/app/page-b5e545d0d4880f6f.js → datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +1 -1
  82. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/main-1a0dcce460eb61ce.js → datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +1 -1
  83. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/css/a4597027cb06b77d.css +3 -0
  84. datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/tKckXNZJLjE7JZyWX_89t/_buildManifest.js +1 -0
  85. datex_studio_cli-0.3.3/src/dxs/web/static/design/capture/index.html +1 -0
  86. datex_studio_cli-0.3.3/src/dxs/web/static/design/capture/index.txt +21 -0
  87. datex_studio_cli-0.3.3/src/dxs/web/static/design/index.html +1 -0
  88. datex_studio_cli-0.3.3/src/dxs/web/static/design/index.txt +21 -0
  89. datex_studio_cli-0.3.3/src/dxs/web/static/index.html +1 -0
  90. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/index.txt +6 -6
  91. datex_studio_cli-0.3.3/src/dxs/web/static/render-cli.js +76146 -0
  92. datex_studio_cli-0.3.3/src/dxs/web/static/report-preview.html +178 -0
  93. datex_studio_cli-0.3.3/src/dxs/web/static/report-validate.html +169 -0
  94. datex_studio_cli-0.3.3/test-preview.svg +1 -0
  95. datex_studio_cli-0.3.1/report-creator.skill +0 -0
  96. datex_studio_cli-0.3.1/src/dxs/commands/report.py +0 -1962
  97. datex_studio_cli-0.3.1/src/dxs/core/datasource/parsers.py +0 -140
  98. datex_studio_cli-0.3.1/src/dxs/core/devops/models.py +0 -140
  99. datex_studio_cli-0.3.1/src/dxs/report/engine.py +0 -256
  100. datex_studio_cli-0.3.1/src/dxs/report/models.py +0 -273
  101. datex_studio_cli-0.3.1/src/dxs/utils/paths.py +0 -53
  102. datex_studio_cli-0.3.1/src/dxs/web/static/404.html +0 -1
  103. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/RIG3nV-yzLdq0OlVxUM6i/_buildManifest.js +0 -1
  104. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/255-67e8754147461423.js +0 -1
  105. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/841-8775e8c75ff8c949.js +0 -1
  106. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/871-370fd7261c4ea9bc.js +0 -1
  107. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/chunks/app/layout-fb92e6e3144d6d3a.js +0 -1
  108. datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/css/686bbface7277f83.css +0 -3
  109. datex_studio_cli-0.3.1/src/dxs/web/static/index.html +0 -1
  110. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/README.md +0 -0
  111. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/__main__.py +0 -0
  112. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/__init__.py +0 -0
  113. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/api.py +0 -0
  114. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/config.py +0 -0
  115. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/env.py +0 -0
  116. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/marketplace.py +0 -0
  117. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/proxy.py +0 -0
  118. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/repo.py +0 -0
  119. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/servicepack.py +0 -0
  120. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/commands/user.py +0 -0
  121. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/context.py +0 -0
  122. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/__init__.py +0 -0
  123. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/api/__init__.py +0 -0
  124. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/api/metadata_models.py +0 -0
  125. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/api/models.py +0 -0
  126. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/auth/__init__.py +0 -0
  127. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/auth/decorators.py +0 -0
  128. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/auth/msal_client.py +0 -0
  129. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/auth/token_cache.py +0 -0
  130. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/cache.py +0 -0
  131. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/datasource/__init__.py +0 -0
  132. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/devops/__init__.py +0 -0
  133. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/dynamics/__init__.py +0 -0
  134. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/footprint/__init__.py +0 -0
  135. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/footprint/client.py +0 -0
  136. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/footprint/edmx_parser.py +0 -0
  137. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/footprint/metadata.py +0 -0
  138. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/graph.py +0 -0
  139. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/output/__init__.py +0 -0
  140. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/output/json_fmt.py +0 -0
  141. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/core/responses.py +0 -0
  142. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/models/__init__.py +0 -0
  143. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/__init__.py +0 -0
  144. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/field_parser.py +0 -0
  145. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/templates/__init__.py +0 -0
  146. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
  147. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
  148. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/__init__.py +0 -0
  149. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/click_options.py +0 -0
  150. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/errors.py +0 -0
  151. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/filtering.py +0 -0
  152. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/responses.py +0 -0
  153. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/restricted.py +0 -0
  154. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/utils/sorting.py +0 -0
  155. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/__init__.py +0 -0
  156. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/proxy_app.py +0 -0
  157. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
  158. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
  159. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
  160. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
  161. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
  162. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
  163. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  164. {datex_studio_cli-0.3.1 → datex_studio_cli-0.3.3}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
  165. {datex_studio_cli-0.3.1/src/dxs/web/static/_next/static/RIG3nV-yzLdq0OlVxUM6i → datex_studio_cli-0.3.3/src/dxs/web/static/_next/static/tKckXNZJLjE7JZyWX_89t}/_ssgManifest.js +0 -0
@@ -2,6 +2,9 @@ exclude/
2
2
  exploration/
3
3
  reviews/
4
4
  .tap/
5
+ .superpowers/
6
+
7
+ node_modules/
5
8
 
6
9
  # Environment
7
10
  .env
@@ -73,6 +76,12 @@ docs/_build/
73
76
  src/dxs/web/static/
74
77
  src/dxs/web/frontend/node_modules/
75
78
  src/dxs/web/frontend/.next/
79
+ *.tsbuildinfo
80
+
81
+ # Report fidelity testing artifacts
82
+ tests/fixtures/reports/diffs/
83
+ tests/fixtures/reports/composites/
84
+ tests/fixtures/reports/scores.jsonl
76
85
 
77
86
  # Worktrees
78
87
  .worktrees/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datex-studio-cli
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: CLI for Datex Studio low-code platform, designed for LLM-based AI agents
5
5
  Project-URL: Homepage, https://github.com/datex/datex-studio-cli
6
6
  Project-URL: Documentation, https://github.com/datex/datex-studio-cli
@@ -36,11 +36,18 @@ Requires-Dist: pytest>=8.0.0; extra == 'dev'
36
36
  Requires-Dist: ruff>=0.4.0; extra == 'dev'
37
37
  Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
38
38
  Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'dev'
39
+ Provides-Extra: fidelity
40
+ Requires-Dist: cairosvg>=2.7.0; extra == 'fidelity'
41
+ Requires-Dist: pillow>=10.0.0; extra == 'fidelity'
42
+ Requires-Dist: scikit-image>=0.20.0; extra == 'fidelity'
39
43
  Provides-Extra: preview
40
44
  Requires-Dist: pillow>=10.0.0; extra == 'preview'
45
+ Requires-Dist: reportlab>=4.0.0; extra == 'preview'
46
+ Requires-Dist: svglib>=0.9.0; extra == 'preview'
41
47
  Provides-Extra: studio
42
48
  Requires-Dist: fastapi>=0.115.0; extra == 'studio'
43
49
  Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'studio'
50
+ Requires-Dist: watchfiles>=0.20.0; extra == 'studio'
44
51
  Description-Content-Type: text/markdown
45
52
 
46
53
  # Datex Studio CLI (`dxs`)
@@ -0,0 +1,303 @@
1
+ # Bill of Lading - Schema Exploration Notes
2
+
3
+ **Connection ID:** 9
4
+ **Branch:** 73658
5
+ **Date:** 2026-03-18
6
+
7
+ ## Search Results Summary
8
+
9
+ ### Keywords searched
10
+ - `shipment` - Found **Shipments**, ShipmentLines, ShipmentOrderLookup, ShipmentStatuses, ShipmentLoadingInstructions, ShipmentRoutings, and others
11
+ - `bill of lading` - No direct match (field lives on Shipment entity as `BillOfLading`)
12
+ - `BOL` - No direct match
13
+ - `outbound` - Found OutboundOrderPriorities, OutboundProcessingStrategies
14
+ - `shipping` - Found ShippingContainers, ShippingManifests, ShippingHubShipments
15
+ - `order` - Found **Orders**, **OrderLines**, **OrderAddresses**, OrderStatuses, OrderTypes, OrderClasses
16
+ - `carrier` - Found **Carriers**, **CarrierServices**, **CarrierServiceTypes**
17
+ - `freight` - Found **FreightClasses**, **FreightTerms**
18
+ - `commodity` - No match (commodity info lives on Material as Description)
19
+
20
+ ## Key Entities
21
+
22
+ ### Shipments (root entity for BOL report)
23
+ - **Entity type:** `Datex.FootPrint.Api.Shipment`
24
+ - **Entity set:** `Shipments`
25
+ - **Key:** `Id` (Int32)
26
+ - **BOL-relevant properties:**
27
+ - `BillOfLading` (String, max 64) - the BOL number itself
28
+ - `LookupCode` (String, max 64) - shipment lookup code
29
+ - `ReferenceNumber` (String, max 128)
30
+ - `TrackingIdentifier` (String, max 256)
31
+ - `TrailerId` (String, max 64)
32
+ - `SealId` (String, max 64)
33
+ - `Notes` (String)
34
+ - `GrossWeight` (Decimal)
35
+ - `NetWeight` (Decimal)
36
+ - `WeightUomId` (Int32) -> MeasurementUnit
37
+ - `PalletCount` (Decimal)
38
+ - `ItemCount` (Decimal)
39
+ - `CarrierId` (Int32) -> Carrier
40
+ - `CarrierServiceTypeId` (Int32) -> CarrierServiceType
41
+ - `FreightTermId` (Int32) -> FreightTerm
42
+ - `AccountId` (Int32) -> Account (shipper/owner)
43
+ - `ShipToAccountId` (Int32) -> Account (consignee)
44
+ - `ContactId` (Int32) -> Contact
45
+ - `ShipToContactId` (Int32) -> Contact
46
+ - `ShippedDate` (DateTimeOffset)
47
+ - `ExpectedDate` (DateTimeOffset)
48
+ - `DeliveredDate` (DateTimeOffset)
49
+ - `PickupDate` (DateTimeOffset)
50
+ - `DateNeeded` (DateTimeOffset)
51
+ - `DatePromised` (DateTimeOffset)
52
+ - `StatusId` (Int32) -> ShipmentStatus
53
+ - `FobLocation` (String, max 256)
54
+ - `Incoterms` (String, max 50)
55
+ - `ContainerIdentifier` (String, max 64)
56
+ - `ContainerSize` (String, max 16)
57
+ - `BookingNumber` (String, max 50)
58
+ - `BrokerReference` (String, max 32)
59
+ - `PackingSlip` (String, max 128)
60
+ - `ExpectedWarehouseId` (Int32) -> Warehouse
61
+
62
+ ### ShipmentLines (collection - line items on a shipment)
63
+ - **Entity type:** `Datex.FootPrint.Api.ShipmentLine`
64
+ - **Entity set:** `ShipmentLines`
65
+ - **Key:** `Id` (Int32)
66
+ - **Properties:**
67
+ - `LineNumber` (Int32)
68
+ - `ShipmentId` (Int32) -> Shipment
69
+ - `OrderId` (Int32)
70
+ - `OrderLineNumber` (Int32)
71
+ - `ExpectedAmount` (Decimal)
72
+ - `ActualAmount` (Decimal)
73
+ - `ExpectedPackagedAmount` (Decimal)
74
+ - `ActualPackagedAmount` (Decimal)
75
+ - `ExpectedPackagedId` (Int32) -> InventoryMeasurementUnit
76
+ - `ActualPackagedId` (Int32) -> InventoryMeasurementUnit
77
+ - `GrossWeight` (Decimal)
78
+ - `NetWeight` (Decimal)
79
+ - `GrossVolume` (Decimal)
80
+ - `NetVolume` (Decimal)
81
+ - `WeightUomId` (Int32) -> MeasurementUnit
82
+ - `VolumeUomId` (Int32) -> MeasurementUnit
83
+ - `StatusId` (Int32) -> ShipmentLineStatus
84
+ - **Navigation properties:**
85
+ - `OrderLine` -> OrderLine (via OrderId+OrderLineNumber)
86
+ - `Shipment` -> Shipment
87
+ - `ExpectedPackaged` -> InventoryMeasurementUnit
88
+ - `ActualPackaged` -> InventoryMeasurementUnit
89
+ - `WeightUOM` -> MeasurementUnit
90
+ - `VolumeUOM` -> MeasurementUnit
91
+ - `Status` -> ShipmentLineStatus
92
+
93
+ ### Orders
94
+ - **Entity type:** `Datex.FootPrint.Api.Order`
95
+ - **Key:** `Id` (Int32)
96
+ - **BOL-relevant properties:**
97
+ - `LookupCode` (String, max 128) - order number
98
+ - `OwnerReference` (String, max 64)
99
+ - `VendorReference` (String, max 64)
100
+ - `Notes` (String, max 4000)
101
+ - `RequestedDeliveryDate` (DateTimeOffset)
102
+ - `PreferredCarrierId` (Int32) -> Carrier
103
+ - `PreferredCarrierServiceTypeId` (Int32) -> CarrierServiceType
104
+ - `ShippingAddressId` (Int32)
105
+ - **Navigation properties:**
106
+ - `OrderLines` -> OrderLine (many)
107
+ - `Addresses` -> OrderAddress (many) - contains shipper/consignee addresses
108
+ - `Account` -> Account
109
+ - `PreferredCarrier` -> Carrier
110
+ - `Status` -> OrderStatus
111
+ - `ShipmentOrderLookups` -> ShipmentOrderLookup (many)
112
+
113
+ ### OrderLines
114
+ - **Entity type:** `Datex.FootPrint.Api.OrderLine`
115
+ - **Key:** `OrderId` (Int32) + `LineNumber` (Int32)
116
+ - **BOL-relevant properties:**
117
+ - `Amount` (Decimal) - ordered quantity
118
+ - `PackagedAmount` (Decimal)
119
+ - `PackagedId` (Int32) -> InventoryMeasurementUnit
120
+ - `MaterialId` (Int32) -> Material
121
+ - `MaterialAlias` (String, max 256)
122
+ - `GrossWeight` (Decimal)
123
+ - `NetWeight` (Decimal)
124
+ - `WeightUomId` (Int32) -> MeasurementUnit
125
+ - `Cost` (Decimal)
126
+ - `Price` (Decimal)
127
+ - `Notes` (String)
128
+ - `PurchaseOrderIdentifier` (String, max 32)
129
+ - **Navigation properties:**
130
+ - `Material` -> Material
131
+ - `InventoryMeasurementUnit` -> InventoryMeasurementUnit (packaging)
132
+ - `MaterialPackagingLookup` -> MaterialsPackagingsLookup
133
+ - `ShipmentLines` -> ShipmentLine (many)
134
+ - `Order` -> Order
135
+ - `WeightUom` -> MeasurementUnit
136
+
137
+ ### OrderAddresses (collection - multiple addresses per order)
138
+ - **Entity type:** `Datex.FootPrint.Api.OrderAddress`
139
+ - **Key:** `Id` (Int32)
140
+ - **Properties:**
141
+ - `Orderid` (Int32) -> Order
142
+ - `TypeId` (Int32) -> OrderAddressesType (distinguishes shipper vs consignee)
143
+ - `Name` (String, max 256)
144
+ - `AttentionOf` (String, max 64)
145
+ - `Line1` (String, max 128)
146
+ - `Line2` (String, max 128)
147
+ - `Line3` (String, max 128)
148
+ - `Line4` (String, max 128)
149
+ - `City` (String, max 64)
150
+ - `State` (String, max 64)
151
+ - `PostalCode` (String, max 64)
152
+ - `Country` (String, max 32)
153
+ - `PrimaryTelephone` (String, max 50)
154
+ - `PrimaryEmail` (String, max 128)
155
+ - `PrimaryFax` (String, max 50)
156
+ - `FirstName` (String, max 32)
157
+ - `LastName` (String, max 32)
158
+ - `ReferenceCode` (String, max 32)
159
+ - **Navigation:**
160
+ - `Type` -> OrderAddressesType (has Name like "Ship From", "Ship To", etc.)
161
+ - `Order` -> Order
162
+
163
+ ### OrderAddressesType (lookup for address types)
164
+ - **Key:** `Id` (Int32)
165
+ - **Properties:** `Name` (String, max 32), `SystemDefined` (Boolean)
166
+
167
+ ### Carriers
168
+ - **Entity type:** `Datex.FootPrint.Api.Carrier`
169
+ - **Key:** `Id` (Int32)
170
+ - **Properties:**
171
+ - `Name` (String, max 64)
172
+ - `ShortName` (String, max 16)
173
+ - `ScacCode` (String, max 4) - SCAC code for BOL
174
+
175
+ ### CarrierServiceTypes
176
+ - **Entity type:** `Datex.FootPrint.Api.CarrierServiceType`
177
+ - **Key:** `Id` (Int32)
178
+ - **Properties:**
179
+ - `Name` (String, max 64)
180
+ - `ShortName` (String, max 64)
181
+
182
+ ### FreightTerms
183
+ - **Entity type:** `Datex.FootPrint.Api.FreightTerm`
184
+ - **Key:** `Id` (Int32)
185
+ - **Properties:** `Name` (String, max 128)
186
+
187
+ ### FreightClasses
188
+ - **Entity type:** `Datex.FootPrint.Api.FreightClass`
189
+ - **Key:** `Id` (Int32)
190
+ - **Properties:** `Name` (String, max 128), `ShortName` (String, max 32)
191
+
192
+ ### Materials
193
+ - **Entity type:** `Datex.FootPrint.Api.Material`
194
+ - **Key:** `Id` (Int32)
195
+ - **BOL-relevant properties:**
196
+ - `LookupCode` (String, max 256) - item/SKU code
197
+ - `Name` (String, max 128) - item name
198
+ - `Description` (String, max 1024) - commodity description for BOL
199
+ - `NmfcNumber` (String) - NMFC number
200
+ - `NmfcSubNumber` (String) - NMFC sub-number
201
+ - `CommodityCode` (String, UDF) - commodity code
202
+
203
+ ### MaterialsPackagingsLookup (dimensions & freight class per material+packaging)
204
+ - **Entity type:** `Datex.FootPrint.Api.MaterialsPackagingsLookup`
205
+ - **Key:** `MaterialId` + `PackagingId`
206
+ - **BOL-relevant properties:**
207
+ - `FreightClassId` (Int32) -> FreightClass
208
+ - `Weight` (Decimal)
209
+ - `ShippingWeight` (Decimal)
210
+ - `Height` (Decimal)
211
+ - `Length` (Decimal)
212
+ - `Width` (Decimal)
213
+ - `Volume` (Decimal)
214
+ - `ShippingVolume` (Decimal)
215
+ - `TareWeight` (Decimal)
216
+ - `WeightUomId` (Int32) -> MeasurementUnit
217
+ - `DimensionUomId` (Int32) -> MeasurementUnit
218
+ - `VolumeUomId` (Int32) -> MeasurementUnit
219
+ - **Navigation:**
220
+ - `FreightClass` -> FreightClass
221
+ - `WeightUom` -> MeasurementUnit
222
+ - `DimensionsUom` -> MeasurementUnit
223
+
224
+ ### Account (shipper / consignee company)
225
+ - **Entity type:** `Datex.FootPrint.Api.Account`
226
+ - **Key:** `Id` (Int32)
227
+ - **Properties:** `Name` (String, max 256), `LookupCode` (String, max 128)
228
+
229
+ ### Contact (shipper / consignee contact person)
230
+ - **Entity type:** `Datex.FootPrint.Api.Contact`
231
+ - **Key:** `Id` (Int32)
232
+ - **Properties:**
233
+ - `FirstName` (String, max 128)
234
+ - `LastName` (String, max 128)
235
+ - `PrimaryTelephone` (String, max 50)
236
+ - `PrimaryEmail` (String, max 128)
237
+ - `AddressId` (Int32) -> Address
238
+ - **Navigation:** `Address` -> Address
239
+
240
+ ### Address (physical address for contacts)
241
+ - **Entity type:** `Datex.FootPrint.Api.Address`
242
+ - **Key:** `Id` (Int32)
243
+ - **Properties:** `Line1`, `Line2`, `City`, `State`, `PostalCode`, `Country`, `AttentionOf`
244
+
245
+ ### Warehouse
246
+ - **Entity type:** `Datex.FootPrint.Api.Warehouse`
247
+ - **Key:** `Id` (Int32)
248
+ - **Properties:** `Name` (String, max 128), `AddressId` (Int32)
249
+
250
+ ### MeasurementUnit
251
+ - **Key:** `Id` (Int32)
252
+ - **Properties:** `Name` (String, max 64), `Short_name` (String, max 16)
253
+
254
+ ### ShipmentStatus
255
+ - **Key:** `Id` (Int32)
256
+ - **Properties:** `Name` (String, max 128)
257
+
258
+ ## Data Model Relationships for BOL
259
+
260
+ ```
261
+ Shipments (root)
262
+ ├── Carrier -> Carriers (name, SCAC code)
263
+ ├── CarrierServiceType -> CarrierServiceTypes (service level)
264
+ ├── FreightTerm -> FreightTerms (prepaid/collect/third-party)
265
+ ├── Account -> Accounts (shipper company)
266
+ ├── Contact -> Contacts -> Address (shipper contact + address)
267
+ ├── ShipToAccount -> Accounts (consignee company)
268
+ ├── ShipToContact -> Contacts -> Address (consignee contact + address)
269
+ ├── ExpectedWarehouse -> Warehouses (origin warehouse)
270
+ ├── Status -> ShipmentStatuses
271
+ ├── ShipmentLines (collection) ──┐
272
+ │ ├── OrderLine -> OrderLines │
273
+ │ │ ├── Material -> Materials (item desc, NMFC)
274
+ │ │ ├── MaterialPackagingLookup -> MaterialsPackagingsLookup
275
+ │ │ │ ├── FreightClass -> FreightClasses
276
+ │ │ │ ├── WeightUom -> MeasurementUnits
277
+ │ │ │ └── DimensionsUom -> MeasurementUnits
278
+ │ │ └── Order -> Orders
279
+ │ │ └── Addresses -> OrderAddresses (shipper/consignee addresses)
280
+ │ │ └── Type -> OrderAddressesType
281
+ │ ├── WeightUOM -> MeasurementUnits
282
+ │ └── VolumeUOM -> MeasurementUnits
283
+ └── OrderLookups -> ShipmentOrderLookup (shipment-to-order mapping)
284
+ ```
285
+
286
+ ## Important Design Notes
287
+
288
+ 1. **Address sourcing:** BOL addresses come from two potential sources:
289
+ - **OrderAddresses** (per-order, typed by OrderAddressesType - e.g., "Ship From", "Ship To")
290
+ - **Contact.Address** (via Shipment.Contact/ShipToContact navigation)
291
+ - OrderAddresses is more specific to the order; Contact.Address is the master contact address.
292
+
293
+ 2. **Freight class** lives on `MaterialsPackagingsLookup` (not Material or OrderLine directly). Access via `OrderLine.MaterialPackagingLookup.FreightClass.Name`.
294
+
295
+ 3. **NMFC** is on the `Material` entity directly: `Material.NmfcNumber` and `Material.NmfcSubNumber`.
296
+
297
+ 4. **Weight** is available at multiple levels:
298
+ - Shipment level: `GrossWeight`, `NetWeight` (totals)
299
+ - ShipmentLine level: `GrossWeight`, `NetWeight`
300
+ - OrderLine level: `GrossWeight`, `NetWeight`
301
+ - MaterialsPackagingsLookup: `Weight`, `ShippingWeight`, `TareWeight`
302
+
303
+ 5. **ShipmentLines** is the collection that bridges shipments to order lines. Each ShipmentLine links to one OrderLine, which links to Material.
@@ -0,0 +1,192 @@
1
+ # Bill of Lading - Field Mapping
2
+
3
+ **Connection ID:** 9
4
+ **Branch:** 73658
5
+ **Root Entity:** `Shipments` (key: `Id`)
6
+
7
+ ## Root-Level Fields (DataSet: Shipments)
8
+
9
+ These fields come from the Shipment entity and its single-value navigation properties. One row per shipment.
10
+
11
+ | Report Field | OData Path | Source Entity | Notes |
12
+ |---|---|---|---|
13
+ | **Identifiers** | | | |
14
+ | BOL Number | `BillOfLading` | Shipment | Primary BOL identifier, String(64) |
15
+ | Shipment ID | `LookupCode` | Shipment | Shipment lookup code, String(64) |
16
+ | Reference Number | `ReferenceNumber` | Shipment | String(128) |
17
+ | Tracking Number | `TrackingIdentifier` | Shipment | String(256) |
18
+ | Booking Number | `BookingNumber` | Shipment | String(50) |
19
+ | Packing Slip | `PackingSlip` | Shipment | String(128) |
20
+ | PRO Number | `BrokerReference` | Shipment | String(32), often used as PRO number |
21
+ | **Carrier Info** | | | |
22
+ | Carrier Name | `Carrier.Name` | Carrier | $expand=Carrier, String(64) |
23
+ | Carrier Short Name | `Carrier.ShortName` | Carrier | String(16) |
24
+ | SCAC Code | `Carrier.ScacCode` | Carrier | Standard Carrier Alpha Code, String(4) |
25
+ | Service Type | `CarrierServiceType.Name` | CarrierServiceType | $expand=CarrierServiceType, String(64) |
26
+ | Freight Terms | `FreightTerm.Name` | FreightTerm | $expand=FreightTerm (Prepaid/Collect/etc.), String(128) |
27
+ | Trailer Number | `TrailerId` | Shipment | String(64) |
28
+ | Seal Number | `SealId` | Shipment | String(64) |
29
+ | **Shipper (From)** | | | |
30
+ | Shipper Company | `Account.Name` | Account | $expand=Account, String(256) |
31
+ | Shipper Account Code | `Account.LookupCode` | Account | String(128) |
32
+ | Shipper Contact Name | `Contact.FirstName` / `Contact.LastName` | Contact | $expand=Contact, concatenate first+last |
33
+ | Shipper Phone | `Contact.PrimaryTelephone` | Contact | String(50) |
34
+ | Shipper Email | `Contact.PrimaryEmail` | Contact | String(128) |
35
+ | Shipper Address Line 1 | `Contact.Address.Line1` | Address | $expand=Contact($expand=Address), String(128) |
36
+ | Shipper Address Line 2 | `Contact.Address.Line2` | Address | String(128) |
37
+ | Shipper City | `Contact.Address.City` | Address | String(64) |
38
+ | Shipper State | `Contact.Address.State` | Address | String(64) |
39
+ | Shipper Postal Code | `Contact.Address.PostalCode` | Address | String(64) |
40
+ | Shipper Country | `Contact.Address.Country` | Address | String(32) |
41
+ | **Consignee (To)** | | | |
42
+ | Consignee Company | `ShipToAccount.Name` | Account | $expand=ShipToAccount, String(256) |
43
+ | Consignee Account Code | `ShipToAccount.LookupCode` | Account | String(128) |
44
+ | Consignee Contact Name | `ShipToContact.FirstName` / `ShipToContact.LastName` | Contact | $expand=ShipToContact, concatenate |
45
+ | Consignee Phone | `ShipToContact.PrimaryTelephone` | Contact | String(50) |
46
+ | Consignee Email | `ShipToContact.PrimaryEmail` | Contact | String(128) |
47
+ | Consignee Address Line 1 | `ShipToContact.Address.Line1` | Address | $expand=ShipToContact($expand=Address) |
48
+ | Consignee Address Line 2 | `ShipToContact.Address.Line2` | Address | String(128) |
49
+ | Consignee City | `ShipToContact.Address.City` | Address | String(64) |
50
+ | Consignee State | `ShipToContact.Address.State` | Address | String(64) |
51
+ | Consignee Postal Code | `ShipToContact.Address.PostalCode` | Address | String(64) |
52
+ | Consignee Country | `ShipToContact.Address.Country` | Address | String(32) |
53
+ | **Dates** | | | |
54
+ | Ship Date | `ShippedDate` | Shipment | DateTimeOffset, format as date |
55
+ | Expected Date | `ExpectedDate` | Shipment | DateTimeOffset |
56
+ | Delivery Date | `DeliveredDate` | Shipment | DateTimeOffset |
57
+ | Pickup Date | `PickupDate` | Shipment | DateTimeOffset |
58
+ | Date Needed | `DateNeeded` | Shipment | DateTimeOffset |
59
+ | Date Promised | `DatePromised` | Shipment | DateTimeOffset |
60
+ | **Totals & Misc** | | | |
61
+ | Total Gross Weight | `GrossWeight` | Shipment | Decimal |
62
+ | Total Net Weight | `NetWeight` | Shipment | Decimal |
63
+ | Weight UOM | `WeightUOM.Short_name` | MeasurementUnit | Requires separate lookup via WeightUomId |
64
+ | Pallet Count | `PalletCount` | Shipment | Decimal |
65
+ | Item Count | `ItemCount` | Shipment | Decimal |
66
+ | FOB Location | `FobLocation` | Shipment | String(256) |
67
+ | Incoterms | `Incoterms` | Shipment | String(50) |
68
+ | Container ID | `ContainerIdentifier` | Shipment | String(64) |
69
+ | Container Size | `ContainerSize` | Shipment | String(16) |
70
+ | Shipment Status | `Status.Name` | ShipmentStatus | $expand=Status, String(128) |
71
+ | Special Instructions | `Notes` | Shipment | String (unlimited) |
72
+ | Origin Warehouse | `ExpectedWarehouse.Name` | Warehouse | $expand=ExpectedWarehouse, String(128) |
73
+
74
+ ## Collection Fields - Shipment Lines (DataSet: ShipmentLines)
75
+
76
+ These fields require a separate DataSet because ShipmentLines is a one-to-many collection. Filter by `ShipmentId`.
77
+
78
+ | Report Field | OData Path | Source Entity | Notes |
79
+ |---|---|---|---|
80
+ | **Line Identification** | | | |
81
+ | Line Number | `LineNumber` | ShipmentLine | Int32 |
82
+ | Order ID | `OrderId` | ShipmentLine | Int32, FK to Orders |
83
+ | Order Line Number | `OrderLineNumber` | ShipmentLine | Int32 |
84
+ | **Quantities** | | | |
85
+ | Expected Quantity | `ExpectedAmount` | ShipmentLine | Decimal |
86
+ | Actual Quantity | `ActualAmount` | ShipmentLine | Decimal |
87
+ | Expected Pkg Qty | `ExpectedPackagedAmount` | ShipmentLine | Decimal |
88
+ | Actual Pkg Qty | `ActualPackagedAmount` | ShipmentLine | Decimal |
89
+ | **Packaging** | | | |
90
+ | Expected Package | `ExpectedPackaged.Name` | InventoryMeasurementUnit | $expand=ExpectedPackaged |
91
+ | Actual Package | `ActualPackaged.Name` | InventoryMeasurementUnit | $expand=ActualPackaged |
92
+ | **Weights & Volumes** | | | |
93
+ | Line Gross Weight | `GrossWeight` | ShipmentLine | Decimal |
94
+ | Line Net Weight | `NetWeight` | ShipmentLine | Decimal |
95
+ | Line Gross Volume | `GrossVolume` | ShipmentLine | Decimal |
96
+ | Line Net Volume | `NetVolume` | ShipmentLine | Decimal |
97
+ | Weight UOM | `WeightUOM.Short_name` | MeasurementUnit | $expand=WeightUOM |
98
+ | Volume UOM | `VolumeUOM.Short_name` | MeasurementUnit | $expand=VolumeUOM |
99
+ | **Item Details (via OrderLine)** | | | |
100
+ | Item Code | `OrderLine.Material.LookupCode` | Material | $expand=OrderLine($expand=Material) |
101
+ | Item Name | `OrderLine.Material.Name` | Material | String(128) |
102
+ | Commodity Description | `OrderLine.Material.Description` | Material | String(1024), main BOL line description |
103
+ | NMFC Number | `OrderLine.Material.NmfcNumber` | Material | NMFC classification |
104
+ | NMFC Sub-Number | `OrderLine.Material.NmfcSubNumber` | Material | NMFC sub-classification |
105
+ | Material Alias | `OrderLine.MaterialAlias` | OrderLine | String(256) |
106
+ | Ordered Quantity | `OrderLine.Amount` | OrderLine | Decimal |
107
+ | PO Number | `OrderLine.PurchaseOrderIdentifier` | OrderLine | String(32) |
108
+ | Line Notes | `OrderLine.Notes` | OrderLine | String |
109
+ | Order Number | `OrderLine.Order.LookupCode` | Order | $expand=OrderLine($expand=Order) |
110
+ | **Freight Class (via OrderLine -> MaterialPackagingLookup)** | | | |
111
+ | Freight Class | `OrderLine.MaterialPackagingLookup.FreightClass.Name` | FreightClass | Deep expand required |
112
+ | Freight Class Short | `OrderLine.MaterialPackagingLookup.FreightClass.ShortName` | FreightClass | String(32) |
113
+ | Pkg Weight | `OrderLine.MaterialPackagingLookup.Weight` | MaterialsPackagingsLookup | Decimal |
114
+ | Pkg Shipping Weight | `OrderLine.MaterialPackagingLookup.ShippingWeight` | MaterialsPackagingsLookup | Decimal |
115
+ | Pkg Length | `OrderLine.MaterialPackagingLookup.Length` | MaterialsPackagingsLookup | Decimal |
116
+ | Pkg Width | `OrderLine.MaterialPackagingLookup.Width` | MaterialsPackagingsLookup | Decimal |
117
+ | Pkg Height | `OrderLine.MaterialPackagingLookup.Height` | MaterialsPackagingsLookup | Decimal |
118
+
119
+ ## Alternative/Supplemental: Order Addresses (DataSet: OrderAddresses)
120
+
121
+ OrderAddresses provides per-order address overrides (shipper/consignee). Filter by `Orderid` and `Type.Name` (e.g., "Ship From", "Ship To"). Use this if order-level addresses differ from the Shipment-level Contact addresses.
122
+
123
+ | Report Field | OData Path | Source Entity | Notes |
124
+ |---|---|---|---|
125
+ | Address Type | `Type.Name` | OrderAddressesType | $expand=Type; filter for "Ship From" or "Ship To" |
126
+ | Company Name | `Name` | OrderAddress | String(256) |
127
+ | Attention Of | `AttentionOf` | OrderAddress | String(64) |
128
+ | Contact First Name | `FirstName` | OrderAddress | String(32) |
129
+ | Contact Last Name | `LastName` | OrderAddress | String(32) |
130
+ | Address Line 1 | `Line1` | OrderAddress | String(128) |
131
+ | Address Line 2 | `Line2` | OrderAddress | String(128) |
132
+ | Address Line 3 | `Line3` | OrderAddress | String(128) |
133
+ | Address Line 4 | `Line4` | OrderAddress | String(128) |
134
+ | City | `City` | OrderAddress | String(64) |
135
+ | State | `State` | OrderAddress | String(64) |
136
+ | Postal Code | `PostalCode` | OrderAddress | String(64) |
137
+ | Country | `Country` | OrderAddress | String(32) |
138
+ | Phone | `PrimaryTelephone` | OrderAddress | String(50) |
139
+ | Email | `PrimaryEmail` | OrderAddress | String(128) |
140
+ | Fax | `PrimaryFax` | OrderAddress | String(50) |
141
+ | Reference Code | `ReferenceCode` | OrderAddress | String(32) |
142
+
143
+ ## OData Query Patterns
144
+
145
+ ### Root dataset (Shipment header)
146
+ ```
147
+ Shipments?$filter=Id eq {shipmentId}
148
+ &$select=BillOfLading,LookupCode,ReferenceNumber,TrackingIdentifier,
149
+ BookingNumber,PackingSlip,BrokerReference,TrailerId,SealId,
150
+ ShippedDate,ExpectedDate,DeliveredDate,PickupDate,DateNeeded,DatePromised,
151
+ GrossWeight,NetWeight,PalletCount,ItemCount,
152
+ FobLocation,Incoterms,ContainerIdentifier,ContainerSize,Notes
153
+ &$expand=Carrier($select=Name,ShortName,ScacCode),
154
+ CarrierServiceType($select=Name),
155
+ FreightTerm($select=Name),
156
+ Account($select=Name,LookupCode),
157
+ ShipToAccount($select=Name,LookupCode),
158
+ Contact($select=FirstName,LastName,PrimaryTelephone,PrimaryEmail;$expand=Address($select=Line1,Line2,City,State,PostalCode,Country)),
159
+ ShipToContact($select=FirstName,LastName,PrimaryTelephone,PrimaryEmail;$expand=Address($select=Line1,Line2,City,State,PostalCode,Country)),
160
+ Status($select=Name),
161
+ ExpectedWarehouse($select=Name)
162
+ ```
163
+
164
+ ### Line items dataset (ShipmentLines)
165
+ ```
166
+ ShipmentLines?$filter=ShipmentId eq {shipmentId}
167
+ &$select=LineNumber,OrderId,OrderLineNumber,
168
+ ExpectedAmount,ActualAmount,ExpectedPackagedAmount,ActualPackagedAmount,
169
+ GrossWeight,NetWeight,GrossVolume,NetVolume
170
+ &$expand=ExpectedPackaged($select=Name,ShortName),
171
+ ActualPackaged($select=Name,ShortName),
172
+ WeightUOM($select=Name,Short_name),
173
+ VolumeUOM($select=Name,Short_name),
174
+ OrderLine($select=Amount,MaterialAlias,PurchaseOrderIdentifier,Notes;
175
+ $expand=Material($select=LookupCode,Name,Description,NmfcNumber,NmfcSubNumber),
176
+ MaterialPackagingLookup($select=Weight,ShippingWeight,Length,Width,Height;
177
+ $expand=FreightClass($select=Name,ShortName)),
178
+ Order($select=LookupCode))
179
+ ```
180
+
181
+ ### Order addresses dataset (if needed)
182
+ ```
183
+ OrderAddresses?$filter=Orderid eq {orderId}
184
+ &$expand=Type($select=Name)
185
+ ```
186
+
187
+ ## Notes
188
+
189
+ - **Two address strategies:** The Shipment has Contact/ShipToContact (with nested Address) for shipper/consignee. Orders have OrderAddresses (typed by OrderAddressesType). Either can serve as the BOL address source. OrderAddresses has more fields (Line3, Line4) and is more likely to contain order-specific overrides.
190
+ - **Freight class** requires a deep expand path: `ShipmentLine -> OrderLine -> MaterialPackagingLookup -> FreightClass`. This may need to be flattened or pre-joined depending on report engine capabilities.
191
+ - **Weight UOM** on Shipment uses `WeightUomId` but there is no direct nav property named `WeightUOM` on Shipment (unlike ShipmentLine). May need separate lookup or include the UOM Id and resolve in-report.
192
+ - **Multiple orders per shipment:** A shipment can contain lines from multiple orders. The `ShipmentOrderLookup` entity maps this. Line items will have different `OrderId` values.
@@ -0,0 +1,105 @@
1
+ {
2
+ "dataSets": {
3
+ "ds_shipment": {
4
+ "data": [
5
+ {
6
+ "BillOfLading": "BOL-2026-00451",
7
+ "LookupCode": "SHP-78234",
8
+ "ReferenceNumber": "REF-90123",
9
+ "BrokerReference": "PRO-445567",
10
+ "TrackingIdentifier": "1Z999AA10123456784",
11
+ "TrailerId": "TRL-4821",
12
+ "SealId": "SEAL-99012",
13
+ "ShippedDate": "2026-03-18T08:00:00.0000000",
14
+ "DeliveredDate": "2026-03-20T14:00:00.0000000",
15
+ "GrossWeight": 12450.50,
16
+ "NetWeight": 11200.00,
17
+ "PalletCount": 8,
18
+ "FobLocation": "Origin",
19
+ "Notes": "Dock door 12. Call 30 min before arrival. No weekend deliveries.",
20
+ "Carrier_Name": "XPO Logistics",
21
+ "Carrier_ScacCode": "XPOL",
22
+ "CarrierServiceType_Name": "LTL Standard",
23
+ "FreightTerm_Name": "Prepaid",
24
+ "Account_Name": "Acme Distribution Inc.",
25
+ "Contact_Address_Line1": "1200 Industrial Blvd",
26
+ "Contact_Address_Line2": "Suite 400",
27
+ "Contact_Address_City": "Dallas",
28
+ "Contact_Address_State": "TX",
29
+ "Contact_Address_PostalCode": "75201",
30
+ "ShipToAccount_Name": "National Retail Corp.",
31
+ "ShipToContact_Address_Line1": "8900 Commerce Way",
32
+ "ShipToContact_Address_Line2": "",
33
+ "ShipToContact_Address_City": "Atlanta",
34
+ "ShipToContact_Address_State": "GA",
35
+ "ShipToContact_Address_PostalCode": "30301",
36
+ "ExpectedWarehouse_Name": "Dallas DC"
37
+ }
38
+ ]
39
+ },
40
+ "ds_shipment_lines": {
41
+ "data": [
42
+ {
43
+ "LineNumber": 1,
44
+ "ExpectedAmount": 100,
45
+ "ActualAmount": 100,
46
+ "GrossWeight": 2500.00,
47
+ "NetWeight": 2300.00,
48
+ "WeightUOM_Short_name": "lbs",
49
+ "ExpectedPackaged_Name": "Pallet",
50
+ "OrderLine_Material_LookupCode": "SKU-10042",
51
+ "OrderLine_Material_Description": "Premium Widget Assembly Kit - Standard",
52
+ "OrderLine_Material_NmfcNumber": "86750-3",
53
+ "OrderLine_MaterialPackagingLookup_FreightClass_Name": "70",
54
+ "OrderLine_Order_LookupCode": "SO-44210",
55
+ "OrderLine_PurchaseOrderIdentifier": "PO-78901"
56
+ },
57
+ {
58
+ "LineNumber": 2,
59
+ "ExpectedAmount": 250,
60
+ "ActualAmount": 248,
61
+ "GrossWeight": 4800.00,
62
+ "NetWeight": 4500.00,
63
+ "WeightUOM_Short_name": "lbs",
64
+ "ExpectedPackaged_Name": "Case",
65
+ "OrderLine_Material_LookupCode": "SKU-20085",
66
+ "OrderLine_Material_Description": "Industrial Fastener Set - Heavy Duty",
67
+ "OrderLine_Material_NmfcNumber": "51200-1",
68
+ "OrderLine_MaterialPackagingLookup_FreightClass_Name": "85",
69
+ "OrderLine_Order_LookupCode": "SO-44210",
70
+ "OrderLine_PurchaseOrderIdentifier": "PO-78901"
71
+ },
72
+ {
73
+ "LineNumber": 3,
74
+ "ExpectedAmount": 50,
75
+ "ActualAmount": 50,
76
+ "GrossWeight": 3200.00,
77
+ "NetWeight": 2900.00,
78
+ "WeightUOM_Short_name": "lbs",
79
+ "ExpectedPackaged_Name": "Pallet",
80
+ "OrderLine_Material_LookupCode": "SKU-30120",
81
+ "OrderLine_Material_Description": "Hydraulic Pump Motor - 3HP",
82
+ "OrderLine_Material_NmfcNumber": "12340-2",
83
+ "OrderLine_MaterialPackagingLookup_FreightClass_Name": "92.5",
84
+ "OrderLine_Order_LookupCode": "SO-44215",
85
+ "OrderLine_PurchaseOrderIdentifier": "PO-79055"
86
+ },
87
+ {
88
+ "LineNumber": 4,
89
+ "ExpectedAmount": 500,
90
+ "ActualAmount": 500,
91
+ "GrossWeight": 1950.50,
92
+ "NetWeight": 1500.00,
93
+ "WeightUOM_Short_name": "lbs",
94
+ "ExpectedPackaged_Name": "Box",
95
+ "OrderLine_Material_LookupCode": "SKU-40200",
96
+ "OrderLine_Material_Description": "Copper Connector Plate - Type B",
97
+ "OrderLine_Material_NmfcNumber": "44820-4",
98
+ "OrderLine_MaterialPackagingLookup_FreightClass_Name": "65",
99
+ "OrderLine_Order_LookupCode": "SO-44215",
100
+ "OrderLine_PurchaseOrderIdentifier": ""
101
+ }
102
+ ]
103
+ }
104
+ }
105
+ }