@jetta/axle-load-calculator 0.1.3

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 (392) hide show
  1. package/.cursor/ai_changelog/INDEX.md +13 -0
  2. package/.cursor/ai_changelog/_TEMPLATE.md +55 -0
  3. package/.cursor/rules/code-standards.mdc +103 -0
  4. package/.cursor/rules/knowledge-base.mdc +14 -0
  5. package/.cursor/rules/planning-standards.mdc +55 -0
  6. package/.cursor/skills/document-feature-knowledge/SKILL.md +51 -0
  7. package/README.md +49 -0
  8. package/bitbucket-pipelines.yml +81 -0
  9. package/build/core/contracts/chassi_reference.d.ts +7 -0
  10. package/build/core/contracts/chassi_reference.d.ts.map +1 -0
  11. package/build/core/contracts/chassi_reference.js +5 -0
  12. package/build/core/contracts/ms_faixas_contract.d.ts +13 -0
  13. package/build/core/contracts/ms_faixas_contract.d.ts.map +1 -0
  14. package/build/core/contracts/ms_faixas_contract.js +89 -0
  15. package/build/core/contracts/rotation_enum.d.ts +11 -0
  16. package/build/core/contracts/rotation_enum.d.ts.map +1 -0
  17. package/build/core/contracts/rotation_enum.js +9 -0
  18. package/build/core/contracts/suspension_type.d.ts +5 -0
  19. package/build/core/contracts/suspension_type.d.ts.map +1 -0
  20. package/build/core/contracts/suspension_type.js +4 -0
  21. package/build/core/contracts/transport_record.d.ts +5 -0
  22. package/build/core/contracts/transport_record.d.ts.map +1 -0
  23. package/build/core/contracts/transport_record.js +1 -0
  24. package/build/core/contracts/vehicle_type.d.ts +12 -0
  25. package/build/core/contracts/vehicle_type.d.ts.map +1 -0
  26. package/build/core/contracts/vehicle_type.js +10 -0
  27. package/build/core/contracts/vehicle_version.d.ts +8 -0
  28. package/build/core/contracts/vehicle_version.d.ts.map +1 -0
  29. package/build/core/contracts/vehicle_version.js +7 -0
  30. package/build/core/contracts/wire_flags.d.ts +27 -0
  31. package/build/core/contracts/wire_flags.d.ts.map +1 -0
  32. package/build/core/contracts/wire_flags.js +26 -0
  33. package/build/core/math/float_tools.d.ts +7 -0
  34. package/build/core/math/float_tools.d.ts.map +1 -0
  35. package/build/core/math/float_tools.js +14 -0
  36. package/build/core/math/gaussian_elimination.d.ts +8 -0
  37. package/build/core/math/gaussian_elimination.d.ts.map +1 -0
  38. package/build/core/math/gaussian_elimination.js +85 -0
  39. package/build/core/orchestration/axle_weight_physics.d.ts +7 -0
  40. package/build/core/orchestration/axle_weight_physics.d.ts.map +1 -0
  41. package/build/core/orchestration/axle_weight_physics.js +27 -0
  42. package/build/core/orchestration/collision_checker.d.ts +6 -0
  43. package/build/core/orchestration/collision_checker.d.ts.map +1 -0
  44. package/build/core/orchestration/collision_checker.js +67 -0
  45. package/build/core/orchestration/connector_payload_builder.d.ts +11 -0
  46. package/build/core/orchestration/connector_payload_builder.d.ts.map +1 -0
  47. package/build/core/orchestration/connector_payload_builder.js +67 -0
  48. package/build/core/orchestration/java_mass_center.d.ts +9 -0
  49. package/build/core/orchestration/java_mass_center.d.ts.map +1 -0
  50. package/build/core/orchestration/java_mass_center.js +79 -0
  51. package/build/core/orchestration/output_builder.d.ts +11 -0
  52. package/build/core/orchestration/output_builder.d.ts.map +1 -0
  53. package/build/core/orchestration/output_builder.js +15 -0
  54. package/build/core/orchestration/request_schema.d.ts +65 -0
  55. package/build/core/orchestration/request_schema.d.ts.map +1 -0
  56. package/build/core/orchestration/request_schema.js +20 -0
  57. package/build/core/orchestration/weight_by_axis_task.d.ts +7 -0
  58. package/build/core/orchestration/weight_by_axis_task.d.ts.map +1 -0
  59. package/build/core/orchestration/weight_by_axis_task.js +105 -0
  60. package/build/core/physics/items/allocated_item.d.ts +22 -0
  61. package/build/core/physics/items/allocated_item.d.ts.map +1 -0
  62. package/build/core/physics/items/allocated_item.js +29 -0
  63. package/build/core/physics/items/allocated_item_manager.d.ts +31 -0
  64. package/build/core/physics/items/allocated_item_manager.d.ts.map +1 -0
  65. package/build/core/physics/items/allocated_item_manager.js +38 -0
  66. package/build/core/physics/items/center_of_mass.d.ts +14 -0
  67. package/build/core/physics/items/center_of_mass.d.ts.map +1 -0
  68. package/build/core/physics/items/center_of_mass.js +24 -0
  69. package/build/core/physics/items/compute_grouper_center_of_mass.d.ts +19 -0
  70. package/build/core/physics/items/compute_grouper_center_of_mass.d.ts.map +1 -0
  71. package/build/core/physics/items/compute_grouper_center_of_mass.js +28 -0
  72. package/build/core/physics/items/item_templates.d.ts +32 -0
  73. package/build/core/physics/items/item_templates.d.ts.map +1 -0
  74. package/build/core/physics/items/item_templates.js +53 -0
  75. package/build/core/physics/items/multi_container_allocated_items.d.ts +37 -0
  76. package/build/core/physics/items/multi_container_allocated_items.d.ts.map +1 -0
  77. package/build/core/physics/items/multi_container_allocated_items.js +91 -0
  78. package/build/core/physics/items/rotation_transforms.d.ts +8 -0
  79. package/build/core/physics/items/rotation_transforms.d.ts.map +1 -0
  80. package/build/core/physics/items/rotation_transforms.js +21 -0
  81. package/build/core/physics/models/axle_weight_model.d.ts +32 -0
  82. package/build/core/physics/models/axle_weight_model.d.ts.map +1 -0
  83. package/build/core/physics/models/axle_weight_model.js +72 -0
  84. package/build/core/physics/models/bi_truck_model.d.ts +21 -0
  85. package/build/core/physics/models/bi_truck_model.d.ts.map +1 -0
  86. package/build/core/physics/models/bi_truck_model.js +60 -0
  87. package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts +21 -0
  88. package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts.map +1 -0
  89. package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.js +69 -0
  90. package/build/core/physics/models/bitrem_model.d.ts +33 -0
  91. package/build/core/physics/models/bitrem_model.d.ts.map +1 -0
  92. package/build/core/physics/models/bitrem_model.js +123 -0
  93. package/build/core/physics/models/chassi_forces.d.ts +30 -0
  94. package/build/core/physics/models/chassi_forces.d.ts.map +1 -0
  95. package/build/core/physics/models/chassi_forces.js +39 -0
  96. package/build/core/physics/models/deflection/beam_deflection.d.ts +28 -0
  97. package/build/core/physics/models/deflection/beam_deflection.d.ts.map +1 -0
  98. package/build/core/physics/models/deflection/beam_deflection.js +78 -0
  99. package/build/core/physics/models/deflection/bitrem_deflection.d.ts +22 -0
  100. package/build/core/physics/models/deflection/bitrem_deflection.d.ts.map +1 -0
  101. package/build/core/physics/models/deflection/bitrem_deflection.js +54 -0
  102. package/build/core/physics/models/deflection/create_deflection_delegate.d.ts +12 -0
  103. package/build/core/physics/models/deflection/create_deflection_delegate.d.ts.map +1 -0
  104. package/build/core/physics/models/deflection/create_deflection_delegate.js +32 -0
  105. package/build/core/physics/models/deflection/deflection_model.d.ts +19 -0
  106. package/build/core/physics/models/deflection/deflection_model.d.ts.map +1 -0
  107. package/build/core/physics/models/deflection/deflection_model.js +23 -0
  108. package/build/core/physics/models/deflection/deflection_support_manager.d.ts +21 -0
  109. package/build/core/physics/models/deflection/deflection_support_manager.d.ts.map +1 -0
  110. package/build/core/physics/models/deflection/deflection_support_manager.js +40 -0
  111. package/build/core/physics/models/deflection/deflection_tools.d.ts +6 -0
  112. package/build/core/physics/models/deflection/deflection_tools.d.ts.map +1 -0
  113. package/build/core/physics/models/deflection/deflection_tools.js +10 -0
  114. package/build/core/physics/models/deflection/integration_constant_calculator.d.ts +22 -0
  115. package/build/core/physics/models/deflection/integration_constant_calculator.d.ts.map +1 -0
  116. package/build/core/physics/models/deflection/integration_constant_calculator.js +48 -0
  117. package/build/core/physics/models/deflection/rodotrem_deflection.d.ts +22 -0
  118. package/build/core/physics/models/deflection/rodotrem_deflection.d.ts.map +1 -0
  119. package/build/core/physics/models/deflection/rodotrem_deflection.js +47 -0
  120. package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts +21 -0
  121. package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts.map +1 -0
  122. package/build/core/physics/models/deflection/semi_reboque_deflection.js +31 -0
  123. package/build/core/physics/models/deflection/simple_truck_deflection.d.ts +20 -0
  124. package/build/core/physics/models/deflection/simple_truck_deflection.d.ts.map +1 -0
  125. package/build/core/physics/models/deflection/simple_truck_deflection.js +28 -0
  126. package/build/core/physics/models/deflection/vanderleia_deflection.d.ts +21 -0
  127. package/build/core/physics/models/deflection/vanderleia_deflection.d.ts.map +1 -0
  128. package/build/core/physics/models/deflection/vanderleia_deflection.js +41 -0
  129. package/build/core/physics/models/old_tare_model.d.ts +17 -0
  130. package/build/core/physics/models/old_tare_model.d.ts.map +1 -0
  131. package/build/core/physics/models/old_tare_model.js +40 -0
  132. package/build/core/physics/models/old_tare_scale.d.ts +7 -0
  133. package/build/core/physics/models/old_tare_scale.d.ts.map +1 -0
  134. package/build/core/physics/models/old_tare_scale.js +8 -0
  135. package/build/core/physics/models/old_tare_semireboque.d.ts +7 -0
  136. package/build/core/physics/models/old_tare_semireboque.d.ts.map +1 -0
  137. package/build/core/physics/models/old_tare_semireboque.js +37 -0
  138. package/build/core/physics/models/old_tare_truck.d.ts +7 -0
  139. package/build/core/physics/models/old_tare_truck.d.ts.map +1 -0
  140. package/build/core/physics/models/old_tare_truck.js +12 -0
  141. package/build/core/physics/models/old_tare_vanderleia.d.ts +7 -0
  142. package/build/core/physics/models/old_tare_vanderleia.d.ts.map +1 -0
  143. package/build/core/physics/models/old_tare_vanderleia.js +31 -0
  144. package/build/core/physics/models/percentage_on_axles_calculator.d.ts +19 -0
  145. package/build/core/physics/models/percentage_on_axles_calculator.d.ts.map +1 -0
  146. package/build/core/physics/models/percentage_on_axles_calculator.js +39 -0
  147. package/build/core/physics/models/quad_semi_trailer_model.d.ts +21 -0
  148. package/build/core/physics/models/quad_semi_trailer_model.d.ts.map +1 -0
  149. package/build/core/physics/models/quad_semi_trailer_model.js +70 -0
  150. package/build/core/physics/models/rodotrem_model.d.ts +33 -0
  151. package/build/core/physics/models/rodotrem_model.d.ts.map +1 -0
  152. package/build/core/physics/models/rodotrem_model.js +101 -0
  153. package/build/core/physics/models/semi_reboque_base.d.ts +34 -0
  154. package/build/core/physics/models/semi_reboque_base.d.ts.map +1 -0
  155. package/build/core/physics/models/semi_reboque_base.js +85 -0
  156. package/build/core/physics/models/semi_reboque_model.d.ts +41 -0
  157. package/build/core/physics/models/semi_reboque_model.d.ts.map +1 -0
  158. package/build/core/physics/models/semi_reboque_model.js +84 -0
  159. package/build/core/physics/models/simple_truck_base.d.ts +29 -0
  160. package/build/core/physics/models/simple_truck_base.d.ts.map +1 -0
  161. package/build/core/physics/models/simple_truck_base.js +57 -0
  162. package/build/core/physics/models/simple_truck_model.d.ts +41 -0
  163. package/build/core/physics/models/simple_truck_model.d.ts.map +1 -0
  164. package/build/core/physics/models/simple_truck_model.js +76 -0
  165. package/build/core/physics/models/single_container_tare.d.ts +18 -0
  166. package/build/core/physics/models/single_container_tare.d.ts.map +1 -0
  167. package/build/core/physics/models/single_container_tare.js +45 -0
  168. package/build/core/physics/models/tare_model.d.ts +12 -0
  169. package/build/core/physics/models/tare_model.d.ts.map +1 -0
  170. package/build/core/physics/models/tare_model.js +36 -0
  171. package/build/core/physics/models/vanderleia_model.d.ts +33 -0
  172. package/build/core/physics/models/vanderleia_model.d.ts.map +1 -0
  173. package/build/core/physics/models/vanderleia_model.js +100 -0
  174. package/build/core/physics/services/axle_weight_output_builder.d.ts +27 -0
  175. package/build/core/physics/services/axle_weight_output_builder.d.ts.map +1 -0
  176. package/build/core/physics/services/axle_weight_output_builder.js +42 -0
  177. package/build/core/physics/services/axle_weight_service.d.ts +20 -0
  178. package/build/core/physics/services/axle_weight_service.d.ts.map +1 -0
  179. package/build/core/physics/services/axle_weight_service.js +91 -0
  180. package/build/core/physics/services/cm_axle_weight_service.d.ts +12 -0
  181. package/build/core/physics/services/cm_axle_weight_service.d.ts.map +1 -0
  182. package/build/core/physics/services/cm_axle_weight_service.js +33 -0
  183. package/build/core/physics/services/container_corner_forces.d.ts +33 -0
  184. package/build/core/physics/services/container_corner_forces.d.ts.map +1 -0
  185. package/build/core/physics/services/container_corner_forces.js +84 -0
  186. package/build/core/physics/transports/axle_manager.d.ts +22 -0
  187. package/build/core/physics/transports/axle_manager.d.ts.map +1 -0
  188. package/build/core/physics/transports/axle_manager.js +34 -0
  189. package/build/core/physics/transports/axle_record.d.ts +21 -0
  190. package/build/core/physics/transports/axle_record.d.ts.map +1 -0
  191. package/build/core/physics/transports/axle_record.js +57 -0
  192. package/build/core/physics/transports/chassi.d.ts +52 -0
  193. package/build/core/physics/transports/chassi.d.ts.map +1 -0
  194. package/build/core/physics/transports/chassi.js +105 -0
  195. package/build/core/physics/transports/container_record.d.ts +25 -0
  196. package/build/core/physics/transports/container_record.d.ts.map +1 -0
  197. package/build/core/physics/transports/container_record.js +49 -0
  198. package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts +27 -0
  199. package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts.map +1 -0
  200. package/build/core/physics/transports/containerweight/container_max_weight_calculator.js +40 -0
  201. package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts +28 -0
  202. package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts.map +1 -0
  203. package/build/core/physics/transports/containerweight/container_tare_calculator.js +55 -0
  204. package/build/core/physics/transports/containerweight/container_weight_model.d.ts +15 -0
  205. package/build/core/physics/transports/containerweight/container_weight_model.d.ts.map +1 -0
  206. package/build/core/physics/transports/containerweight/container_weight_model.js +31 -0
  207. package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts +17 -0
  208. package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts.map +1 -0
  209. package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.js +31 -0
  210. package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts +20 -0
  211. package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts.map +1 -0
  212. package/build/core/physics/transports/containerweight/single_container_weight_calculator.js +48 -0
  213. package/build/core/physics/transports/grouped_containers.d.ts +34 -0
  214. package/build/core/physics/transports/grouped_containers.d.ts.map +1 -0
  215. package/build/core/physics/transports/grouped_containers.js +68 -0
  216. package/build/core/physics/transports/merged_containers.d.ts +26 -0
  217. package/build/core/physics/transports/merged_containers.d.ts.map +1 -0
  218. package/build/core/physics/transports/merged_containers.js +45 -0
  219. package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts +26 -0
  220. package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts.map +1 -0
  221. package/build/core/physics/transports/tare/bitrem_axle_splitter.js +84 -0
  222. package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts +22 -0
  223. package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts.map +1 -0
  224. package/build/core/physics/transports/tare/bitrem_axle_weight_split.js +32 -0
  225. package/build/core/physics/transports/transport.d.ts +33 -0
  226. package/build/core/physics/transports/transport.d.ts.map +1 -0
  227. package/build/core/physics/transports/transport.js +110 -0
  228. package/build/index.d.ts +8 -0
  229. package/build/index.d.ts.map +1 -0
  230. package/build/index.js +10 -0
  231. package/eslint.config.js +51 -0
  232. package/package.json +38 -0
  233. package/src/core/contracts/chassi_reference.ts +7 -0
  234. package/src/core/contracts/ms_faixas_contract.ts +114 -0
  235. package/src/core/contracts/rotation_enum.ts +11 -0
  236. package/src/core/contracts/suspension_type.ts +4 -0
  237. package/src/core/contracts/transport_record.ts +4 -0
  238. package/src/core/contracts/vehicle_type.ts +12 -0
  239. package/src/core/contracts/vehicle_version.ts +7 -0
  240. package/src/core/contracts/wire_flags.ts +26 -0
  241. package/src/core/math/float_tools.ts +17 -0
  242. package/src/core/math/gaussian_elimination.ts +104 -0
  243. package/src/core/orchestration/axle_weight_physics.ts +37 -0
  244. package/src/core/orchestration/collision_checker.ts +86 -0
  245. package/src/core/orchestration/connector_payload_builder.ts +81 -0
  246. package/src/core/orchestration/java_mass_center.ts +98 -0
  247. package/src/core/orchestration/output_builder.ts +18 -0
  248. package/src/core/orchestration/request_schema.ts +26 -0
  249. package/src/core/orchestration/weight_by_axis_task.ts +140 -0
  250. package/src/core/physics/items/allocated_item.ts +41 -0
  251. package/src/core/physics/items/allocated_item_manager.ts +50 -0
  252. package/src/core/physics/items/center_of_mass.ts +31 -0
  253. package/src/core/physics/items/compute_grouper_center_of_mass.ts +44 -0
  254. package/src/core/physics/items/item_templates.ts +65 -0
  255. package/src/core/physics/items/multi_container_allocated_items.ts +120 -0
  256. package/src/core/physics/items/rotation_transforms.ts +29 -0
  257. package/src/core/physics/models/axle_weight_model.ts +109 -0
  258. package/src/core/physics/models/bi_truck_model.ts +74 -0
  259. package/src/core/physics/models/bi_truck_tractor_semi_trailer_model.ts +86 -0
  260. package/src/core/physics/models/bitrem_model.ts +148 -0
  261. package/src/core/physics/models/chassi_forces.ts +50 -0
  262. package/src/core/physics/models/deflection/beam_deflection.ts +105 -0
  263. package/src/core/physics/models/deflection/bitrem_deflection.ts +68 -0
  264. package/src/core/physics/models/deflection/create_deflection_delegate.ts +46 -0
  265. package/src/core/physics/models/deflection/deflection_model.ts +33 -0
  266. package/src/core/physics/models/deflection/deflection_support_manager.ts +56 -0
  267. package/src/core/physics/models/deflection/deflection_tools.ts +11 -0
  268. package/src/core/physics/models/deflection/integration_constant_calculator.ts +62 -0
  269. package/src/core/physics/models/deflection/rodotrem_deflection.ts +57 -0
  270. package/src/core/physics/models/deflection/semi_reboque_deflection.ts +40 -0
  271. package/src/core/physics/models/deflection/simple_truck_deflection.ts +35 -0
  272. package/src/core/physics/models/deflection/vanderleia_deflection.ts +48 -0
  273. package/src/core/physics/models/old_tare_model.ts +51 -0
  274. package/src/core/physics/models/old_tare_scale.ts +9 -0
  275. package/src/core/physics/models/old_tare_semireboque.ts +51 -0
  276. package/src/core/physics/models/old_tare_truck.ts +15 -0
  277. package/src/core/physics/models/old_tare_vanderleia.ts +44 -0
  278. package/src/core/physics/models/percentage_on_axles_calculator.ts +49 -0
  279. package/src/core/physics/models/quad_semi_trailer_model.ts +87 -0
  280. package/src/core/physics/models/rodotrem_model.ts +131 -0
  281. package/src/core/physics/models/semi_reboque_base.ts +103 -0
  282. package/src/core/physics/models/semi_reboque_model.ts +127 -0
  283. package/src/core/physics/models/simple_truck_base.ts +70 -0
  284. package/src/core/physics/models/simple_truck_model.ts +115 -0
  285. package/src/core/physics/models/single_container_tare.ts +56 -0
  286. package/src/core/physics/models/tare_model.ts +46 -0
  287. package/src/core/physics/models/vanderleia_model.ts +125 -0
  288. package/src/core/physics/services/axle_weight_output_builder.ts +63 -0
  289. package/src/core/physics/services/axle_weight_service.ts +116 -0
  290. package/src/core/physics/services/cm_axle_weight_service.ts +45 -0
  291. package/src/core/physics/services/container_corner_forces.ts +95 -0
  292. package/src/core/physics/transports/axle_manager.ts +45 -0
  293. package/src/core/physics/transports/axle_record.ts +68 -0
  294. package/src/core/physics/transports/chassi.ts +130 -0
  295. package/src/core/physics/transports/container_record.ts +58 -0
  296. package/src/core/physics/transports/containerweight/container_max_weight_calculator.ts +59 -0
  297. package/src/core/physics/transports/containerweight/container_tare_calculator.ts +76 -0
  298. package/src/core/physics/transports/containerweight/container_weight_model.ts +38 -0
  299. package/src/core/physics/transports/containerweight/merged_containers_weight_calculator.ts +39 -0
  300. package/src/core/physics/transports/containerweight/single_container_weight_calculator.ts +65 -0
  301. package/src/core/physics/transports/grouped_containers.ts +91 -0
  302. package/src/core/physics/transports/merged_containers.ts +62 -0
  303. package/src/core/physics/transports/tare/bitrem_axle_splitter.ts +107 -0
  304. package/src/core/physics/transports/tare/bitrem_axle_weight_split.ts +55 -0
  305. package/src/core/physics/transports/transport.ts +137 -0
  306. package/src/index.ts +12 -0
  307. package/src/service/.gitkeep +0 -0
  308. package/test/data/src/core/orchestration/weight_by_axis/case_1_basic_truck_input.json +1759 -0
  309. package/test/data/src/core/orchestration/weight_by_axis/case_2_vanderleia_input.json +1286 -0
  310. package/test/data/src/core/orchestration/weight_by_axis/case_3_interlink_input.json +2226 -0
  311. package/test/data/src/core/orchestration/weight_by_axis/case_4_quad_semi_trailer.json +639 -0
  312. package/test/data/src/core/orchestration/weight_by_axis/case_5_custom_center_of_gravity.json +557 -0
  313. package/test/data/src/core/physics/axle_weight_calculations/case_2_bitruck.json +664 -0
  314. package/test/data/src/core/physics/axle_weight_calculations/case_4_quad_semi_trailer.json +674 -0
  315. package/test/data/src/core/physics/axle_weight_calculations/case_5_bi_truck_semi_trailer.json +674 -0
  316. package/test/data/src/core/physics/axle_weight_service/case_1_input_truck.json +1025 -0
  317. package/test/data/src/core/physics/axle_weight_service/case_1_output_truck.json +38 -0
  318. package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_input.json +1286 -0
  319. package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_output.json +65 -0
  320. package/test/data/src/core/physics/axle_weight_service/case_3_input_semireboque.json +24625 -0
  321. package/test/data/src/core/physics/axle_weight_service/case_3_output_semireboque.json +57 -0
  322. package/test/data/src/core/physics/axle_weight_service/case_4_input_bitrem.json +2226 -0
  323. package/test/data/src/core/physics/axle_weight_service/case_4_output_bitrem.json +96 -0
  324. package/test/data/src/core/physics/beam_deflection/case_10_rodotrem_offset.json +474 -0
  325. package/test/data/src/core/physics/beam_deflection/case_11_bitruck.json +664 -0
  326. package/test/data/src/core/physics/beam_deflection/case_12_quad_semi_trailer.json +792 -0
  327. package/test/data/src/core/physics/beam_deflection/case_13_bi_truck_semi_trailer.json +792 -0
  328. package/test/data/src/core/physics/beam_deflection/case_1_documentation.ipynb +316 -0
  329. package/test/data/src/core/physics/beam_deflection/case_1_semireboque.json +402 -0
  330. package/test/data/src/core/physics/beam_deflection/case_2_bitrem.json +434 -0
  331. package/test/data/src/core/physics/beam_deflection/case_3_rodotrem.json +474 -0
  332. package/test/data/src/core/physics/beam_deflection/case_4_vanderleia_pneumatica.json +425 -0
  333. package/test/data/src/core/physics/beam_deflection/case_5_vanderleia_mecanica.json +366 -0
  334. package/test/data/src/core/physics/beam_deflection/case_6_truck.json +279 -0
  335. package/test/data/src/core/physics/beam_deflection/case_7_semireboque_structural_offset.json +318 -0
  336. package/test/data/src/core/physics/beam_deflection/case_8_vanderleia_offset.json +425 -0
  337. package/test/data/src/core/physics/beam_deflection/case_9_bitrem_offset.json +434 -0
  338. package/test/data/src/core/physics/bitrem_axle_splitter/case_1_simple_bitrem.json +145 -0
  339. package/test/data/src/core/physics/bitrem_axle_splitter/case_2_lowered_bitrem.json +238 -0
  340. package/test/data/src/core/physics/bitrem_axle_splitter/case_3_lowered_positive_proportion.json +238 -0
  341. package/test/data/src/core/physics/c_m_axle_weight_service/case_1_interlink_trailer.json +94 -0
  342. package/test/data/src/core/physics/calculations/case_1_simple_truck.json +83 -0
  343. package/test/data/src/core/physics/calculations/case_2_lowered_bitrem.json +1051 -0
  344. package/test/data/src/core/physics/calculations/case_3_container_mercedes.json +50 -0
  345. package/test/data/src/core/physics/container_corner_forces/case_1.json +674 -0
  346. package/test/data/src/core/physics/container_weight/case_1_basictruck.json +223 -0
  347. package/test/data/src/core/physics/container_weight/case_2_roadtrain.json +277 -0
  348. package/test/data/src/core/physics/container_weight/case_3_semireboque_rebaixado.json +197 -0
  349. package/test/data/src/core/physics/container_weight/case_4_semireboque_neck_limit.json +197 -0
  350. package/test/data/src/core/physics/container_weight/case_5_vanderleia_rebaixada.json +211 -0
  351. package/test/data/src/core/physics/container_weight/case_6_lowered_interlink.json +230 -0
  352. package/test/data/src/core/physics/python_goldens.json +9 -0
  353. package/test/data/src/core/physics/tare/case_1_simple_vanderleia.json +185 -0
  354. package/test/data/src/core/physics/tare/case_2_lowered_vanderleia.json +646 -0
  355. package/test/data/src/core/physics/tare/case_3_lowered_interlink.json +230 -0
  356. package/test/data/src/core/physics/tare/case_4_negative_tare_VUC.json +483 -0
  357. package/test/data/src/core/physics/tare/case_5_truck_bitruck.json +664 -0
  358. package/test/data/src/core/physics/tare/case_6_quad_semi_trailer.json +203 -0
  359. package/test/data/src/core/physics/tare/case_7_bi_truck_semi_trailer.json +203 -0
  360. package/test/data/src/core/physics/tare/case_8_triaxle_semi_trailer.json +203 -0
  361. package/test/data/src/core/physics/time_performance/case_1_center_of_mass.json +2916 -0
  362. package/test/data/src/core/physics/trucks/bitrem.json +150 -0
  363. package/test/data/src/core/physics/trucks/lowered_bitrem.json +1216 -0
  364. package/test/data/src/core/physics/trucks/lowered_bitrem_empty_first_container.json +1182 -0
  365. package/test/data/src/core/physics/trucks/rodotrem.json +148 -0
  366. package/test/data/src/core/physics/trucks/semi_reboque.json +91 -0
  367. package/test/data/src/core/physics/trucks/semi_reboque_rebaixado.json +1629 -0
  368. package/test/data/src/core/physics/trucks/simple_truck.json +85 -0
  369. package/test/data/src/core/physics/trucks/vanderleia_mechanical.json +105 -0
  370. package/test/data/src/core/physics/trucks/vanderleia_pneumatic.json +105 -0
  371. package/test/src/core/orchestration/request_schema.test.ts +20 -0
  372. package/test/src/core/orchestration/weight_by_axis_task.test.ts +87 -0
  373. package/test/src/core/physics/items/center_of_mass.test.ts +38 -0
  374. package/test/src/core/physics/items/multi_container_allocated_items.test.ts +22 -0
  375. package/test/src/core/physics/math_input_helpers.ts +64 -0
  376. package/test/src/core/physics/models/bitrem_model.test.ts +54 -0
  377. package/test/src/core/physics/models/deflection/deflection_model.test.ts +78 -0
  378. package/test/src/core/physics/models/rodotrem_model.test.ts +29 -0
  379. package/test/src/core/physics/models/semi_reboque_model.test.ts +72 -0
  380. package/test/src/core/physics/models/simple_truck_model.test.ts +23 -0
  381. package/test/src/core/physics/models/tare_model.test.ts +34 -0
  382. package/test/src/core/physics/models/vanderleia_model.test.ts +36 -0
  383. package/test/src/core/physics/services/axle_weight_service.test.ts +56 -0
  384. package/test/src/core/physics/services/cm_axle_weight_service.test.ts +23 -0
  385. package/test/src/core/physics/services/container_corner_forces.test.ts +23 -0
  386. package/test/src/core/physics/test_helpers.ts +13 -0
  387. package/test/src/core/physics/transports/chassi.test.ts +35 -0
  388. package/test/src/core/physics/transports/containerweight/container_weight_model.test.ts +57 -0
  389. package/test/src/core/physics/transports/tare/bitrem_axle_splitter.test.ts +30 -0
  390. package/test/src/index.test.ts +35 -0
  391. package/tsconfig.eslint.json +15 -0
  392. package/tsconfig.json +19 -0
