@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,105 @@
|
|
|
1
|
+
import { calculate_loaded_weights_for_env } from './axle_weight_physics.js';
|
|
2
|
+
import { build_success_output, build_error_output } from './output_builder.js';
|
|
3
|
+
import { check_cargo_collision } from './collision_checker.js';
|
|
4
|
+
import { parse_weight_by_axis_request } from './request_schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runs weight-by-axis for ms-faixas JSON input (WeightByAxisTask.run contract).
|
|
7
|
+
* @param json_data - Raw request JSON string.
|
|
8
|
+
* @returns Response JSON string.
|
|
9
|
+
*/
|
|
10
|
+
export function run_weight_by_axis_task(json_data) {
|
|
11
|
+
try {
|
|
12
|
+
const request = parse_weight_by_axis_request(json_data);
|
|
13
|
+
const envs = request.envs;
|
|
14
|
+
const output_envs = [];
|
|
15
|
+
for (const env of envs) {
|
|
16
|
+
const loaded_weights = calculate_loaded_weights_for_env(env);
|
|
17
|
+
apply_loaded_weights_to_env(env, loaded_weights);
|
|
18
|
+
check_cargo_collision(env);
|
|
19
|
+
output_envs.push(strip_items_and_bands(env));
|
|
20
|
+
}
|
|
21
|
+
return build_success_output(output_envs);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return build_error_output(error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @param env - Env vehicle object.
|
|
29
|
+
* @param loaded_weights - Forces per axle.
|
|
30
|
+
*/
|
|
31
|
+
function apply_loaded_weights_to_env(env, loaded_weights) {
|
|
32
|
+
const axles = env.eixos;
|
|
33
|
+
for (let index = 0; index < loaded_weights.length; index++) {
|
|
34
|
+
const cargo = loaded_weights[index];
|
|
35
|
+
const axle = axles[index];
|
|
36
|
+
const tare = Number(axle.tara ?? 0);
|
|
37
|
+
axle.pesoCarregado = cargo;
|
|
38
|
+
axle.pesoCarregadoFinal = tare + cargo;
|
|
39
|
+
}
|
|
40
|
+
const containers = env.conteiners ?? env.containers;
|
|
41
|
+
if (!Array.isArray(containers)) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
apply_to_containers(containers, loaded_weights, axles);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @param containers - Container list on env.
|
|
48
|
+
* @param loaded_weights - Per-axle cargo load.
|
|
49
|
+
* @param axles - Vehicle axles list.
|
|
50
|
+
*/
|
|
51
|
+
function apply_to_containers(containers, loaded_weights, axles) {
|
|
52
|
+
for (const container of containers) {
|
|
53
|
+
const peso_eixos = build_peso_eixos_for_container(container, loaded_weights, axles);
|
|
54
|
+
container.pesoEixos = peso_eixos;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @param container - Container on env.
|
|
59
|
+
* @param loaded_weights - All axle loads.
|
|
60
|
+
* @param axles - Vehicle axles.
|
|
61
|
+
* @returns pesoEixos array for container.
|
|
62
|
+
*/
|
|
63
|
+
function build_peso_eixos_for_container(container, loaded_weights, axles) {
|
|
64
|
+
const sequence = Number(container.sequencia);
|
|
65
|
+
const result = [];
|
|
66
|
+
for (let index = 0; index < axles.length; index++) {
|
|
67
|
+
if (Number(axles[index].sequenciaContainer) !== sequence) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
result.push(build_peso_eixo_entry(axles[index], loaded_weights[index]));
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @param axle - Axle record on env.
|
|
76
|
+
* @param cargo - Loaded cargo on axle.
|
|
77
|
+
* @returns Single pesoEixos entry.
|
|
78
|
+
*/
|
|
79
|
+
function build_peso_eixo_entry(axle, cargo) {
|
|
80
|
+
const tare = Number(axle.tara ?? 0);
|
|
81
|
+
return {
|
|
82
|
+
distanciaOrigem: axle.distanciaOrigem,
|
|
83
|
+
pesoMax: Number(axle.pesoMaxSuportado) - tare,
|
|
84
|
+
pesoMaxFinal: axle.pesoMaxSuportado,
|
|
85
|
+
tara: tare,
|
|
86
|
+
pesoCarregado: cargo,
|
|
87
|
+
pesoCarregadoFinal: tare + cargo,
|
|
88
|
+
distanciaOrigemSemPrimeiroEixo: axle.distanciaOrigemSemPrimeiroEixo ?? 0
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @param env - Env with updated axle data.
|
|
93
|
+
* @returns Env copy without items/faixas on containers.
|
|
94
|
+
*/
|
|
95
|
+
function strip_items_and_bands(env) {
|
|
96
|
+
const clone = JSON.parse(JSON.stringify(env));
|
|
97
|
+
const key = clone.conteiners ? 'conteiners' : 'containers';
|
|
98
|
+
const containers = clone[key];
|
|
99
|
+
for (const container of containers) {
|
|
100
|
+
container.items = [];
|
|
101
|
+
container.faixas = [];
|
|
102
|
+
}
|
|
103
|
+
clone.idCaminhao = clone._id;
|
|
104
|
+
return clone;
|
|
105
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RotationCode } from '../../contracts/rotation_enum.js';
|
|
2
|
+
import type { ItemTemplates } from './item_templates.js';
|
|
3
|
+
/**
|
|
4
|
+
* Allocated cargo item with position in container coordinates.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AllocatedItem {
|
|
7
|
+
xi: number;
|
|
8
|
+
yi: number;
|
|
9
|
+
zi: number;
|
|
10
|
+
rotation: RotationCode;
|
|
11
|
+
readonly template_index: number;
|
|
12
|
+
readonly templates: ItemTemplates;
|
|
13
|
+
/**
|
|
14
|
+
* @param templates - Shared templates.
|
|
15
|
+
* @param template_index - Template index.
|
|
16
|
+
*/
|
|
17
|
+
constructor(templates: ItemTemplates, template_index: number);
|
|
18
|
+
get weight(): number;
|
|
19
|
+
get length(): number;
|
|
20
|
+
get center_of_gravity_z(): number;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=allocated_item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allocated_item.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/allocated_item.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD;;GAEG;AACH,qBAAa,aAAa;IAEtB,EAAE,SAAI;IACN,EAAE,SAAI;IACN,EAAE,SAAI;IACN,QAAQ,EAAE,YAAY,CAAgB;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;IAEjC;;;OAGG;gBACS,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM;IAM5D,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,mBAAmB,IAAI,MAAM,CAGhC;CACJ"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ROTATION } from '../../contracts/rotation_enum.js';
|
|
2
|
+
/**
|
|
3
|
+
* Allocated cargo item with position in container coordinates.
|
|
4
|
+
*/
|
|
5
|
+
export class AllocatedItem {
|
|
6
|
+
xi = 0;
|
|
7
|
+
yi = 0;
|
|
8
|
+
zi = 0;
|
|
9
|
+
rotation = ROTATION.POS1;
|
|
10
|
+
template_index;
|
|
11
|
+
templates;
|
|
12
|
+
/**
|
|
13
|
+
* @param templates - Shared templates.
|
|
14
|
+
* @param template_index - Template index.
|
|
15
|
+
*/
|
|
16
|
+
constructor(templates, template_index) {
|
|
17
|
+
this.templates = templates;
|
|
18
|
+
this.template_index = template_index;
|
|
19
|
+
}
|
|
20
|
+
get weight() {
|
|
21
|
+
return this.templates.weights[this.template_index];
|
|
22
|
+
}
|
|
23
|
+
get length() {
|
|
24
|
+
return this.templates.get_length(this.template_index, this.rotation);
|
|
25
|
+
}
|
|
26
|
+
get center_of_gravity_z() {
|
|
27
|
+
return this.zi + this.length / 2;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AllocatedItem } from './allocated_item.js';
|
|
2
|
+
import type { ItemTemplates } from './item_templates.js';
|
|
3
|
+
/**
|
|
4
|
+
* Items allocated inside one container sequence.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AllocatedItemManager {
|
|
7
|
+
readonly templates: ItemTemplates;
|
|
8
|
+
private items;
|
|
9
|
+
/**
|
|
10
|
+
* @param templates - Item templates for this container.
|
|
11
|
+
*/
|
|
12
|
+
constructor(templates: ItemTemplates);
|
|
13
|
+
/**
|
|
14
|
+
* @param items - Items to add.
|
|
15
|
+
*/
|
|
16
|
+
add_allocated_items(items: AllocatedItem[]): void;
|
|
17
|
+
/**
|
|
18
|
+
* @returns Item count.
|
|
19
|
+
*/
|
|
20
|
+
count_items(): number;
|
|
21
|
+
/**
|
|
22
|
+
* @returns Item indexes.
|
|
23
|
+
*/
|
|
24
|
+
list_item_indexes(): number[];
|
|
25
|
+
/**
|
|
26
|
+
* @param item_index - Item index.
|
|
27
|
+
* @returns Item instance.
|
|
28
|
+
*/
|
|
29
|
+
get_item(item_index: number): AllocatedItem;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=allocated_item_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"allocated_item_manager.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/allocated_item_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD;;GAEG;AACH,qBAAa,oBAAoB;IAOjB,QAAQ,CAAC,SAAS,EAAE,aAAa;IAL7C,OAAO,CAAC,KAAK,CAAsB;IAEnC;;OAEG;gBACkB,SAAS,EAAE,aAAa;IAI7C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,IAAI;IAKjD;;OAEG;IACH,WAAW,IAAI,MAAM;IAKrB;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAK7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;CAI9C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Items allocated inside one container sequence.
|
|
3
|
+
*/
|
|
4
|
+
export class AllocatedItemManager {
|
|
5
|
+
templates;
|
|
6
|
+
items = [];
|
|
7
|
+
/**
|
|
8
|
+
* @param templates - Item templates for this container.
|
|
9
|
+
*/
|
|
10
|
+
constructor(templates) {
|
|
11
|
+
this.templates = templates;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @param items - Items to add.
|
|
15
|
+
*/
|
|
16
|
+
add_allocated_items(items) {
|
|
17
|
+
this.items.push(...items);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @returns Item count.
|
|
21
|
+
*/
|
|
22
|
+
count_items() {
|
|
23
|
+
return this.items.length;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @returns Item indexes.
|
|
27
|
+
*/
|
|
28
|
+
list_item_indexes() {
|
|
29
|
+
return this.items.map((_item, index) => index);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @param item_index - Item index.
|
|
33
|
+
* @returns Item instance.
|
|
34
|
+
*/
|
|
35
|
+
get_item(item_index) {
|
|
36
|
+
return this.items[item_index];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AllocatedItemManager } from './allocated_item_manager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Center of mass for a load grouper (longitudinal z in chassis coordinates).
|
|
4
|
+
*/
|
|
5
|
+
export declare class CenterOfMass {
|
|
6
|
+
mass: number;
|
|
7
|
+
z: number;
|
|
8
|
+
/**
|
|
9
|
+
* Computes center of mass from allocated items.
|
|
10
|
+
* @param allocated_items - Item manager for one grouper.
|
|
11
|
+
*/
|
|
12
|
+
set_center_of_mass_with_allocated_items(allocated_items: AllocatedItemManager): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=center_of_mass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"center_of_mass.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/center_of_mass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAEvE;;GAEG;AACH,qBAAa,YAAY;IAErB,IAAI,SAAI;IACR,CAAC,SAAI;IAEL;;;OAGG;IACH,uCAAuC,CAAC,eAAe,EAAE,oBAAoB,GAAG,IAAI;CAgBvF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Center of mass for a load grouper (longitudinal z in chassis coordinates).
|
|
3
|
+
*/
|
|
4
|
+
export class CenterOfMass {
|
|
5
|
+
mass = 0;
|
|
6
|
+
z = 0;
|
|
7
|
+
/**
|
|
8
|
+
* Computes center of mass from allocated items.
|
|
9
|
+
* @param allocated_items - Item manager for one grouper.
|
|
10
|
+
*/
|
|
11
|
+
set_center_of_mass_with_allocated_items(allocated_items) {
|
|
12
|
+
let accumulated_weighted_positions = 0;
|
|
13
|
+
this.mass = 0;
|
|
14
|
+
for (const item_index of allocated_items.list_item_indexes()) {
|
|
15
|
+
const item = allocated_items.get_item(item_index);
|
|
16
|
+
accumulated_weighted_positions += item.center_of_gravity_z * item.weight;
|
|
17
|
+
this.mass += item.weight;
|
|
18
|
+
}
|
|
19
|
+
if (this.mass === 0) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
this.z = accumulated_weighted_positions / this.mass;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Transport } from '../transports/transport.js';
|
|
2
|
+
import { MergedContainers } from '../transports/merged_containers.js';
|
|
3
|
+
import { CenterOfMass } from './center_of_mass.js';
|
|
4
|
+
import type { MultiContainerAllocatedItems } from './multi_container_allocated_items.js';
|
|
5
|
+
import type { ChassiForces } from '../models/chassi_forces.js';
|
|
6
|
+
/**
|
|
7
|
+
* @param multi_items - Allocated items across containers.
|
|
8
|
+
* @param merged - Merged container layout.
|
|
9
|
+
* @returns Center of mass map keyed by grouper id.
|
|
10
|
+
*/
|
|
11
|
+
export declare function compute_center_of_mass_by_grouper(multi_items: MultiContainerAllocatedItems, merged: MergedContainers): Record<number, CenterOfMass>;
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
* @param multi_items - Allocated items.
|
|
15
|
+
* @param solve - Model solver from CM map.
|
|
16
|
+
* @returns Chassis forces.
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculate_chassi_forces_from_multi(transport: Transport, multi_items: MultiContainerAllocatedItems, solve: (center_of_mass_by_grouper: Record<number, CenterOfMass>) => ChassiForces): ChassiForces;
|
|
19
|
+
//# sourceMappingURL=compute_grouper_center_of_mass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute_grouper_center_of_mass.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/compute_grouper_center_of_mass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAE9D;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC7C,WAAW,EAAE,4BAA4B,EACzC,MAAM,EAAE,gBAAgB,GACzB,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAY9B;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAC9C,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,4BAA4B,EACzC,KAAK,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,YAAY,GACjF,YAAY,CAKd"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MergedContainers } from '../transports/merged_containers.js';
|
|
2
|
+
import { CenterOfMass } from './center_of_mass.js';
|
|
3
|
+
/**
|
|
4
|
+
* @param multi_items - Allocated items across containers.
|
|
5
|
+
* @param merged - Merged container layout.
|
|
6
|
+
* @returns Center of mass map keyed by grouper id.
|
|
7
|
+
*/
|
|
8
|
+
export function compute_center_of_mass_by_grouper(multi_items, merged) {
|
|
9
|
+
multi_items.merge_allocated_items(merged);
|
|
10
|
+
const result = {};
|
|
11
|
+
for (const grouper of merged.list_grouper_indexes()) {
|
|
12
|
+
const center_of_mass = new CenterOfMass();
|
|
13
|
+
center_of_mass.set_center_of_mass_with_allocated_items(multi_items.get_allocated_items_by_grouper_index(grouper));
|
|
14
|
+
result[grouper] = center_of_mass;
|
|
15
|
+
}
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @param transport - Parsed transport.
|
|
20
|
+
* @param multi_items - Allocated items.
|
|
21
|
+
* @param solve - Model solver from CM map.
|
|
22
|
+
* @returns Chassis forces.
|
|
23
|
+
*/
|
|
24
|
+
export function calculate_chassi_forces_from_multi(transport, multi_items, solve) {
|
|
25
|
+
const merged = new MergedContainers(transport);
|
|
26
|
+
const center_of_mass_by_grouper = compute_center_of_mass_by_grouper(multi_items, merged);
|
|
27
|
+
return solve(center_of_mass_by_grouper);
|
|
28
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { RotationCode } from '../../contracts/rotation_enum.js';
|
|
2
|
+
/**
|
|
3
|
+
* Item dimensions and weights keyed by template index.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ItemTemplates {
|
|
6
|
+
ids: string[];
|
|
7
|
+
weights: number[];
|
|
8
|
+
lengths: number[];
|
|
9
|
+
widths: number[];
|
|
10
|
+
heights: number[];
|
|
11
|
+
private dimensions;
|
|
12
|
+
/**
|
|
13
|
+
* @param item_id - Template id string.
|
|
14
|
+
* @returns Template index.
|
|
15
|
+
*/
|
|
16
|
+
index_of(item_id: string): number;
|
|
17
|
+
/**
|
|
18
|
+
* @param item_data - Ms-faixas or math input item definition.
|
|
19
|
+
*/
|
|
20
|
+
add_template_from_item_data(item_data: Record<string, unknown>): void;
|
|
21
|
+
/**
|
|
22
|
+
* @param template_index - Template index.
|
|
23
|
+
* @param rotation - Rotation code.
|
|
24
|
+
* @returns Length along chassis z for rotation.
|
|
25
|
+
*/
|
|
26
|
+
get_length(template_index: number, rotation?: RotationCode): number;
|
|
27
|
+
/**
|
|
28
|
+
* @param item_data - Math input item row.
|
|
29
|
+
*/
|
|
30
|
+
add_template_from_math_item(item_data: Record<string, unknown>): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=item_templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item_templates.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/item_templates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAIpE;;GAEG;AACH,qBAAa,aAAa;IAEtB,GAAG,EAAE,MAAM,EAAE,CAAK;IAClB,OAAO,EAAE,MAAM,EAAE,CAAK;IACtB,OAAO,EAAE,MAAM,EAAE,CAAK;IACtB,MAAM,EAAE,MAAM,EAAE,CAAK;IACrB,OAAO,EAAE,MAAM,EAAE,CAAK;IACtB,OAAO,CAAC,UAAU,CAAiC;IAEnD;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUjC;;OAEG;IACH,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAcrE;;;;OAIG;IACH,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,GAAE,YAA4B,GAAG,MAAM;IAKlF;;OAEG;IACH,2BAA2B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAIxE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ROTATION } from '../../contracts/rotation_enum.js';
|
|
2
|
+
import { rotate_dimensions } from './rotation_transforms.js';
|
|
3
|
+
/**
|
|
4
|
+
* Item dimensions and weights keyed by template index.
|
|
5
|
+
*/
|
|
6
|
+
export class ItemTemplates {
|
|
7
|
+
ids = [];
|
|
8
|
+
weights = [];
|
|
9
|
+
lengths = [];
|
|
10
|
+
widths = [];
|
|
11
|
+
heights = [];
|
|
12
|
+
dimensions = [];
|
|
13
|
+
/**
|
|
14
|
+
* @param item_id - Template id string.
|
|
15
|
+
* @returns Template index.
|
|
16
|
+
*/
|
|
17
|
+
index_of(item_id) {
|
|
18
|
+
const index = this.ids.indexOf(item_id);
|
|
19
|
+
if (index < 0) {
|
|
20
|
+
throw new Error(`Unknown item id ${item_id}`);
|
|
21
|
+
}
|
|
22
|
+
return index;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @param item_data - Ms-faixas or math input item definition.
|
|
26
|
+
*/
|
|
27
|
+
add_template_from_item_data(item_data) {
|
|
28
|
+
const id = String(item_data.id ?? item_data._id);
|
|
29
|
+
this.ids.push(id);
|
|
30
|
+
this.weights.push(Number(item_data.peso ?? item_data.weight ?? 0));
|
|
31
|
+
const width = Number(item_data.largura ?? item_data.width ?? 0);
|
|
32
|
+
const length = Number(item_data.comprimento ?? item_data.length ?? 0);
|
|
33
|
+
const height = Number(item_data.altura ?? item_data.height ?? 0);
|
|
34
|
+
this.widths.push(width);
|
|
35
|
+
this.lengths.push(length);
|
|
36
|
+
this.heights.push(height);
|
|
37
|
+
this.dimensions.push([width, length, height]);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @param template_index - Template index.
|
|
41
|
+
* @param rotation - Rotation code.
|
|
42
|
+
* @returns Length along chassis z for rotation.
|
|
43
|
+
*/
|
|
44
|
+
get_length(template_index, rotation = ROTATION.POS1) {
|
|
45
|
+
return rotate_dimensions(rotation, this.dimensions[template_index])[1];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @param item_data - Math input item row.
|
|
49
|
+
*/
|
|
50
|
+
add_template_from_math_item(item_data) {
|
|
51
|
+
this.add_template_from_item_data(item_data);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { MergedContainers } from '../transports/merged_containers.js';
|
|
2
|
+
import { AllocatedItemManager } from './allocated_item_manager.js';
|
|
3
|
+
import type { ItemTemplates } from './item_templates.js';
|
|
4
|
+
/**
|
|
5
|
+
* Allocated items grouped by container sequence and merged by grouper.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MultiContainerAllocatedItems {
|
|
8
|
+
allocated_items_by_sequence_index: Record<number, AllocatedItemManager>;
|
|
9
|
+
allocated_items_by_grouper_index: Record<number, AllocatedItemManager>;
|
|
10
|
+
/**
|
|
11
|
+
* @param allocated_items_by_sequence_index - Items per container sequence.
|
|
12
|
+
*/
|
|
13
|
+
constructor(allocated_items_by_sequence_index: Record<number, AllocatedItemManager>);
|
|
14
|
+
/**
|
|
15
|
+
* @param sequence_index - Container sequence id.
|
|
16
|
+
* @returns Manager for sequence.
|
|
17
|
+
*/
|
|
18
|
+
get_allocated_items_by_sequence_index(sequence_index: number): AllocatedItemManager;
|
|
19
|
+
/**
|
|
20
|
+
* @param grouper_index - Grouper id.
|
|
21
|
+
* @returns Manager for grouper.
|
|
22
|
+
*/
|
|
23
|
+
get_allocated_items_by_grouper_index(grouper_index: number): AllocatedItemManager;
|
|
24
|
+
/**
|
|
25
|
+
* @param grouper_index_list - Grouper ids to initialize.
|
|
26
|
+
*/
|
|
27
|
+
create_allocated_items_by_grouper(grouper_index_list: number[]): void;
|
|
28
|
+
/**
|
|
29
|
+
* @param merged_containers - Merged container geometry.
|
|
30
|
+
*/
|
|
31
|
+
merge_allocated_items(merged_containers: MergedContainers): void;
|
|
32
|
+
/**
|
|
33
|
+
* @returns Shared item templates.
|
|
34
|
+
*/
|
|
35
|
+
get_item_templates(): ItemTemplates;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=multi_container_allocated_items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi_container_allocated_items.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/multi_container_allocated_items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExD;;GAEG;AACH,qBAAa,4BAA4B;IAErC,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;IACvE,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAK;IAE3E;;OAEG;gBACS,iCAAiC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAKnF;;;OAGG;IACH,qCAAqC,CAAC,cAAc,EAAE,MAAM,GAAG,oBAAoB;IAKnF;;;OAGG;IACH,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,oBAAoB;IAKjF;;OAEG;IACH,iCAAiC,CAAC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI;IASrE;;OAEG;IACH,qBAAqB,CAAC,iBAAiB,EAAE,gBAAgB,GAAG,IAAI;IAahE;;OAEG;IACH,kBAAkB,IAAI,aAAa;CAMtC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { AllocatedItem } from './allocated_item.js';
|
|
2
|
+
import { AllocatedItemManager } from './allocated_item_manager.js';
|
|
3
|
+
/**
|
|
4
|
+
* Allocated items grouped by container sequence and merged by grouper.
|
|
5
|
+
*/
|
|
6
|
+
export class MultiContainerAllocatedItems {
|
|
7
|
+
allocated_items_by_sequence_index;
|
|
8
|
+
allocated_items_by_grouper_index = {};
|
|
9
|
+
/**
|
|
10
|
+
* @param allocated_items_by_sequence_index - Items per container sequence.
|
|
11
|
+
*/
|
|
12
|
+
constructor(allocated_items_by_sequence_index) {
|
|
13
|
+
this.allocated_items_by_sequence_index = allocated_items_by_sequence_index;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* @param sequence_index - Container sequence id.
|
|
17
|
+
* @returns Manager for sequence.
|
|
18
|
+
*/
|
|
19
|
+
get_allocated_items_by_sequence_index(sequence_index) {
|
|
20
|
+
return this.allocated_items_by_sequence_index[sequence_index];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @param grouper_index - Grouper id.
|
|
24
|
+
* @returns Manager for grouper.
|
|
25
|
+
*/
|
|
26
|
+
get_allocated_items_by_grouper_index(grouper_index) {
|
|
27
|
+
return this.allocated_items_by_grouper_index[grouper_index];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @param grouper_index_list - Grouper ids to initialize.
|
|
31
|
+
*/
|
|
32
|
+
create_allocated_items_by_grouper(grouper_index_list) {
|
|
33
|
+
const templates = this.get_item_templates();
|
|
34
|
+
for (const grouper_index of grouper_index_list) {
|
|
35
|
+
this.allocated_items_by_grouper_index[grouper_index] = new AllocatedItemManager(templates);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* @param merged_containers - Merged container geometry.
|
|
40
|
+
*/
|
|
41
|
+
merge_allocated_items(merged_containers) {
|
|
42
|
+
if (Object.keys(this.allocated_items_by_grouper_index).length > 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.create_allocated_items_by_grouper(merged_containers.list_grouper_indexes());
|
|
46
|
+
for (const grouper of merged_containers.list_grouper_indexes()) {
|
|
47
|
+
merge_grouper_items(this, merged_containers, grouper);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @returns Shared item templates.
|
|
52
|
+
*/
|
|
53
|
+
get_item_templates() {
|
|
54
|
+
const keys = Object.keys(this.allocated_items_by_sequence_index);
|
|
55
|
+
const first_key = Number(keys[0]);
|
|
56
|
+
return this.allocated_items_by_sequence_index[first_key].templates;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @param multi - Multi-container item holder.
|
|
61
|
+
* @param merged - Merged containers.
|
|
62
|
+
* @param grouper - Grouper id.
|
|
63
|
+
*/
|
|
64
|
+
function merge_grouper_items(multi, merged, grouper) {
|
|
65
|
+
const grouped = merged.get_container_by_grouper_index(grouper);
|
|
66
|
+
let last_end = 0;
|
|
67
|
+
for (const sequence_index of grouped.list_containers_sequence_indexes()) {
|
|
68
|
+
const sequence_items = multi.get_allocated_items_by_sequence_index(sequence_index);
|
|
69
|
+
const grouper_items = multi.get_allocated_items_by_grouper_index(grouper);
|
|
70
|
+
for (const item_index of sequence_items.list_item_indexes()) {
|
|
71
|
+
const source = sequence_items.get_item(item_index);
|
|
72
|
+
const item = clone_allocated_item(source);
|
|
73
|
+
item.zi += last_end;
|
|
74
|
+
grouper_items.add_allocated_items([item]);
|
|
75
|
+
}
|
|
76
|
+
const container = grouped.get_container_by_sequence_index(sequence_index);
|
|
77
|
+
last_end += container.length;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* @param source - Sequence-level allocated item.
|
|
82
|
+
* @returns Copy safe to offset for grouper merge.
|
|
83
|
+
*/
|
|
84
|
+
function clone_allocated_item(source) {
|
|
85
|
+
const item = new AllocatedItem(source.templates, source.template_index);
|
|
86
|
+
item.xi = source.xi;
|
|
87
|
+
item.yi = source.yi;
|
|
88
|
+
item.zi = source.zi;
|
|
89
|
+
item.rotation = source.rotation;
|
|
90
|
+
return item;
|
|
91
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RotationCode } from '../../contracts/rotation_enum.js';
|
|
2
|
+
/**
|
|
3
|
+
* @param rotation - Rotation code.
|
|
4
|
+
* @param dimensions - [width, length, height].
|
|
5
|
+
* @returns Rotated [width, length, height].
|
|
6
|
+
*/
|
|
7
|
+
export declare function rotate_dimensions(rotation: RotationCode, dimensions: [number, number, number]): [number, number, number];
|
|
8
|
+
//# sourceMappingURL=rotation_transforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotation_transforms.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/items/rotation_transforms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAgBpE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACrC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAI1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ROTATION } from '../../contracts/rotation_enum.js';
|
|
2
|
+
const WIDTH = 0;
|
|
3
|
+
const LENGTH = 1;
|
|
4
|
+
const HEIGHT = 2;
|
|
5
|
+
const ROTATION_DIM_INDEX = {
|
|
6
|
+
[ROTATION.POS1]: [WIDTH, LENGTH, HEIGHT],
|
|
7
|
+
[ROTATION.POS2]: [WIDTH, HEIGHT, LENGTH],
|
|
8
|
+
[ROTATION.POS3]: [HEIGHT, LENGTH, WIDTH],
|
|
9
|
+
[ROTATION.POS4]: [LENGTH, WIDTH, HEIGHT],
|
|
10
|
+
[ROTATION.POS5]: [HEIGHT, WIDTH, LENGTH],
|
|
11
|
+
[ROTATION.POS6]: [LENGTH, HEIGHT, WIDTH]
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* @param rotation - Rotation code.
|
|
15
|
+
* @param dimensions - [width, length, height].
|
|
16
|
+
* @returns Rotated [width, length, height].
|
|
17
|
+
*/
|
|
18
|
+
export function rotate_dimensions(rotation, dimensions) {
|
|
19
|
+
const index = ROTATION_DIM_INDEX[rotation];
|
|
20
|
+
return [dimensions[index[0]], dimensions[index[1]], dimensions[index[2]]];
|
|
21
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TransportRecord } from '../../contracts/transport_record.js';
|
|
2
|
+
import { Transport } from '../transports/transport.js';
|
|
3
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
4
|
+
import type { AllocatedItemManager } from '../items/allocated_item_manager.js';
|
|
5
|
+
import { ChassiForces } from './chassi_forces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Dispatches to vehicle-specific axle weight models.
|
|
8
|
+
*/
|
|
9
|
+
export declare class AxleWeightModel {
|
|
10
|
+
private readonly model;
|
|
11
|
+
private readonly transport;
|
|
12
|
+
/**
|
|
13
|
+
* @param transport_or_data - Parsed transport or raw wire dict.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport_or_data: Transport | TransportRecord);
|
|
16
|
+
/**
|
|
17
|
+
* @param center_of_mass_by_grouper - Precomputed CM per grouper.
|
|
18
|
+
* @returns Chassis force result.
|
|
19
|
+
*/
|
|
20
|
+
calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper: Record<number, CenterOfMass>): ChassiForces;
|
|
21
|
+
/**
|
|
22
|
+
* @param allocated_by_sequence - Items per container sequence index.
|
|
23
|
+
* @returns Loaded cargo per axle.
|
|
24
|
+
*/
|
|
25
|
+
calculate_weight_on_axles(allocated_by_sequence: Record<number, AllocatedItemManager>): number[];
|
|
26
|
+
/**
|
|
27
|
+
* @param allocated_by_sequence - Items per container sequence index.
|
|
28
|
+
* @returns Utilization percentage per axle.
|
|
29
|
+
*/
|
|
30
|
+
calculate_percentages_on_axles(allocated_by_sequence: Record<number, AllocatedItemManager>): number[];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=axle_weight_model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axle_weight_model.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/models/axle_weight_model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAMtD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAYjD;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IAErC;;OAEG;gBACS,iBAAiB,EAAE,SAAS,GAAG,eAAe;IAQ1D;;;OAGG;IACH,gDAAgD,CAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GACxD,YAAY;IAMf;;;OAGG;IACH,yBAAyB,CACrB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAC5D,MAAM,EAAE;IAMX;;;OAGG;IACH,8BAA8B,CAC1B,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,GAC5D,MAAM,EAAE;CAMd"}
|