# Panel Lift input control — align job.json to Eriksson's HandlingData Will 2026-08-28: "照着写一下 panel lift 的输入控制" — the sample .ewf files in `sample data/design/` are the reference (12 EWF + 4 PDF). This document maps OUR job.json to Eriksson's HandlingData so the input control speaks the same shape. Code changes wait for Claude's review (Monday); this is the mapping to review. ## Current job.json (liftexport.export) ``` panel: mark / design / length/width/thickness / weight / lifters[flat] / blockouts / fc/fci / prestress(strands) rigging: mode / sling_angle_deg / group_tolerance_ft <- GLOBAL stages: [name, ...] <- thin per-stage ``` ## Eriksson EWF HandlingData ``` FaceLifters / SideEdgeLifters / TopEdgeLifters: <- per-kind capacity CapacityMethod, Tension/Shear/Initial/Final capacities, Name, ID Stripping / Transportation / PrimaryErection / SecondaryErection: Options: LoadMultiplier (stripping 1.4) TiltAngle / Min / Max SlingAngleComputationMethod / SlingAngle FaceLiftersOnOneCraneLine AddGroundReaction EdgeLiftersCarryTotalWeight TopCraneLineCarriesWeight ConcreteStrength (initial/final) LiftType / StressLimit Lifters[] <- per-stage selection DunnageBlocks[] <- per-stage Rigging[] <- per-stage ``` ## Mapping (our field -> EWF) | ours | EWF | note | |---|---|---| | panel.lifters[].family | FaceLifters/Side/Top kind | split by family role | | panel.lifters[].capacity_lb | FaceLifters.TensionCapacity | per kind now | | panel.lifters[].shear_capacity_lb | FaceLifters.ShearCapacity | | | panel.lifters[].basis_fc | CapacityMethod | initial/final | | rigging.sling_angle_deg | stage.Options.SlingAngle | PER-STAGE now | | rigging.mode | stage.Options.LiftType / SlingAngleMethod | | | (none) | stage.Options.LoadMultiplier | stripping 1.4 default | | (none) | stage.Options.TiltAngle min/max | new input | | (none) | stage.Options.AddGroundReaction | new input | | stages[].lifters | stage.Lifters | per-stage selection | | dunnage (global?) | stage.DunnageBlocks | per-stage | | (none) | stage.Rigging | per-stage rigging | ## What this buys - The engineer's input control speaks Eriksson's vocabulary (sling angle per stage, tilt limits, ground reaction) instead of our global rigging. - The PDF results (per-stage reactions / stress tables) come from the same per-stage structure, so output alignment follows input alignment. ## Open questions for Will 1. Which stages do we keep? EWF has 4 (Stripping/Transportation/ Primary/Secondary Erection); we have stripping/erection (+dunnage). 2. LiftType / StressLimit enums: match EWF numeric codes? 3. Do we adopt EWF's per-stage Rigging (sling config per stage) or keep one global rigging for now? ## Files touched when approved - `WillTools.extension/lib/vibe/liftexport.py` (job structure) - `panellift/src/panellift/*` (analyse_job consumes the new shape) - `WillTools.extension/WillTools.tab/Design.panel/DesignHub.pulldown/PanelLiftCheck.pushbutton/script.py` (moved here 2026-09-05 from `Tools.panel/PanelLiftCheck.pushbutton/`)