@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.
- package/.cursor/ai_changelog/INDEX.md +13 -0
- package/.cursor/ai_changelog/_TEMPLATE.md +55 -0
- package/.cursor/rules/code-standards.mdc +103 -0
- package/.cursor/rules/knowledge-base.mdc +14 -0
- package/.cursor/rules/planning-standards.mdc +55 -0
- package/.cursor/skills/document-feature-knowledge/SKILL.md +51 -0
- package/README.md +49 -0
- package/bitbucket-pipelines.yml +81 -0
- package/build/core/contracts/chassi_reference.d.ts +7 -0
- package/build/core/contracts/chassi_reference.d.ts.map +1 -0
- package/build/core/contracts/chassi_reference.js +5 -0
- package/build/core/contracts/ms_faixas_contract.d.ts +13 -0
- package/build/core/contracts/ms_faixas_contract.d.ts.map +1 -0
- package/build/core/contracts/ms_faixas_contract.js +89 -0
- package/build/core/contracts/rotation_enum.d.ts +11 -0
- package/build/core/contracts/rotation_enum.d.ts.map +1 -0
- package/build/core/contracts/rotation_enum.js +9 -0
- package/build/core/contracts/suspension_type.d.ts +5 -0
- package/build/core/contracts/suspension_type.d.ts.map +1 -0
- package/build/core/contracts/suspension_type.js +4 -0
- package/build/core/contracts/transport_record.d.ts +5 -0
- package/build/core/contracts/transport_record.d.ts.map +1 -0
- package/build/core/contracts/transport_record.js +1 -0
- package/build/core/contracts/vehicle_type.d.ts +12 -0
- package/build/core/contracts/vehicle_type.d.ts.map +1 -0
- package/build/core/contracts/vehicle_type.js +10 -0
- package/build/core/contracts/vehicle_version.d.ts +8 -0
- package/build/core/contracts/vehicle_version.d.ts.map +1 -0
- package/build/core/contracts/vehicle_version.js +7 -0
- package/build/core/contracts/wire_flags.d.ts +27 -0
- package/build/core/contracts/wire_flags.d.ts.map +1 -0
- package/build/core/contracts/wire_flags.js +26 -0
- package/build/core/math/float_tools.d.ts +7 -0
- package/build/core/math/float_tools.d.ts.map +1 -0
- package/build/core/math/float_tools.js +14 -0
- package/build/core/math/gaussian_elimination.d.ts +8 -0
- package/build/core/math/gaussian_elimination.d.ts.map +1 -0
- package/build/core/math/gaussian_elimination.js +85 -0
- package/build/core/orchestration/axle_weight_physics.d.ts +7 -0
- package/build/core/orchestration/axle_weight_physics.d.ts.map +1 -0
- package/build/core/orchestration/axle_weight_physics.js +27 -0
- package/build/core/orchestration/collision_checker.d.ts +6 -0
- package/build/core/orchestration/collision_checker.d.ts.map +1 -0
- package/build/core/orchestration/collision_checker.js +67 -0
- package/build/core/orchestration/connector_payload_builder.d.ts +11 -0
- package/build/core/orchestration/connector_payload_builder.d.ts.map +1 -0
- package/build/core/orchestration/connector_payload_builder.js +67 -0
- package/build/core/orchestration/java_mass_center.d.ts +9 -0
- package/build/core/orchestration/java_mass_center.d.ts.map +1 -0
- package/build/core/orchestration/java_mass_center.js +79 -0
- package/build/core/orchestration/output_builder.d.ts +11 -0
- package/build/core/orchestration/output_builder.d.ts.map +1 -0
- package/build/core/orchestration/output_builder.js +15 -0
- package/build/core/orchestration/request_schema.d.ts +65 -0
- package/build/core/orchestration/request_schema.d.ts.map +1 -0
- package/build/core/orchestration/request_schema.js +20 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts +7 -0
- package/build/core/orchestration/weight_by_axis_task.d.ts.map +1 -0
- package/build/core/orchestration/weight_by_axis_task.js +105 -0
- package/build/core/physics/items/allocated_item.d.ts +22 -0
- package/build/core/physics/items/allocated_item.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item.js +29 -0
- package/build/core/physics/items/allocated_item_manager.d.ts +31 -0
- package/build/core/physics/items/allocated_item_manager.d.ts.map +1 -0
- package/build/core/physics/items/allocated_item_manager.js +38 -0
- package/build/core/physics/items/center_of_mass.d.ts +14 -0
- package/build/core/physics/items/center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/center_of_mass.js +24 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts +19 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.d.ts.map +1 -0
- package/build/core/physics/items/compute_grouper_center_of_mass.js +28 -0
- package/build/core/physics/items/item_templates.d.ts +32 -0
- package/build/core/physics/items/item_templates.d.ts.map +1 -0
- package/build/core/physics/items/item_templates.js +53 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts +37 -0
- package/build/core/physics/items/multi_container_allocated_items.d.ts.map +1 -0
- package/build/core/physics/items/multi_container_allocated_items.js +91 -0
- package/build/core/physics/items/rotation_transforms.d.ts +8 -0
- package/build/core/physics/items/rotation_transforms.d.ts.map +1 -0
- package/build/core/physics/items/rotation_transforms.js +21 -0
- package/build/core/physics/models/axle_weight_model.d.ts +32 -0
- package/build/core/physics/models/axle_weight_model.d.ts.map +1 -0
- package/build/core/physics/models/axle_weight_model.js +72 -0
- package/build/core/physics/models/bi_truck_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_model.js +60 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/bi_truck_tractor_semi_trailer_model.js +69 -0
- package/build/core/physics/models/bitrem_model.d.ts +33 -0
- package/build/core/physics/models/bitrem_model.d.ts.map +1 -0
- package/build/core/physics/models/bitrem_model.js +123 -0
- package/build/core/physics/models/chassi_forces.d.ts +30 -0
- package/build/core/physics/models/chassi_forces.d.ts.map +1 -0
- package/build/core/physics/models/chassi_forces.js +39 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts +28 -0
- package/build/core/physics/models/deflection/beam_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/beam_deflection.js +78 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/bitrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/bitrem_deflection.js +54 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts +12 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.d.ts.map +1 -0
- package/build/core/physics/models/deflection/create_deflection_delegate.js +32 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts +19 -0
- package/build/core/physics/models/deflection/deflection_model.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_model.js +23 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts +21 -0
- package/build/core/physics/models/deflection/deflection_support_manager.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_support_manager.js +40 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts +6 -0
- package/build/core/physics/models/deflection/deflection_tools.d.ts.map +1 -0
- package/build/core/physics/models/deflection/deflection_tools.js +10 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts +22 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.d.ts.map +1 -0
- package/build/core/physics/models/deflection/integration_constant_calculator.js +48 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts +22 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/rodotrem_deflection.js +47 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/semi_reboque_deflection.js +31 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts +20 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/simple_truck_deflection.js +28 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts +21 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.d.ts.map +1 -0
- package/build/core/physics/models/deflection/vanderleia_deflection.js +41 -0
- package/build/core/physics/models/old_tare_model.d.ts +17 -0
- package/build/core/physics/models/old_tare_model.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_model.js +40 -0
- package/build/core/physics/models/old_tare_scale.d.ts +7 -0
- package/build/core/physics/models/old_tare_scale.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_scale.js +8 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts +7 -0
- package/build/core/physics/models/old_tare_semireboque.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_semireboque.js +37 -0
- package/build/core/physics/models/old_tare_truck.d.ts +7 -0
- package/build/core/physics/models/old_tare_truck.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_truck.js +12 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts +7 -0
- package/build/core/physics/models/old_tare_vanderleia.d.ts.map +1 -0
- package/build/core/physics/models/old_tare_vanderleia.js +31 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts +19 -0
- package/build/core/physics/models/percentage_on_axles_calculator.d.ts.map +1 -0
- package/build/core/physics/models/percentage_on_axles_calculator.js +39 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts +21 -0
- package/build/core/physics/models/quad_semi_trailer_model.d.ts.map +1 -0
- package/build/core/physics/models/quad_semi_trailer_model.js +70 -0
- package/build/core/physics/models/rodotrem_model.d.ts +33 -0
- package/build/core/physics/models/rodotrem_model.d.ts.map +1 -0
- package/build/core/physics/models/rodotrem_model.js +101 -0
- package/build/core/physics/models/semi_reboque_base.d.ts +34 -0
- package/build/core/physics/models/semi_reboque_base.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_base.js +85 -0
- package/build/core/physics/models/semi_reboque_model.d.ts +41 -0
- package/build/core/physics/models/semi_reboque_model.d.ts.map +1 -0
- package/build/core/physics/models/semi_reboque_model.js +84 -0
- package/build/core/physics/models/simple_truck_base.d.ts +29 -0
- package/build/core/physics/models/simple_truck_base.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_base.js +57 -0
- package/build/core/physics/models/simple_truck_model.d.ts +41 -0
- package/build/core/physics/models/simple_truck_model.d.ts.map +1 -0
- package/build/core/physics/models/simple_truck_model.js +76 -0
- package/build/core/physics/models/single_container_tare.d.ts +18 -0
- package/build/core/physics/models/single_container_tare.d.ts.map +1 -0
- package/build/core/physics/models/single_container_tare.js +45 -0
- package/build/core/physics/models/tare_model.d.ts +12 -0
- package/build/core/physics/models/tare_model.d.ts.map +1 -0
- package/build/core/physics/models/tare_model.js +36 -0
- package/build/core/physics/models/vanderleia_model.d.ts +33 -0
- package/build/core/physics/models/vanderleia_model.d.ts.map +1 -0
- package/build/core/physics/models/vanderleia_model.js +100 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts +27 -0
- package/build/core/physics/services/axle_weight_output_builder.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_output_builder.js +42 -0
- package/build/core/physics/services/axle_weight_service.d.ts +20 -0
- package/build/core/physics/services/axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/axle_weight_service.js +91 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts +12 -0
- package/build/core/physics/services/cm_axle_weight_service.d.ts.map +1 -0
- package/build/core/physics/services/cm_axle_weight_service.js +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts +33 -0
- package/build/core/physics/services/container_corner_forces.d.ts.map +1 -0
- package/build/core/physics/services/container_corner_forces.js +84 -0
- package/build/core/physics/transports/axle_manager.d.ts +22 -0
- package/build/core/physics/transports/axle_manager.d.ts.map +1 -0
- package/build/core/physics/transports/axle_manager.js +34 -0
- package/build/core/physics/transports/axle_record.d.ts +21 -0
- package/build/core/physics/transports/axle_record.d.ts.map +1 -0
- package/build/core/physics/transports/axle_record.js +57 -0
- package/build/core/physics/transports/chassi.d.ts +52 -0
- package/build/core/physics/transports/chassi.d.ts.map +1 -0
- package/build/core/physics/transports/chassi.js +105 -0
- package/build/core/physics/transports/container_record.d.ts +25 -0
- package/build/core/physics/transports/container_record.d.ts.map +1 -0
- package/build/core/physics/transports/container_record.js +49 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts +27 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_max_weight_calculator.js +40 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts +28 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_tare_calculator.js +55 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts +15 -0
- package/build/core/physics/transports/containerweight/container_weight_model.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/container_weight_model.js +31 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts +17 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/merged_containers_weight_calculator.js +31 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts +20 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.d.ts.map +1 -0
- package/build/core/physics/transports/containerweight/single_container_weight_calculator.js +48 -0
- package/build/core/physics/transports/grouped_containers.d.ts +34 -0
- package/build/core/physics/transports/grouped_containers.d.ts.map +1 -0
- package/build/core/physics/transports/grouped_containers.js +68 -0
- package/build/core/physics/transports/merged_containers.d.ts +26 -0
- package/build/core/physics/transports/merged_containers.d.ts.map +1 -0
- package/build/core/physics/transports/merged_containers.js +45 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts +26 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_splitter.js +84 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts +22 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.d.ts.map +1 -0
- package/build/core/physics/transports/tare/bitrem_axle_weight_split.js +32 -0
- package/build/core/physics/transports/transport.d.ts +33 -0
- package/build/core/physics/transports/transport.d.ts.map +1 -0
- package/build/core/physics/transports/transport.js +110 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +10 -0
- package/eslint.config.js +51 -0
- package/package.json +38 -0
- package/src/core/contracts/chassi_reference.ts +7 -0
- package/src/core/contracts/ms_faixas_contract.ts +114 -0
- package/src/core/contracts/rotation_enum.ts +11 -0
- package/src/core/contracts/suspension_type.ts +4 -0
- package/src/core/contracts/transport_record.ts +4 -0
- package/src/core/contracts/vehicle_type.ts +12 -0
- package/src/core/contracts/vehicle_version.ts +7 -0
- package/src/core/contracts/wire_flags.ts +26 -0
- package/src/core/math/float_tools.ts +17 -0
- package/src/core/math/gaussian_elimination.ts +104 -0
- package/src/core/orchestration/axle_weight_physics.ts +37 -0
- package/src/core/orchestration/collision_checker.ts +86 -0
- package/src/core/orchestration/connector_payload_builder.ts +81 -0
- package/src/core/orchestration/java_mass_center.ts +98 -0
- package/src/core/orchestration/output_builder.ts +18 -0
- package/src/core/orchestration/request_schema.ts +26 -0
- package/src/core/orchestration/weight_by_axis_task.ts +140 -0
- package/src/core/physics/items/allocated_item.ts +41 -0
- package/src/core/physics/items/allocated_item_manager.ts +50 -0
- package/src/core/physics/items/center_of_mass.ts +31 -0
- package/src/core/physics/items/compute_grouper_center_of_mass.ts +44 -0
- package/src/core/physics/items/item_templates.ts +65 -0
- package/src/core/physics/items/multi_container_allocated_items.ts +120 -0
- package/src/core/physics/items/rotation_transforms.ts +29 -0
- package/src/core/physics/models/axle_weight_model.ts +109 -0
- package/src/core/physics/models/bi_truck_model.ts +74 -0
- package/src/core/physics/models/bi_truck_tractor_semi_trailer_model.ts +86 -0
- package/src/core/physics/models/bitrem_model.ts +148 -0
- package/src/core/physics/models/chassi_forces.ts +50 -0
- package/src/core/physics/models/deflection/beam_deflection.ts +105 -0
- package/src/core/physics/models/deflection/bitrem_deflection.ts +68 -0
- package/src/core/physics/models/deflection/create_deflection_delegate.ts +46 -0
- package/src/core/physics/models/deflection/deflection_model.ts +33 -0
- package/src/core/physics/models/deflection/deflection_support_manager.ts +56 -0
- package/src/core/physics/models/deflection/deflection_tools.ts +11 -0
- package/src/core/physics/models/deflection/integration_constant_calculator.ts +62 -0
- package/src/core/physics/models/deflection/rodotrem_deflection.ts +57 -0
- package/src/core/physics/models/deflection/semi_reboque_deflection.ts +40 -0
- package/src/core/physics/models/deflection/simple_truck_deflection.ts +35 -0
- package/src/core/physics/models/deflection/vanderleia_deflection.ts +48 -0
- package/src/core/physics/models/old_tare_model.ts +51 -0
- package/src/core/physics/models/old_tare_scale.ts +9 -0
- package/src/core/physics/models/old_tare_semireboque.ts +51 -0
- package/src/core/physics/models/old_tare_truck.ts +15 -0
- package/src/core/physics/models/old_tare_vanderleia.ts +44 -0
- package/src/core/physics/models/percentage_on_axles_calculator.ts +49 -0
- package/src/core/physics/models/quad_semi_trailer_model.ts +87 -0
- package/src/core/physics/models/rodotrem_model.ts +131 -0
- package/src/core/physics/models/semi_reboque_base.ts +103 -0
- package/src/core/physics/models/semi_reboque_model.ts +127 -0
- package/src/core/physics/models/simple_truck_base.ts +70 -0
- package/src/core/physics/models/simple_truck_model.ts +115 -0
- package/src/core/physics/models/single_container_tare.ts +56 -0
- package/src/core/physics/models/tare_model.ts +46 -0
- package/src/core/physics/models/vanderleia_model.ts +125 -0
- package/src/core/physics/services/axle_weight_output_builder.ts +63 -0
- package/src/core/physics/services/axle_weight_service.ts +116 -0
- package/src/core/physics/services/cm_axle_weight_service.ts +45 -0
- package/src/core/physics/services/container_corner_forces.ts +95 -0
- package/src/core/physics/transports/axle_manager.ts +45 -0
- package/src/core/physics/transports/axle_record.ts +68 -0
- package/src/core/physics/transports/chassi.ts +130 -0
- package/src/core/physics/transports/container_record.ts +58 -0
- package/src/core/physics/transports/containerweight/container_max_weight_calculator.ts +59 -0
- package/src/core/physics/transports/containerweight/container_tare_calculator.ts +76 -0
- package/src/core/physics/transports/containerweight/container_weight_model.ts +38 -0
- package/src/core/physics/transports/containerweight/merged_containers_weight_calculator.ts +39 -0
- package/src/core/physics/transports/containerweight/single_container_weight_calculator.ts +65 -0
- package/src/core/physics/transports/grouped_containers.ts +91 -0
- package/src/core/physics/transports/merged_containers.ts +62 -0
- package/src/core/physics/transports/tare/bitrem_axle_splitter.ts +107 -0
- package/src/core/physics/transports/tare/bitrem_axle_weight_split.ts +55 -0
- package/src/core/physics/transports/transport.ts +137 -0
- package/src/index.ts +12 -0
- package/src/service/.gitkeep +0 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_1_basic_truck_input.json +1759 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_3_interlink_input.json +2226 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_4_quad_semi_trailer.json +639 -0
- package/test/data/src/core/orchestration/weight_by_axis/case_5_custom_center_of_gravity.json +557 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_2_bitruck.json +664 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_4_quad_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_calculations/case_5_bi_truck_semi_trailer.json +674 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_input_truck.json +1025 -0
- package/test/data/src/core/physics/axle_weight_service/case_1_output_truck.json +38 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_input.json +1286 -0
- package/test/data/src/core/physics/axle_weight_service/case_2_vanderleia_output.json +65 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_input_semireboque.json +24625 -0
- package/test/data/src/core/physics/axle_weight_service/case_3_output_semireboque.json +57 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_input_bitrem.json +2226 -0
- package/test/data/src/core/physics/axle_weight_service/case_4_output_bitrem.json +96 -0
- package/test/data/src/core/physics/beam_deflection/case_10_rodotrem_offset.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_11_bitruck.json +664 -0
- package/test/data/src/core/physics/beam_deflection/case_12_quad_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_13_bi_truck_semi_trailer.json +792 -0
- package/test/data/src/core/physics/beam_deflection/case_1_documentation.ipynb +316 -0
- package/test/data/src/core/physics/beam_deflection/case_1_semireboque.json +402 -0
- package/test/data/src/core/physics/beam_deflection/case_2_bitrem.json +434 -0
- package/test/data/src/core/physics/beam_deflection/case_3_rodotrem.json +474 -0
- package/test/data/src/core/physics/beam_deflection/case_4_vanderleia_pneumatica.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_5_vanderleia_mecanica.json +366 -0
- package/test/data/src/core/physics/beam_deflection/case_6_truck.json +279 -0
- package/test/data/src/core/physics/beam_deflection/case_7_semireboque_structural_offset.json +318 -0
- package/test/data/src/core/physics/beam_deflection/case_8_vanderleia_offset.json +425 -0
- package/test/data/src/core/physics/beam_deflection/case_9_bitrem_offset.json +434 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_1_simple_bitrem.json +145 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_2_lowered_bitrem.json +238 -0
- package/test/data/src/core/physics/bitrem_axle_splitter/case_3_lowered_positive_proportion.json +238 -0
- package/test/data/src/core/physics/c_m_axle_weight_service/case_1_interlink_trailer.json +94 -0
- package/test/data/src/core/physics/calculations/case_1_simple_truck.json +83 -0
- package/test/data/src/core/physics/calculations/case_2_lowered_bitrem.json +1051 -0
- package/test/data/src/core/physics/calculations/case_3_container_mercedes.json +50 -0
- package/test/data/src/core/physics/container_corner_forces/case_1.json +674 -0
- package/test/data/src/core/physics/container_weight/case_1_basictruck.json +223 -0
- package/test/data/src/core/physics/container_weight/case_2_roadtrain.json +277 -0
- package/test/data/src/core/physics/container_weight/case_3_semireboque_rebaixado.json +197 -0
- package/test/data/src/core/physics/container_weight/case_4_semireboque_neck_limit.json +197 -0
- package/test/data/src/core/physics/container_weight/case_5_vanderleia_rebaixada.json +211 -0
- package/test/data/src/core/physics/container_weight/case_6_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/python_goldens.json +9 -0
- package/test/data/src/core/physics/tare/case_1_simple_vanderleia.json +185 -0
- package/test/data/src/core/physics/tare/case_2_lowered_vanderleia.json +646 -0
- package/test/data/src/core/physics/tare/case_3_lowered_interlink.json +230 -0
- package/test/data/src/core/physics/tare/case_4_negative_tare_VUC.json +483 -0
- package/test/data/src/core/physics/tare/case_5_truck_bitruck.json +664 -0
- package/test/data/src/core/physics/tare/case_6_quad_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_7_bi_truck_semi_trailer.json +203 -0
- package/test/data/src/core/physics/tare/case_8_triaxle_semi_trailer.json +203 -0
- package/test/data/src/core/physics/time_performance/case_1_center_of_mass.json +2916 -0
- package/test/data/src/core/physics/trucks/bitrem.json +150 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem.json +1216 -0
- package/test/data/src/core/physics/trucks/lowered_bitrem_empty_first_container.json +1182 -0
- package/test/data/src/core/physics/trucks/rodotrem.json +148 -0
- package/test/data/src/core/physics/trucks/semi_reboque.json +91 -0
- package/test/data/src/core/physics/trucks/semi_reboque_rebaixado.json +1629 -0
- package/test/data/src/core/physics/trucks/simple_truck.json +85 -0
- package/test/data/src/core/physics/trucks/vanderleia_mechanical.json +105 -0
- package/test/data/src/core/physics/trucks/vanderleia_pneumatic.json +105 -0
- package/test/src/core/orchestration/request_schema.test.ts +20 -0
- package/test/src/core/orchestration/weight_by_axis_task.test.ts +87 -0
- package/test/src/core/physics/items/center_of_mass.test.ts +38 -0
- package/test/src/core/physics/items/multi_container_allocated_items.test.ts +22 -0
- package/test/src/core/physics/math_input_helpers.ts +64 -0
- package/test/src/core/physics/models/bitrem_model.test.ts +54 -0
- package/test/src/core/physics/models/deflection/deflection_model.test.ts +78 -0
- package/test/src/core/physics/models/rodotrem_model.test.ts +29 -0
- package/test/src/core/physics/models/semi_reboque_model.test.ts +72 -0
- package/test/src/core/physics/models/simple_truck_model.test.ts +23 -0
- package/test/src/core/physics/models/tare_model.test.ts +34 -0
- package/test/src/core/physics/models/vanderleia_model.test.ts +36 -0
- package/test/src/core/physics/services/axle_weight_service.test.ts +56 -0
- package/test/src/core/physics/services/cm_axle_weight_service.test.ts +23 -0
- package/test/src/core/physics/services/container_corner_forces.test.ts +23 -0
- package/test/src/core/physics/test_helpers.ts +13 -0
- package/test/src/core/physics/transports/chassi.test.ts +35 -0
- package/test/src/core/physics/transports/containerweight/container_weight_model.test.ts +57 -0
- package/test/src/core/physics/transports/tare/bitrem_axle_splitter.test.ts +30 -0
- package/test/src/index.test.ts +35 -0
- package/tsconfig.eslint.json +15 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Transport } from './transport.js'
|
|
2
|
+
import { GroupedContainers } from './grouped_containers.js'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Grouper-level merged container geometry.
|
|
6
|
+
*/
|
|
7
|
+
export class MergedContainers
|
|
8
|
+
{
|
|
9
|
+
private all_grouped_containers = new Map<number, GroupedContainers>()
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @param transport - Parsed transport.
|
|
13
|
+
*/
|
|
14
|
+
constructor(transport: Transport)
|
|
15
|
+
{
|
|
16
|
+
this.setup(transport)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @param transport - Parsed transport.
|
|
21
|
+
*/
|
|
22
|
+
setup(transport: Transport): void
|
|
23
|
+
{
|
|
24
|
+
for (const sequence_index of transport.list_containers_sequence_indexes())
|
|
25
|
+
{
|
|
26
|
+
const container = transport.get_container_by_sequence_index(sequence_index)
|
|
27
|
+
if (!this.all_grouped_containers.has(container.grouper))
|
|
28
|
+
{
|
|
29
|
+
this.all_grouped_containers.set(
|
|
30
|
+
container.grouper,
|
|
31
|
+
new GroupedContainers(container.grouper))
|
|
32
|
+
}
|
|
33
|
+
this.get_container_by_grouper_index(container.grouper).add_container(container)
|
|
34
|
+
}
|
|
35
|
+
for (const grouper of this.all_grouped_containers.keys())
|
|
36
|
+
{
|
|
37
|
+
this.get_container_by_grouper_index(grouper).generate_merged_container()
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @returns Grouper id list.
|
|
43
|
+
*/
|
|
44
|
+
list_grouper_indexes(): number[]
|
|
45
|
+
{
|
|
46
|
+
return [...this.all_grouped_containers.keys()]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @param grouper - Grouper id.
|
|
51
|
+
* @returns Grouped containers.
|
|
52
|
+
*/
|
|
53
|
+
get_container_by_grouper_index(grouper: number): GroupedContainers
|
|
54
|
+
{
|
|
55
|
+
const grouped = this.all_grouped_containers.get(grouper)
|
|
56
|
+
if (!grouped)
|
|
57
|
+
{
|
|
58
|
+
throw new Error(`Grouper ${grouper} not found`)
|
|
59
|
+
}
|
|
60
|
+
return grouped
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { CHASSI_REFERENCE } from '../../../contracts/chassi_reference.js'
|
|
2
|
+
import type { Transport } from '../transport.js'
|
|
3
|
+
import { Chassi } from '../chassi.js'
|
|
4
|
+
import { MergedContainers } from '../merged_containers.js'
|
|
5
|
+
import { AxleRecord } from '../axle_record.js'
|
|
6
|
+
import { apply_bitrem_axle_split, compute_bitrem_axle_split } from './bitrem_axle_weight_split.js'
|
|
7
|
+
|
|
8
|
+
/** Splits bitrem shared axle 3 into two axles (DRAGON-98). */
|
|
9
|
+
export class BitremAxleSplitter
|
|
10
|
+
{
|
|
11
|
+
readonly new_axle_3: AxleRecord
|
|
12
|
+
readonly new_axle_4: AxleRecord
|
|
13
|
+
readonly new_axle_5: AxleRecord
|
|
14
|
+
private readonly chassi: Chassi
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param transport - Parsed transport.
|
|
18
|
+
*/
|
|
19
|
+
constructor(private readonly transport: Transport)
|
|
20
|
+
{
|
|
21
|
+
this.chassi = new Chassi(transport)
|
|
22
|
+
this.new_axle_3 = clone_axle(transport.axle_manager.get_axle(2))
|
|
23
|
+
this.new_axle_4 = clone_axle(transport.axle_manager.get_axle(2))
|
|
24
|
+
this.new_axle_5 = clone_axle(transport.axle_manager.get_axle(3))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @returns Five axle wire rows after split.
|
|
29
|
+
*/
|
|
30
|
+
generate_splitted_axles_data(): Record<string, unknown>[]
|
|
31
|
+
{
|
|
32
|
+
this.generate_new_weight_attributes()
|
|
33
|
+
this.generate_new_axle_distances()
|
|
34
|
+
this.generate_new_axle_container_sequences()
|
|
35
|
+
this.generate_merged_axle_connection()
|
|
36
|
+
return [
|
|
37
|
+
this.transport.axle_manager.get_axle(0).to_wire(),
|
|
38
|
+
this.transport.axle_manager.get_axle(1).to_wire(),
|
|
39
|
+
this.new_axle_3.to_wire(),
|
|
40
|
+
this.new_axle_4.to_wire(),
|
|
41
|
+
this.new_axle_5.to_wire()
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
calculate_first_proportion(): number
|
|
46
|
+
{
|
|
47
|
+
const a = this.chassi.get_axle_position(1, CHASSI_REFERENCE.GROUPER_1)
|
|
48
|
+
const b = this.chassi.get_axle_position(2, CHASSI_REFERENCE.GROUPER_1) - a
|
|
49
|
+
return a / b
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
calculate_second_proportion(): number
|
|
53
|
+
{
|
|
54
|
+
const axle_3 = this.chassi.get_axle_position(2, CHASSI_REFERENCE.TRACTOR)
|
|
55
|
+
const axle_4 = this.chassi.get_axle_position(3, CHASSI_REFERENCE.TRACTOR)
|
|
56
|
+
const end = this.chassi.get_grouper_end(2, CHASSI_REFERENCE.TRACTOR)
|
|
57
|
+
return (end - axle_4) / (axle_4 - axle_3)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private generate_new_weight_attributes(): void
|
|
61
|
+
{
|
|
62
|
+
const old = this.transport.axle_manager.get_axle(2)
|
|
63
|
+
const split = compute_bitrem_axle_split(
|
|
64
|
+
this.calculate_first_proportion(),
|
|
65
|
+
this.calculate_second_proportion())
|
|
66
|
+
apply_bitrem_axle_split({
|
|
67
|
+
old,
|
|
68
|
+
axle_3: this.new_axle_3,
|
|
69
|
+
axle_4: this.new_axle_4,
|
|
70
|
+
split
|
|
71
|
+
})
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private generate_new_axle_distances(): void
|
|
75
|
+
{
|
|
76
|
+
const old_4 = this.transport.axle_manager.get_axle(3)
|
|
77
|
+
this.new_axle_4.distance_from_previous_axle = this.distance_from_axle_3_to_pin_2()
|
|
78
|
+
this.new_axle_5.distance_from_previous_axle = old_4.distance_from_previous_axle
|
|
79
|
+
- this.new_axle_4.distance_from_previous_axle
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private generate_new_axle_container_sequences(): void
|
|
83
|
+
{
|
|
84
|
+
const merged = new MergedContainers(this.transport)
|
|
85
|
+
this.new_axle_3.sequence_index = merged.get_container_by_grouper_index(1)
|
|
86
|
+
.list_containers_sequence_indexes()[0]
|
|
87
|
+
this.new_axle_4.sequence_index = merged.get_container_by_grouper_index(2)
|
|
88
|
+
.list_containers_sequence_indexes()[0]
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
private generate_merged_axle_connection(): void
|
|
92
|
+
{
|
|
93
|
+
this.new_axle_4.is_connected_to = 2
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
private distance_from_axle_3_to_pin_2(): number
|
|
97
|
+
{
|
|
98
|
+
const axle_3 = this.chassi.get_axle_position(2, CHASSI_REFERENCE.TRACTOR)
|
|
99
|
+
const pin_2 = this.chassi.get_pin_position(1, CHASSI_REFERENCE.TRACTOR)
|
|
100
|
+
return pin_2 - axle_3
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function clone_axle(source: AxleRecord): AxleRecord
|
|
105
|
+
{
|
|
106
|
+
return new AxleRecord(source.to_wire())
|
|
107
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { AxleRecord } from '../axle_record.js'
|
|
2
|
+
|
|
3
|
+
export type BitremAxleSplit = {
|
|
4
|
+
mult: number
|
|
5
|
+
on_axle_3: boolean
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @param first_proportion - First proportion from splitter.
|
|
10
|
+
* @param second_proportion - Second proportion from splitter.
|
|
11
|
+
* @returns Multiplier and target axle flag.
|
|
12
|
+
*/
|
|
13
|
+
export function compute_bitrem_axle_split(
|
|
14
|
+
first_proportion: number,
|
|
15
|
+
second_proportion: number
|
|
16
|
+
): BitremAxleSplit
|
|
17
|
+
{
|
|
18
|
+
const diff = first_proportion - second_proportion
|
|
19
|
+
if (diff > 0)
|
|
20
|
+
{
|
|
21
|
+
return { mult: 0.17 + 1 / (Math.abs(diff) + 2), on_axle_3: true }
|
|
22
|
+
}
|
|
23
|
+
if (diff < 0)
|
|
24
|
+
{
|
|
25
|
+
return { mult: -0.17 + 1 / (Math.abs(diff) + 2), on_axle_3: false }
|
|
26
|
+
}
|
|
27
|
+
return { mult: 0.5, on_axle_3: true }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type BitremAxleSplitTarget = {
|
|
31
|
+
old: AxleRecord
|
|
32
|
+
axle_3: AxleRecord
|
|
33
|
+
axle_4: AxleRecord
|
|
34
|
+
split: BitremAxleSplit
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param target - Axles and split multipliers.
|
|
39
|
+
*/
|
|
40
|
+
export function apply_bitrem_axle_split(target: BitremAxleSplitTarget): void
|
|
41
|
+
{
|
|
42
|
+
const { old, axle_3, axle_4, split } = target
|
|
43
|
+
if (split.on_axle_3)
|
|
44
|
+
{
|
|
45
|
+
axle_3.max_supported_weight = old.max_supported_weight * split.mult
|
|
46
|
+
axle_4.max_supported_weight = old.max_supported_weight - axle_3.max_supported_weight
|
|
47
|
+
axle_3.tare = old.tare * split.mult
|
|
48
|
+
axle_4.tare = old.tare - axle_3.tare
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
axle_4.max_supported_weight = old.max_supported_weight * split.mult
|
|
52
|
+
axle_3.max_supported_weight = old.max_supported_weight - axle_4.max_supported_weight
|
|
53
|
+
axle_4.tare = old.tare * split.mult
|
|
54
|
+
axle_3.tare = old.tare - axle_4.tare
|
|
55
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { WIRE_FLAGS } from '../../contracts/wire_flags.js'
|
|
2
|
+
import { VEHICLE_TYPE, type VehicleTypeCode } from '../../contracts/vehicle_type.js'
|
|
3
|
+
import { VEHICLE_VERSION } from '../../contracts/vehicle_version.js'
|
|
4
|
+
import type { TransportRecord } from '../../contracts/transport_record.js'
|
|
5
|
+
import { AxleManager } from './axle_manager.js'
|
|
6
|
+
import { ContainerRecord } from './container_record.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Parsed transport matching jettainterface.Transport behavior used by axleweight.
|
|
10
|
+
*/
|
|
11
|
+
export class Transport
|
|
12
|
+
{
|
|
13
|
+
id: string
|
|
14
|
+
containers: Map<number, ContainerRecord>
|
|
15
|
+
amount: number
|
|
16
|
+
supported_weight: number
|
|
17
|
+
tare: number
|
|
18
|
+
axle_manager: AxleManager
|
|
19
|
+
first_axle_distance: number
|
|
20
|
+
vehicle_type: VehicleTypeCode
|
|
21
|
+
vehicle_version: number
|
|
22
|
+
suspension_type: string | null
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @param transport_data - Raw transport dict.
|
|
26
|
+
*/
|
|
27
|
+
constructor(transport_data: TransportRecord)
|
|
28
|
+
{
|
|
29
|
+
this.id = String(transport_data[WIRE_FLAGS.TRANSPORT_ID])
|
|
30
|
+
this.containers = read_containers(transport_data)
|
|
31
|
+
this.amount = Number(transport_data[WIRE_FLAGS.AMOUNT] ?? 0)
|
|
32
|
+
this.supported_weight = Number(transport_data[WIRE_FLAGS.SUPPORTED_WEIGHT])
|
|
33
|
+
this.tare = Number(transport_data.tara ?? 0)
|
|
34
|
+
this.axle_manager = new AxleManager(transport_data)
|
|
35
|
+
this.first_axle_distance = Number(
|
|
36
|
+
transport_data[WIRE_FLAGS.FIRST_AXLE_DISTANCE] ?? 0)
|
|
37
|
+
this.vehicle_type = read_vehicle_type(transport_data)
|
|
38
|
+
this.vehicle_version = read_vehicle_version(transport_data)
|
|
39
|
+
this.suspension_type = read_suspension_type(transport_data)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @returns Sorted container sequence indexes.
|
|
44
|
+
*/
|
|
45
|
+
list_containers_sequence_indexes(): number[]
|
|
46
|
+
{
|
|
47
|
+
return [...this.containers.keys()].sort((left, right) => left - right)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param sequence_index - Container sequence.
|
|
52
|
+
* @returns Container record.
|
|
53
|
+
*/
|
|
54
|
+
get_container_by_sequence_index(sequence_index: number): ContainerRecord
|
|
55
|
+
{
|
|
56
|
+
const container = this.containers.get(sequence_index)
|
|
57
|
+
if (!container)
|
|
58
|
+
{
|
|
59
|
+
throw new Error(`Container sequence ${sequence_index} not found`)
|
|
60
|
+
}
|
|
61
|
+
return container
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @param transport_data - Raw transport dict.
|
|
67
|
+
* @returns Containers keyed by sequence.
|
|
68
|
+
*/
|
|
69
|
+
function read_containers(transport_data: TransportRecord): Map<number, ContainerRecord>
|
|
70
|
+
{
|
|
71
|
+
const map = new Map<number, ContainerRecord>()
|
|
72
|
+
const list = transport_data[WIRE_FLAGS.CONTAINERS]
|
|
73
|
+
if (!Array.isArray(list))
|
|
74
|
+
{
|
|
75
|
+
return map
|
|
76
|
+
}
|
|
77
|
+
for (const entry of list)
|
|
78
|
+
{
|
|
79
|
+
const container = new ContainerRecord(entry as Record<string, unknown>)
|
|
80
|
+
map.set(container.sequence_index, container)
|
|
81
|
+
}
|
|
82
|
+
return map
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @param transport_data - Raw transport dict.
|
|
87
|
+
* @returns Vehicle type code.
|
|
88
|
+
*/
|
|
89
|
+
function read_vehicle_type(transport_data: TransportRecord): VehicleTypeCode
|
|
90
|
+
{
|
|
91
|
+
const raw = transport_data[WIRE_FLAGS.VEHICLE_TYPE]
|
|
92
|
+
if (raw === undefined || raw === null)
|
|
93
|
+
{
|
|
94
|
+
return VEHICLE_TYPE.CONTAINER
|
|
95
|
+
}
|
|
96
|
+
return Number(raw) as VehicleTypeCode
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @param transport_data - Raw transport dict.
|
|
101
|
+
* @returns Resolved vehicle version code.
|
|
102
|
+
*/
|
|
103
|
+
function read_vehicle_version(transport_data: TransportRecord): number
|
|
104
|
+
{
|
|
105
|
+
const vehicle_type = read_vehicle_type(transport_data)
|
|
106
|
+
const version_code = Number(transport_data[WIRE_FLAGS.VEHICLE_VERSION] ?? 0)
|
|
107
|
+
if (vehicle_type === VEHICLE_TYPE.CAMINHAO && version_code === 4)
|
|
108
|
+
{
|
|
109
|
+
return VEHICLE_VERSION.CAMINHAO_BITRUCK
|
|
110
|
+
}
|
|
111
|
+
if (vehicle_type === VEHICLE_TYPE.SEMIREBOQUE)
|
|
112
|
+
{
|
|
113
|
+
if (version_code === 5 || version_code === 7)
|
|
114
|
+
{
|
|
115
|
+
return VEHICLE_VERSION.SEMIREBOQUE_QUAD
|
|
116
|
+
}
|
|
117
|
+
if (version_code === 6)
|
|
118
|
+
{
|
|
119
|
+
return VEHICLE_VERSION.SEMIREBOQUE_BITRUCK
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return VEHICLE_VERSION.DEFAULT
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @param transport_data - Raw transport dict.
|
|
127
|
+
* @returns Suspension wire string or null.
|
|
128
|
+
*/
|
|
129
|
+
function read_suspension_type(transport_data: TransportRecord): string | null
|
|
130
|
+
{
|
|
131
|
+
const raw = transport_data[WIRE_FLAGS.SUSPENSION_TYPE]
|
|
132
|
+
if (raw === undefined || raw === null)
|
|
133
|
+
{
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
return String(raw)
|
|
137
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { run_weight_by_axis_task } from './core/orchestration/weight_by_axis_task.js'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Calculates loaded cargo weight per axle for each transport in the payload.
|
|
5
|
+
* Same contract as WeightByAxisTask.run() in ms-faixas-porcentuais.
|
|
6
|
+
* @param json_data - Raw JSON string with `{ envs, config? }`.
|
|
7
|
+
* @returns JSON string with `envs` and axle weights, or error payload.
|
|
8
|
+
*/
|
|
9
|
+
export function calculate_weight_on_axles_physics(json_data: string): string
|
|
10
|
+
{
|
|
11
|
+
return run_weight_by_axis_task(json_data)
|
|
12
|
+
}
|
|
File without changes
|