@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,316 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "code",
|
|
5
|
+
"execution_count": 1,
|
|
6
|
+
"metadata": {},
|
|
7
|
+
"outputs": [],
|
|
8
|
+
"source": [
|
|
9
|
+
"import numpy as np\n"
|
|
10
|
+
]
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"cell_type": "code",
|
|
14
|
+
"execution_count": 2,
|
|
15
|
+
"metadata": {},
|
|
16
|
+
"outputs": [],
|
|
17
|
+
"source": [
|
|
18
|
+
"# Empresa\n",
|
|
19
|
+
" # JettaCargo Standard\n",
|
|
20
|
+
"\n",
|
|
21
|
+
"# Transport\n",
|
|
22
|
+
" # Link: https://route.jettacargo.com.br/contenedores/64397f27f0edce0027432250\n",
|
|
23
|
+
" # ID\n",
|
|
24
|
+
" # LQG9648 | HMV9725\n",
|
|
25
|
+
"\n",
|
|
26
|
+
" # Description\n",
|
|
27
|
+
" # LQG9648 | HMV9725 | TRUCADO | 06 EIXOS | SOMA\n",
|
|
28
|
+
"\n",
|
|
29
|
+
"# Body\n",
|
|
30
|
+
"length_body = 13\n",
|
|
31
|
+
"king_pin_distance = 1.6\n",
|
|
32
|
+
"\n",
|
|
33
|
+
"# Axles distances\n",
|
|
34
|
+
"distance_axle_0_to_container = 2.25\n",
|
|
35
|
+
"distance_axle_0_to_axle_1 = 4.2\n",
|
|
36
|
+
"distance_axle_1_to_axle_2 = 7.7\n",
|
|
37
|
+
"\n",
|
|
38
|
+
"# Tare\n",
|
|
39
|
+
"total_tare = 16000\n",
|
|
40
|
+
"\n",
|
|
41
|
+
"# Load:\n",
|
|
42
|
+
" # Link: https://route.jettacargo.com.br/loads/64397f28f0edce0027432257\n",
|
|
43
|
+
" # Coils\n",
|
|
44
|
+
" # Mass | Length | Position JettaCargo\n",
|
|
45
|
+
"# Load performed by JettaCargo\n",
|
|
46
|
+
"# coil_load = np.array([\n",
|
|
47
|
+
"# [9410, 1.21, 1.746],\n",
|
|
48
|
+
"# [11345, 1.21, 6.299],\n",
|
|
49
|
+
"# [11365, 1.2, 9.37]\n",
|
|
50
|
+
"# ])\n",
|
|
51
|
+
"# Load performed by User\n",
|
|
52
|
+
"# coil_load = np.array([\n",
|
|
53
|
+
"# [9410, 1.21, 8.185],\n",
|
|
54
|
+
"# [11345, 1.21, 1.112],\n",
|
|
55
|
+
"# [11365, 1.2, 10.018]\n",
|
|
56
|
+
"# ])\n",
|
|
57
|
+
"# Load performed by Everton\n",
|
|
58
|
+
"coil_load = np.array([\n",
|
|
59
|
+
" [9410, 1.21, 7.5],\n",
|
|
60
|
+
" [11345, 1.21, 1.05],\n",
|
|
61
|
+
" [11365, 1.2, 9.8]\n",
|
|
62
|
+
" ])\n"
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"cell_type": "code",
|
|
67
|
+
"execution_count": 3,
|
|
68
|
+
"metadata": {},
|
|
69
|
+
"outputs": [],
|
|
70
|
+
"source": [
|
|
71
|
+
"# Tare Distribuition\n",
|
|
72
|
+
"tare_distribution = np.array([0.286, 0.379, 0.335])\n",
|
|
73
|
+
"\n",
|
|
74
|
+
"## semi trailer\n",
|
|
75
|
+
"p_st = (distance_axle_0_to_axle_1 + distance_axle_1_to_axle_2) - distance_axle_0_to_container\n",
|
|
76
|
+
"p_st_p = king_pin_distance\n",
|
|
77
|
+
"\n",
|
|
78
|
+
"## tractor trailer\n",
|
|
79
|
+
"p_tt_1 = distance_axle_0_to_axle_1\n",
|
|
80
|
+
"p_tt_p = distance_axle_0_to_container + king_pin_distance\n"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"cell_type": "code",
|
|
85
|
+
"execution_count": 4,
|
|
86
|
+
"metadata": {},
|
|
87
|
+
"outputs": [],
|
|
88
|
+
"source": [
|
|
89
|
+
"a_reactions_matrix = np.array([[0, p_tt_1, -p_tt_p, 0],\n",
|
|
90
|
+
" [1, 1, -1, 0],\n",
|
|
91
|
+
" [0, 0, p_st_p, p_st],\n",
|
|
92
|
+
" [0, 0, 1, 1]])\n",
|
|
93
|
+
"\n",
|
|
94
|
+
"b11 = 0\n",
|
|
95
|
+
"b21 = 0\n",
|
|
96
|
+
"b31 = 0\n",
|
|
97
|
+
"b41 = 0\n",
|
|
98
|
+
"const_B_eq_I = 0\n",
|
|
99
|
+
"const_B_eq_II = 0\n",
|
|
100
|
+
"\n",
|
|
101
|
+
"for coil in coil_load:\n",
|
|
102
|
+
"\n",
|
|
103
|
+
" coil_mass = coil[0]\n",
|
|
104
|
+
" coil_length = coil[1]\n",
|
|
105
|
+
" coil_position = coil[2]\n",
|
|
106
|
+
"\n",
|
|
107
|
+
" p_b = coil_position + coil_length/2\n",
|
|
108
|
+
" b31 = b31 + p_b * coil_mass\n",
|
|
109
|
+
" b41 = b41 + coil_mass\n",
|
|
110
|
+
"\n",
|
|
111
|
+
" if (p_b < p_st_p):\n",
|
|
112
|
+
" const_B_eq_I = const_B_eq_I + (coil_mass/6)*pow((p_st_p - p_b),3)\n",
|
|
113
|
+
"\n",
|
|
114
|
+
" if (p_b < p_st): \n",
|
|
115
|
+
" const_B_eq_II = const_B_eq_II + (coil_mass/6)*pow((p_st - p_b),3)\n",
|
|
116
|
+
" \n",
|
|
117
|
+
"b_reactions_matrix = np.array([[b11],\n",
|
|
118
|
+
" [b21],\n",
|
|
119
|
+
" [b31],\n",
|
|
120
|
+
" [b41],])"
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"cell_type": "code",
|
|
125
|
+
"execution_count": 5,
|
|
126
|
+
"metadata": {},
|
|
127
|
+
"outputs": [],
|
|
128
|
+
"source": [
|
|
129
|
+
"reactions_semitrailer_truck = np.linalg.solve(a_reactions_matrix,b_reactions_matrix)\n",
|
|
130
|
+
"\n",
|
|
131
|
+
"Rp = float(reactions_semitrailer_truck[2])\n",
|
|
132
|
+
"Rst = float(reactions_semitrailer_truck[3])\n",
|
|
133
|
+
"\n",
|
|
134
|
+
"reaction_Axle_1 = reactions_semitrailer_truck[0] + total_tare*tare_distribution[0]\n",
|
|
135
|
+
"reaction_Axle_2 = reactions_semitrailer_truck[1] + total_tare*tare_distribution[1]\n",
|
|
136
|
+
"reaction_Axle_3 = reactions_semitrailer_truck[3] + total_tare*tare_distribution[2]"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"cell_type": "code",
|
|
141
|
+
"execution_count": 6,
|
|
142
|
+
"metadata": {},
|
|
143
|
+
"outputs": [
|
|
144
|
+
{
|
|
145
|
+
"name": "stdout",
|
|
146
|
+
"output_type": "stream",
|
|
147
|
+
"text": [
|
|
148
|
+
"Eixo 1: [5577.22127329] | [92.95368789]%\n",
|
|
149
|
+
"Eixo 2: [17077.43400621] | [100.45549415]%\n",
|
|
150
|
+
"Pino Rei: [12014.6552795]\n",
|
|
151
|
+
"Eixo 3: [25465.3447205] | [99.86409694]%\n"
|
|
152
|
+
]
|
|
153
|
+
}
|
|
154
|
+
],
|
|
155
|
+
"source": [
|
|
156
|
+
"print(f'Eixo 1: {reaction_Axle_1} | {(reaction_Axle_1/6000)*100}%')\n",
|
|
157
|
+
"print(f'Eixo 2: {reaction_Axle_2} | {(reaction_Axle_2/17000)*100}%')\n",
|
|
158
|
+
"print(f'Pino Rei: {reactions_semitrailer_truck[2]}')\n",
|
|
159
|
+
"print(f'Eixo 3: {reaction_Axle_3} | {(reaction_Axle_3/25500)*100}%')"
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"cell_type": "code",
|
|
164
|
+
"execution_count": 7,
|
|
165
|
+
"metadata": {},
|
|
166
|
+
"outputs": [],
|
|
167
|
+
"source": [
|
|
168
|
+
"# Deflection curve\n",
|
|
169
|
+
"a_const_matrix = np.array([[p_st_p, 1.0],\n",
|
|
170
|
+
" [p_st, 1.0]])\n",
|
|
171
|
+
"\n",
|
|
172
|
+
"b11_const = const_B_eq_I\n",
|
|
173
|
+
"b21_const = (-Rp/6)*pow((p_st-p_st_p),3) + const_B_eq_II\n",
|
|
174
|
+
"\n",
|
|
175
|
+
"b_const_matrix = np.array([[b11_const],\n",
|
|
176
|
+
" [b21_const]])\n",
|
|
177
|
+
"\n",
|
|
178
|
+
"\n",
|
|
179
|
+
"const_c1_c2 = np.linalg.solve(a_const_matrix,b_const_matrix)\n",
|
|
180
|
+
"const_c1 = float(const_c1_c2[0])\n",
|
|
181
|
+
"const_c2 = float(const_c1_c2[1])"
|
|
182
|
+
]
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"cell_type": "code",
|
|
186
|
+
"execution_count": 8,
|
|
187
|
+
"metadata": {},
|
|
188
|
+
"outputs": [],
|
|
189
|
+
"source": [
|
|
190
|
+
"# Elastic Curve\n",
|
|
191
|
+
"\n",
|
|
192
|
+
"number_of_samples = 10000\n",
|
|
193
|
+
"x_elastic_curve = np.linspace(0,length_body,number_of_samples,endpoint=True)\n",
|
|
194
|
+
"y_sample = np.zeros(number_of_samples)\n",
|
|
195
|
+
"\n",
|
|
196
|
+
"def calculate_result(x_elastic_curve, y_sample, coil_load, p_st, p_st_p, Rp, Rst):\n",
|
|
197
|
+
"\n",
|
|
198
|
+
" \n",
|
|
199
|
+
" for idx, x in enumerate(x_elastic_curve):\n",
|
|
200
|
+
" Rp_contribution = 0 # King Pin contribuition\n",
|
|
201
|
+
" Rst_contribution = 0 # Axle 3 contribuition\n",
|
|
202
|
+
" B_contribution = 0 # Load contribuition\n",
|
|
203
|
+
"\n",
|
|
204
|
+
" for coil in coil_load:\n",
|
|
205
|
+
"\n",
|
|
206
|
+
" coil_mass = coil[0]\n",
|
|
207
|
+
" coil_length = coil[1]\n",
|
|
208
|
+
" coil_position = coil[2]\n",
|
|
209
|
+
" x_b = coil_position + coil_length/2\n",
|
|
210
|
+
"\n",
|
|
211
|
+
" if (x - x_b > 0):\n",
|
|
212
|
+
" B_contribution = B_contribution + (-coil_mass/6)*pow((x - x_b),3)\n",
|
|
213
|
+
" else:\n",
|
|
214
|
+
" B_contribution = B_contribution\n",
|
|
215
|
+
"\n",
|
|
216
|
+
" if (x - p_st_p > 0):\n",
|
|
217
|
+
" Rp_contribution = (Rp/6)*pow((x - p_st_p),3)\n",
|
|
218
|
+
" else:\n",
|
|
219
|
+
" Rp_contribution = 0\n",
|
|
220
|
+
"\n",
|
|
221
|
+
" if (x - p_st > 0):\n",
|
|
222
|
+
" Rst_contribution = (Rst/6)*pow((x - p_st),3)\n",
|
|
223
|
+
" else:\n",
|
|
224
|
+
" Rst_contribution = 0\n",
|
|
225
|
+
"\n",
|
|
226
|
+
" y_sample[idx] = B_contribution + Rp_contribution + Rst_contribution + const_c1*x + const_c2\n",
|
|
227
|
+
"\n",
|
|
228
|
+
" return y_sample\n"
|
|
229
|
+
]
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"cell_type": "code",
|
|
233
|
+
"execution_count": 11,
|
|
234
|
+
"metadata": {},
|
|
235
|
+
"outputs": [
|
|
236
|
+
{
|
|
237
|
+
"data": {
|
|
238
|
+
"image/png": "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",
|
|
239
|
+
"text/plain": [
|
|
240
|
+
"<Figure size 640x480 with 1 Axes>"
|
|
241
|
+
]
|
|
242
|
+
},
|
|
243
|
+
"metadata": {},
|
|
244
|
+
"output_type": "display_data"
|
|
245
|
+
}
|
|
246
|
+
],
|
|
247
|
+
"source": [
|
|
248
|
+
"import matplotlib.pyplot as plt\n",
|
|
249
|
+
"\n",
|
|
250
|
+
"y_elastic_curve = calculate_result(x_elastic_curve, y_sample, coil_load,p_st,p_st_p,Rp,Rst)\n",
|
|
251
|
+
"\n",
|
|
252
|
+
"plt.plot(x_elastic_curve,y_elastic_curve,'o')\n",
|
|
253
|
+
"plt.show()"
|
|
254
|
+
]
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"cell_type": "code",
|
|
258
|
+
"execution_count": 12,
|
|
259
|
+
"metadata": {},
|
|
260
|
+
"outputs": [
|
|
261
|
+
{
|
|
262
|
+
"name": "stdout",
|
|
263
|
+
"output_type": "stream",
|
|
264
|
+
"text": [
|
|
265
|
+
"12376.313416159517\n"
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
"source": [
|
|
270
|
+
"elastic_curve_std = np.std(y_elastic_curve)\n",
|
|
271
|
+
"print(elastic_curve_std)"
|
|
272
|
+
]
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"cell_type": "code",
|
|
276
|
+
"execution_count": null,
|
|
277
|
+
"metadata": {},
|
|
278
|
+
"outputs": [],
|
|
279
|
+
"source": []
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"cell_type": "code",
|
|
283
|
+
"execution_count": null,
|
|
284
|
+
"metadata": {},
|
|
285
|
+
"outputs": [],
|
|
286
|
+
"source": []
|
|
287
|
+
}
|
|
288
|
+
],
|
|
289
|
+
"metadata": {
|
|
290
|
+
"kernelspec": {
|
|
291
|
+
"display_name": "Python 3.10.8 64-bit",
|
|
292
|
+
"language": "python",
|
|
293
|
+
"name": "python3"
|
|
294
|
+
},
|
|
295
|
+
"language_info": {
|
|
296
|
+
"codemirror_mode": {
|
|
297
|
+
"name": "ipython",
|
|
298
|
+
"version": 3
|
|
299
|
+
},
|
|
300
|
+
"file_extension": ".py",
|
|
301
|
+
"mimetype": "text/x-python",
|
|
302
|
+
"name": "python",
|
|
303
|
+
"nbconvert_exporter": "python",
|
|
304
|
+
"pygments_lexer": "ipython3",
|
|
305
|
+
"version": "3.7.2"
|
|
306
|
+
},
|
|
307
|
+
"orig_nbformat": 4,
|
|
308
|
+
"vscode": {
|
|
309
|
+
"interpreter": {
|
|
310
|
+
"hash": "afe3add611ffbdc025c97d7436df3247b20b152cbdbbf7a6c3483ee10e38e546"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"nbformat": 4,
|
|
315
|
+
"nbformat_minor": 2
|
|
316
|
+
}
|