@@ -0,0 +1,27 @@
1
+ export declare const WIRE_FLAGS: Readonly<{
2
+ TRANSPORT_ID: "_id";
3
+ CONTAINERS: "containers";
4
+ AXLE_LIST: "eixos";
5
+ MAIN_PIN_DISTANCE: "distPinoRei";
6
+ CONTAINER_DISTANCE_AHEAD: "containerDistanceAhead";
7
+ FIRST_AXLE_DISTANCE: "primeiroEixo";
8
+ VEHICLE_TYPE: "tipoVeiculo";
9
+ VEHICLE_VERSION: "tipoVersao";
10
+ SUSPENSION_TYPE: "tipoSuspensao";
11
+ SUPPORTED_WEIGHT: "pesoDeCarga";
12
+ AMOUNT: "qtd";
13
+ LENGTH: "comprimento";
14
+ WIDTH: "largura";
15
+ HEIGHT: "altura";
16
+ SEQUENCE: "sequencia";
17
+ GROUPER: "grouper";
18
+ DISTANCE_FROM_ORIGIN: "distanciaOrigem";
19
+ MAX_SUPPORTED_WEIGHT: "pesoMaxSuportado";
20
+ SEQUENCE_CONTAINER: "sequenciaContainer";
21
+ DNIT_WEIGHT: "pesoDnit";
22
+ TARE: "tara";
23
+ CM_SERVICE_CENTER_OF_MASS: "center_of_mass";
24
+ CM_SERVICE_Z: "z_position";
25
+ CM_SERVICE_MASS: "mass";
26
+ }>;
27
+ //# sourceMappingURL=wire_flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire_flags.d.ts","sourceRoot":"","sources":["../../../src/core/contracts/wire_flags.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;EAyBrB,CAAA"}
@@ -0,0 +1,26 @@
1
+ export const WIRE_FLAGS = Object.freeze({
2
+ TRANSPORT_ID: '_id',
3
+ CONTAINERS: 'containers',
4
+ AXLE_LIST: 'eixos',
5
+ MAIN_PIN_DISTANCE: 'distPinoRei',
6
+ CONTAINER_DISTANCE_AHEAD: 'containerDistanceAhead',
7
+ FIRST_AXLE_DISTANCE: 'primeiroEixo',
8
+ VEHICLE_TYPE: 'tipoVeiculo',
9
+ VEHICLE_VERSION: 'tipoVersao',
10
+ SUSPENSION_TYPE: 'tipoSuspensao',
11
+ SUPPORTED_WEIGHT: 'pesoDeCarga',
12
+ AMOUNT: 'qtd',
13
+ LENGTH: 'comprimento',
14
+ WIDTH: 'largura',
15
+ HEIGHT: 'altura',
16
+ SEQUENCE: 'sequencia',
17
+ GROUPER: 'grouper',
18
+ DISTANCE_FROM_ORIGIN: 'distanciaOrigem',
19
+ MAX_SUPPORTED_WEIGHT: 'pesoMaxSuportado',
20
+ SEQUENCE_CONTAINER: 'sequenciaContainer',
21
+ DNIT_WEIGHT: 'pesoDnit',
22
+ TARE: 'tara',
23
+ CM_SERVICE_CENTER_OF_MASS: 'center_of_mass',
24
+ CM_SERVICE_Z: 'z_position',
25
+ CM_SERVICE_MASS: 'mass'
26
+ });
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Converts nested float lists to a plain number matrix (NumPy float_list_to_np_array equivalent).
3
+ * @param float_list - Nested numeric list.
4
+ * @returns Plain number matrix or vector.
5
+ */
6
+ export declare function float_list_to_matrix(float_list: number[] | number[][]): number[] | number[][];
7
+ //# sourceMappingURL=float_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"float_tools.d.ts","sourceRoot":"","sources":["../../../src/core/math/float_tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAW7F"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Converts nested float lists to a plain number matrix (NumPy float_list_to_np_array equivalent).
3
+ * @param float_list - Nested numeric list.
4
+ * @returns Plain number matrix or vector.
5
+ */
6
+ export function float_list_to_matrix(float_list) {
7
+ if (float_list.length === 0) {
8
+ return [];
9
+ }
10
+ if (typeof float_list[0] === 'number') {
11
+ return float_list;
12
+ }
13
+ return float_list.map((row) => row.map((value) => Number(value)));
14
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Solves Ax = b for square matrix A using Gaussian elimination (NumPy-compatible order).
3
+ * @param matrix - Coefficient matrix row-major n×n.
4
+ * @param independent - Right-hand side vector length n.
5
+ * @returns Solution vector length n.
6
+ */
7
+ export declare function solve_linear_system(matrix: number[][], independent: number[]): number[];
8
+ //# sourceMappingURL=gaussian_elimination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gaussian_elimination.d.ts","sourceRoot":"","sources":["../../../src/core/math/gaussian_elimination.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CASvF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Solves Ax = b for square matrix A using Gaussian elimination (NumPy-compatible order).
3
+ * @param matrix - Coefficient matrix row-major n×n.
4
+ * @param independent - Right-hand side vector length n.
5
+ * @returns Solution vector length n.
6
+ */
7
+ export function solve_linear_system(matrix, independent) {
8
+ const size = independent.length;
9
+ const augmented = matrix.map((row, row_index) => [...row, independent[row_index]]);
10
+ for (let pivot_column = 0; pivot_column < size; pivot_column++) {
11
+ forward_eliminate(augmented, pivot_column, size);
12
+ }
13
+ return back_substitute(augmented, size);
14
+ }
15
+ /**
16
+ * @param augmented - Augmented matrix.
17
+ * @param pivot_column - Current pivot column index.
18
+ * @param size - System size.
19
+ */
20
+ function forward_eliminate(augmented, pivot_column, size) {
21
+ const pivot_row = find_pivot_row(augmented, pivot_column, size);
22
+ swap_rows(augmented, pivot_row, pivot_column);
23
+ eliminate_below(augmented, pivot_column, size);
24
+ }
25
+ /**
26
+ * @param augmented - Augmented matrix.
27
+ * @param pivot_column - Pivot column.
28
+ * @param size - System size.
29
+ * @returns Row index with largest absolute pivot.
30
+ */
31
+ function find_pivot_row(augmented, pivot_column, size) {
32
+ let pivot_row = pivot_column;
33
+ let max_abs = Math.abs(augmented[pivot_column][pivot_column]);
34
+ for (let row = pivot_column + 1; row < size; row++) {
35
+ const candidate = Math.abs(augmented[row][pivot_column]);
36
+ if (candidate > max_abs) {
37
+ max_abs = candidate;
38
+ pivot_row = row;
39
+ }
40
+ }
41
+ return pivot_row;
42
+ }
43
+ /**
44
+ * @param augmented - Augmented matrix.
45
+ * @param pivot_row - Row to swap to pivot position.
46
+ * @param pivot_column - Pivot column index.
47
+ */
48
+ function swap_rows(augmented, pivot_row, pivot_column) {
49
+ if (pivot_row === pivot_column) {
50
+ return;
51
+ }
52
+ const temp = augmented[pivot_column];
53
+ augmented[pivot_column] = augmented[pivot_row];
54
+ augmented[pivot_row] = temp;
55
+ }
56
+ /**
57
+ * @param augmented - Augmented matrix.
58
+ * @param pivot_column - Pivot column index.
59
+ * @param size - System size.
60
+ */
61
+ function eliminate_below(augmented, pivot_column, size) {
62
+ const pivot_value = augmented[pivot_column][pivot_column];
63
+ for (let row = pivot_column + 1; row < size; row++) {
64
+ const factor = augmented[row][pivot_column] / pivot_value;
65
+ for (let column = pivot_column; column <= size; column++) {
66
+ augmented[row][column] -= factor * augmented[pivot_column][column];
67
+ }
68
+ }
69
+ }
70
+ /**
71
+ * @param augmented - Row-echelon augmented matrix.
72
+ * @param size - System size.
73
+ * @returns Solution vector.
74
+ */
75
+ function back_substitute(augmented, size) {
76
+ const solution = new Array(size).fill(0);
77
+ for (let row = size - 1; row >= 0; row--) {
78
+ let sum = augmented[row][size];
79
+ for (let column = row + 1; column < size; column++) {
80
+ sum -= augmented[row][column] * solution[column];
81
+ }
82
+ solution[row] = sum / augmented[row][row];
83
+ }
84
+ return solution;
85
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Calculates loaded weights per vehicle axle (in-process, no HTTP).
3
+ * @param env_vehicle - Single env from weight_by_axis payload.
4
+ * @returns Loaded cargo weight per axle index.
5
+ */
6
+ export declare function calculate_loaded_weights_for_env(env_vehicle: Record<string, unknown>): number[];
7
+ //# sourceMappingURL=axle_weight_physics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axle_weight_physics.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/axle_weight_physics.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC5C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,MAAM,EAAE,CAMV"}
@@ -0,0 +1,27 @@
1
+ import { CmAxleWeightService } from '../physics/services/cm_axle_weight_service.js';
2
+ import { build_connector_payload } from './connector_payload_builder.js';
3
+ import { mass_center_by_grouper_from_env } from './java_mass_center.js';
4
+ /**
5
+ * Calculates loaded weights per vehicle axle (in-process, no HTTP).
6
+ * @param env_vehicle - Single env from weight_by_axis payload.
7
+ * @returns Loaded cargo weight per axle index.
8
+ */
9
+ export function calculate_loaded_weights_for_env(env_vehicle) {
10
+ const center_of_mass_by_grouper = mass_center_by_grouper_from_env(env_vehicle);
11
+ const wire_center_of_mass = map_center_of_mass_wire(center_of_mass_by_grouper);
12
+ const payload = build_connector_payload(env_vehicle, wire_center_of_mass);
13
+ return new CmAxleWeightService().calculate(payload);
14
+ }
15
+ /**
16
+ * @param center_of_mass_by_grouper - CM objects keyed by grouper.
17
+ * @returns Plain mass/z map for wire builder.
18
+ */
19
+ function map_center_of_mass_wire(center_of_mass_by_grouper) {
20
+ const wire = {};
21
+ for (const grouper of Object.keys(center_of_mass_by_grouper)) {
22
+ const id = Number(grouper);
23
+ const entry = center_of_mass_by_grouper[id];
24
+ wire[id] = { mass: entry.mass, z: entry.z };
25
+ }
26
+ return wire;
27
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Validates allocated items do not overlap (Java CollisionChecker parity for tests).
3
+ * @param env_vehicle - Env vehicle with containers and items.
4
+ */
5
+ export declare function check_cargo_collision(env_vehicle: Record<string, unknown>): void;
6
+ //# sourceMappingURL=collision_checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collision_checker.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/collision_checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYhF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Validates allocated items do not overlap (Java CollisionChecker parity for tests).
3
+ * @param env_vehicle - Env vehicle with containers and items.
4
+ */
5
+ export function check_cargo_collision(env_vehicle) {
6
+ const key = env_vehicle.conteiners ? 'conteiners' : 'containers';
7
+ const containers = env_vehicle[key];
8
+ if (!containers) {
9
+ return;
10
+ }
11
+ for (const container of containers) {
12
+ check_container_items(container);
13
+ }
14
+ }
15
+ /**
16
+ * @param container - Container with items.
17
+ */
18
+ function check_container_items(container) {
19
+ const items = container.items;
20
+ if (!items || items.length <= 1) {
21
+ return;
22
+ }
23
+ for (let i = 0; i < items.length - 1; i++) {
24
+ for (let j = i + 1; j < items.length; j++) {
25
+ if (items_intersect(items[i], items[j])) {
26
+ throw new Error('Item overlap error');
27
+ }
28
+ }
29
+ }
30
+ }
31
+ /**
32
+ * @param left - First item.
33
+ * @param right - Second item.
34
+ * @returns True when 3D boxes overlap (Java Item.intersect axes swap).
35
+ */
36
+ function items_intersect(left, right) {
37
+ const left_box = item_intervals(left);
38
+ const right_box = item_intervals(right);
39
+ return intervals_overlap(left_box.x, right_box.x)
40
+ && intervals_overlap(left_box.y, right_box.y)
41
+ && intervals_overlap(left_box.z, right_box.z);
42
+ }
43
+ /**
44
+ * @param item - Item JSON.
45
+ * @returns Axis intervals using Java coordinate mapping.
46
+ */
47
+ function item_intervals(item) {
48
+ const x0 = Number(item.x ?? 0);
49
+ const width = Number(item.largura ?? item.width ?? 0);
50
+ const json_y = Number(item.y ?? 0);
51
+ const json_z = Number(item.z ?? 0);
52
+ const length = Number(item.comprimento ?? item.length ?? 0);
53
+ const height = Number(item.altura ?? item.height ?? 0);
54
+ return {
55
+ x: [x0, x0 + width],
56
+ y: [json_z, json_z + height],
57
+ z: [json_y, json_y + length]
58
+ };
59
+ }
60
+ /**
61
+ * @param left - Interval.
62
+ * @param right - Interval.
63
+ * @returns True when open intervals overlap.
64
+ */
65
+ function intervals_overlap(left, right) {
66
+ return left[0] < right[1] && right[0] < left[1];
67
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Builds axle-weight service payload from a prepared env vehicle (Java AxleWeightConnector).
3
+ * @param env_vehicle - Vehicle object inside envs[].
4
+ * @param center_of_mass_by_grouper - CM per grouper for CM service flag.
5
+ * @returns Transport record for CmAxleWeightService.
6
+ */
7
+ export declare function build_connector_payload(env_vehicle: Record<string, unknown>, center_of_mass_by_grouper: Record<number, {
8
+ mass: number;
9
+ z: number;
10
+ }>): Record<string, unknown>;
11
+ //# sourceMappingURL=connector_payload_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector_payload_builder.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/connector_payload_builder.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACnC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GACvE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB"}
@@ -0,0 +1,67 @@
1
+ import { WIRE_FLAGS } from '../contracts/wire_flags.js';
2
+ /**
3
+ * Builds axle-weight service payload from a prepared env vehicle (Java AxleWeightConnector).
4
+ * @param env_vehicle - Vehicle object inside envs[].
5
+ * @param center_of_mass_by_grouper - CM per grouper for CM service flag.
6
+ * @returns Transport record for CmAxleWeightService.
7
+ */
8
+ export function build_connector_payload(env_vehicle, center_of_mass_by_grouper) {
9
+ const center_of_mass = map_center_of_mass_wire(center_of_mass_by_grouper);
10
+ return {
11
+ [WIRE_FLAGS.CONTAINERS]: build_containers(env_vehicle),
12
+ [WIRE_FLAGS.AXLE_LIST]: build_axles(env_vehicle),
13
+ [WIRE_FLAGS.TRANSPORT_ID]: env_vehicle._id,
14
+ [WIRE_FLAGS.AMOUNT]: 1,
15
+ [WIRE_FLAGS.SUPPORTED_WEIGHT]: env_vehicle.pesoDeCarga,
16
+ [WIRE_FLAGS.FIRST_AXLE_DISTANCE]: env_vehicle.primeiroEixo,
17
+ [WIRE_FLAGS.VEHICLE_TYPE]: env_vehicle.tipoVeiculo,
18
+ [WIRE_FLAGS.VEHICLE_VERSION]: env_vehicle.tipoVersao,
19
+ [WIRE_FLAGS.SUSPENSION_TYPE]: env_vehicle.tipoSuspensao,
20
+ [WIRE_FLAGS.CM_SERVICE_CENTER_OF_MASS]: center_of_mass
21
+ };
22
+ }
23
+ /**
24
+ * @param center_of_mass_by_grouper - CM per grouper from Java MassCenter.
25
+ * @returns Wire map for CM service.
26
+ */
27
+ function map_center_of_mass_wire(center_of_mass_by_grouper) {
28
+ const center_of_mass = {};
29
+ for (const grouper_key of Object.keys(center_of_mass_by_grouper)) {
30
+ const entry = center_of_mass_by_grouper[Number(grouper_key)];
31
+ center_of_mass[grouper_key] = {
32
+ mass: entry.mass,
33
+ [WIRE_FLAGS.CM_SERVICE_Z]: entry.z
34
+ };
35
+ }
36
+ return center_of_mass;
37
+ }
38
+ /**
39
+ * @param env_vehicle - Env vehicle JSON.
40
+ * @returns Container wire list without items.
41
+ */
42
+ function build_containers(env_vehicle) {
43
+ const list = env_vehicle.containers;
44
+ return list.map((container) => ({
45
+ [WIRE_FLAGS.LENGTH]: container.comprimento,
46
+ [WIRE_FLAGS.WIDTH]: container.largura,
47
+ [WIRE_FLAGS.HEIGHT]: container.altura,
48
+ [WIRE_FLAGS.SEQUENCE]: container.sequencia,
49
+ [WIRE_FLAGS.MAIN_PIN_DISTANCE]: container.distPinoRei,
50
+ [WIRE_FLAGS.CONTAINER_DISTANCE_AHEAD]: container.containerDistanceAhead,
51
+ [WIRE_FLAGS.GROUPER]: container.grouper
52
+ }));
53
+ }
54
+ /**
55
+ * @param env_vehicle - Env vehicle JSON.
56
+ * @returns Axle wire list.
57
+ */
58
+ function build_axles(env_vehicle) {
59
+ const list = env_vehicle.eixos;
60
+ return list.map((axle) => ({
61
+ [WIRE_FLAGS.DISTANCE_FROM_ORIGIN]: axle.distanciaOrigem,
62
+ [WIRE_FLAGS.MAX_SUPPORTED_WEIGHT]: axle.pesoMaxSuportado,
63
+ [WIRE_FLAGS.SEQUENCE_CONTAINER]: axle.sequenciaContainer,
64
+ [WIRE_FLAGS.DNIT_WEIGHT]: axle.pesoDnit ?? axle.pesoMaxSuportado,
65
+ [WIRE_FLAGS.TARE]: axle.tara
66
+ }));
67
+ }
@@ -0,0 +1,9 @@
1
+ import { CenterOfMass } from '../physics/items/center_of_mass.js';
2
+ /**
3
+ * Computes mass center per grouper using ms-faixas Java Item / MassCenter rules.
4
+ * Longitudinal position uses JSON `y` (maps to Ponto3D.z in Java CubeRepresentation).
5
+ * @param env_vehicle - Single env vehicle object from weight_by_axis payload.
6
+ * @returns Map of grouper id to center of mass.
7
+ */
8
+ export declare function mass_center_by_grouper_from_env(env_vehicle: Record<string, unknown>): Record<number, CenterOfMass>;
9
+ //# sourceMappingURL=java_mass_center.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"java_mass_center.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/java_mass_center.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAEjE;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC3C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAe9B"}
@@ -0,0 +1,79 @@
1
+ import { CenterOfMass } from '../physics/items/center_of_mass.js';
2
+ /**
3
+ * Computes mass center per grouper using ms-faixas Java Item / MassCenter rules.
4
+ * Longitudinal position uses JSON `y` (maps to Ponto3D.z in Java CubeRepresentation).
5
+ * @param env_vehicle - Single env vehicle object from weight_by_axis payload.
6
+ * @returns Map of grouper id to center of mass.
7
+ */
8
+ export function mass_center_by_grouper_from_env(env_vehicle) {
9
+ const result = {};
10
+ const containers = env_vehicle.containers;
11
+ if (!containers) {
12
+ return result;
13
+ }
14
+ for (const container of containers) {
15
+ const grouper = Number(container.grouper);
16
+ // Java AxleWeightConnector overwrites per container in loop order (last wins).
17
+ result[grouper] = compute_container_mass_center(container);
18
+ }
19
+ return result;
20
+ }
21
+ /**
22
+ * @param container - Container object with items array.
23
+ * @returns Center of mass for container items.
24
+ */
25
+ function compute_container_mass_center(container) {
26
+ const center_of_mass = new CenterOfMass();
27
+ const items = container.items;
28
+ if (!items || items.length === 0) {
29
+ center_of_mass.mass = 0;
30
+ center_of_mass.z = 0;
31
+ return center_of_mass;
32
+ }
33
+ const container_offset = read_container_longitudinal_offset(container);
34
+ let accumulated = 0;
35
+ let mass = 0;
36
+ for (const item of items) {
37
+ const weight = read_item_weight(item);
38
+ const position = container_offset + read_item_longitudinal_position(item);
39
+ accumulated += weight * position;
40
+ mass += weight;
41
+ }
42
+ center_of_mass.mass = mass;
43
+ center_of_mass.z = mass === 0 ? 0 : accumulated / mass;
44
+ return center_of_mass;
45
+ }
46
+ /**
47
+ * @param container - Container JSON.
48
+ * @returns Longitudinal offset of container body (first faixa z1 when present).
49
+ */
50
+ function read_container_longitudinal_offset(container) {
51
+ const bands = container.faixas;
52
+ if (!bands || bands.length === 0) {
53
+ return 0;
54
+ }
55
+ return Number(bands[0].z1 ?? 0);
56
+ }
57
+ /**
58
+ * @param item - Ms-faixas item JSON.
59
+ * @returns Item weight.
60
+ */
61
+ function read_item_weight(item) {
62
+ if (item.peso !== undefined) {
63
+ return Number(item.peso);
64
+ }
65
+ return Number(item.weight ?? 0);
66
+ }
67
+ /**
68
+ * @param item - Ms-faixas item JSON.
69
+ * @returns Longitudinal position for equilibrium (Java getZ on pontoDeInicio).
70
+ */
71
+ function read_item_longitudinal_position(item) {
72
+ const origin_y = Number(item.y ?? 0);
73
+ const custom = item.centerOfGravity;
74
+ if (custom && custom.z !== undefined) {
75
+ return origin_y + Number(custom.z);
76
+ }
77
+ const length = Number(item.comprimento ?? item.length ?? 0);
78
+ return origin_y + length / 2;
79
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @param envs - Output env list.
3
+ * @returns Success JSON string.
4
+ */
5
+ export declare function build_success_output(envs: Record<string, unknown>[]): string;
6
+ /**
7
+ * @param error - Thrown error.
8
+ * @returns Error JSON string matching ms-faixas format.
9
+ */
10
+ export declare function build_error_output(error: unknown): string;
11
+ //# sourceMappingURL=output_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output_builder.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/output_builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAG5E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIzD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @param envs - Output env list.
3
+ * @returns Success JSON string.
4
+ */
5
+ export function build_success_output(envs) {
6
+ return JSON.stringify({ envs });
7
+ }
8
+ /**
9
+ * @param error - Thrown error.
10
+ * @returns Error JSON string matching ms-faixas format.
11
+ */
12
+ export function build_error_output(error) {
13
+ const message = error instanceof Error ? error.message : String(error);
14
+ return JSON.stringify({ msg: message, apiError: message });
15
+ }
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ declare const request_schema: z.ZodObject<{
3
+ envs: z.ZodArray<z.ZodObject<{
4
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
5
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
6
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
7
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
8
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
9
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
10
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
11
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
12
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
13
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
14
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
15
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
16
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
17
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
18
+ }, z.ZodTypeAny, "passthrough">>, "many">;
19
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
20
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
21
+ envs: z.ZodArray<z.ZodObject<{
22
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
23
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
24
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
25
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
26
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
27
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
28
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
29
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
30
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
31
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
32
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
33
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
34
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
35
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
36
+ }, z.ZodTypeAny, "passthrough">>, "many">;
37
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
38
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
39
+ envs: z.ZodArray<z.ZodObject<{
40
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
41
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
42
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
43
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
44
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
45
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
46
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
47
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
48
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
49
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
50
+ _id: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
51
+ eixos: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">;
52
+ conteiners: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
53
+ containers: z.ZodOptional<z.ZodArray<z.ZodRecord<z.ZodString, z.ZodUnknown>, "many">>;
54
+ }, z.ZodTypeAny, "passthrough">>, "many">;
55
+ config: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
56
+ }, z.ZodTypeAny, "passthrough">>;
57
+ export type WeightByAxisRequest = z.infer<typeof request_schema>;
58
+ /**
59
+ * Parses and validates weight-by-axis JSON at the library boundary.
60
+ * @param json_data - Raw request string.
61
+ * @returns Parsed request object.
62
+ */
63
+ export declare function parse_weight_by_axis_request(json_data: string): WeightByAxisRequest;
64
+ export {};
65
+ //# sourceMappingURL=request_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_schema.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/request_schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AASvB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAGJ,CAAA;AAEhB,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAEhE;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAInF"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ const env_schema = z.object({
3
+ _id: z.union([z.string(), z.number()]).optional(),
4
+ eixos: z.array(z.record(z.unknown())).min(1),
5
+ conteiners: z.array(z.record(z.unknown())).optional(),
6
+ containers: z.array(z.record(z.unknown())).optional()
7
+ }).passthrough();
8
+ const request_schema = z.object({
9
+ envs: z.array(env_schema).min(1),
10
+ config: z.record(z.unknown()).optional()
11
+ }).passthrough();
12
+ /**
13
+ * Parses and validates weight-by-axis JSON at the library boundary.
14
+ * @param json_data - Raw request string.
15
+ * @returns Parsed request object.
16
+ */
17
+ export function parse_weight_by_axis_request(json_data) {
18
+ const parsed = JSON.parse(json_data);
19
+ return request_schema.parse(parsed);
20
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Runs weight-by-axis for ms-faixas JSON input (WeightByAxisTask.run contract).
3
+ * @param json_data - Raw request JSON string.
4
+ * @returns Response JSON string.
5
+ */
6
+ export declare function run_weight_by_axis_task(json_data: string): string;
7
+ //# sourceMappingURL=weight_by_axis_task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weight_by_axis_task.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/weight_by_axis_task.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoBjE"}