{
  "units": "mm",
  "status": "sampled_model_contact",
  "shaft_center_xy_mm": [
    0,
    30.0
  ],
  "radial_bound_mm": 139.48835076808385,
  "axial_bounds_mm": [
    260.9,
    303.0
  ],
  "angle_step_degrees": 15,
  "envelope_containment_volume_tolerance_mm3": 1e-07,
  "model_only_overlap_threshold_mm3": 0.1,
  "rotating_occupancy_solid_count": 5,
  "rotating_part_bounds_mm": {
    "mechanical_fan_photo_reference_provisional": {
      "radial_bound_mm": 139.48835076808385,
      "axial_bounds_mm": [
        275.5190199199919,
        300.4809800800081
      ],
      "material_outside_envelope_mm3": 0.0
    },
    "fan_four_mount_bolts_catalog_length_provisional": {
      "radial_bound_mm": 53.822812951463035,
      "axial_bounds_mm": [
        260.9,
        303.0
      ],
      "material_outside_envelope_mm3": 0.0
    },
    "fan_four_nuts_washers_catalog_reference_provisional": {
      "radial_bound_mm": 54.60000000000001,
      "axial_bounds_mm": [
        266.0,
        299.0
      ],
      "material_outside_envelope_mm3": 0.0
    }
  },
  "stationary_parts": {
    "upper_hose": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "upper_hose_clamp": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "lower_hose": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "lower_hose_clamp": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "radiator_core_comparison": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "radiator_cowl": {
      "status": "sampled_model_contact",
      "conservative_envelope_overlap_mm3": 2405.729172,
      "samples": [
        {
          "angle_degrees": 0,
          "overlap_mm3": 101.552748,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 15,
          "overlap_mm3": 6.285446,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 30,
          "overlap_mm3": 109.708093,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 45,
          "overlap_mm3": 23.775308,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 60,
          "overlap_mm3": 111.76446,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 75,
          "overlap_mm3": 45.908992,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 90,
          "overlap_mm3": 103.365118,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 105,
          "overlap_mm3": 65.725926,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 120,
          "overlap_mm3": 78.835449,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 135,
          "overlap_mm3": 82.304673,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 150,
          "overlap_mm3": 39.049937,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 165,
          "overlap_mm3": 95.919428,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 180,
          "overlap_mm3": 7.719454,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 195,
          "overlap_mm3": 106.220829,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 210,
          "overlap_mm3": 13.587321,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 225,
          "overlap_mm3": 111.705741,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 240,
          "overlap_mm3": 34.976706,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 255,
          "overlap_mm3": 109.239119,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 270,
          "overlap_mm3": 56.208524,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 285,
          "overlap_mm3": 93.402451,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 300,
          "overlap_mm3": 74.416871,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 315,
          "overlap_mm3": 60.008359,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 330,
          "overlap_mm3": 89.472217,
          "above_model_threshold": true
        },
        {
          "angle_degrees": 345,
          "overlap_mm3": 19.807357,
          "above_model_threshold": true
        }
      ],
      "components_at_first_detected_contact_mm3": {
        "mechanical_fan_photo_reference_provisional": 101.552748
      },
      "maximum_sampled_overlap_mm3": 111.76446
    },
    "expansion_tank": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "expansion_cap": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "alternator_case": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    },
    "pump_housing": {
      "status": "no_overlap_volume_with_conservative_envelope",
      "conservative_envelope_overlap_mm3": 0.0,
      "samples": [],
      "components_at_first_detected_contact_mm3": {},
      "maximum_sampled_overlap_mm3": null
    }
  },
  "basis": "Unions of source solids count occupied volume once. A source-solid Boolean difference checks that each component lies inside its filled axial cylinder within the reported containment-volume tolerance; vertex checks alone cannot bound curved faces. A separate filled cylinder bounds each rotating component over its own axial interval. Their union bounds all modeled phases and overestimates material in empty regions; it does not extend the blade radius over every fixing projection. Only candidate envelope overlaps need sampled Boolean intersections.",
  "limits": "Angles are sampled, not a continuous collision solver. Zero sampled contact with positive envelope overlap is inconclusive. Envelope non-overlap is a model volume result, not a minimum gap or fitted clearance; tangencies and volumes below the computational thresholds are not certified. Containment is a numerical solid-volume check, not an exact mathematical proof. The included fan and fixing groups rotate with assumed rigid relative clocking. Clutch, pump sheave, belt motion, loose hardware and independent motion are omitted. Car geometry, shaft pose, hoses, cowl, blade pitch/profile and fitted condition remain unverified.",
  "fixing_projection_beyond_blade_front_mm": 2.5190199199918766,
  "fan_size_datums_mm": {
    "shaft_center_xy_mm": [
      0,
      30.0
    ],
    "fixed_front_view_x_span_mm": 276.90000446878537,
    "swept_radius_mm": 139.48835076808385,
    "swept_diameter_mm": 278.9767015361677,
    "size_basis": "photo-estimated public geometry",
    "limits": "Model envelopes about the shaft, not measured clearance. Blade profile/pitch, hub, installation and surrounding car geometry remain provisional; a fixed X span is not the swept diameter."
  },
  "fan_fixing_axial_datums": {
    "under_head_lengths_mm": [
      38.1,
      38.1,
      38.1,
      38.1
    ],
    "head_heights_mm": [
      4.0,
      4.0,
      4.0,
      4.0
    ],
    "washer_thicknesses_mm": [
      1.0,
      1.0,
      1.0,
      1.0
    ],
    "modeled_head_seating_z_mm": 299.0,
    "modeled_head_seating_z_by_fixing_mm": [
      299.0,
      299.0,
      299.0,
      299.0
    ],
    "modeled_fan_front_z_mm": 298,
    "modeled_nut_z_interval_mm": [
      266,
      272
    ],
    "shank_covers_modeled_nut_interval": [
      true,
      true,
      true,
      true
    ],
    "basis": "Per-position direct readings where present in provenance; remaining bolt lengths use the 38.1 mm catalog comparison, head heights the 4 mm estimate and washer thicknesses the 1 mm estimate. Each head and its unchanged-length shank follow its own washer front. The fan-front station, washer profile/diameters, nut heights and rear seating planes remain estimates. An uncovered nut interval identifies a model mismatch; a covered interval does not establish thread engagement, fitted direction, or access."
  },
  "source_sha256": {
    "audit_fan_rotation.py": "b8c776e89b1808d2dc4518b0d2da4c5033cdba3fbcc387fe4c9b2d5ea2fe98d2",
    "build_engine.py": "ca77f253fbc7c1f88294ab9f03c20c304df2933744ee9b34160da58e1b6f0b63",
    "owner_measurements.py": "137f1419e3d33baeb23aff73bb7ea3e79e545e4361dbb29f58e96cdabb25e3af",
    "cad-data.json": "f79d8ed5408729eb91c00b5eb5ffb6c3af8e8fef07738bf8846767d2fd088eeb"
  },
  "required_capture": [
    "Inspect all fitted blades and record maximum shaft-center-to-intact-tip radius, count, marking, tip width and damaged/missing regions during safe planned access.",
    "Locate the fitted shaft axis and blade axial extremes in one named frame; survey blade pitch/profile rather than assuming the comparison loft.",
    "Record every fixing head side, shank length and nut/washer stack height. From a plane normal to the shaft through the foremost intact blade point, measure each fixing's signed axial projection, positive toward the core. Preserve the installed state and record the core plane/tilt; catalog-shaped fixings and the model's parallel core face are not fitted measurements.",
    "Record the actual hoses, clamp screws, cowl/apron and core surfaces in that frame, including the unmodeled hose ends and nearby body parts.",
    "Measure minimum fitted gaps using the appropriate stopped-engine inspection method; model rotation samples cannot authorize running or establish a removal path."
  ]
}
