{
 "source": "PSA_project_plan.pdf (5 Nov 2026)",
 "frame": "mm, z up, room SW floor corner origin",
 "status_rule": "no supplier drawings: nothing KNOWN; ESTIMATE = catalogue-typical/practice, UNKNOWN = not chosen",
 "rig_2L": {
  "info": {
   "litres": 2,
   "R": 83.0,
   "Ri": 81.0,
   "zc": 1108.0,
   "N": 1256.0,
   "S": 1240.0,
   "level": 1096.4,
   "slurry_mL": 874.6,
   "fill_pct": 43.7,
   "paddle_r": 45.0,
   "paddle_flat_z": 1082.0,
   "tc_tip": 1075.2,
   "neck_bore": 26.0,
   "top_z": 2104.0
  },
  "clashes": [
   {
    "a": "HEATING_MANTLE",
    "b": "CUTOFF_SENSOR",
    "overlap_mm3": 490.8,
    "verdict": "INTERFACE",
    "reason": "sensor sits in the mantle by design"
   }
  ],
  "hood_overlaps": [],
  "hood_headroom_mm": 46.0,
  "joint_lift_mm": 75.0,
  "depth_behind_sash_mm": 270.0,
  "paddle_to_flask_mm": 10.0,
  "paddle_to_thermocouple_mm": 23.5,
  "paddle_submerged_mm": 14.4,
  "tc_immersion_mm": 21.1,
  "paddle_vs_neck_bore": {
   "paddle_width_mm": 90.0,
   "bore_mm": 26.0,
   "passes": false
  },
  "criteria": [
   {
    "check": "No unintended clash in the rig",
    "pass": true
   },
   {
    "check": "Rig inside the hood interior (no overlap with carcass/sash at 500 mm)",
    "pass": true
   },
   {
    "check": "Headroom to the hood ceiling >= 40 mm",
    "pass": true
   },
   {
    "check": "Lift room above the top joint >= 40 mm (NS 29/32 engagement 32 mm)",
    "pass": true
   },
   {
    "check": "Everything >= 150 mm behind the sash",
    "pass": true
   },
   {
    "check": "Paddle sweep >= 5 mm from the flask wall",
    "pass": true
   },
   {
    "check": "Paddle sweep >= 5 mm from the thermocouple",
    "pass": true
   },
   {
    "check": "Flask <= 50 % full",
    "pass": true
   },
   {
    "check": "Paddle under the slurry surface",
    "pass": true
   },
   {
    "check": "Thermocouple tip >= 20 mm immersed",
    "pass": true
   },
   {
    "check": "Rigid paddle passes the centre-neck bore",
    "pass": false
   }
  ],
  "glb": {
   "file": "psa_rig_2L.glb",
   "bytes": 358896,
   "triangles": 18531,
   "nodes": 31,
   "tol_mm": 0.4,
   "sha256": "ea0887c106ea4c6e974d5a7ebf917dd5c096581db749fbeac10d8bbc8b3d0ff1"
  },
  "step": {
   "file": "psa_rig_2L.step",
   "bytes": 1417163,
   "sha256": "669eb93e2eea8796bf866977baa7eff34f8e927059848d9945a45f9f954ad67a"
  }
 },
 "rig_3L": {
  "info": {
   "litres": 3,
   "R": 93.0,
   "Ri": 91.0,
   "zc": 1118.0,
   "N": 1276.0,
   "S": 1260.0,
   "level": 1103.3,
   "slurry_mL": 1199.5,
   "fill_pct": 40.0,
   "paddle_r": 50.0,
   "paddle_flat_z": 1087.0,
   "tc_tip": 1079.1,
   "neck_bore": 26.0,
   "top_z": 2124.0
  },
  "clashes": [
   {
    "a": "HEATING_MANTLE",
    "b": "CUTOFF_SENSOR",
    "overlap_mm3": 490.8,
    "verdict": "INTERFACE",
    "reason": "sensor sits in the mantle by design"
   }
  ],
  "hood_overlaps": [],
  "hood_headroom_mm": 26.0,
  "joint_lift_mm": 55.0,
  "depth_behind_sash_mm": 265.0,
  "paddle_to_flask_mm": 10.0,
  "paddle_to_thermocouple_mm": 26.5,
  "paddle_submerged_mm": 16.3,
  "tc_immersion_mm": 24.2,
  "paddle_vs_neck_bore": {
   "paddle_width_mm": 100.0,
   "bore_mm": 26.0,
   "passes": false
  },
  "criteria": [
   {
    "check": "No unintended clash in the rig",
    "pass": true
   },
   {
    "check": "Rig inside the hood interior (no overlap with carcass/sash at 500 mm)",
    "pass": true
   },
   {
    "check": "Headroom to the hood ceiling >= 40 mm",
    "pass": false
   },
   {
    "check": "Lift room above the top joint >= 40 mm (NS 29/32 engagement 32 mm)",
    "pass": true
   },
   {
    "check": "Everything >= 150 mm behind the sash",
    "pass": true
   },
   {
    "check": "Paddle sweep >= 5 mm from the flask wall",
    "pass": true
   },
   {
    "check": "Paddle sweep >= 5 mm from the thermocouple",
    "pass": true
   },
   {
    "check": "Flask <= 50 % full",
    "pass": true
   },
   {
    "check": "Paddle under the slurry surface",
    "pass": true
   },
   {
    "check": "Thermocouple tip >= 20 mm immersed",
    "pass": true
   },
   {
    "check": "Rigid paddle passes the centre-neck bore",
    "pass": false
   }
  ],
  "glb": {
   "file": "psa_rig_3L.glb",
   "bytes": 370756,
   "triangles": 19191,
   "nodes": 31,
   "tol_mm": 0.4,
   "sha256": "2d2b0f2314a87bdebc67b972ea2d7a3d2b3d3700ab8f5f410d1d9def0bfb2a6f"
  },
  "step": {
   "file": "psa_rig_3L.step",
   "bytes": 1426892,
   "sha256": "c7c60d002f9e822224111bf3a2862eef229c5d7ad996210c4281c91f63c882b2"
  }
 },
 "room": {
  "clashes": [
   {
    "a": "HEATING_MANTLE",
    "b": "CUTOFF_SENSOR",
    "overlap_mm3": 490.8,
    "verdict": "INTERFACE",
    "reason": "sensor sits in the mantle by design"
   }
  ],
  "zones": [
   {
    "zone": "ZONE_EGRESS",
    "part": "SAFETY_SHOWER",
    "overlap_mm3": 44296.5,
    "verdict": "ACCEPTED",
    "reason": "pull handle hangs in the route at 1.9 m by design"
   },
   {
    "zone": "ZONE_SHOWER",
    "part": "SAFETY_SHOWER",
    "overlap_mm3": 44296.5,
    "verdict": "ACCEPTED",
    "reason": "pull handle hangs in the route at 1.9 m by design"
   }
  ],
  "walk_mm": {
   "eyewash": 2600,
   "shower": 3850,
   "door_centre": 4500
  },
  "hood_face_to_mm": {
   "door_centre": 3026,
   "balance": 2030,
   "makeup_grille": 2600
  },
  "ventilation": {
   "room_m3": 39.2,
   "free_m3": 34.8,
   "hood_exhaust_m3h": 1215,
   "enclosure_exhaust_m3h": 300,
   "air_changes_per_h": 38.6,
   "makeup_needed_m3h": 1515,
   "grille_face_velocity_ms": 1.75
  },
  "o2_depletion": {
   "10L_200bar": {
    "gas_m3": 1.9,
    "o2_pct": 19.8,
    "ok_19_5": true
   },
   "20L_200bar": {
    "gas_m3": 3.7,
    "o2_pct": 18.7,
    "ok_19_5": false
   },
   "50L_200bar": {
    "gas_m3": 9.3,
    "o2_pct": 15.3,
    "ok_19_5": false
   }
  },
  "criteria": [
   {
    "check": "No unintended clash between furniture",
    "pass": true
   },
   {
    "check": "Keep-clear zones empty",
    "pass": true
   },
   {
    "check": "Eyewash and shower <= 10 s walk (< 10 m)",
    "pass": true
   },
   {
    "check": "Balance >= 1.5 m from the hood face",
    "pass": true
   },
   {
    "check": "Make-up grille >= 1.5 m from the hood face",
    "pass": true
   },
   {
    "check": "Chosen N2 cylinder (10 L) keeps O2 >= 19.5 % on full release",
    "pass": true
   }
  ],
  "glb": {
   "file": "psa_room.glb",
   "bytes": 433912,
   "triangles": 21106,
   "nodes": 73,
   "tol_mm": 2.0,
   "sha256": "76cbc1f3b7165551f7cf33fa4a8a6b49efed097da1f276c35b6fbc5aa715930a"
  },
  "step": {
   "file": "psa_room.step",
   "bytes": 2148224,
   "sha256": "cf6c03ed0dc775dc04eaad72a71e84267d1a3d844b7b5cb359483549074ec5bc"
  }
 }
}