@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
+ import type { GroupedContainers } from '../grouped_containers.js';
2
+ type MaxWeightInput = {
3
+ sequence_index: number;
4
+ percentage_of_weight: number;
5
+ total_max_supported_weight: number;
6
+ tare: number;
7
+ };
8
+ /**
9
+ * Applies neck weight cap and redistributes excess to second container.
10
+ */
11
+ export declare class ContainerMaxWeightCalculator {
12
+ private readonly grouped_containers;
13
+ private neck_weight_reduction;
14
+ /**
15
+ * @param grouped_containers - Grouper containers.
16
+ */
17
+ constructor(grouped_containers: GroupedContainers);
18
+ /**
19
+ * @param input - Sequence, share, capacity, and tare.
20
+ * @returns Max supported weight for container.
21
+ */
22
+ calculate(input: MaxWeightInput): number;
23
+ private is_neck;
24
+ private is_second_container;
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=container_max_weight_calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container_max_weight_calculator.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/containerweight/container_max_weight_calculator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,KAAK,cAAc,GAAG;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,0BAA0B,EAAE,MAAM,CAAA;IAClC,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAID;;GAEG;AACH,qBAAa,4BAA4B;IAOzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAL/C,OAAO,CAAC,qBAAqB,CAAI;IAEjC;;OAEG;gBAC0B,kBAAkB,EAAE,iBAAiB;IAGlE;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAmBxC,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,mBAAmB;CAK9B"}
@@ -0,0 +1,40 @@
1
+ const MAX_NECK_SUPPORTED = 6000;
2
+ /**
3
+ * Applies neck weight cap and redistributes excess to second container.
4
+ */
5
+ export class ContainerMaxWeightCalculator {
6
+ grouped_containers;
7
+ neck_weight_reduction = 0;
8
+ /**
9
+ * @param grouped_containers - Grouper containers.
10
+ */
11
+ constructor(grouped_containers) {
12
+ this.grouped_containers = grouped_containers;
13
+ }
14
+ /**
15
+ * @param input - Sequence, share, capacity, and tare.
16
+ * @returns Max supported weight for container.
17
+ */
18
+ calculate(input) {
19
+ const max_supported = input.total_max_supported_weight * input.percentage_of_weight;
20
+ if (this.is_neck(input.sequence_index)) {
21
+ const supported = max_supported - input.tare;
22
+ if (supported > MAX_NECK_SUPPORTED) {
23
+ this.neck_weight_reduction = supported - MAX_NECK_SUPPORTED;
24
+ return input.tare + MAX_NECK_SUPPORTED;
25
+ }
26
+ }
27
+ else if (this.is_second_container(input.sequence_index)) {
28
+ return max_supported + this.neck_weight_reduction;
29
+ }
30
+ return max_supported;
31
+ }
32
+ is_neck(sequence_index) {
33
+ const list = this.grouped_containers.list_containers_sequence_indexes();
34
+ return list.length >= 2 && list[0] === sequence_index;
35
+ }
36
+ is_second_container(sequence_index) {
37
+ const list = this.grouped_containers.list_containers_sequence_indexes();
38
+ return list.length >= 2 && list[1] === sequence_index;
39
+ }
40
+ }
@@ -0,0 +1,28 @@
1
+ import type { Transport } from '../transport.js';
2
+ import type { GroupedContainers } from '../grouped_containers.js';
3
+ /**
4
+ * Distributes grouper tare across containers (neck gets axle-1 share).
5
+ */
6
+ export declare class ContainerTareCalculator {
7
+ private readonly transport;
8
+ private readonly grouped_containers;
9
+ private revised_tare_percentage;
10
+ private first_neck_tare;
11
+ /**
12
+ * @param transport - Parsed transport.
13
+ * @param grouped_containers - Grouper containers.
14
+ */
15
+ constructor(transport: Transport, grouped_containers: GroupedContainers);
16
+ /**
17
+ * @param sequence_index - Container sequence.
18
+ * @param percentage_of_weight - Lateral area share.
19
+ * @param total_tare - Grouper total tare.
20
+ * @returns Container tare.
21
+ */
22
+ calculate(sequence_index: number, percentage_of_weight: number, total_tare: number): number;
23
+ private is_first_neck;
24
+ private calculate_tare_of_first_neck;
25
+ private tare_percentage_review;
26
+ private axle1_on_neck_tare_contribution;
27
+ }
28
+ //# sourceMappingURL=container_tare_calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container_tare_calculator.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/containerweight/container_tare_calculator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAIjE;;GAEG;AACH,qBAAa,uBAAuB;IAU5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IATvC,OAAO,CAAC,uBAAuB,CAAI;IACnC,OAAO,CAAC,eAAe,CAAI;IAE3B;;;OAGG;gBAEkB,SAAS,EAAE,SAAS,EACpB,kBAAkB,EAAE,iBAAiB;IAI1D;;;;;OAKG;IACH,SAAS,CACL,cAAc,EAAE,MAAM,EACtB,oBAAoB,EAAE,MAAM,EAC5B,UAAU,EAAE,MAAM,GACnB,MAAM;IAWT,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,4BAA4B;IAUpC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,+BAA+B;CAO1C"}
@@ -0,0 +1,55 @@
1
+ const NECK_SEQUENCE = 1;
2
+ /**
3
+ * Distributes grouper tare across containers (neck gets axle-1 share).
4
+ */
5
+ export class ContainerTareCalculator {
6
+ transport;
7
+ grouped_containers;
8
+ revised_tare_percentage = 0;
9
+ first_neck_tare = 0;
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ * @param grouped_containers - Grouper containers.
13
+ */
14
+ constructor(transport, grouped_containers) {
15
+ this.transport = transport;
16
+ this.grouped_containers = grouped_containers;
17
+ }
18
+ /**
19
+ * @param sequence_index - Container sequence.
20
+ * @param percentage_of_weight - Lateral area share.
21
+ * @param total_tare - Grouper total tare.
22
+ * @returns Container tare.
23
+ */
24
+ calculate(sequence_index, percentage_of_weight, total_tare) {
25
+ if (this.is_first_neck(sequence_index)) {
26
+ this.calculate_tare_of_first_neck(percentage_of_weight);
27
+ this.tare_percentage_review(percentage_of_weight, total_tare);
28
+ return this.first_neck_tare;
29
+ }
30
+ return (percentage_of_weight + this.revised_tare_percentage) * total_tare;
31
+ }
32
+ is_first_neck(sequence_index) {
33
+ return this.grouped_containers.list_containers_sequence_indexes().length >= 2
34
+ && sequence_index === NECK_SEQUENCE;
35
+ }
36
+ calculate_tare_of_first_neck(percentage_of_weight) {
37
+ const neck = this.grouped_containers.get_container_by_sequence_index(NECK_SEQUENCE);
38
+ const axle1 = this.axle1_on_neck_tare_contribution(neck.length);
39
+ const remaining = percentage_of_weight * (this.transport.axle_manager.get_axle(1).tare
40
+ + this.transport.axle_manager.get_axle(2).tare);
41
+ this.first_neck_tare = axle1 + remaining;
42
+ }
43
+ tare_percentage_review(percentage_of_weight, total_tare) {
44
+ const tare = percentage_of_weight * total_tare;
45
+ const change = (this.first_neck_tare - tare) / total_tare;
46
+ const count = this.grouped_containers.list_containers_sequence_indexes().length;
47
+ this.revised_tare_percentage = -change / (count - 1);
48
+ }
49
+ axle1_on_neck_tare_contribution(neck_length) {
50
+ const end_container = this.transport.first_axle_distance + neck_length;
51
+ const end_grouper = this.transport.first_axle_distance + this.grouped_containers.length;
52
+ const share = end_container / end_grouper;
53
+ return share * this.transport.axle_manager.get_axle(0).tare;
54
+ }
55
+ }
@@ -0,0 +1,15 @@
1
+ import type { Transport } from '../transport.js';
2
+ /**
3
+ * Computes per-container supported cargo capacity.
4
+ */
5
+ export declare class ContainerWeightModel {
6
+ private readonly transport;
7
+ private readonly merged_containers;
8
+ /**
9
+ * @param transport - Parsed transport.
10
+ */
11
+ constructor(transport: Transport);
12
+ /** Updates container supported_weight on transport. */
13
+ calculate(): void;
14
+ }
15
+ //# sourceMappingURL=container_weight_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container_weight_model.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/containerweight/container_weight_model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKhD;;GAEG;AACH,qBAAa,oBAAoB;IAOjB,OAAO,CAAC,QAAQ,CAAC,SAAS;IALtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAEpD;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAKjD,uDAAuD;IACvD,SAAS,IAAI,IAAI;CAgBpB"}
@@ -0,0 +1,31 @@
1
+ import { MergedContainers } from '../merged_containers.js';
2
+ import { MergedContainersWeightCalculator } from './merged_containers_weight_calculator.js';
3
+ import { SingleContainerWeightCalculator } from './single_container_weight_calculator.js';
4
+ /**
5
+ * Computes per-container supported cargo capacity.
6
+ */
7
+ export class ContainerWeightModel {
8
+ transport;
9
+ merged_containers;
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ */
13
+ constructor(transport) {
14
+ this.transport = transport;
15
+ this.merged_containers = new MergedContainers(transport);
16
+ }
17
+ /** Updates container supported_weight on transport. */
18
+ calculate() {
19
+ const axles = this.transport.axle_manager.list_axles_indexes()
20
+ .map((index) => this.transport.axle_manager.get_axle(index));
21
+ new MergedContainersWeightCalculator(this.merged_containers, axles).calculate();
22
+ for (const grouper of this.merged_containers.list_grouper_indexes()) {
23
+ const grouped = this.merged_containers.get_container_by_grouper_index(grouper);
24
+ new SingleContainerWeightCalculator(this.transport, grouped).calculate();
25
+ }
26
+ for (const sequence of this.transport.list_containers_sequence_indexes()) {
27
+ const container = this.transport.get_container_by_sequence_index(sequence);
28
+ container.supported_weight = container.max_supported_weight - container.tare;
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,17 @@
1
+ import type { MergedContainers } from '../merged_containers.js';
2
+ import type { AxleRecord } from '../axle_record.js';
3
+ /**
4
+ * Sums axle capacity and tare onto merged grouper containers.
5
+ */
6
+ export declare class MergedContainersWeightCalculator {
7
+ private readonly merged_containers;
8
+ private readonly transport_axles_list;
9
+ /**
10
+ * @param merged_containers - Grouper layout.
11
+ * @param transport_axles_list - All axles.
12
+ */
13
+ constructor(merged_containers: MergedContainers, transport_axles_list: AxleRecord[]);
14
+ /** Applies summed max weight and tare to each merged grouper container. */
15
+ calculate(): void;
16
+ }
17
+ //# sourceMappingURL=merged_containers_weight_calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merged_containers_weight_calculator.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/containerweight/merged_containers_weight_calculator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD;;GAEG;AACH,qBAAa,gCAAgC;IAOrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IANzC;;;OAGG;gBAEkB,iBAAiB,EAAE,gBAAgB,EACnC,oBAAoB,EAAE,UAAU,EAAE;IAIvD,2EAA2E;IAC3E,SAAS,IAAI,IAAI;CAmBpB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Sums axle capacity and tare onto merged grouper containers.
3
+ */
4
+ export class MergedContainersWeightCalculator {
5
+ merged_containers;
6
+ transport_axles_list;
7
+ /**
8
+ * @param merged_containers - Grouper layout.
9
+ * @param transport_axles_list - All axles.
10
+ */
11
+ constructor(merged_containers, transport_axles_list) {
12
+ this.merged_containers = merged_containers;
13
+ this.transport_axles_list = transport_axles_list;
14
+ }
15
+ /** Applies summed max weight and tare to each merged grouper container. */
16
+ calculate() {
17
+ for (const grouper of this.merged_containers.list_grouper_indexes()) {
18
+ const grouped = this.merged_containers.get_container_by_grouper_index(grouper);
19
+ const sequences = grouped.list_containers_sequence_indexes();
20
+ const merged = grouped.merged_container;
21
+ merged.max_supported_weight = 0;
22
+ merged.tare = 0;
23
+ for (const axle of this.transport_axles_list) {
24
+ if (sequences.includes(axle.sequence_index)) {
25
+ merged.max_supported_weight += axle.max_supported_weight;
26
+ merged.tare += axle.tare;
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,20 @@
1
+ import type { Transport } from '../transport.js';
2
+ import type { GroupedContainers } from '../grouped_containers.js';
3
+ /**
4
+ * Splits grouper capacity across containers by lateral area.
5
+ */
6
+ export declare class SingleContainerWeightCalculator {
7
+ private readonly grouped_containers;
8
+ private readonly tare_calculator;
9
+ private readonly max_calculator;
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ * @param grouped_containers - Grouper containers.
13
+ */
14
+ constructor(transport: Transport, grouped_containers: GroupedContainers);
15
+ /** Assigns max_supported_weight and tare per container in grouper. */
16
+ calculate(): void;
17
+ private total_lateral_area;
18
+ private lateral_area;
19
+ }
20
+ //# sourceMappingURL=single_container_weight_calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single_container_weight_calculator.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/containerweight/single_container_weight_calculator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAKjE;;GAEG;AACH,qBAAa,+BAA+B;IAWpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IATvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAE7D;;;OAGG;gBAEC,SAAS,EAAE,SAAS,EACH,kBAAkB,EAAE,iBAAiB;IAO1D,sEAAsE;IACtE,SAAS,IAAI,IAAI;IAqBjB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;CAIvB"}
@@ -0,0 +1,48 @@
1
+ import { ContainerTareCalculator } from './container_tare_calculator.js';
2
+ import { ContainerMaxWeightCalculator } from './container_max_weight_calculator.js';
3
+ /**
4
+ * Splits grouper capacity across containers by lateral area.
5
+ */
6
+ export class SingleContainerWeightCalculator {
7
+ grouped_containers;
8
+ tare_calculator;
9
+ max_calculator;
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ * @param grouped_containers - Grouper containers.
13
+ */
14
+ constructor(transport, grouped_containers) {
15
+ this.grouped_containers = grouped_containers;
16
+ this.tare_calculator = new ContainerTareCalculator(transport, grouped_containers);
17
+ this.max_calculator = new ContainerMaxWeightCalculator(grouped_containers);
18
+ }
19
+ /** Assigns max_supported_weight and tare per container in grouper. */
20
+ calculate() {
21
+ const total_area = this.total_lateral_area();
22
+ const merged = this.grouped_containers.merged_container;
23
+ const total_max = merged.max_supported_weight;
24
+ const total_tare = merged.tare;
25
+ for (const sequence of this.grouped_containers.list_containers_sequence_indexes()) {
26
+ const container = this.grouped_containers.get_container_by_sequence_index(sequence);
27
+ const share = this.lateral_area(container) / total_area;
28
+ const tare = this.tare_calculator.calculate(sequence, share, total_tare);
29
+ container.max_supported_weight = this.max_calculator.calculate({
30
+ sequence_index: sequence,
31
+ percentage_of_weight: share,
32
+ total_max_supported_weight: total_max,
33
+ tare
34
+ });
35
+ container.tare = tare;
36
+ }
37
+ }
38
+ total_lateral_area() {
39
+ let total = 0;
40
+ for (const sequence of this.grouped_containers.list_containers_sequence_indexes()) {
41
+ total += this.lateral_area(this.grouped_containers.get_container_by_sequence_index(sequence));
42
+ }
43
+ return total;
44
+ }
45
+ lateral_area(container) {
46
+ return container.length * container.height;
47
+ }
48
+ }
@@ -0,0 +1,34 @@
1
+ import { ContainerRecord } from './container_record.js';
2
+ /**
3
+ * Containers merged per grouper.
4
+ */
5
+ export declare class GroupedContainers {
6
+ grouper: number;
7
+ merged_container: ContainerRecord | null;
8
+ private containers;
9
+ /**
10
+ * @param grouper - Grouper id.
11
+ */
12
+ constructor(grouper: number);
13
+ get length(): number;
14
+ get container_distance_ahead(): number | null;
15
+ get main_pin_distance(): number | null;
16
+ /**
17
+ * @param container - Container to add.
18
+ */
19
+ add_container(container: ContainerRecord): void;
20
+ /**
21
+ * Merges segment lengths into first container of grouper.
22
+ */
23
+ generate_merged_container(): void;
24
+ /**
25
+ * @param sequence_index - Container sequence.
26
+ * @returns Container record.
27
+ */
28
+ get_container_by_sequence_index(sequence_index: number): ContainerRecord;
29
+ /**
30
+ * @returns Sorted sequence indexes.
31
+ */
32
+ list_containers_sequence_indexes(): number[];
33
+ }
34
+ //# sourceMappingURL=grouped_containers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grouped_containers.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/grouped_containers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD;;GAEG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,eAAe,GAAG,IAAI,CAAO;IAC/C,OAAO,CAAC,UAAU,CAAqC;IAEvD;;OAEG;gBACS,OAAO,EAAE,MAAM;IAK3B,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAG5C;IAED,IAAI,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGrC;IAED;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,IAAI;IAQ/C;;OAEG;IACH,yBAAyB,IAAI,IAAI;IAYjC;;;OAGG;IACH,+BAA+B,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe;IAUxE;;OAEG;IACH,gCAAgC,IAAI,MAAM,EAAE;CAI/C"}
@@ -0,0 +1,68 @@
1
+ import { ContainerRecord } from './container_record.js';
2
+ /**
3
+ * Containers merged per grouper.
4
+ */
5
+ export class GroupedContainers {
6
+ grouper;
7
+ merged_container = null;
8
+ containers = new Map();
9
+ /**
10
+ * @param grouper - Grouper id.
11
+ */
12
+ constructor(grouper) {
13
+ this.grouper = grouper;
14
+ }
15
+ get length() {
16
+ return this.merged_container.length;
17
+ }
18
+ get container_distance_ahead() {
19
+ return this.merged_container.container_distance_ahead;
20
+ }
21
+ get main_pin_distance() {
22
+ return this.merged_container.main_pin_distance;
23
+ }
24
+ /**
25
+ * @param container - Container to add.
26
+ */
27
+ add_container(container) {
28
+ if (container.grouper === this.grouper) {
29
+ this.containers.set(container.sequence_index, container);
30
+ }
31
+ }
32
+ /**
33
+ * Merges segment lengths into first container of grouper.
34
+ */
35
+ generate_merged_container() {
36
+ const sequence_indexes = this.list_containers_sequence_indexes();
37
+ const first = this.get_container_by_sequence_index(sequence_indexes[0]);
38
+ this.merged_container = clone_container(first);
39
+ for (let index = 1; index < sequence_indexes.length; index++) {
40
+ const next = this.get_container_by_sequence_index(sequence_indexes[index]);
41
+ this.merged_container.length += next.length;
42
+ }
43
+ }
44
+ /**
45
+ * @param sequence_index - Container sequence.
46
+ * @returns Container record.
47
+ */
48
+ get_container_by_sequence_index(sequence_index) {
49
+ const container = this.containers.get(sequence_index);
50
+ if (!container) {
51
+ throw new Error(`Missing container ${sequence_index}`);
52
+ }
53
+ return container;
54
+ }
55
+ /**
56
+ * @returns Sorted sequence indexes.
57
+ */
58
+ list_containers_sequence_indexes() {
59
+ return [...this.containers.keys()].sort((left, right) => left - right);
60
+ }
61
+ }
62
+ /**
63
+ * @param source - Container to clone.
64
+ * @returns Shallow clone with same wire fields.
65
+ */
66
+ function clone_container(source) {
67
+ return new ContainerRecord({ ...source.raw });
68
+ }
@@ -0,0 +1,26 @@
1
+ import type { Transport } from './transport.js';
2
+ import { GroupedContainers } from './grouped_containers.js';
3
+ /**
4
+ * Grouper-level merged container geometry.
5
+ */
6
+ export declare class MergedContainers {
7
+ private all_grouped_containers;
8
+ /**
9
+ * @param transport - Parsed transport.
10
+ */
11
+ constructor(transport: Transport);
12
+ /**
13
+ * @param transport - Parsed transport.
14
+ */
15
+ setup(transport: Transport): void;
16
+ /**
17
+ * @returns Grouper id list.
18
+ */
19
+ list_grouper_indexes(): number[];
20
+ /**
21
+ * @param grouper - Grouper id.
22
+ * @returns Grouped containers.
23
+ */
24
+ get_container_by_grouper_index(grouper: number): GroupedContainers;
25
+ }
26
+ //# sourceMappingURL=merged_containers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merged_containers.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/merged_containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,sBAAsB,CAAuC;IAErE;;OAEG;gBACS,SAAS,EAAE,SAAS;IAKhC;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAmBjC;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAKhC;;;OAGG;IACH,8BAA8B,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB;CASrE"}
@@ -0,0 +1,45 @@
1
+ import { GroupedContainers } from './grouped_containers.js';
2
+ /**
3
+ * Grouper-level merged container geometry.
4
+ */
5
+ export class MergedContainers {
6
+ all_grouped_containers = new Map();
7
+ /**
8
+ * @param transport - Parsed transport.
9
+ */
10
+ constructor(transport) {
11
+ this.setup(transport);
12
+ }
13
+ /**
14
+ * @param transport - Parsed transport.
15
+ */
16
+ setup(transport) {
17
+ for (const sequence_index of transport.list_containers_sequence_indexes()) {
18
+ const container = transport.get_container_by_sequence_index(sequence_index);
19
+ if (!this.all_grouped_containers.has(container.grouper)) {
20
+ this.all_grouped_containers.set(container.grouper, new GroupedContainers(container.grouper));
21
+ }
22
+ this.get_container_by_grouper_index(container.grouper).add_container(container);
23
+ }
24
+ for (const grouper of this.all_grouped_containers.keys()) {
25
+ this.get_container_by_grouper_index(grouper).generate_merged_container();
26
+ }
27
+ }
28
+ /**
29
+ * @returns Grouper id list.
30
+ */
31
+ list_grouper_indexes() {
32
+ return [...this.all_grouped_containers.keys()];
33
+ }
34
+ /**
35
+ * @param grouper - Grouper id.
36
+ * @returns Grouped containers.
37
+ */
38
+ get_container_by_grouper_index(grouper) {
39
+ const grouped = this.all_grouped_containers.get(grouper);
40
+ if (!grouped) {
41
+ throw new Error(`Grouper ${grouper} not found`);
42
+ }
43
+ return grouped;
44
+ }
45
+ }
@@ -0,0 +1,26 @@
1
+ import type { Transport } from '../transport.js';
2
+ import { AxleRecord } from '../axle_record.js';
3
+ /** Splits bitrem shared axle 3 into two axles (DRAGON-98). */
4
+ export declare class BitremAxleSplitter {
5
+ private readonly transport;
6
+ readonly new_axle_3: AxleRecord;
7
+ readonly new_axle_4: AxleRecord;
8
+ readonly new_axle_5: AxleRecord;
9
+ private readonly chassi;
10
+ /**
11
+ * @param transport - Parsed transport.
12
+ */
13
+ constructor(transport: Transport);
14
+ /**
15
+ * @returns Five axle wire rows after split.
16
+ */
17
+ generate_splitted_axles_data(): Record<string, unknown>[];
18
+ calculate_first_proportion(): number;
19
+ calculate_second_proportion(): number;
20
+ private generate_new_weight_attributes;
21
+ private generate_new_axle_distances;
22
+ private generate_new_axle_container_sequences;
23
+ private generate_merged_axle_connection;
24
+ private distance_from_axle_3_to_pin_2;
25
+ }
26
+ //# sourceMappingURL=bitrem_axle_splitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitrem_axle_splitter.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/transports/tare/bitrem_axle_splitter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C,8DAA8D;AAC9D,qBAAa,kBAAkB;IAUf,OAAO,CAAC,QAAQ,CAAC,SAAS;IARtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAE/B;;OAEG;gBAC0B,SAAS,EAAE,SAAS;IAQjD;;OAEG;IACH,4BAA4B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAezD,0BAA0B,IAAI,MAAM;IAOpC,2BAA2B,IAAI,MAAM;IAQrC,OAAO,CAAC,8BAA8B;IActC,OAAO,CAAC,2BAA2B;IAQnC,OAAO,CAAC,qCAAqC;IAS7C,OAAO,CAAC,+BAA+B;IAKvC,OAAO,CAAC,6BAA6B;CAMxC"}
@@ -0,0 +1,84 @@
1
+ import { CHASSI_REFERENCE } from '../../../contracts/chassi_reference.js';
2
+ import { Chassi } from '../chassi.js';
3
+ import { MergedContainers } from '../merged_containers.js';
4
+ import { AxleRecord } from '../axle_record.js';
5
+ import { apply_bitrem_axle_split, compute_bitrem_axle_split } from './bitrem_axle_weight_split.js';
6
+ /** Splits bitrem shared axle 3 into two axles (DRAGON-98). */
7
+ export class BitremAxleSplitter {
8
+ transport;
9
+ new_axle_3;
10
+ new_axle_4;
11
+ new_axle_5;
12
+ chassi;
13
+ /**
14
+ * @param transport - Parsed transport.
15
+ */
16
+ constructor(transport) {
17
+ this.transport = transport;
18
+ this.chassi = new Chassi(transport);
19
+ this.new_axle_3 = clone_axle(transport.axle_manager.get_axle(2));
20
+ this.new_axle_4 = clone_axle(transport.axle_manager.get_axle(2));
21
+ this.new_axle_5 = clone_axle(transport.axle_manager.get_axle(3));
22
+ }
23
+ /**
24
+ * @returns Five axle wire rows after split.
25
+ */
26
+ generate_splitted_axles_data() {
27
+ this.generate_new_weight_attributes();
28
+ this.generate_new_axle_distances();
29
+ this.generate_new_axle_container_sequences();
30
+ this.generate_merged_axle_connection();
31
+ return [
32
+ this.transport.axle_manager.get_axle(0).to_wire(),
33
+ this.transport.axle_manager.get_axle(1).to_wire(),
34
+ this.new_axle_3.to_wire(),
35
+ this.new_axle_4.to_wire(),
36
+ this.new_axle_5.to_wire()
37
+ ];
38
+ }
39
+ calculate_first_proportion() {
40
+ const a = this.chassi.get_axle_position(1, CHASSI_REFERENCE.GROUPER_1);
41
+ const b = this.chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1) - a;
42
+ return a / b;
43
+ }
44
+ calculate_second_proportion() {
45
+ const axle_3 = this.chassi.get_axle_position(2, CHASSI_REFERENCE.TRACTOR);
46
+ const axle_4 = this.chassi.get_axle_position(3, CHASSI_REFERENCE.TRACTOR);
47
+ const end = this.chassi.get_grouper_end(2, CHASSI_REFERENCE.TRACTOR);
48
+ return (end - axle_4) / (axle_4 - axle_3);
49
+ }
50
+ generate_new_weight_attributes() {
51
+ const old = this.transport.axle_manager.get_axle(2);
52
+ const split = compute_bitrem_axle_split(this.calculate_first_proportion(), this.calculate_second_proportion());
53
+ apply_bitrem_axle_split({
54
+ old,
55
+ axle_3: this.new_axle_3,
56
+ axle_4: this.new_axle_4,
57
+ split
58
+ });
59
+ }
60
+ generate_new_axle_distances() {
61
+ const old_4 = this.transport.axle_manager.get_axle(3);
62
+ this.new_axle_4.distance_from_previous_axle = this.distance_from_axle_3_to_pin_2();
63
+ this.new_axle_5.distance_from_previous_axle = old_4.distance_from_previous_axle
64
+ - this.new_axle_4.distance_from_previous_axle;
65
+ }
66
+ generate_new_axle_container_sequences() {
67
+ const merged = new MergedContainers(this.transport);
68
+ this.new_axle_3.sequence_index = merged.get_container_by_grouper_index(1)
69
+ .list_containers_sequence_indexes()[0];
70
+ this.new_axle_4.sequence_index = merged.get_container_by_grouper_index(2)
71
+ .list_containers_sequence_indexes()[0];
72
+ }
73
+ generate_merged_axle_connection() {
74
+ this.new_axle_4.is_connected_to = 2;
75
+ }
76
+ distance_from_axle_3_to_pin_2() {
77
+ const axle_3 = this.chassi.get_axle_position(2, CHASSI_REFERENCE.TRACTOR);
78
+ const pin_2 = this.chassi.get_pin_position(1, CHASSI_REFERENCE.TRACTOR);
79
+ return pin_2 - axle_3;
80
+ }
81
+ }
82
+ function clone_axle(source) {
83
+ return new AxleRecord(source.to_wire());
84
+ }