@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,91 @@
|
|
|
1
|
+
import { MsFaixasContract } from '../../contracts/ms_faixas_contract.js';
|
|
2
|
+
import { Transport } from '../transports/transport.js';
|
|
3
|
+
import { Chassi } from '../transports/chassi.js';
|
|
4
|
+
import { MergedContainers } from '../transports/merged_containers.js';
|
|
5
|
+
import { AxleWeightModel } from '../models/axle_weight_model.js';
|
|
6
|
+
import { build_axle_weights_output, select_axles_for_grouper } from './axle_weight_output_builder.js';
|
|
7
|
+
const TRANSPORT_LIST_FLAG = 'envs';
|
|
8
|
+
const TRANSPORT_ID_FLAG = 'idCaminhao';
|
|
9
|
+
const CONTAINERS_FLAG = 'conteiners';
|
|
10
|
+
const SEQUENCE_FLAG = 'sequencia';
|
|
11
|
+
const FAIXAS_FLAG = 'faixas';
|
|
12
|
+
const TARE_FLAG = 'tara';
|
|
13
|
+
const ITEMS_FLAG = 'items';
|
|
14
|
+
const MAX_SUPPORTED_FLAG = 'pesoSuportado';
|
|
15
|
+
const CENTER_OF_GRAVITY_FLAG = 'centroGravidade';
|
|
16
|
+
const AXLE_WEIGHTS_FLAG = 'pesoEixos';
|
|
17
|
+
/**
|
|
18
|
+
* Full ms-faixas axle weight pipeline (Python AxleWeightService port).
|
|
19
|
+
*/
|
|
20
|
+
export class AxleWeightService {
|
|
21
|
+
transport;
|
|
22
|
+
chassi;
|
|
23
|
+
allocated_by_sequence;
|
|
24
|
+
/**
|
|
25
|
+
* @param input_data - Ms-faixas payload with envs.
|
|
26
|
+
*/
|
|
27
|
+
constructor(input_data) {
|
|
28
|
+
const contract = new MsFaixasContract(input_data);
|
|
29
|
+
this.transport = new Transport(contract.transport_data);
|
|
30
|
+
this.chassi = new Chassi(this.transport);
|
|
31
|
+
this.allocated_by_sequence = contract.allocated_items_by_sequence_id;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @returns Math output with envs and pesoEixos per container.
|
|
35
|
+
*/
|
|
36
|
+
run() {
|
|
37
|
+
return {
|
|
38
|
+
[TRANSPORT_LIST_FLAG]: [{
|
|
39
|
+
[TRANSPORT_ID_FLAG]: this.transport.id,
|
|
40
|
+
[CONTAINERS_FLAG]: this.build_containers_data()
|
|
41
|
+
}]
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
build_containers_data() {
|
|
45
|
+
const weights_by_sequence = this.evaluate_weight_on_axles();
|
|
46
|
+
const center_of_gravity = {};
|
|
47
|
+
for (const sequence of this.transport.list_containers_sequence_indexes()) {
|
|
48
|
+
center_of_gravity[sequence] = 0;
|
|
49
|
+
}
|
|
50
|
+
return this.transport.list_containers_sequence_indexes().map((sequence) => {
|
|
51
|
+
const container = this.transport.get_container_by_sequence_index(sequence);
|
|
52
|
+
return {
|
|
53
|
+
[SEQUENCE_FLAG]: container.sequence_index,
|
|
54
|
+
[FAIXAS_FLAG]: [],
|
|
55
|
+
[TARE_FLAG]: 0,
|
|
56
|
+
[ITEMS_FLAG]: [],
|
|
57
|
+
[MAX_SUPPORTED_FLAG]: container.max_supported_weight,
|
|
58
|
+
[CENTER_OF_GRAVITY_FLAG]: center_of_gravity[sequence],
|
|
59
|
+
[AXLE_WEIGHTS_FLAG]: weights_by_sequence[sequence] ?? []
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
evaluate_weight_on_axles() {
|
|
64
|
+
const model = new AxleWeightModel(this.transport);
|
|
65
|
+
const weight_on_axles = model.calculate_weight_on_axles(this.allocated_by_sequence);
|
|
66
|
+
const merged = new MergedContainers(this.transport);
|
|
67
|
+
const result = {};
|
|
68
|
+
for (const grouper of merged.list_grouper_indexes()) {
|
|
69
|
+
this.assign_grouper_axle_outputs({
|
|
70
|
+
grouper,
|
|
71
|
+
grouped: merged.get_container_by_grouper_index(grouper),
|
|
72
|
+
weight_on_axles,
|
|
73
|
+
result
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
assign_grouper_axle_outputs(input) {
|
|
79
|
+
const sequences = input.grouped.list_containers_sequence_indexes();
|
|
80
|
+
const axles = select_axles_for_grouper(this.transport, input.grouper);
|
|
81
|
+
input.result[sequences[0]] = build_axle_weights_output({
|
|
82
|
+
transport: this.transport,
|
|
83
|
+
chassi: this.chassi,
|
|
84
|
+
axles_indexes: axles,
|
|
85
|
+
weight_on_axles: input.weight_on_axles
|
|
86
|
+
});
|
|
87
|
+
for (let index = 1; index < sequences.length; index++) {
|
|
88
|
+
input.result[sequences[index]] = [];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TransportRecord } from '../../contracts/transport_record.js';
|
|
2
|
+
/**
|
|
3
|
+
* Center-of-mass-driven axle weight service (port of CMAxleWeightService).
|
|
4
|
+
*/
|
|
5
|
+
export declare class CmAxleWeightService {
|
|
6
|
+
/**
|
|
7
|
+
* @param cm_axle_weight_data - Transport dict with center_of_mass map.
|
|
8
|
+
* @returns Loaded cargo weight per axle.
|
|
9
|
+
*/
|
|
10
|
+
calculate(cm_axle_weight_data: TransportRecord): number[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=cm_axle_weight_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cm_axle_weight_service.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/services/cm_axle_weight_service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAI1E;;GAEG;AACH,qBAAa,mBAAmB;IAE5B;;;OAGG;IACH,SAAS,CAAC,mBAAmB,EAAE,eAAe,GAAG,MAAM,EAAE;CAU5D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { WIRE_FLAGS } from '../../contracts/wire_flags.js';
|
|
2
|
+
import { CenterOfMass } from '../items/center_of_mass.js';
|
|
3
|
+
import { AxleWeightModel } from '../models/axle_weight_model.js';
|
|
4
|
+
/**
|
|
5
|
+
* Center-of-mass-driven axle weight service (port of CMAxleWeightService).
|
|
6
|
+
*/
|
|
7
|
+
export class CmAxleWeightService {
|
|
8
|
+
/**
|
|
9
|
+
* @param cm_axle_weight_data - Transport dict with center_of_mass map.
|
|
10
|
+
* @returns Loaded cargo weight per axle.
|
|
11
|
+
*/
|
|
12
|
+
calculate(cm_axle_weight_data) {
|
|
13
|
+
const model = new AxleWeightModel(cm_axle_weight_data);
|
|
14
|
+
const center_of_mass_by_grouper = read_center_of_mass_map(cm_axle_weight_data[WIRE_FLAGS.CM_SERVICE_CENTER_OF_MASS]);
|
|
15
|
+
const chassi_forces = model.calculate_chassi_forces_with_load_center_of_mass(center_of_mass_by_grouper);
|
|
16
|
+
return chassi_forces.list_axles_indexes().map((index) => chassi_forces.get_force_on_axle(index));
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @param cm_data - Wire center_of_mass map.
|
|
21
|
+
* @returns Grouper id to CenterOfMass.
|
|
22
|
+
*/
|
|
23
|
+
function read_center_of_mass_map(cm_data) {
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const grouper_key of Object.keys(cm_data)) {
|
|
26
|
+
const entry = cm_data[grouper_key];
|
|
27
|
+
const center_of_mass = new CenterOfMass();
|
|
28
|
+
center_of_mass.mass = Number(entry[WIRE_FLAGS.CM_SERVICE_MASS]);
|
|
29
|
+
center_of_mass.z = Number(entry[WIRE_FLAGS.CM_SERVICE_Z]);
|
|
30
|
+
result[Number(grouper_key)] = center_of_mass;
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container corner force distribution (ISSUE-349).
|
|
3
|
+
*/
|
|
4
|
+
export declare class ContainerCornerForces {
|
|
5
|
+
private readonly input_data;
|
|
6
|
+
private readonly x_box_center;
|
|
7
|
+
private readonly z_box_center;
|
|
8
|
+
private readonly y_box_center;
|
|
9
|
+
private readonly weight_box;
|
|
10
|
+
private total_mass;
|
|
11
|
+
private x_cm;
|
|
12
|
+
private y_cm;
|
|
13
|
+
private z_cm;
|
|
14
|
+
private force_on_door;
|
|
15
|
+
private force_on_right_corner_door;
|
|
16
|
+
private force_on_left_corner_door;
|
|
17
|
+
private force_on_end_wall;
|
|
18
|
+
private force_on_right_corner_end_wall;
|
|
19
|
+
private force_on_left_corner_end_wall;
|
|
20
|
+
/**
|
|
21
|
+
* @param input_data - Items and container dimensions.
|
|
22
|
+
*/
|
|
23
|
+
constructor(input_data: Record<string, unknown>);
|
|
24
|
+
/** Computes center of gravity from item boxes. */
|
|
25
|
+
calculate_cm(): void;
|
|
26
|
+
/** Computes corner reaction forces including container tare split. */
|
|
27
|
+
calculate_corner_forces(): void;
|
|
28
|
+
/**
|
|
29
|
+
* @returns Response JSON.
|
|
30
|
+
*/
|
|
31
|
+
json(): Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=container_corner_forces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container_corner_forces.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/services/container_corner_forces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,qBAAqB;IAoBlB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAlBvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,0BAA0B,CAAI;IACtC,OAAO,CAAC,yBAAyB,CAAI;IACrC,OAAO,CAAC,iBAAiB,CAAI;IAC7B,OAAO,CAAC,8BAA8B,CAAI;IAC1C,OAAO,CAAC,6BAA6B,CAAI;IAEzC;;OAEG;gBAC0B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAahE,kDAAkD;IAClD,YAAY,IAAI,IAAI;IAOpB,sEAAsE;IACtE,uBAAuB,IAAI,IAAI;IAkB/B;;OAEG;IACH,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAkBlC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container corner force distribution (ISSUE-349).
|
|
3
|
+
*/
|
|
4
|
+
export class ContainerCornerForces {
|
|
5
|
+
input_data;
|
|
6
|
+
x_box_center = [];
|
|
7
|
+
z_box_center = [];
|
|
8
|
+
y_box_center = [];
|
|
9
|
+
weight_box = [];
|
|
10
|
+
total_mass = 0;
|
|
11
|
+
x_cm = 0;
|
|
12
|
+
y_cm = 0;
|
|
13
|
+
z_cm = 0;
|
|
14
|
+
force_on_door = null;
|
|
15
|
+
force_on_right_corner_door = 0;
|
|
16
|
+
force_on_left_corner_door = 0;
|
|
17
|
+
force_on_end_wall = 0;
|
|
18
|
+
force_on_right_corner_end_wall = 0;
|
|
19
|
+
force_on_left_corner_end_wall = 0;
|
|
20
|
+
/**
|
|
21
|
+
* @param input_data - Items and container dimensions.
|
|
22
|
+
*/
|
|
23
|
+
constructor(input_data) {
|
|
24
|
+
this.input_data = input_data;
|
|
25
|
+
const items = input_data.items;
|
|
26
|
+
for (const item of items) {
|
|
27
|
+
this.x_box_center.push(Number(item.x) + 0.5 * Number(item.width));
|
|
28
|
+
this.z_box_center.push(Number(item.z) + 0.5 * Number(item.length));
|
|
29
|
+
this.y_box_center.push(Number(item.y) + 0.5 * Number(item.height));
|
|
30
|
+
this.weight_box.push(Number(item.weight));
|
|
31
|
+
}
|
|
32
|
+
this.total_mass = this.weight_box.reduce((sum, weight) => sum + weight, 0);
|
|
33
|
+
}
|
|
34
|
+
/** Computes center of gravity from item boxes. */
|
|
35
|
+
calculate_cm() {
|
|
36
|
+
this.x_cm = dot(this.x_box_center, this.weight_box) / this.total_mass;
|
|
37
|
+
this.z_cm = dot(this.z_box_center, this.weight_box) / this.total_mass;
|
|
38
|
+
this.y_cm = dot(this.y_box_center, this.weight_box) / this.total_mass;
|
|
39
|
+
}
|
|
40
|
+
/** Computes corner reaction forces including container tare split. */
|
|
41
|
+
calculate_corner_forces() {
|
|
42
|
+
const container = this.input_data.container;
|
|
43
|
+
const container_length = Number(container.length);
|
|
44
|
+
const container_width = Number(container.width);
|
|
45
|
+
this.force_on_door = (this.z_cm * this.total_mass) / container_length;
|
|
46
|
+
this.force_on_right_corner_door = (this.x_cm * this.force_on_door) / container_width;
|
|
47
|
+
this.force_on_left_corner_door = this.force_on_door - this.force_on_right_corner_door;
|
|
48
|
+
this.force_on_end_wall = this.total_mass - this.force_on_door;
|
|
49
|
+
this.force_on_right_corner_end_wall = (this.x_cm * this.force_on_end_wall) / container_width;
|
|
50
|
+
this.force_on_left_corner_end_wall = this.force_on_end_wall - this.force_on_right_corner_end_wall;
|
|
51
|
+
const tare_quarter = 0.25 * Number(container.tare);
|
|
52
|
+
this.force_on_right_corner_door += tare_quarter;
|
|
53
|
+
this.force_on_left_corner_door += tare_quarter;
|
|
54
|
+
this.force_on_right_corner_end_wall += tare_quarter;
|
|
55
|
+
this.force_on_left_corner_end_wall += tare_quarter;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @returns Response JSON.
|
|
59
|
+
*/
|
|
60
|
+
json() {
|
|
61
|
+
const response = {
|
|
62
|
+
centerOfGravity: { x: this.x_cm, y: this.y_cm, z: this.z_cm }
|
|
63
|
+
};
|
|
64
|
+
if (this.force_on_door !== null) {
|
|
65
|
+
response.corner_forces = {
|
|
66
|
+
force_on_door: this.force_on_door,
|
|
67
|
+
force_on_right_corner_door: this.force_on_right_corner_door,
|
|
68
|
+
force_on_left_corner_door: this.force_on_left_corner_door,
|
|
69
|
+
force_on_end_wall: this.force_on_end_wall,
|
|
70
|
+
force_on_right_corner_end_wall: this.force_on_right_corner_end_wall,
|
|
71
|
+
force_on_left_corner_end_wall: this.force_on_left_corner_end_wall
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return response;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* @param values - Value list.
|
|
79
|
+
* @param weights - Weight list.
|
|
80
|
+
* @returns Weighted sum.
|
|
81
|
+
*/
|
|
82
|
+
function dot(values, weights) {
|
|
83
|
+
return values.reduce((sum, value, index) => sum + value * weights[index], 0);
|
|
84
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AxleRecord } from './axle_record.js';
|
|
2
|
+
import type { TransportRecord } from '../../contracts/transport_record.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ordered axle list for a transport.
|
|
5
|
+
*/
|
|
6
|
+
export declare class AxleManager {
|
|
7
|
+
axles: AxleRecord[];
|
|
8
|
+
/**
|
|
9
|
+
* @param transport_data - Raw transport JSON.
|
|
10
|
+
*/
|
|
11
|
+
constructor(transport_data: TransportRecord);
|
|
12
|
+
/**
|
|
13
|
+
* @returns Axle index list [0..n-1].
|
|
14
|
+
*/
|
|
15
|
+
list_axles_indexes(): number[];
|
|
16
|
+
/**
|
|
17
|
+
* @param axle_index - Zero-based axle index.
|
|
18
|
+
* @returns Axle at index.
|
|
19
|
+
*/
|
|
20
|
+
get_axle(axle_index: number): AxleRecord;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=axle_manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axle_manager.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/axle_manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAE1E;;GAEG;AACH,qBAAa,WAAW;IAEpB,KAAK,EAAE,UAAU,EAAE,CAAA;IAEnB;;OAEG;gBACS,cAAc,EAAE,eAAe;IAc3C;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE;IAK9B;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;CAI3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { WIRE_FLAGS } from '../../contracts/wire_flags.js';
|
|
2
|
+
import { AxleRecord } from './axle_record.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ordered axle list for a transport.
|
|
5
|
+
*/
|
|
6
|
+
export class AxleManager {
|
|
7
|
+
axles;
|
|
8
|
+
/**
|
|
9
|
+
* @param transport_data - Raw transport JSON.
|
|
10
|
+
*/
|
|
11
|
+
constructor(transport_data) {
|
|
12
|
+
const axles_data = transport_data[WIRE_FLAGS.AXLE_LIST];
|
|
13
|
+
this.axles = [];
|
|
14
|
+
if (!Array.isArray(axles_data)) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
for (const axle_data of axles_data) {
|
|
18
|
+
this.axles.push(new AxleRecord(axle_data));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* @returns Axle index list [0..n-1].
|
|
23
|
+
*/
|
|
24
|
+
list_axles_indexes() {
|
|
25
|
+
return this.axles.map((_axle, index) => index);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* @param axle_index - Zero-based axle index.
|
|
29
|
+
* @returns Axle at index.
|
|
30
|
+
*/
|
|
31
|
+
get_axle(axle_index) {
|
|
32
|
+
return this.axles[axle_index];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single axle geometry and capacity from wire JSON.
|
|
3
|
+
*/
|
|
4
|
+
export declare class AxleRecord {
|
|
5
|
+
distance_from_previous_axle: number;
|
|
6
|
+
max_supported_weight: number;
|
|
7
|
+
sequence_index: number;
|
|
8
|
+
dnit_weight_limit: number;
|
|
9
|
+
tare: number;
|
|
10
|
+
loaded_weight: number;
|
|
11
|
+
is_connected_to: number | null;
|
|
12
|
+
/**
|
|
13
|
+
* @param axle_data - Raw axle object from transport JSON.
|
|
14
|
+
*/
|
|
15
|
+
constructor(axle_data: Record<string, unknown>);
|
|
16
|
+
/**
|
|
17
|
+
* @returns Shallow copy of axle wire fields.
|
|
18
|
+
*/
|
|
19
|
+
to_wire(): Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=axle_record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axle_record.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/axle_record.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,UAAU;IAEnB,2BAA2B,EAAE,MAAM,CAAA;IACnC,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAE9B;;OAEG;gBACS,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW9C;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAWrC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { WIRE_FLAGS } from '../../contracts/wire_flags.js';
|
|
2
|
+
/**
|
|
3
|
+
* Single axle geometry and capacity from wire JSON.
|
|
4
|
+
*/
|
|
5
|
+
export class AxleRecord {
|
|
6
|
+
distance_from_previous_axle;
|
|
7
|
+
max_supported_weight;
|
|
8
|
+
sequence_index;
|
|
9
|
+
dnit_weight_limit;
|
|
10
|
+
tare;
|
|
11
|
+
loaded_weight;
|
|
12
|
+
is_connected_to;
|
|
13
|
+
/**
|
|
14
|
+
* @param axle_data - Raw axle object from transport JSON.
|
|
15
|
+
*/
|
|
16
|
+
constructor(axle_data) {
|
|
17
|
+
this.distance_from_previous_axle = read_number(axle_data, WIRE_FLAGS.DISTANCE_FROM_ORIGIN);
|
|
18
|
+
this.max_supported_weight = read_number(axle_data, WIRE_FLAGS.MAX_SUPPORTED_WEIGHT);
|
|
19
|
+
this.sequence_index = read_number(axle_data, WIRE_FLAGS.SEQUENCE_CONTAINER);
|
|
20
|
+
this.dnit_weight_limit = read_number(axle_data, WIRE_FLAGS.DNIT_WEIGHT);
|
|
21
|
+
this.tare = read_number(axle_data, WIRE_FLAGS.TARE);
|
|
22
|
+
this.loaded_weight = read_optional_number(axle_data, 'pesoCarregado') ?? 0;
|
|
23
|
+
this.is_connected_to = read_optional_number(axle_data, 'mergeOnAxleIndex');
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @returns Shallow copy of axle wire fields.
|
|
27
|
+
*/
|
|
28
|
+
to_wire() {
|
|
29
|
+
return {
|
|
30
|
+
distanciaOrigem: this.distance_from_previous_axle,
|
|
31
|
+
pesoMaxSuportado: this.max_supported_weight,
|
|
32
|
+
pesoDnit: this.dnit_weight_limit,
|
|
33
|
+
tara: this.tare,
|
|
34
|
+
sequenciaContainer: this.sequence_index,
|
|
35
|
+
mergeOnAxleIndex: this.is_connected_to
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @param data - Source object.
|
|
41
|
+
* @param key - Field key.
|
|
42
|
+
* @returns Parsed number.
|
|
43
|
+
*/
|
|
44
|
+
function read_number(data, key) {
|
|
45
|
+
return Number(data[key]);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @param data - Source object.
|
|
49
|
+
* @param key - Field key.
|
|
50
|
+
* @returns Parsed number or null.
|
|
51
|
+
*/
|
|
52
|
+
function read_optional_number(data, key) {
|
|
53
|
+
if (data[key] === undefined || data[key] === null) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return Number(data[key]);
|
|
57
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type ChassiReference } from '../../contracts/chassi_reference.js';
|
|
2
|
+
import type { Transport } from './transport.js';
|
|
3
|
+
/**
|
|
4
|
+
* Chassis geometry reference frame for equilibrium models.
|
|
5
|
+
*/
|
|
6
|
+
export declare class Chassi {
|
|
7
|
+
private first_axle_distance;
|
|
8
|
+
private axle_positions;
|
|
9
|
+
private pin_positions;
|
|
10
|
+
private grouper_start;
|
|
11
|
+
private grouper_end;
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport: Transport);
|
|
16
|
+
/**
|
|
17
|
+
* @param axle_index - Zero-based axle index.
|
|
18
|
+
* @param chassi_reference - Reference frame.
|
|
19
|
+
* @returns Axle position.
|
|
20
|
+
*/
|
|
21
|
+
get_axle_position(axle_index: number, chassi_reference: ChassiReference): number;
|
|
22
|
+
/**
|
|
23
|
+
* @param pin_index - Zero-based pin index.
|
|
24
|
+
* @param chassi_reference - Reference frame.
|
|
25
|
+
* @returns Pin position.
|
|
26
|
+
*/
|
|
27
|
+
get_pin_position(pin_index: number, chassi_reference: ChassiReference): number;
|
|
28
|
+
/**
|
|
29
|
+
* @param grouper_index - Grouper id (1-based).
|
|
30
|
+
* @param chassi_reference - Reference frame.
|
|
31
|
+
* @returns Grouper end position.
|
|
32
|
+
*/
|
|
33
|
+
get_grouper_end(grouper_index: number, chassi_reference: ChassiReference): number;
|
|
34
|
+
/**
|
|
35
|
+
* @param chassi_reference - Reference frame.
|
|
36
|
+
* @returns Offset for reference change.
|
|
37
|
+
*/
|
|
38
|
+
private chassi_reference_change_value;
|
|
39
|
+
/**
|
|
40
|
+
* @param transport - Parsed transport.
|
|
41
|
+
*/
|
|
42
|
+
private calculate_axles_positions;
|
|
43
|
+
/**
|
|
44
|
+
* @param merged_containers - Merged grouper geometry.
|
|
45
|
+
*/
|
|
46
|
+
private calculate_groupers_positions;
|
|
47
|
+
/**
|
|
48
|
+
* @param merged_containers - Merged grouper geometry.
|
|
49
|
+
*/
|
|
50
|
+
private calculate_pins_positions;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=chassi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chassi.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/chassi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG/C;;GAEG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,mBAAmB,CAAQ;IACnC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,WAAW,CAAe;IAElC;;OAEG;gBACS,SAAS,EAAE,SAAS;IAShC;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,GAAG,MAAM;IAMhF;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,GAAG,MAAM;IAM9E;;;;OAIG;IACH,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,eAAe,GAAG,MAAM;IAMjF;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAarC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAepC;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAgBnC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { CHASSI_REFERENCE } from '../../contracts/chassi_reference.js';
|
|
2
|
+
import { MergedContainers } from './merged_containers.js';
|
|
3
|
+
/**
|
|
4
|
+
* Chassis geometry reference frame for equilibrium models.
|
|
5
|
+
*/
|
|
6
|
+
export class Chassi {
|
|
7
|
+
first_axle_distance;
|
|
8
|
+
axle_positions = [];
|
|
9
|
+
pin_positions = [];
|
|
10
|
+
grouper_start = [];
|
|
11
|
+
grouper_end = [];
|
|
12
|
+
/**
|
|
13
|
+
* @param transport - Parsed transport.
|
|
14
|
+
*/
|
|
15
|
+
constructor(transport) {
|
|
16
|
+
this.first_axle_distance = transport.first_axle_distance;
|
|
17
|
+
const merged = new MergedContainers(transport);
|
|
18
|
+
this.calculate_groupers_positions(merged);
|
|
19
|
+
this.calculate_axles_positions(transport);
|
|
20
|
+
this.calculate_pins_positions(merged);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* @param axle_index - Zero-based axle index.
|
|
24
|
+
* @param chassi_reference - Reference frame.
|
|
25
|
+
* @returns Axle position.
|
|
26
|
+
*/
|
|
27
|
+
get_axle_position(axle_index, chassi_reference) {
|
|
28
|
+
return this.axle_positions[axle_index]
|
|
29
|
+
+ this.chassi_reference_change_value(chassi_reference);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @param pin_index - Zero-based pin index.
|
|
33
|
+
* @param chassi_reference - Reference frame.
|
|
34
|
+
* @returns Pin position.
|
|
35
|
+
*/
|
|
36
|
+
get_pin_position(pin_index, chassi_reference) {
|
|
37
|
+
return this.pin_positions[pin_index]
|
|
38
|
+
+ this.chassi_reference_change_value(chassi_reference);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @param grouper_index - Grouper id (1-based).
|
|
42
|
+
* @param chassi_reference - Reference frame.
|
|
43
|
+
* @returns Grouper end position.
|
|
44
|
+
*/
|
|
45
|
+
get_grouper_end(grouper_index, chassi_reference) {
|
|
46
|
+
return this.grouper_end[grouper_index - 1]
|
|
47
|
+
+ this.chassi_reference_change_value(chassi_reference);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* @param chassi_reference - Reference frame.
|
|
51
|
+
* @returns Offset for reference change.
|
|
52
|
+
*/
|
|
53
|
+
chassi_reference_change_value(chassi_reference) {
|
|
54
|
+
if (chassi_reference === CHASSI_REFERENCE.GROUPER_1) {
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
if (chassi_reference === CHASSI_REFERENCE.GROUPER_2) {
|
|
58
|
+
return -this.grouper_start[1];
|
|
59
|
+
}
|
|
60
|
+
return this.first_axle_distance;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* @param transport - Parsed transport.
|
|
64
|
+
*/
|
|
65
|
+
calculate_axles_positions(transport) {
|
|
66
|
+
this.axle_positions = [-this.first_axle_distance];
|
|
67
|
+
const indexes = transport.axle_manager.list_axles_indexes();
|
|
68
|
+
for (let index = 1; index < indexes.length; index++) {
|
|
69
|
+
const axle = transport.axle_manager.get_axle(index);
|
|
70
|
+
const previous = this.axle_positions[index - 1];
|
|
71
|
+
this.axle_positions.push(previous + axle.distance_from_previous_axle);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @param merged_containers - Merged grouper geometry.
|
|
76
|
+
*/
|
|
77
|
+
calculate_groupers_positions(merged_containers) {
|
|
78
|
+
const first = merged_containers.get_container_by_grouper_index(1);
|
|
79
|
+
this.grouper_start = [0];
|
|
80
|
+
this.grouper_end = [first.length];
|
|
81
|
+
if (merged_containers.list_grouper_indexes().length <= 1) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const second = merged_containers.get_container_by_grouper_index(2);
|
|
85
|
+
const second_start = this.grouper_end[0] + (second.container_distance_ahead ?? 0);
|
|
86
|
+
this.grouper_start.push(second_start);
|
|
87
|
+
this.grouper_end.push(second_start + second.length);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @param merged_containers - Merged grouper geometry.
|
|
91
|
+
*/
|
|
92
|
+
calculate_pins_positions(merged_containers) {
|
|
93
|
+
const first = merged_containers.get_container_by_grouper_index(1);
|
|
94
|
+
this.pin_positions = [first.main_pin_distance ?? 0];
|
|
95
|
+
if (merged_containers.list_grouper_indexes().length <= 1) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const second = merged_containers.get_container_by_grouper_index(2);
|
|
99
|
+
if (second.main_pin_distance === null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const second_pin = this.grouper_start[1] + second.main_pin_distance;
|
|
103
|
+
this.pin_positions.push(second_pin);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Container segment from wire JSON.
|
|
3
|
+
*/
|
|
4
|
+
export declare class ContainerRecord {
|
|
5
|
+
length: number;
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
sequence_index: number;
|
|
9
|
+
main_pin_distance: number | null;
|
|
10
|
+
container_distance_ahead: number | null;
|
|
11
|
+
grouper: number;
|
|
12
|
+
max_supported_weight: number;
|
|
13
|
+
tare: number;
|
|
14
|
+
supported_weight: number;
|
|
15
|
+
raw: Record<string, unknown>;
|
|
16
|
+
/**
|
|
17
|
+
* @param data - Raw container object.
|
|
18
|
+
*/
|
|
19
|
+
constructor(data: Record<string, unknown>);
|
|
20
|
+
/**
|
|
21
|
+
* @returns Container volume (length × width × height).
|
|
22
|
+
*/
|
|
23
|
+
volume(): number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=container_record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container_record.d.ts","sourceRoot":"","sources":["../../../../src/core/physics/transports/container_record.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,eAAe;IAExB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,oBAAoB,EAAE,MAAM,CAAA;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE5B;;OAEG;gBACS,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAezC;;OAEG;IACH,MAAM,IAAI,MAAM;CAInB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { WIRE_FLAGS } from '../../contracts/wire_flags.js';
|
|
2
|
+
/**
|
|
3
|
+
* Container segment from wire JSON.
|
|
4
|
+
*/
|
|
5
|
+
export class ContainerRecord {
|
|
6
|
+
length;
|
|
7
|
+
width;
|
|
8
|
+
height;
|
|
9
|
+
sequence_index;
|
|
10
|
+
main_pin_distance;
|
|
11
|
+
container_distance_ahead;
|
|
12
|
+
grouper;
|
|
13
|
+
max_supported_weight;
|
|
14
|
+
tare;
|
|
15
|
+
supported_weight;
|
|
16
|
+
raw;
|
|
17
|
+
/**
|
|
18
|
+
* @param data - Raw container object.
|
|
19
|
+
*/
|
|
20
|
+
constructor(data) {
|
|
21
|
+
this.length = Number(data[WIRE_FLAGS.LENGTH]);
|
|
22
|
+
this.width = Number(data[WIRE_FLAGS.WIDTH]);
|
|
23
|
+
this.height = Number(data[WIRE_FLAGS.HEIGHT]);
|
|
24
|
+
this.sequence_index = Number(data[WIRE_FLAGS.SEQUENCE]);
|
|
25
|
+
this.main_pin_distance = read_optional(data[WIRE_FLAGS.MAIN_PIN_DISTANCE]);
|
|
26
|
+
this.container_distance_ahead = read_optional(data[WIRE_FLAGS.CONTAINER_DISTANCE_AHEAD]);
|
|
27
|
+
this.grouper = Number(data[WIRE_FLAGS.GROUPER]);
|
|
28
|
+
this.max_supported_weight = Number(data[WIRE_FLAGS.MAX_SUPPORTED_WEIGHT] ?? 0);
|
|
29
|
+
this.tare = Number(data[WIRE_FLAGS.TARE] ?? 0);
|
|
30
|
+
this.supported_weight = this.max_supported_weight - this.tare;
|
|
31
|
+
this.raw = { ...data };
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* @returns Container volume (length × width × height).
|
|
35
|
+
*/
|
|
36
|
+
volume() {
|
|
37
|
+
return this.length * this.width * this.height;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @param value - Wire field value.
|
|
42
|
+
* @returns Number or null.
|
|
43
|
+
*/
|
|
44
|
+
function read_optional(value) {
|
|
45
|
+
if (value === undefined || value === null) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return Number(value);
|
|
49
|
+
}
|