@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,84 @@
1
+ import { MergedContainers } from '../transports/merged_containers.js';
2
+ import { calculate_chassi_forces_from_multi, compute_center_of_mass_by_grouper } from '../items/compute_grouper_center_of_mass.js';
3
+ import { VEHICLE_VERSION } from '../../contracts/vehicle_version.js';
4
+ import { SemiReboqueBase } from './semi_reboque_base.js';
5
+ import { QuadSemiTrailerModel } from './quad_semi_trailer_model.js';
6
+ import { BiTruckTractorSemiTrailerModel } from './bi_truck_tractor_semi_trailer_model.js';
7
+ /**
8
+ * Semi-reboque axle weight with quad/bitruck variants.
9
+ */
10
+ export class SemiReboqueModel {
11
+ delegate;
12
+ transport;
13
+ merged_containers;
14
+ /**
15
+ * @param transport - Parsed transport.
16
+ */
17
+ constructor(transport) {
18
+ this.transport = transport;
19
+ this.merged_containers = new MergedContainers(transport);
20
+ if (transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_QUAD
21
+ || transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_QUAD_ALT) {
22
+ this.delegate = new QuadSemiTrailerModel(transport);
23
+ }
24
+ else if (transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_BITRUCK) {
25
+ this.delegate = new BiTruckTractorSemiTrailerModel(transport);
26
+ }
27
+ else {
28
+ const base = new SemiReboqueBase(transport);
29
+ base.set_linear_system_matrix();
30
+ this.delegate = base;
31
+ }
32
+ }
33
+ /**
34
+ * @param multi_items - Allocated items.
35
+ * @returns Loaded weights per axle.
36
+ */
37
+ calculate_weight_on_axles(multi_items) {
38
+ const forces = this.calculate_chassi_forces(multi_items);
39
+ return forces.list_axles_indexes().map((index) => forces.get_force_on_axle(index));
40
+ }
41
+ /**
42
+ * @param multi_items - Allocated items.
43
+ * @returns Chassis forces.
44
+ */
45
+ calculate_chassi_forces(multi_items) {
46
+ return calculate_chassi_forces_from_multi(this.transport, multi_items, (center_of_mass_by_grouper) => this.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper));
47
+ }
48
+ /**
49
+ * @param multi_items - Allocated items.
50
+ * @returns Deflection support pairs.
51
+ */
52
+ calculate_support_data(multi_items) {
53
+ const quad_or_bitruck = this.transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_QUAD
54
+ || this.transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_QUAD_ALT
55
+ || this.transport.vehicle_version === VEHICLE_VERSION.SEMIREBOQUE_BITRUCK;
56
+ if (quad_or_bitruck) {
57
+ const center_of_mass_by_grouper = compute_center_of_mass_by_grouper(multi_items, this.merged_containers);
58
+ const quad = this.delegate;
59
+ const forces = quad.equivalent_semi_trailer
60
+ .calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
61
+ const positions = quad.equivalent_semi_trailer.chassi_positions;
62
+ return [[positions[3], forces.get_force_on_pin(0)], [positions[4], forces.get_force_on_axle(2)]];
63
+ }
64
+ const forces = this.calculate_chassi_forces(multi_items);
65
+ const base = this.delegate;
66
+ return [
67
+ [base.chassi_positions[3], forces.get_force_on_pin(0)],
68
+ [base.chassi_positions[4], forces.get_force_on_axle(2)]
69
+ ];
70
+ }
71
+ /**
72
+ * @returns Merged grouper 1 length.
73
+ */
74
+ calculate_container_length() {
75
+ return this.merged_containers.get_container_by_grouper_index(1).length;
76
+ }
77
+ /**
78
+ * @param center_of_mass_by_grouper - CM per grouper.
79
+ * @returns Chassis forces.
80
+ */
81
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
82
+ return this.delegate.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
83
+ }
84
+ }
@@ -0,0 +1,29 @@
1
+ import type { Transport } from '../transports/transport.js';
2
+ import { CenterOfMass } from '../items/center_of_mass.js';
3
+ import { ChassiForces } from './chassi_forces.js';
4
+ /**
5
+ * Two-axle truck lever equilibrium.
6
+ */
7
+ export declare class SimpleTruckBase {
8
+ private readonly transport;
9
+ axles_positions: number[];
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ */
13
+ constructor(transport: Transport);
14
+ /**
15
+ * @param center_of_mass_by_grouper - CM per grouper id.
16
+ * @returns Chassis forces.
17
+ */
18
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
19
+ /**
20
+ * @param axles_positions - Optional preset positions.
21
+ */
22
+ set_axles_positions(axles_positions?: number[]): void;
23
+ /**
24
+ * @param center_of_mass - Load center of mass.
25
+ * @returns Axle 1 and 2 cargo reactions.
26
+ */
27
+ private solve_linear_system;
28
+ }
29
+ //# sourceMappingURL=simple_truck_base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple_truck_base.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/simple_truck_base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,qBAAa,eAAe;IAOZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IALtC,eAAe,EAAE,MAAM,EAAE,CAAK;IAE9B;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAKjD;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;IASf;;OAEG;IACH,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAcrD;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAY9B"}
@@ -0,0 +1,57 @@
1
+ import { Chassi } from '../transports/chassi.js';
2
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
3
+ import { ChassiForces } from './chassi_forces.js';
4
+ /**
5
+ * Two-axle truck lever equilibrium.
6
+ */
7
+ export class SimpleTruckBase {
8
+ transport;
9
+ axles_positions = [];
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ */
13
+ constructor(transport) {
14
+ this.transport = transport;
15
+ this.set_axles_positions();
16
+ }
17
+ /**
18
+ * @param center_of_mass_by_grouper - CM per grouper id.
19
+ * @returns Chassis forces.
20
+ */
21
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
22
+ const center_of_mass = center_of_mass_by_grouper[1];
23
+ const [axle_1, axle_2] = this.solve_linear_system(center_of_mass);
24
+ const forces = new ChassiForces();
25
+ forces.add_axle_forces([axle_1, axle_2]);
26
+ return forces;
27
+ }
28
+ /**
29
+ * @param axles_positions - Optional preset positions.
30
+ */
31
+ set_axles_positions(axles_positions) {
32
+ if (axles_positions) {
33
+ this.axles_positions = axles_positions;
34
+ return;
35
+ }
36
+ const chassi = new Chassi(this.transport);
37
+ this.axles_positions = [
38
+ chassi.get_axle_position(0, CHASSI_REFERENCE.GROUPER_1),
39
+ chassi.get_axle_position(1, CHASSI_REFERENCE.GROUPER_1)
40
+ ];
41
+ }
42
+ /**
43
+ * @param center_of_mass - Load center of mass.
44
+ * @returns Axle 1 and 2 cargo reactions.
45
+ */
46
+ solve_linear_system(center_of_mass) {
47
+ const axle_1_position = this.axles_positions[0];
48
+ const axle_2_position = this.axles_positions[1];
49
+ const axle_1 = center_of_mass.mass
50
+ * (center_of_mass.z - axle_2_position)
51
+ / (axle_1_position - axle_2_position);
52
+ const axle_2 = center_of_mass.mass
53
+ * (axle_1_position - center_of_mass.z)
54
+ / (axle_1_position - axle_2_position);
55
+ return [axle_1, axle_2];
56
+ }
57
+ }
@@ -0,0 +1,41 @@
1
+ import type { Transport } from '../transports/transport.js';
2
+ import type { MultiContainerAllocatedItems } from '../items/multi_container_allocated_items.js';
3
+ import { CenterOfMass } from '../items/center_of_mass.js';
4
+ import { ChassiForces } from './chassi_forces.js';
5
+ /**
6
+ * Caminhão / VUC axle weight (optional bitruck variant).
7
+ */
8
+ export declare class SimpleTruckModel {
9
+ private readonly delegate;
10
+ private readonly transport;
11
+ private readonly merged_containers;
12
+ /**
13
+ * @param transport - Parsed transport.
14
+ */
15
+ constructor(transport: Transport);
16
+ /**
17
+ * @param multi_items - Allocated items.
18
+ * @returns Loaded weights per axle.
19
+ */
20
+ calculate_weight_on_axles(multi_items: MultiContainerAllocatedItems): number[];
21
+ /**
22
+ * @param multi_items - Allocated items.
23
+ * @returns Chassis forces.
24
+ */
25
+ calculate_chassi_forces(multi_items: MultiContainerAllocatedItems): ChassiForces;
26
+ /**
27
+ * @param multi_items - Allocated items.
28
+ * @returns Deflection support pairs.
29
+ */
30
+ calculate_support_data(multi_items: MultiContainerAllocatedItems): [number, number][];
31
+ /**
32
+ * @returns Merged grouper 1 length.
33
+ */
34
+ calculate_container_length(): number;
35
+ /**
36
+ * @param center_of_mass_by_grouper - CM per grouper.
37
+ * @returns Chassis forces.
38
+ */
39
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
40
+ }
41
+ //# sourceMappingURL=simple_truck_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"simple_truck_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/simple_truck_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAM/F,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAUjD;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoF;IAC7G,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAEpD;;OAEG;gBACS,SAAS,EAAE,SAAS;IAgBhC;;;OAGG;IACH,yBAAyB,CAAC,WAAW,EAAE,4BAA4B,GAAG,MAAM,EAAE;IAM9E;;;OAGG;IACH,uBAAuB,CAAC,WAAW,EAAE,4BAA4B,GAAG,YAAY;IAShF;;;OAGG;IACH,sBAAsB,CAAC,WAAW,EAAE,4BAA4B,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAqBrF;;OAEG;IACH,0BAA0B,IAAI,MAAM;IAKpC;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAKlB"}
@@ -0,0 +1,76 @@
1
+ import { MergedContainers } from '../transports/merged_containers.js';
2
+ import { calculate_chassi_forces_from_multi, compute_center_of_mass_by_grouper } from '../items/compute_grouper_center_of_mass.js';
3
+ import { VEHICLE_VERSION } from '../../contracts/vehicle_version.js';
4
+ import { SimpleTruckBase } from './simple_truck_base.js';
5
+ import { BiTruckModel } from './bi_truck_model.js';
6
+ /**
7
+ * Caminhão / VUC axle weight (optional bitruck variant).
8
+ */
9
+ export class SimpleTruckModel {
10
+ delegate;
11
+ transport;
12
+ merged_containers;
13
+ /**
14
+ * @param transport - Parsed transport.
15
+ */
16
+ constructor(transport) {
17
+ this.transport = transport;
18
+ this.merged_containers = new MergedContainers(transport);
19
+ if (transport.vehicle_version === VEHICLE_VERSION.CAMINHAO_BITRUCK) {
20
+ this.delegate = new BiTruckModel(transport);
21
+ }
22
+ else {
23
+ const base = new SimpleTruckBase(transport);
24
+ base.set_axles_positions();
25
+ this.delegate = base;
26
+ }
27
+ }
28
+ /**
29
+ * @param multi_items - Allocated items.
30
+ * @returns Loaded weights per axle.
31
+ */
32
+ calculate_weight_on_axles(multi_items) {
33
+ const forces = this.calculate_chassi_forces(multi_items);
34
+ return forces.list_axles_indexes().map((index) => forces.get_force_on_axle(index));
35
+ }
36
+ /**
37
+ * @param multi_items - Allocated items.
38
+ * @returns Chassis forces.
39
+ */
40
+ calculate_chassi_forces(multi_items) {
41
+ return calculate_chassi_forces_from_multi(this.transport, multi_items, (center_of_mass_by_grouper) => this.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper));
42
+ }
43
+ /**
44
+ * @param multi_items - Allocated items.
45
+ * @returns Deflection support pairs.
46
+ */
47
+ calculate_support_data(multi_items) {
48
+ if (this.transport.vehicle_version === VEHICLE_VERSION.CAMINHAO_BITRUCK) {
49
+ const center_of_mass_by_grouper = compute_center_of_mass_by_grouper(multi_items, this.merged_containers);
50
+ const bi_truck = this.delegate;
51
+ const forces = bi_truck.equivalent_truck
52
+ .calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
53
+ const positions = bi_truck.equivalent_truck.axles_positions;
54
+ return [[positions[0], forces.get_force_on_axle(0)], [positions[1], forces.get_force_on_axle(1)]];
55
+ }
56
+ const forces = this.calculate_chassi_forces(multi_items);
57
+ const base = this.delegate;
58
+ return [
59
+ [base.axles_positions[0], forces.get_force_on_axle(0)],
60
+ [base.axles_positions[1], forces.get_force_on_axle(1)]
61
+ ];
62
+ }
63
+ /**
64
+ * @returns Merged grouper 1 length.
65
+ */
66
+ calculate_container_length() {
67
+ return this.merged_containers.get_container_by_grouper_index(1).length;
68
+ }
69
+ /**
70
+ * @param center_of_mass_by_grouper - CM per grouper.
71
+ * @returns Chassis forces.
72
+ */
73
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
74
+ return this.delegate.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
75
+ }
76
+ }
@@ -0,0 +1,18 @@
1
+ import type { Transport } from '../transports/transport.js';
2
+ /**
3
+ * Physics-based tare from uniform load at volume centroid.
4
+ */
5
+ export declare class SingleContainerTare {
6
+ private readonly transport;
7
+ /**
8
+ * @param transport - Parsed transport.
9
+ */
10
+ constructor(transport: Transport);
11
+ /**
12
+ * @returns Calculated tare per axle.
13
+ */
14
+ calculate(): number[];
15
+ private calculate_z_centroid;
16
+ private calculate_forces_on_axles;
17
+ }
18
+ //# sourceMappingURL=single_container_tare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_container_tare.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/single_container_tare.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D;;GAEG;AACH,qBAAa,mBAAmB;IAKhB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAHtC;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAGjD;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAYrB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,yBAAyB;CAQpC"}
@@ -0,0 +1,45 @@
1
+ import { CenterOfMass } from '../items/center_of_mass.js';
2
+ import { AxleWeightModel } from './axle_weight_model.js';
3
+ /**
4
+ * Physics-based tare from uniform load at volume centroid.
5
+ */
6
+ export class SingleContainerTare {
7
+ transport;
8
+ /**
9
+ * @param transport - Parsed transport.
10
+ */
11
+ constructor(transport) {
12
+ this.transport = transport;
13
+ }
14
+ /**
15
+ * @returns Calculated tare per axle.
16
+ */
17
+ calculate() {
18
+ const forces = this.calculate_forces_on_axles(this.calculate_z_centroid(), this.transport.supported_weight);
19
+ return this.transport.axle_manager.list_axles_indexes().map((index) => {
20
+ const axle = this.transport.axle_manager.get_axle(index);
21
+ return axle.max_supported_weight - forces.get_force_on_axle(index);
22
+ });
23
+ }
24
+ calculate_z_centroid() {
25
+ let z_offset = 0;
26
+ let sum_z = 0;
27
+ let total_volume = 0;
28
+ for (const sequence of this.transport.list_containers_sequence_indexes()) {
29
+ const container = this.transport.get_container_by_sequence_index(sequence);
30
+ const z_centroid = z_offset + container.length / 2;
31
+ z_offset += container.length;
32
+ const volume = container.volume();
33
+ sum_z += z_centroid * volume;
34
+ total_volume += volume;
35
+ }
36
+ return sum_z / total_volume;
37
+ }
38
+ calculate_forces_on_axles(z_position, mass) {
39
+ const model = new AxleWeightModel(this.transport);
40
+ const center_of_mass = new CenterOfMass();
41
+ center_of_mass.z = z_position;
42
+ center_of_mass.mass = mass;
43
+ return model.calculate_chassi_forces_with_load_center_of_mass({ 1: center_of_mass });
44
+ }
45
+ }
@@ -0,0 +1,12 @@
1
+ import type { Transport } from '../transports/transport.js';
2
+ /**
3
+ * Selects legacy or physics tare model per axle.
4
+ */
5
+ export declare class TareModel {
6
+ /**
7
+ * @param transport - Parsed transport.
8
+ * @returns Tare per axle.
9
+ */
10
+ calculate(transport: Transport): number[];
11
+ }
12
+ //# sourceMappingURL=tare_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tare_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/tare_model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAM3D;;GAEG;AACH,qBAAa,SAAS;IAElB;;;OAGG;IACH,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,EAAE;CAW5C"}
@@ -0,0 +1,36 @@
1
+ import { VEHICLE_TYPE } from '../../contracts/vehicle_type.js';
2
+ import { OldTareModel } from './old_tare_model.js';
3
+ import { SingleContainerTare } from './single_container_tare.js';
4
+ const DISTANCE_TOLERANCE = 0.9;
5
+ /**
6
+ * Selects legacy or physics tare model per axle.
7
+ */
8
+ export class TareModel {
9
+ /**
10
+ * @param transport - Parsed transport.
11
+ * @returns Tare per axle.
12
+ */
13
+ calculate(transport) {
14
+ if (transport.vehicle_type === VEHICLE_TYPE.BITREM
15
+ || transport.vehicle_type === VEHICLE_TYPE.RODOTREM) {
16
+ return new OldTareModel().calculate(transport);
17
+ }
18
+ const reference = new OldTareModel().calculate(transport);
19
+ const physics = new SingleContainerTare(transport).calculate();
20
+ return choose_tare_model(reference, physics);
21
+ }
22
+ }
23
+ /**
24
+ * @param reference_values - Legacy tare per axle.
25
+ * @param new_values - Physics tare per axle.
26
+ * @returns Selected tare list.
27
+ */
28
+ function choose_tare_model(reference_values, new_values) {
29
+ for (let index = 0; index < reference_values.length; index++) {
30
+ const ref = reference_values[index];
31
+ if (Math.abs(new_values[index] - ref) > ref * DISTANCE_TOLERANCE) {
32
+ return reference_values;
33
+ }
34
+ }
35
+ return new_values;
36
+ }
@@ -0,0 +1,33 @@
1
+ import type { Transport } from '../transports/transport.js';
2
+ import type { MultiContainerAllocatedItems } from '../items/multi_container_allocated_items.js';
3
+ import { Chassi } from '../transports/chassi.js';
4
+ import { CenterOfMass } from '../items/center_of_mass.js';
5
+ import { ChassiForces } from './chassi_forces.js';
6
+ /**
7
+ * Vanderleia five-axle static model with suspension-dependent coupling.
8
+ */
9
+ export declare class VanderleiaModel {
10
+ private readonly transport;
11
+ readonly chassi: Chassi;
12
+ private readonly matrix;
13
+ /**
14
+ * @param transport - Parsed transport.
15
+ */
16
+ constructor(transport: Transport);
17
+ /**
18
+ * @param multi_items - Allocated items.
19
+ * @returns Loaded weights per axle.
20
+ */
21
+ calculate_weight_on_axles(multi_items: MultiContainerAllocatedItems): number[];
22
+ /**
23
+ * @param multi_items - Allocated items.
24
+ * @returns Chassis forces.
25
+ */
26
+ calculate_chassi_forces(multi_items: MultiContainerAllocatedItems): ChassiForces;
27
+ /**
28
+ * @param center_of_mass_by_grouper - CM for grouper 1.
29
+ * @returns Chassis forces on five axles.
30
+ */
31
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
32
+ }
33
+ //# sourceMappingURL=vanderleia_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vanderleia_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/vanderleia_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAA;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD;;GAEG;AACH,qBAAa,eAAe;IAQZ,OAAO,CAAC,QAAQ,CAAC,SAAS;IANtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAMjD;;;OAGG;IACH,yBAAyB,CAAC,WAAW,EAAE,4BAA4B,GAAG,MAAM,EAAE;IAM9E;;;OAGG;IACH,uBAAuB,CAAC,WAAW,EAAE,4BAA4B,GAAG,YAAY;IAShF;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAclB"}
@@ -0,0 +1,100 @@
1
+ import { calculate_chassi_forces_from_multi } from '../items/compute_grouper_center_of_mass.js';
2
+ import { Chassi } from '../transports/chassi.js';
3
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
4
+ import { SUSPENSION_TYPE } from '../../contracts/suspension_type.js';
5
+ import { ChassiForces } from './chassi_forces.js';
6
+ import { solve_linear_system } from '../../math/gaussian_elimination.js';
7
+ /**
8
+ * Vanderleia five-axle static model with suspension-dependent coupling.
9
+ */
10
+ export class VanderleiaModel {
11
+ transport;
12
+ chassi;
13
+ matrix;
14
+ /**
15
+ * @param transport - Parsed transport.
16
+ */
17
+ constructor(transport) {
18
+ this.transport = transport;
19
+ this.chassi = new Chassi(transport);
20
+ this.matrix = generate_vanderleia_matrix(this.chassi, transport);
21
+ }
22
+ /**
23
+ * @param multi_items - Allocated items.
24
+ * @returns Loaded weights per axle.
25
+ */
26
+ calculate_weight_on_axles(multi_items) {
27
+ const forces = this.calculate_chassi_forces(multi_items);
28
+ return forces.list_axles_indexes().map((index) => forces.get_force_on_axle(index));
29
+ }
30
+ /**
31
+ * @param multi_items - Allocated items.
32
+ * @returns Chassis forces.
33
+ */
34
+ calculate_chassi_forces(multi_items) {
35
+ return calculate_chassi_forces_from_multi(this.transport, multi_items, (center_of_mass_by_grouper) => this.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper));
36
+ }
37
+ /**
38
+ * @param center_of_mass_by_grouper - CM for grouper 1.
39
+ * @returns Chassis forces on five axles.
40
+ */
41
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
42
+ const solution = solve_vanderleia_system(this.matrix, center_of_mass_by_grouper[1]);
43
+ const forces = new ChassiForces();
44
+ forces.add_pin_forces([solution[3]]);
45
+ forces.add_axle_forces([
46
+ solution[5],
47
+ solution[4],
48
+ solution[2],
49
+ solution[1],
50
+ solution[0]
51
+ ]);
52
+ return forces;
53
+ }
54
+ }
55
+ /**
56
+ * @param chassi - Chassis geometry.
57
+ * @param transport - Parsed transport (suspension type).
58
+ * @returns 6×6 matrix.
59
+ */
60
+ function generate_vanderleia_matrix(chassi, transport) {
61
+ const tractor_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR);
62
+ const tractor_axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
63
+ const tractor_axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
64
+ const pin_1 = chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1);
65
+ const axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
66
+ const axle_4 = chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_1);
67
+ const axle_5 = chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_1);
68
+ const relation = reactions_relation(transport);
69
+ return [
70
+ [1, 0, -relation[0], 0, 0, 0],
71
+ [0, 1, -relation[1], 0, 0, 0],
72
+ [1, 1, 1, 1, 0, 0],
73
+ [axle_5, axle_4, axle_3, pin_1, 0, 0],
74
+ [0, 0, 0, -1, 1, 1],
75
+ [0, 0, 0, -tractor_pin, tractor_axle_2, tractor_axle_1]
76
+ ];
77
+ }
78
+ /**
79
+ * @param transport - Parsed transport.
80
+ * @returns Reaction coupling factors.
81
+ */
82
+ function reactions_relation(transport) {
83
+ const raw = transport.suspension_type;
84
+ if (raw === SUSPENSION_TYPE.PNEUMATICA || raw === 'Pneumatica') {
85
+ return [1, 1];
86
+ }
87
+ if (raw === SUSPENSION_TYPE.MECANICA || raw === 'Mecanica') {
88
+ return [0.867469880, 0.542168675];
89
+ }
90
+ throw new Error(`Unrecognized suspension type: ${String(raw)}`);
91
+ }
92
+ /**
93
+ * @param matrix - System matrix.
94
+ * @param center_of_mass - Load CM.
95
+ * @returns Solution vector.
96
+ */
97
+ function solve_vanderleia_system(matrix, center_of_mass) {
98
+ const independent = [0, 0, center_of_mass.mass, center_of_mass.mass * center_of_mass.z, 0, 0];
99
+ return solve_linear_system(matrix, independent);
100
+ }
@@ -0,0 +1,27 @@
1
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
2
+ import type { Transport } from '../transports/transport.js';
3
+ import type { Chassi } from '../transports/chassi.js';
4
+ /**
5
+ * @param transport - Parsed transport.
6
+ * @param grouper - Grouper index.
7
+ * @returns Axle indexes for grouper output.
8
+ */
9
+ export declare function select_axles_for_grouper(transport: Transport, grouper: number): number[];
10
+ /**
11
+ * @param axles_indexes - Axle indexes in output row.
12
+ * @returns Chassi reference for distance helper.
13
+ */
14
+ export declare function find_grouper_reference(axles_indexes: number[]): typeof CHASSI_REFERENCE.GROUPER_1 | typeof CHASSI_REFERENCE.GROUPER_2;
15
+ type AxleWeightOutputInput = {
16
+ transport: Transport;
17
+ chassi: Chassi;
18
+ axles_indexes: number[];
19
+ weight_on_axles: number[];
20
+ };
21
+ /**
22
+ * @param input - Transport, chassi, axles, and cargo loads.
23
+ * @returns pesoEixos wire rows.
24
+ */
25
+ export declare function build_axle_weights_output(input: AxleWeightOutputInput): Record<string, unknown>[];
26
+ export {};
27
+ //# sourceMappingURL=axle_weight_output_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axle_weight_output_builder.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/services/axle_weight_output_builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAErD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAClC,aAAa,EAAE,MAAM,EAAE,GACxB,OAAO,gBAAgB,CAAC,SAAS,GAAG,OAAO,gBAAgB,CAAC,SAAS,CAGvE;AAED,KAAK,qBAAqB,GAAG;IACzB,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,eAAe,EAAE,MAAM,EAAE,CAAA;CAC5B,CAAA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAoBjG"}
@@ -0,0 +1,42 @@
1
+ import { VEHICLE_TYPE } from '../../contracts/vehicle_type.js';
2
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
3
+ /**
4
+ * @param transport - Parsed transport.
5
+ * @param grouper - Grouper index.
6
+ * @returns Axle indexes for grouper output.
7
+ */
8
+ export function select_axles_for_grouper(transport, grouper) {
9
+ const type = transport.vehicle_type;
10
+ if (type === VEHICLE_TYPE.RODOTREM || type === VEHICLE_TYPE.BITREM) {
11
+ return grouper === 1 ? [0, 1, 2] : [3, 4];
12
+ }
13
+ return transport.axle_manager.list_axles_indexes();
14
+ }
15
+ /**
16
+ * @param axles_indexes - Axle indexes in output row.
17
+ * @returns Chassi reference for distance helper.
18
+ */
19
+ export function find_grouper_reference(axles_indexes) {
20
+ return axles_indexes.includes(0) ? CHASSI_REFERENCE.GROUPER_1 : CHASSI_REFERENCE.GROUPER_2;
21
+ }
22
+ /**
23
+ * @param input - Transport, chassi, axles, and cargo loads.
24
+ * @returns pesoEixos wire rows.
25
+ */
26
+ export function build_axle_weights_output(input) {
27
+ return input.axles_indexes.map((axle_index) => {
28
+ const axle = input.transport.axle_manager.get_axle(axle_index);
29
+ const cargo = input.weight_on_axles[axle_index];
30
+ return {
31
+ distanciaOrigem: axle.distance_from_previous_axle,
32
+ pesoMaxFinal: axle.max_supported_weight,
33
+ tara: axle.tare,
34
+ pesoMax: axle.max_supported_weight - axle.tare,
35
+ pesoCarregado: cargo,
36
+ pesoCarregadoFinal: axle.tare + cargo,
37
+ distanciaOrigemSemPrimeiroEixo: axle_index === 0
38
+ ? 0
39
+ : input.chassi.get_axle_position(axle_index, find_grouper_reference(input.axles_indexes))
40
+ };
41
+ });
42
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Full ms-faixas axle weight pipeline (Python AxleWeightService port).
3
+ */
4
+ export declare class AxleWeightService {
5
+ private readonly transport;
6
+ private readonly chassi;
7
+ private readonly allocated_by_sequence;
8
+ /**
9
+ * @param input_data - Ms-faixas payload with envs.
10
+ */
11
+ constructor(input_data: Record<string, unknown>);
12
+ /**
13
+ * @returns Math output with envs and pesoEixos per container.
14
+ */
15
+ run(): Record<string, unknown>;
16
+ private build_containers_data;
17
+ private evaluate_weight_on_axles;
18
+ private assign_grouper_axle_outputs;
19
+ }
20
+ //# sourceMappingURL=axle_weight_service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axle_weight_service.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/services/axle_weight_service.ts"],"names":[],"mappings":"AAqBA;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmF;IAEzH;;OAEG;gBACS,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ/C;;OAEG;IACH,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAU9B,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,wBAAwB;IAkBhC,OAAO,CAAC,2BAA2B;CAoBtC"}