diff --git a/html/work-package-suite-app.js b/html/work-package-suite-app.js
index 6f40a55..803b011 100644
--- a/html/work-package-suite-app.js
+++ b/html/work-package-suite-app.js
@@ -179,11 +179,10 @@ const BIM_CONSTRAINTS = [
{name:'Issued-For-Fabrication (IFF) Granted', description:'Model approved for field use — EN06-SOP §9.4'}
];
const BIM_SEQUENCE = [
- 'Project start — gather required docs', 'Kick-off (LOD, schedule, cost code)',
+ 'Kick-off (LOD, schedule, cost code)', 'Project start — gather required docs',
'Field coordination / laser scan', 'Model racks, instruments & panels',
'Model conduit (after schedule + redlines)', 'BIM coordination / clash with GC & trades',
- 'Constructability review (CRS)', 'GC submission & sign-off (IFF)',
- '2D installation sheets', 'As-built (scan / redlines)'
+ 'Constructability review (CRS)', 'GC submission & sign-off (IFF)'
];
const BIM_SOURCES = [
{label:'IO List (Point Matrix DB)', ph:'controls.dev / SharePoint'},
@@ -223,7 +222,9 @@ function enableBIM(){
// BIM sign-off roles (optional), reference sources, and process steps (idempotent).
BIM_TEMPLATE_ROLES.forEach(r => { if(!state.signoffRoles.some(x => x.role === r)) state.signoffRoles.push({role:r, name:'', bim:true}); });
renderOptionalRoles();
- BIM_SEQUENCE.forEach(lbl => { if(!state.sequence.some(s => s.label === lbl)) state.sequence.push({label:lbl, kind:'step', bim:true}); });
+ // BIM work precedes construction, so put the BIM steps at the FRONT of the sequence.
+ const bimSteps = BIM_SEQUENCE.filter(lbl => !state.sequence.some(s => s.label === lbl)).map(lbl => ({label:lbl, kind:'step', bim:true}));
+ state.sequence = [...bimSteps, ...state.sequence];
renderSequenceSteps();
BIM_SOURCES.forEach(s => { if(!state.sources.some(x => x.label === s.label)) state.sources.push({label:s.label, system:'', notes:'', link:'', ph:s.ph, preset:true, bim:true}); });
renderSources();
@@ -303,9 +304,7 @@ function loadSampleData(){
document.getElementById('proj_cm').value = 'K. Boyd';
document.getElementById('proj_qm').value = 'D. Nguyen';
- // Step 3 — standard required roles (sample is an install-only project)
- state.bimEnabled = false;
- const beEl = document.getElementById('bim_enabled'); if(beEl) beEl.checked = false;
+ // Step 3 — standard required roles
if(state.signoffRoles[0]) state.signoffRoles[0].role = 'Superintendent';
if(state.signoffRoles[1]) state.signoffRoles[1].role = 'Foreman';
const stEl = document.getElementById('role_super_title'); if(stEl) stEl.value = 'Superintendent';
@@ -326,7 +325,13 @@ function loadSampleData(){
document.getElementById('qual_hold').value = 'HOLD: Prime QAQC to inspect rough-in before cover/cover-up.\nWITNESS: Client QC to observe megger test before energization.';
// Step 7 already has defaults
-
+
+ // The Micron FMCS sample includes BIM/VDC — enable it so the sequence shows the
+ // full BIM → construction flow (BIM steps first) and the Creator offers IWP/EWP.
+ state.bimEnabled = true;
+ const beEl = document.getElementById('bim_enabled'); if(beEl) beEl.checked = true;
+ enableBIM();
+
// Collect all data
collectStepData();
track('sample_loaded');
@@ -674,13 +679,27 @@ function addCustomConstraintText(){
renderStandardConstraints();
}
-const DEFAULT_SEQUENCE = ['Layout','Conduit Install','Tray Install','Wire Pull','Device Install','Termination','QC Inspection','Commissioning'];
+// Default construction flow (used when BIM is off; the BIM steps are prepended when
+// the project includes BIM/VDC). Includes QC-hold gates. Items may be strings or
+// {label, kind} objects.
+const DEFAULT_SEQUENCE = [
+ {label:'2D installation sheets / Spool Drawings', kind:'step'},
+ {label:'Conduit Install', kind:'step'},
+ {label:'Tray Install', kind:'step'},
+ {label:'QC Hold', kind:'gate'},
+ {label:'Wire Pull', kind:'step'},
+ {label:'Device Install', kind:'step'},
+ {label:'Termination', kind:'step'},
+ {label:'QC Hold', kind:'gate'},
+ {label:'Commissioning', kind:'step'},
+ {label:'As-built (scan / redlines)', kind:'step'}
+];
let seqDragIndex = null;
function renderSequenceSteps(){
const container = document.getElementById('sequence-list');
if(!container) return;
- if(!state.sequence.length) state.sequence = DEFAULT_SEQUENCE.map(s=>({label:s,kind:'step'}));
+ if(!state.sequence.length) state.sequence = DEFAULT_SEQUENCE.map(s=> typeof s==='string' ? {label:s,kind:'step'} : {label:s.label, kind:s.kind||'step'});
container.innerHTML = '';
let stepNo = 0;
state.sequence.forEach((item,i)=>{