@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,72 @@
1
+ import { VEHICLE_TYPE } from '../../contracts/vehicle_type.js';
2
+ import { Transport } from '../transports/transport.js';
3
+ import { BitremModel } from './bitrem_model.js';
4
+ import { RodotremModel } from './rodotrem_model.js';
5
+ import { VanderleiaModel } from './vanderleia_model.js';
6
+ import { SimpleTruckModel } from './simple_truck_model.js';
7
+ import { SemiReboqueModel } from './semi_reboque_model.js';
8
+ import { MultiContainerAllocatedItems } from '../items/multi_container_allocated_items.js';
9
+ import { PercentageOnAxlesCalculator } from './percentage_on_axles_calculator.js';
10
+ /**
11
+ * Dispatches to vehicle-specific axle weight models.
12
+ */
13
+ export class AxleWeightModel {
14
+ model;
15
+ transport;
16
+ /**
17
+ * @param transport_or_data - Parsed transport or raw wire dict.
18
+ */
19
+ constructor(transport_or_data) {
20
+ this.transport = transport_or_data instanceof Transport
21
+ ? transport_or_data
22
+ : new Transport(transport_or_data);
23
+ this.model = select_vehicle_model(this.transport);
24
+ }
25
+ /**
26
+ * @param center_of_mass_by_grouper - Precomputed CM per grouper.
27
+ * @returns Chassis force result.
28
+ */
29
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
30
+ return this.model.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
31
+ }
32
+ /**
33
+ * @param allocated_by_sequence - Items per container sequence index.
34
+ * @returns Loaded cargo per axle.
35
+ */
36
+ calculate_weight_on_axles(allocated_by_sequence) {
37
+ const multi = new MultiContainerAllocatedItems(allocated_by_sequence);
38
+ return this.model.calculate_weight_on_axles(multi);
39
+ }
40
+ /**
41
+ * @param allocated_by_sequence - Items per container sequence index.
42
+ * @returns Utilization percentage per axle.
43
+ */
44
+ calculate_percentages_on_axles(allocated_by_sequence) {
45
+ const weights = this.calculate_weight_on_axles(allocated_by_sequence);
46
+ return new PercentageOnAxlesCalculator(this.transport)
47
+ .weight_on_axles_to_percentages(weights);
48
+ }
49
+ }
50
+ /**
51
+ * @param transport - Parsed transport.
52
+ * @returns Vehicle model implementation.
53
+ */
54
+ function select_vehicle_model(transport) {
55
+ const type = transport.vehicle_type;
56
+ if (type === VEHICLE_TYPE.SEMIREBOQUE || type === VEHICLE_TYPE.REBAIXADO) {
57
+ return new SemiReboqueModel(transport);
58
+ }
59
+ if (type === VEHICLE_TYPE.BITREM) {
60
+ return new BitremModel(transport);
61
+ }
62
+ if (type === VEHICLE_TYPE.RODOTREM) {
63
+ return new RodotremModel(transport);
64
+ }
65
+ if (type === VEHICLE_TYPE.VANDERLEIA) {
66
+ return new VanderleiaModel(transport);
67
+ }
68
+ if (type === VEHICLE_TYPE.CAMINHAO || type === VEHICLE_TYPE.VUC) {
69
+ return new SimpleTruckModel(transport);
70
+ }
71
+ throw new Error(`Unsupported vehicle type: ${type}`);
72
+ }
@@ -0,0 +1,21 @@
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
+ import { SimpleTruckBase } from './simple_truck_base.js';
5
+ /**
6
+ * Bitruck caminhão: equivalent 2-axle truck + front axle pair split.
7
+ */
8
+ export declare class BiTruckModel {
9
+ private readonly chassi;
10
+ readonly equivalent_truck: SimpleTruckBase;
11
+ /**
12
+ * @param transport - Parsed transport.
13
+ */
14
+ constructor(transport: Transport);
15
+ /**
16
+ * @param center_of_mass_by_grouper - CM per grouper.
17
+ * @returns Three-axle forces.
18
+ */
19
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
20
+ }
21
+ //# sourceMappingURL=bi_truck_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bi_truck_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/bi_truck_model.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;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD;;GAEG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,eAAe,CAAA;IAE1C;;OAEG;gBACS,SAAS,EAAE,SAAS;IAOhC;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAclB"}
@@ -0,0 +1,60 @@
1
+ import { Chassi } from '../transports/chassi.js';
2
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
3
+ import { ChassiForces } from './chassi_forces.js';
4
+ import { SimpleTruckBase } from './simple_truck_base.js';
5
+ import { solve_linear_system } from '../../math/gaussian_elimination.js';
6
+ /**
7
+ * Bitruck caminhão: equivalent 2-axle truck + front axle pair split.
8
+ */
9
+ export class BiTruckModel {
10
+ chassi;
11
+ equivalent_truck;
12
+ /**
13
+ * @param transport - Parsed transport.
14
+ */
15
+ constructor(transport) {
16
+ this.chassi = new Chassi(transport);
17
+ this.equivalent_truck = new SimpleTruckBase(transport);
18
+ this.equivalent_truck.set_axles_positions(get_equivalent_positions(this.chassi, transport));
19
+ }
20
+ /**
21
+ * @param center_of_mass_by_grouper - CM per grouper.
22
+ * @returns Three-axle forces.
23
+ */
24
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
25
+ const equivalent = this.equivalent_truck
26
+ .calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
27
+ const equivalent_z = this.equivalent_truck.axles_positions[0];
28
+ const independent = [
29
+ equivalent.get_force_on_axle(0),
30
+ equivalent.get_force_on_axle(0) * equivalent_z
31
+ ];
32
+ const front = solve_linear_system(generate_front_matrix(this.chassi), independent);
33
+ const forces = new ChassiForces();
34
+ forces.add_axle_forces([front[0], front[1], equivalent.get_force_on_axle(1)]);
35
+ return forces;
36
+ }
37
+ }
38
+ /**
39
+ * @param chassi - Chassis geometry.
40
+ * @returns 2×2 front axle matrix.
41
+ */
42
+ function generate_front_matrix(chassi) {
43
+ const axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.GROUPER_1);
44
+ const axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.GROUPER_1);
45
+ return [[1, 1], [axle_1, axle_2]];
46
+ }
47
+ /**
48
+ * @param chassi - Chassis geometry.
49
+ * @param transport - Parsed transport.
50
+ * @returns Equivalent two-axle positions.
51
+ */
52
+ function get_equivalent_positions(chassi, transport) {
53
+ const axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.GROUPER_1);
54
+ const axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.GROUPER_1);
55
+ const axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
56
+ const cap_1 = transport.axle_manager.get_axle(0).max_supported_weight;
57
+ const cap_2 = transport.axle_manager.get_axle(1).max_supported_weight;
58
+ const front_equivalent = (axle_1 * cap_1 + axle_2 * cap_2) / (cap_1 + cap_2);
59
+ return [front_equivalent, axle_3];
60
+ }
@@ -0,0 +1,21 @@
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
+ import { SemiReboqueBase } from './semi_reboque_base.js';
5
+ /**
6
+ * Bitruck tractor + semi-trailer variant.
7
+ */
8
+ export declare class BiTruckTractorSemiTrailerModel {
9
+ private readonly chassi;
10
+ readonly equivalent_semi_trailer: SemiReboqueBase;
11
+ /**
12
+ * @param transport - Parsed transport.
13
+ */
14
+ constructor(transport: Transport);
15
+ /**
16
+ * @param center_of_mass_by_grouper - CM per grouper.
17
+ * @returns Four-axle + pin forces.
18
+ */
19
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
20
+ }
21
+ //# sourceMappingURL=bi_truck_tractor_semi_trailer_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bi_truck_tractor_semi_trailer_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/bi_truck_tractor_semi_trailer_model.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;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD;;GAEG;AACH,qBAAa,8BAA8B;IAEvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,QAAQ,CAAC,uBAAuB,EAAE,eAAe,CAAA;IAEjD;;OAEG;gBACS,SAAS,EAAE,SAAS;IAQhC;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;CAoBlB"}
@@ -0,0 +1,69 @@
1
+ import { Chassi } from '../transports/chassi.js';
2
+ import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
3
+ import { ChassiForces } from './chassi_forces.js';
4
+ import { SemiReboqueBase } from './semi_reboque_base.js';
5
+ import { solve_linear_system } from '../../math/gaussian_elimination.js';
6
+ /**
7
+ * Bitruck tractor + semi-trailer variant.
8
+ */
9
+ export class BiTruckTractorSemiTrailerModel {
10
+ chassi;
11
+ equivalent_semi_trailer;
12
+ /**
13
+ * @param transport - Parsed transport.
14
+ */
15
+ constructor(transport) {
16
+ this.chassi = new Chassi(transport);
17
+ this.equivalent_semi_trailer = new SemiReboqueBase(transport);
18
+ this.equivalent_semi_trailer.set_linear_system_matrix(get_equivalent_positions(this.chassi, transport));
19
+ }
20
+ /**
21
+ * @param center_of_mass_by_grouper - CM per grouper.
22
+ * @returns Four-axle + pin forces.
23
+ */
24
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
25
+ const equivalent = this.equivalent_semi_trailer
26
+ .calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
27
+ const equivalent_z = this.equivalent_semi_trailer.chassi_positions[1];
28
+ const independent = [
29
+ equivalent.get_force_on_axle(0),
30
+ equivalent.get_force_on_axle(0) * equivalent_z
31
+ ];
32
+ const front = solve_linear_system(generate_tractor_front_matrix(this.chassi), independent);
33
+ const forces = new ChassiForces();
34
+ forces.add_axle_forces([
35
+ front[0],
36
+ front[1],
37
+ equivalent.get_force_on_axle(1),
38
+ equivalent.get_force_on_axle(2)
39
+ ]);
40
+ forces.add_pin_forces([equivalent.get_force_on_pin(0)]);
41
+ return forces;
42
+ }
43
+ }
44
+ /**
45
+ * @param chassi - Chassis geometry.
46
+ * @returns 2×2 tractor front matrix.
47
+ */
48
+ function generate_tractor_front_matrix(chassi) {
49
+ const axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
50
+ const axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
51
+ return [[1, 1], [axle_1, axle_2]];
52
+ }
53
+ /**
54
+ * @param chassi - Chassis geometry.
55
+ * @param transport - Parsed transport.
56
+ * @returns Equivalent semi chassis positions.
57
+ */
58
+ function get_equivalent_positions(chassi, transport) {
59
+ const tractor_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR);
60
+ const tractor_axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
61
+ const tractor_axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
62
+ const tractor_axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.TRACTOR);
63
+ const semi_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1);
64
+ const semi_axle_4 = chassi.get_axle_position(3, CHASSI_REFERENCE.GROUPER_1);
65
+ const cap_1 = transport.axle_manager.get_axle(0).max_supported_weight;
66
+ const cap_2 = transport.axle_manager.get_axle(1).max_supported_weight;
67
+ const tractor_equivalent = (tractor_axle_1 * cap_1 + tractor_axle_2 * cap_2) / (cap_1 + cap_2);
68
+ return [tractor_pin, tractor_equivalent, tractor_axle_3, semi_pin, semi_axle_4];
69
+ }
@@ -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
+ * Bitrem interlink + semi static equilibrium (6×6 system).
8
+ */
9
+ export declare class BitremModel {
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 by container sequence.
19
+ * @returns Loaded weight per axle.
20
+ */
21
+ calculate_weight_on_axles(multi_items: MultiContainerAllocatedItems): number[];
22
+ /**
23
+ * @param multi_items - Allocated items.
24
+ * @returns Chassis forces before rebalance split on axles 3–4.
25
+ */
26
+ calculate_chassi_forces(multi_items: MultiContainerAllocatedItems): ChassiForces;
27
+ /**
28
+ * @param center_of_mass_by_grouper - CM for groupers 1 and 2.
29
+ * @returns Combined chassis forces.
30
+ */
31
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
32
+ }
33
+ //# sourceMappingURL=bitrem_model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitrem_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/bitrem_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;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAGjD;;GAEG;AACH,qBAAa,WAAW;IAQR,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;CAqBlB"}
@@ -0,0 +1,123 @@
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 { ChassiForces } from './chassi_forces.js';
5
+ import { solve_linear_system } from '../../math/gaussian_elimination.js';
6
+ /**
7
+ * Bitrem interlink + semi static equilibrium (6×6 system).
8
+ */
9
+ export class BitremModel {
10
+ transport;
11
+ chassi;
12
+ matrix;
13
+ /**
14
+ * @param transport - Parsed transport.
15
+ */
16
+ constructor(transport) {
17
+ this.transport = transport;
18
+ this.chassi = new Chassi(transport);
19
+ this.matrix = generate_bitrem_matrix(this.chassi);
20
+ }
21
+ /**
22
+ * @param multi_items - Allocated items by container sequence.
23
+ * @returns Loaded weight per axle.
24
+ */
25
+ calculate_weight_on_axles(multi_items) {
26
+ const forces = this.calculate_chassi_forces(multi_items);
27
+ return forces.list_axles_indexes().map((index) => forces.get_force_on_axle(index));
28
+ }
29
+ /**
30
+ * @param multi_items - Allocated items.
31
+ * @returns Chassis forces before rebalance split on axles 3–4.
32
+ */
33
+ calculate_chassi_forces(multi_items) {
34
+ 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));
35
+ }
36
+ /**
37
+ * @param center_of_mass_by_grouper - CM for groupers 1 and 2.
38
+ * @returns Combined chassis forces.
39
+ */
40
+ calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper) {
41
+ const interlink = center_of_mass_by_grouper[1];
42
+ const semi = center_of_mass_by_grouper[2];
43
+ const solution_interlink = solve_interlink_system(this.matrix, interlink);
44
+ const solution_semi = solve_semi_system(this.matrix, semi);
45
+ const forces = new ChassiForces();
46
+ forces.add_pin_forces([
47
+ solution_interlink[3] + solution_semi[3],
48
+ solution_interlink[1] + solution_semi[1]
49
+ ]);
50
+ const loaded = [
51
+ solution_interlink[5] + solution_semi[5],
52
+ solution_interlink[4] + solution_semi[4],
53
+ solution_interlink[2],
54
+ solution_semi[2],
55
+ solution_interlink[0] + solution_semi[0]
56
+ ];
57
+ forces.add_axle_forces(linked_axle_weight_rebalance(this.transport, loaded));
58
+ return forces;
59
+ }
60
+ }
61
+ /**
62
+ * @param chassi - Chassis geometry.
63
+ * @returns 6×6 matrix coefficients.
64
+ */
65
+ function generate_bitrem_matrix(chassi) {
66
+ const tractor_pin = chassi.get_pin_position(0, CHASSI_REFERENCE.TRACTOR);
67
+ const tractor_axle_1 = chassi.get_axle_position(0, CHASSI_REFERENCE.TRACTOR);
68
+ const tractor_axle_2 = chassi.get_axle_position(1, CHASSI_REFERENCE.TRACTOR);
69
+ const interlink_pin_1 = chassi.get_pin_position(0, CHASSI_REFERENCE.GROUPER_1);
70
+ const interlink_pin_2 = chassi.get_pin_position(1, CHASSI_REFERENCE.GROUPER_1);
71
+ const interlink_axle_3 = chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1);
72
+ const semi_pin_2 = chassi.get_pin_position(1, CHASSI_REFERENCE.GROUPER_2);
73
+ const semi_axle_4 = chassi.get_axle_position(4, CHASSI_REFERENCE.GROUPER_2);
74
+ return [
75
+ [1, 1, 0, 0, 0, 0],
76
+ [semi_axle_4, semi_pin_2, 0, 0, 0, 0],
77
+ [0, -1, 1, 1, 0, 0],
78
+ [0, -interlink_pin_2, interlink_axle_3, interlink_pin_1, 0, 0],
79
+ [0, 0, 0, -1, 1, 1],
80
+ [0, 0, 0, -tractor_pin, tractor_axle_2, tractor_axle_1]
81
+ ];
82
+ }
83
+ /**
84
+ * @param matrix - System matrix.
85
+ * @param center_of_mass - Interlink load CM.
86
+ * @returns Solution vector.
87
+ */
88
+ function solve_interlink_system(matrix, center_of_mass) {
89
+ const independent = [0, 0, center_of_mass.mass, center_of_mass.mass * center_of_mass.z, 0, 0];
90
+ return solve_linear_system(matrix, independent);
91
+ }
92
+ /**
93
+ * @param matrix - System matrix.
94
+ * @param center_of_mass - Semi load CM.
95
+ * @returns Solution vector.
96
+ */
97
+ function solve_semi_system(matrix, center_of_mass) {
98
+ const independent = [
99
+ center_of_mass.mass,
100
+ center_of_mass.mass * center_of_mass.z,
101
+ 0,
102
+ 0,
103
+ 0,
104
+ 0
105
+ ];
106
+ return solve_linear_system(matrix, independent);
107
+ }
108
+ /**
109
+ * @param transport - Parsed transport.
110
+ * @param loaded_weights - Raw axle loads before rebalance.
111
+ * @returns Rebalanced axle 3–4 loads.
112
+ */
113
+ function linked_axle_weight_rebalance(transport, loaded_weights) {
114
+ const first = transport.axle_manager.get_axle(2);
115
+ const second = transport.axle_manager.get_axle(3);
116
+ const first_cap = first.max_supported_weight - first.tare;
117
+ const second_cap = second.max_supported_weight - second.tare;
118
+ const total_cap = first_cap + second_cap;
119
+ const total_load = loaded_weights[2] + loaded_weights[3];
120
+ loaded_weights[2] = (first_cap / total_cap) * total_load;
121
+ loaded_weights[3] = (second_cap / total_cap) * total_load;
122
+ return loaded_weights;
123
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Pin and axle reaction forces from static equilibrium solution.
3
+ */
4
+ export declare class ChassiForces {
5
+ private pin_forces;
6
+ private axle_forces;
7
+ /**
8
+ * @param pin_forces_list - Pin reaction forces.
9
+ */
10
+ add_pin_forces(pin_forces_list: number[]): void;
11
+ /**
12
+ * @param axle_forces_list - Axle reaction forces (cargo load per axle).
13
+ */
14
+ add_axle_forces(axle_forces_list: number[]): void;
15
+ /**
16
+ * @param axle_index - Zero-based axle index.
17
+ * @returns Force on axle.
18
+ */
19
+ get_force_on_axle(axle_index: number): number;
20
+ /**
21
+ * @param pin_index - Zero-based pin index.
22
+ * @returns Force on pin.
23
+ */
24
+ get_force_on_pin(pin_index: number): number;
25
+ /**
26
+ * @returns Axle index list.
27
+ */
28
+ list_axles_indexes(): number[];
29
+ }
30
+ //# sourceMappingURL=chassi_forces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chassi_forces.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/chassi_forces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,WAAW,CAAe;IAElC;;OAEG;IACH,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI;IAK/C;;OAEG;IACH,eAAe,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI;IAKjD;;;OAGG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK7C;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAK3C;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;CAIjC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Pin and axle reaction forces from static equilibrium solution.
3
+ */
4
+ export class ChassiForces {
5
+ pin_forces = [];
6
+ axle_forces = [];
7
+ /**
8
+ * @param pin_forces_list - Pin reaction forces.
9
+ */
10
+ add_pin_forces(pin_forces_list) {
11
+ this.pin_forces = pin_forces_list.map((value) => Number(value));
12
+ }
13
+ /**
14
+ * @param axle_forces_list - Axle reaction forces (cargo load per axle).
15
+ */
16
+ add_axle_forces(axle_forces_list) {
17
+ this.axle_forces = axle_forces_list.map((value) => Number(value));
18
+ }
19
+ /**
20
+ * @param axle_index - Zero-based axle index.
21
+ * @returns Force on axle.
22
+ */
23
+ get_force_on_axle(axle_index) {
24
+ return this.axle_forces[axle_index];
25
+ }
26
+ /**
27
+ * @param pin_index - Zero-based pin index.
28
+ * @returns Force on pin.
29
+ */
30
+ get_force_on_pin(pin_index) {
31
+ return this.pin_forces[pin_index];
32
+ }
33
+ /**
34
+ * @returns Axle index list.
35
+ */
36
+ list_axles_indexes() {
37
+ return this.axle_forces.map((_force, index) => index);
38
+ }
39
+ }
@@ -0,0 +1,28 @@
1
+ import type { AllocatedItemManager } from '../../items/allocated_item_manager.js';
2
+ /**
3
+ * Cantilever beam deflection curve (DRAGON-76).
4
+ */
5
+ export declare class BeamDeflection {
6
+ private readonly allocated_item_manager;
7
+ private readonly support_manager;
8
+ private readonly constant_1;
9
+ private readonly constant_2;
10
+ private readonly external_forces;
11
+ /**
12
+ * @param support_data - Support positions and forces.
13
+ * @param allocated_item_manager - Load items.
14
+ * @param external_forces - Optional external point loads.
15
+ */
16
+ constructor(support_data: [number, number][], allocated_item_manager: AllocatedItemManager, external_forces?: [number, number][]);
17
+ /**
18
+ * @param beam_length - Container beam length.
19
+ * @param number_of_curve_samples - Sample count.
20
+ * @returns Deflection values along beam.
21
+ */
22
+ generate_curve_values(beam_length: number, number_of_curve_samples: number): number[];
23
+ private evaluate_at_x;
24
+ private item_cubic_contribution;
25
+ private support_cubic_contribution;
26
+ private external_cubic_contribution;
27
+ }
28
+ //# sourceMappingURL=beam_deflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beam_deflection.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/models/deflection/beam_deflection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAIjF;;GAEG;AACH,qBAAa,cAAc;IAcnB,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAZ3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAEpD;;;;OAIG;gBAEC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EACf,sBAAsB,EAAE,oBAAoB,EAC7D,eAAe,GAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAO;IAa5C;;;;OAIG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,GAAG,MAAM,EAAE;IAYrF,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,2BAA2B;CAatC"}
@@ -0,0 +1,78 @@
1
+ import { DeflectionSupportManager } from './deflection_support_manager.js';
2
+ import { IntegrationConstantCalculator } from './integration_constant_calculator.js';
3
+ /**
4
+ * Cantilever beam deflection curve (DRAGON-76).
5
+ */
6
+ export class BeamDeflection {
7
+ allocated_item_manager;
8
+ support_manager;
9
+ constant_1;
10
+ constant_2;
11
+ external_forces;
12
+ /**
13
+ * @param support_data - Support positions and forces.
14
+ * @param allocated_item_manager - Load items.
15
+ * @param external_forces - Optional external point loads.
16
+ */
17
+ constructor(support_data, allocated_item_manager, external_forces = []) {
18
+ this.allocated_item_manager = allocated_item_manager;
19
+ this.support_manager = new DeflectionSupportManager(support_data);
20
+ this.external_forces = this.support_manager
21
+ .add_structural_offset_to_external_forces(external_forces);
22
+ const integration = new IntegrationConstantCalculator(this.support_manager, this.support_manager.structural_offset);
23
+ [this.constant_1, this.constant_2] = integration.calculate_integration_constants(allocated_item_manager);
24
+ }
25
+ /**
26
+ * @param beam_length - Container beam length.
27
+ * @param number_of_curve_samples - Sample count.
28
+ * @returns Deflection values along beam.
29
+ */
30
+ generate_curve_values(beam_length, number_of_curve_samples) {
31
+ const length = beam_length + this.support_manager.structural_offset;
32
+ const y_values = [];
33
+ for (let index = 0; index < number_of_curve_samples; index++) {
34
+ const x = (length * index) / (number_of_curve_samples - 1);
35
+ y_values.push(this.evaluate_at_x(x));
36
+ }
37
+ return y_values;
38
+ }
39
+ evaluate_at_x(x) {
40
+ let value = this.constant_1 * x + this.constant_2;
41
+ value += this.item_cubic_contribution(x);
42
+ value += this.support_cubic_contribution(x);
43
+ value += this.external_cubic_contribution(x);
44
+ return value;
45
+ }
46
+ item_cubic_contribution(x) {
47
+ let value = 0;
48
+ for (const item_index of this.allocated_item_manager.list_item_indexes()) {
49
+ const item = this.allocated_item_manager.get_item(item_index);
50
+ const position = item.zi + item.length / 2 + this.support_manager.structural_offset;
51
+ const displacement = x - position;
52
+ if (displacement > 0) {
53
+ value += (-item.weight / 6) * displacement ** 3;
54
+ }
55
+ }
56
+ return value;
57
+ }
58
+ support_cubic_contribution(x) {
59
+ let value = 0;
60
+ for (const support_index of this.support_manager.list_support_indexes()) {
61
+ const displacement = x - this.support_manager.get_position(support_index);
62
+ if (displacement > 0) {
63
+ value += (this.support_manager.get_force(support_index) / 6) * displacement ** 3;
64
+ }
65
+ }
66
+ return value;
67
+ }
68
+ external_cubic_contribution(x) {
69
+ let value = 0;
70
+ for (const [position, force] of this.external_forces) {
71
+ const displacement = x - position;
72
+ if (displacement > 0) {
73
+ value += (force / 6) * displacement ** 3;
74
+ }
75
+ }
76
+ return value;
77
+ }
78
+ }
@@ -0,0 +1,22 @@
1
+ import type { BitremModel } from '../bitrem_model.js';
2
+ import type { MultiContainerAllocatedItems } from '../../items/multi_container_allocated_items.js';
3
+ /**
4
+ * Bitrem interlink + semi beam deflection (sum of two indicators).
5
+ */
6
+ export declare class BitremDeflection {
7
+ private readonly bitrem_model;
8
+ private readonly number_of_curve_samples;
9
+ /**
10
+ * @param bitrem_model - Axle weight model.
11
+ * @param number_of_curve_samples - Curve sample count.
12
+ */
13
+ constructor(bitrem_model: BitremModel, number_of_curve_samples: number);
14
+ /**
15
+ * @param multi_items - Allocated items.
16
+ * @returns Combined deflection indicator.
17
+ */
18
+ calculate_deflection(multi_items: MultiContainerAllocatedItems): number;
19
+ private interlink_curve;
20
+ private semitrailer_curve;
21
+ }
22
+ //# sourceMappingURL=bitrem_deflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitrem_deflection.d.ts","sourceRoot":"","sources":["../../../../../src/core/physics/models/deflection/bitrem_deflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gDAAgD,CAAA;AAIlG;;GAEG;AACH,qBAAa,gBAAgB;IAOrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IAN5C;;;OAGG;gBAEkB,YAAY,EAAE,WAAW,EACzB,uBAAuB,EAAE,MAAM;IAIpD;;;OAGG;IACH,oBAAoB,CAAC,WAAW,EAAE,4BAA4B,GAAG,MAAM;IASvE,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,iBAAiB;CAc5B"}