How should your warehouse be laid out — and how much space does each zone really need?¿Cómo debería distribuirse tu almacén — y cuánto espacio necesita realmente cada zona?

Enter m², bays, dock doors, rack type and throughput, pick your industry, and get a scaled floor plan with zone areas, rack-position estimates and operational specs. A first-pass planning reference, not a construction document.Ingresa m², naves, puertas de andén, tipo de rack y volumen diario, elige tu industria y obtén un plano a escala con áreas por zona, estimado de posiciones de rack y especificaciones operativas. Referencia de primera planeación, no documento de construcción.

6 industries · 52 zone types6 industrias · 52 tipos de zonaGxP · NFPA · OSHA benchmarksReferencias GxP · NFPA · OSHA100% in-browser · no upload100% en navegador · sin subir datos
📚 Rack types📚 Tipos de rack
Click any card to select it.Haz clic en cualquier tarjeta para seleccionarla.
💡 How to use this toolCómo usar esta herramienta Start hereEmpieza aquí
1
Pick your industryElige tu industria
Each industry loads a different zone template — a pharma warehouse has quarantine and cold chain, an oil & gas depot has pipe yard and ISO containers. The tool knows the difference.Cada industria carga una plantilla de zonas diferente — un almacén farmacéutico tiene cuarentena y cadena fría, una instalación de petróleo y gas tiene patio de tubería y contenedores ISO. La herramienta sabe la diferencia.
2
Enter your parametersIngresa tus parámetros
Total m², number of bays (structural sections), dock doors (loading/unloading), clear height, rack type and daily throughput. Toggle any optional zones on or off. Defaults are pre-filled for a typical operation.M² totales, número de naves (secciones estructurales), puertas de andén (carga/descarga), altura libre, tipo de rack y volumen diario. Activa o desactiva zonas opcionales. Los valores predeterminados vienen precargados para una operación típica.
3
Generate & exportGenera y exporta
Hit Generate to get your scaled floor plan, zone breakdown table, and rack count estimates. Export to PDF for client presentations or internal reviews. The plan is a planning reference — not a substitute for an architect or WMS consultant.Haz clic en Generar para obtener tu plano a escala, tabla de desglose de zonas y estimados de racks. Exporta a PDF para presentaciones con clientes o revisiones internas. El plano es una referencia de planeación — no sustituye a un arquitecto o consultor de WMS.
'; var w=window.open('','wh_plan','width=1200,height=820,scrollbars=yes,resizable=yes'); if(w){w.document.write(doc);w.document.close();w.focus();} } function copyPlanSVG(){ var svgEl=document.getElementById('floorSvg'); if(!svgEl)return; try{navigator.clipboard.writeText(svgEl.outerHTML).then(function(){ var b=document.querySelector('.plan-actions .btn-sm'); if(b){var orig=b.innerHTML;b.innerHTML='✓ Copied!✓ ¡Copiado!';setTimeout(function(){b.innerHTML=orig;},1600);} });}catch(e){} } /* ── HOW-TO ── */ function toggleHowTo(){ var h=document.getElementById('howTo'),b=document.getElementById('howToBtn'); var col=h.classList.toggle('collapsed'); b.innerHTML=col?'Show ▼Ver ▼':'Hide ▲Ocultar ▲'; try{localStorage.setItem('howto_wh',col?'1':'');}catch(e){} } (function(){try{if(localStorage.getItem('howto_wh')==='1'){var h=document.getElementById('howTo');if(h){h.classList.add('collapsed');var b=document.getElementById('howToBtn');if(b)b.innerHTML='Show ▼Ver ▼';}}}catch(e){}})(); /* ── UTILS ── */ function fmtN(v){v=Math.round(v);return v.toString().replace(/\B(?=(\d{3})+(?!\d))/g,',');} /* ── LANG + MENU ── */ /* -- RACK PANEL -- */ var RACK_EXTRA={"selective": {"icon": "📦", "wen": "Mixed SKUs, daily replenishment, easy access", "wes": "SKUs mixtos, reabasto diario, acceso f\u00e1cil", "nen": "Very high volume single SKU; cold store on budget", "nes": "Alto volumen un solo SKU; c\u00e1mara con presupuesto ajustado"}, "drive-in": {"icon": "🚗", "wen": "Homogeneous product, LIFO acceptable, cold-store density", "wes": "Producto homog\u00e9neo, LIFO aceptable, densidad en c\u00e1mara", "nen": "FEFO required; many SKUs", "nes": "FEFO requerido; muchos SKUs"}, "push-back": {"icon": "🧱", "wen": "2-5 SKUs at high volume per slot", "wes": "2-5 SKUs de alto volumen por posici\u00f3n", "nen": "Many SKUs requiring FEFO/FIFO", "nes": "Muchos SKUs que requieren FEFO/FIFO"}, "pallet-flow": {"icon": "🛹", "wen": "FIFO mandatory, high-velocity replenishment", "wes": "FIFO obligatorio, reabasto de alta velocidad", "nen": "Irregular pallet weights or sizes", "nes": "Pesos o tama\u00f1os de tarima irregulares"}, "cantilever": {"icon": "🚧", "wen": "Long goods: pipe, lumber, steel profiles", "wes": "Mercanc\u00eda larga: tuber\u00eda, madera, perfiles", "nen": "Standard palletized product", "nes": "Producto paletizado est\u00e1ndar"}, "mezzanine": {"icon": "🏗", "wen": "E-commerce picking, archive, maximize area", "wes": "Surtido e-commerce, archivo, maximizar \u00e1rea", "nen": "Heavy unit loads; low floor load capacity", "nes": "Cargas pesadas; baja capacidad de carga de piso"}, "mobile": {"icon": "💿", "wen": "Pharma, archive, cold store where every m2 counts", "wes": "Farma, archivo, c\u00e1mara fr\u00eda donde cada m2 importa", "nen": "High-frequency picking needing simultaneous aisle access", "nes": "Surtido frecuente que requiere acceso simult\u00e1neo a pasillos"}}; function openRackPanel(){ var cur=document.getElementById('inRack').value; var html=''; Object.keys(RACK_TYPES).forEach(function(k){ var r=RACK_TYPES[k],ex=RACK_EXTRA[k]||{},sel=(k===cur); html+='
' +'
'+(ex.icon?''+ex.icon+'':'')+'
'+r.name+''+r.nameEs+'
' +''+r.density+' densityDensidad '+r.densityEs.toLowerCase()+'' +'
'+r.desc+''+r.descEs+'
' +(ex.wen?'
Use when:Usar cuando: '+ex.wen+''+ex.wes+'
':'') +(ex.nen?'
Avoid when:Evitar cuando: '+ex.nen+''+ex.nes+'
':'') +'
'; }); document.getElementById('rackCards').innerHTML=html; document.getElementById('rackPanel').classList.add('open'); } function closeRackPanel(){document.getElementById('rackPanel').classList.remove('open');} function closeRackPanelOutside(e){if(e.target===document.getElementById('rackPanel'))closeRackPanel();} function selectRackFromPanel(k){document.getElementById('inRack').value=k;updateRackHint();closeRackPanel();} document.addEventListener('keydown',function(e){if(e.key==='Escape')closeRackPanel();}); /* -- YARD -- */ var VEHICLE_SPECS={ trailer:{depth:35,nameEn:'Trailer (18-wheeler)',nameEs:'Tr\u00e1iler (18 ruedas)'}, rigid: {depth:22,nameEn:'Rigid truck',nameEs:'Cami\u00f3n r\u00edgido'}, van: {depth:14,nameEn:'Van / Last-mile',nameEs:'Van / \u00faltima milla'} }; function updateYardCalc(){ var v=document.getElementById('inVehicle').value; var spec=VEHICLE_SPECS[v]||VEHICLE_SPECS.rigid; var doors=parseInt(document.getElementById('inDoors').value)||6; var area=parseInt(document.getElementById('inArea').value)||5000; var bays=parseInt(document.getElementById('inBays').value)||2; var fw=estimateDim(area,bays,'w'); var rec=Math.round(spec.depth*fw*1.1); var h=document.getElementById('yardHint'); if(h){ h.innerHTML='Min depth: '+spec.depth+' m for '+spec.nameEn+'. Recommended: ~'+rec.toLocaleString()+' m\u00b2.' +'Profundidad m\u00edn.: '+spec.depth+' m para '+spec.nameEs.toLowerCase()+'. Recomendado: ~'+rec.toLocaleString()+' m\u00b2.'; var cur=parseInt(document.getElementById('inYardArea').value)||0; if(cur<=100||cur===1500)document.getElementById('inYardArea').value=rec; } } /* -- FLOOR PLAN V2: circulation aisle + yard -- */ function renderFloorPlanV2(r){ var yardArea=parseFloat(document.getElementById('inYardArea').value)||0; var veh=document.getElementById('inVehicle').value||'rigid'; var vSpec=VEHICLE_SPECS[veh]||VEHICLE_SPECS.rigid; var hasScale=!!(document.getElementById('yardScale')&&document.getElementById('yardScale').checked); var hasGuard=!!(document.getElementById('yardGuard')&&document.getElementById('yardGuard').checked); var hasWait=!!(document.getElementById('yardWait')&&document.getElementById('yardWait').checked); var hasYard=yardArea>0; var W=1000,pL=52,pR=24,pT=28,ind=r.ind; var plotW=W-pL-pR; var totalH=hasYard?780:600; var buildH=hasYard?Math.round(totalH*0.56):totalH-pT-28; var yardH=hasYard?totalH-buildH-pT-28-14:0; var svg=''; svg+=''; var tids=['receiving','receiving_cold'],bids=['staging','office','sanitation','waste']; var tZ=r.zones.filter(function(z){return tids.indexOf(z.id)>=0;}); var bZ=r.zones.filter(function(z){return bids.indexOf(z.id)>=0;}); var mZ=r.zones.filter(function(z){return tids.indexOf(z.id)<0&&bids.indexOf(z.id)<0;}); var tPct=tZ.reduce(function(a,z){return a+z.pctN;},0); var bPct=bZ.reduce(function(a,z){return a+z.pctN;},0); var cH=Math.max(9,buildH*0.046); var av=buildH-cH; var tH=av*(tPct/100),bH=av*(bPct/100),mH=av*((100-tPct-bPct)/100); function strip(zones,sy,sh){ if(!zones.length||sh<4)return ''; var out='',tot=zones.reduce(function(a,z){return a+z.pctN;},0),x=pL; zones.forEach(function(z){ var w=plotW*(z.pctN/tot); out+=''; var cx=x+w/2,cy=sy+sh/2,fs=Math.min(11,Math.max(6.5,w/11)); out+=''+truncate(isES()?z.nameEs:z.name,Math.floor(w/fs*1.35))+''; out+=''+fmtN(z.m2)+' m\u00b2'; x+=w; }); return out; } var y0=pT; svg+=strip(tZ,y0,tH); y0+=tH; svg+=''; svg+=''+(isES()?'-- PASILLO PRINCIPAL --':'-- MAIN CIRCULATION AISLE --')+''; y0+=cH; svg+=strip(mZ,y0,mH); y0+=mH; svg+=strip(bZ,y0,bH); y0+=bH; var bayW=plotW/r.bays; for(var b=1;b'; svg+=''+L('BAY ','NAVE ')+b+''; svg+=''+L('BAY ','NAVE ')+(b+1)+''; } var dY=pT+buildH,dSp=plotW/(r.doors+1); for(var d=0;d'; svg+='D'+(d+1)+''; } if(hasYard){ var yx=pL,yy=dY+20,yw=plotW; svg+=''; var vdpx=yardH*(vSpec.depth/(vSpec.depth+8)); svg+=''; svg+=''+vSpec.depth+'m '+L('min. maneuver','m\u00edn. de maniobra')+''; var ex2=yx+8,ey=yy+5; if(hasGuard){svg+=''+(isES()?'CASETA':'GUARD')+'';ex2+=36;} if(hasScale){svg+=''+L('SCALE','B\u00c1SCULA')+'';} if(hasWait){var ww=yw*0.22;svg+=''+L('TRUCK WAIT','ESPERA')+'';} svg+=''+(isES()?'PATIO DE MANIOBRAS':'MANEUVERING YARD')+''; svg+='~'+fmtN(yardArea)+' m\u00b2'; svg+=''+(isES()?'ENTRADA / SALIDA':'ENTRY / EXIT')+''; } svg+=''+(isES()?'FRENTE: ':'FRONT: ')+estimateDim(r.area,r.bays,'w')+' m'; svg+=''+(isES()?'FONDO: ':'DEPTH: ')+estimateDim(r.area,r.bays,'d')+' m'; svg+=''+(isES()?ind.nameEs:ind.name)+''; svg+=''; document.getElementById('floorBox').innerHTML=svg; var hY=hasYard&&yardArea>0; document.getElementById('planMeta').innerHTML=''+r.bays+' bay(s) · '+r.doors+' dock doors · '+r.height+' m · '+r.zones.length+' zones'+(hY?' · yard: '+fmtN(yardArea)+' m²':'')+'' +''+r.bays+' nave(s) · '+r.doors+' puertas de and\u00e9n · '+r.height+' m · '+r.zones.length+' zonas'+(hY?' · patio: '+fmtN(yardArea)+' m²':'')+''; } var __lang=isES()?'es':'en'; /* Legacy nav only (hidden by site.js). Display sync without touching localStorage. */ function applyLegacyLang(l){ __lang=l; document.querySelectorAll('.li-en').forEach(function(e){e.style.display=l==='en'?(e.tagName==='SPAN'||e.tagName==='BUTTON'?'inline':'block'):'none';}); document.querySelectorAll('.li-es').forEach(function(e){e.style.display=l==='es'?(e.tagName==='SPAN'||e.tagName==='BUTTON'?'inline':'block'):'none';}); document.getElementById('btn-lang-en').classList.toggle('on',l==='en'); document.getElementById('btn-lang-es').classList.toggle('on',l==='es'); } /* Called by the legacy nav buttons and by site.js's header (window.setLang) with the language the user picked. */ function setLang(l){ applyLegacyLang(l); if(window.mscSetLang&&(l==='es')!==isES()){window.mscSetLang(l);} } function toggleMenu(){var b=document.getElementById('hamburger'),m=document.getElementById('mobileMenu');b.classList.toggle('open');m.classList.toggle('open');} function closeMenu(){var b=document.getElementById('hamburger'),m=document.getElementById('mobileMenu');if(b)b.classList.remove('open');if(m)m.classList.remove('open');} document.addEventListener('click',function(e){var m=document.getElementById('mobileMenu'),b=document.getElementById('hamburger');if(m&&m.classList.contains('open')&&!m.contains(e.target)&&b&&!b.contains(e.target))closeMenu();},false); /* ── BOOT ── */ init(); refreshStaticI18n(); document.addEventListener('DOMContentLoaded',refreshStaticI18n); /* rack panel markup sits after this script */ applyLegacyLang(isES()?'es':'en'); /* Re-render on site language change (html.msc-es). Inputs, selections, toggles and the last generated plan are kept. */ (function(){ var lastES=isES(); new MutationObserver(function(){ var nowES=isES(); if(nowES===lastES)return; lastES=nowES; refreshStaticI18n(); applyLegacyLang(nowES?'es':'en'); if(LAST_RESULT){ renderMetrics(LAST_RESULT); renderFloorPlanV2(LAST_RESULT); renderZoneTable(LAST_RESULT); renderRackBox(LAST_RESULT); } }).observe(document.documentElement,{attributes:true,attributeFilter:['class']}); })();