{"id":1000994,"date":"2026-10-30T15:31:38","date_gmt":"2026-10-30T15:31:38","guid":{"rendered":"https:\/\/fulfillbot.com\/?p=1000994"},"modified":"2026-10-25T15:55:16","modified_gmt":"2026-10-25T15:55:16","slug":"safety-stock-formula","status":"publish","type":"post","link":"https:\/\/fulfillbot.com\/es\/blog\/safety-stock-formula\/","title":{"rendered":"F\u00f3rmula de stock de seguridad: Elija el m\u00e9todo correcto y calcule su reserva."},"content":{"rendered":"<p><a class=\"fb-ss-jump\" href=\"#fb-safety-stock\">Use the safety stock calculator \u2193<\/a><\/p>\r\n<p>The <strong>safety stock formula<\/strong> for variable daily demand and a fixed replenishment lead time is <strong>SS = z \u00d7 \u03c3d \u00d7 \u221aL<\/strong>. Here, z represents the target cycle service level, \u03c3d is the standard deviation of daily demand, and L is lead time in days. It is useful only when those assumptions fit your data.<\/p>\r\n<p>If lead time also varies, the calculation changes. If you only have maximum and average values, you can use a simpler estimate, but that number does not establish a particular service level.<\/p>\r\n<p>Choose the formula after checking how you place orders and when replenishment becomes usable. Using factory completion as the end of lead time, for example, leaves transit and receiving demand out of the calculation.<\/p>\r\n\r\n<p><style>\r\n#fb-safety-stock{--ss-ink:#233f34;--ss-line:#cdd5cc;--ss-paper:#f2f4ed;color:var(--ss-ink);margin:44px 0 52px;border:1px solid var(--ss-line);background:var(--ss-paper);font:15px\/1.55 'Avenir Next',Avenir,'Segoe UI',sans-serif;scroll-margin-top:24px}\r\n#fb-safety-stock *,#fb-safety-stock *:before,#fb-safety-stock *:after{box-sizing:border-box}\r\n#fb-safety-stock [hidden]{display:none!important}\r\n#fb-safety-stock .fb-ss-header{padding:30px 30px 26px;border-bottom:1px solid var(--ss-line)}\r\n#fb-safety-stock .fb-ss-eyebrow{font-size:10px;font-weight:700;letter-spacing:.17em}\r\n#fb-safety-stock h2{font-family:Georgia,serif;font-weight:400;font-size:34px;line-height:1.14;letter-spacing:-.025em;border:0;padding:0;margin:12px 0}\r\n#fb-safety-stock p{margin:0}#fb-safety-stock .fb-ss-header p{max-width:590px;color:#526257}\r\n#fb-safety-stock .fb-ss-layout{display:grid;grid-template-columns:1.05fr 1fr}\r\n#fb-safety-stock form{padding:26px;min-width:0;margin:0}\r\n#fb-safety-stock .fb-ss-step{font-size:11px;letter-spacing:.08em;font-weight:700;color:#6a7566;display:flex;align-items:center;gap:12px}\r\n#fb-safety-stock .fb-ss-step span{font-size:15px;letter-spacing:0;color:var(--ss-ink)}\r\n#fb-safety-stock .fb-ss-hint{font-size:12px;color:#59675d;margin:10px 0 24px}\r\n#fb-safety-stock .fb-ss-field{margin-bottom:18px;min-width:0}\r\n#fb-safety-stock label{font-weight:600;font-size:12px;display:block;margin:0 0 7px}\r\n#fb-safety-stock label span{font-weight:400}\r\n#fb-safety-stock input,#fb-safety-stock select{display:block;width:100%;min-width:0;max-width:100%;height:47px;border:1px solid #abb9aa;background:#fff;border-radius:3px;padding:10px 11px;color:#203a30;font:16px\/1.4 'Avenir Next',Avenir,'Segoe UI',sans-serif;box-shadow:none}\r\n#fb-safety-stock input:focus-visible,#fb-safety-stock select:focus-visible,#fb-safety-stock button:focus-visible,#fb-safety-stock a:focus-visible{outline:3px solid #ba622d;outline-offset:3px}\r\n#fb-safety-stock input[aria-invalid=true]{border-color:#a43f28}\r\n#fb-safety-stock .fb-ss-help{display:block;font-size:11px;color:#59675d;margin-top:6px}\r\n#fb-safety-stock .fb-ss-pair{display:grid;grid-template-columns:1fr 1fr;gap:14px}\r\n#fb-safety-stock .fb-ss-actions{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:24px}\r\n#fb-safety-stock button{min-height:44px;border:1px solid transparent;border-radius:3px;background:transparent;color:#294a3c;padding:9px 10px;font:600 12px\/1.4 'Avenir Next',Avenir,'Segoe UI',sans-serif;cursor:pointer}\r\n#fb-safety-stock button:hover{background:#e1e6da}\r\n#fb-safety-stock button.fb-ss-primary{background:#294a3c;color:#fff;padding:11px 15px;margin-right:auto}\r\n#fb-safety-stock button.fb-ss-primary:hover{background:#173729}\r\n#fb-safety-stock .fb-ss-primary span{margin-left:14px;font-size:17px}\r\n#fb-safety-stock .fb-ss-private{font-size:10px;color:#59675d;margin-top:16px}\r\n#fb-safety-stock .fb-ss-results{min-width:0;background:#233f34;color:#f6f5e9;padding:26px;display:flex;flex-direction:column}\r\n#fb-safety-stock .fb-ss-results .fb-ss-step{color:#a9b9a2}#fb-safety-stock .fb-ss-results .fb-ss-step span{color:#f6f5e9}\r\n#fb-safety-stock .fb-ss-context{font-size:11px;color:#c3d1be;margin:10px 0 28px}\r\n#fb-safety-stock .fb-ss-metric>span,#fb-safety-stock .fb-ss-secondary>div>span{font-size:10px;font-weight:600;letter-spacing:.1em;color:#ced9c6}\r\n#fb-safety-stock .fb-ss-metric output{font-weight:400;font-family:Georgia,serif;font-size:78px;line-height:1.15;letter-spacing:-.05em;overflow-wrap:anywhere}\r\n#fb-safety-stock .fb-ss-unit{font-size:13px;color:#d3ddcb;margin-left:8px}\r\n#fb-safety-stock .fb-ss-metric p{font-size:12px;color:#c3d1be;margin:4px 0 24px}\r\n#fb-safety-stock .fb-ss-secondary{display:grid;grid-template-columns:1fr 1fr;gap:12px;border-block:1px solid #58705e;padding:20px 0;margin-bottom:22px}\r\n#fb-safety-stock .fb-ss-secondary output{font-weight:400;font-family:Georgia,serif;font-size:28px;line-height:1.5;overflow-wrap:anywhere}\r\n#fb-safety-stock .fb-ss-secondary small{font-size:10px;color:#c3d1be}\r\n#fb-safety-stock h3{font:600 12px\/1.5 'Avenir Next',Avenir,'Segoe UI',sans-serif;padding:0;margin:0 0 10px;color:#f6f5e9}\r\n#fb-safety-stock .fb-ss-working p{font-size:12px;color:#d2ddcb;margin:7px 0;overflow-wrap:anywhere}\r\n#fb-safety-stock .fb-ss-reading{font-size:13px;margin:20px 0;color:#f3f1dc;line-height:1.7}\r\n#fb-safety-stock .fb-ss-caution{border-top:1px solid #58705e;padding-top:17px;margin-top:auto}\r\n#fb-safety-stock .fb-ss-caution strong{font-size:12px;color:#e9c597;font-weight:600}\r\n#fb-safety-stock .fb-ss-caution p{font-size:11px;color:#d2ddcb;margin-top:5px}\r\n#fb-safety-stock #fb-ss-error{border-left:3px solid #e9c597;padding:12px;background:#304d3e;font-size:14px;margin-bottom:24px}\r\n#fb-safety-stock .fb-ss-footer{padding:18px 26px;border-top:1px solid var(--ss-line);font-size:11px;color:#526257}\r\n#fb-safety-stock .fb-ss-footer a{color:#294a3c;display:inline-block;margin-top:5px}\r\n.fb-ss-jump{display:inline-block;margin:-12px 0 16px;font-size:14px;font-weight:600}\r\n@media(max-width:760px){#fb-safety-stock .fb-ss-layout{grid-template-columns:1fr}#fb-safety-stock .fb-ss-header{padding:24px}#fb-safety-stock h2{font-size:30px}#fb-safety-stock .fb-ss-results{min-height:0}#fb-safety-stock .fb-ss-caution{margin-top:10px}}\r\n@media(max-width:400px){#fb-safety-stock form,#fb-safety-stock .fb-ss-results{padding:20px 16px}#fb-safety-stock .fb-ss-header{padding:22px 16px}#fb-safety-stock .fb-ss-footer{padding:16px}#fb-safety-stock .fb-ss-pair{grid-template-columns:1fr;gap:0}#fb-safety-stock .fb-ss-secondary{grid-template-columns:1fr;gap:18px}#fb-safety-stock h2{font-size:28px}#fb-safety-stock .fb-ss-metric output{font-size:62px}}\r\n@media print{#fb-safety-stock{break-inside:avoid}#fb-safety-stock .fb-ss-actions{display:none}}\r\n\r\n#fb-safety-stock #fb-ss-unavailable{padding:24px;font-size:14px}\r\n\r\n#fb-safety-stock .fb-ss-method-note{font-size:12px;padding:12px 14px;background:#e5eadd;border-left:2px solid #8b9e80;margin-bottom:22px;color:#41533f}\r\n#fb-safety-stock #fb-ss-method{height:auto;min-height:47px;font-size:14px}\r\n#fb-safety-stock .fb-ss-secondary{grid-template-columns:1fr;gap:20px}\r\n#fb-safety-stock .fb-ss-secondary>div>div{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px}\r\n#fb-safety-stock .fb-ss-secondary output{font-size:38px}\r\n#fb-safety-stock #fb-ss-rounding{font-size:11px;color:#d2ddcb;margin:14px 0 20px}\r\n#fb-safety-stock .fb-ss-results{scroll-margin-top:18px}\r\n#fb-safety-stock .fb-ss-working{margin-bottom:8px}\r\n<\/style><\/p>\r\n<section id=\"fb-safety-stock\" aria-labelledby=\"fb-ss-title\"><header class=\"fb-ss-header\"><span class=\"fb-ss-eyebrow\">FULFILLBOT \/ INVENTORY TOOLS<\/span>\r\n<h2 id=\"fb-ss-title\">How much buffer does your stock need?<\/h2>\r\n<p>Estimate safety stock and a reorder point using the method that fits your data.<\/p>\r\n<\/header>\r\n<p id=\"fb-ss-unavailable\">This calculator needs JavaScript. You can still use the formulas and worked examples below.<\/p>\r\n<div class=\"fb-ss-layout\" hidden=\"\"><form id=\"fb-ss-form\" novalidate=\"\">\r\n<div class=\"fb-ss-step\">01 Choose your method<\/div>\r\n<p class=\"fb-ss-hint\">Use one SKU, one location and one unit of measure. Daily demand and lead time must use matching calendar conventions.<\/p>\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-method\">Calculation method<\/label><select id=\"fb-ss-method\" name=\"mode\" aria-describedby=\"fb-ss-method-note\">\r\n<option value=\"fixed\">Variable demand \u00b7 fixed lead time<\/option>\r\n<option value=\"variable\">Demand and lead time both vary<\/option>\r\n<option value=\"simple\">Simple maximum\u2013average estimate<\/option>\r\n<\/select><\/div>\r\n<p id=\"fb-ss-method-note\" class=\"fb-ss-method-note\">\u00a0<\/p>\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-demand\">Average daily demand (units\/day)<\/label><input id=\"fb-ss-demand\" min=\"0\" name=\"demand\" required=\"\" step=\"any\" type=\"number\" value=\"30\" \/><\/div>\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-lead\"><span id=\"fb-ss-lead-label\">Fixed lead time<\/span> (days)<\/label><input id=\"fb-ss-lead\" min=\"0\" name=\"lead\" required=\"\" step=\"any\" type=\"number\" value=\"9\" aria-describedby=\"fb-ss-lead-help\" \/><span id=\"fb-ss-lead-help\" class=\"fb-ss-help\">From placing the order until stock is usable, including receiving and inspection.<\/span><\/div>\r\n<div id=\"fb-ss-statistical-fields\">\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-sd-demand\">Daily demand standard deviation (units)<\/label><input id=\"fb-ss-sd-demand\" min=\"0\" name=\"sdDemand\" required=\"\" step=\"any\" type=\"number\" value=\"8\" aria-describedby=\"fb-ss-sd-demand-help\" \/><span id=\"fb-ss-sd-demand-help\" class=\"fb-ss-help\">The standard deviation of daily demand quantities, not a percentage.<\/span><\/div>\r\n<div id=\"fb-ss-variable-field\" class=\"fb-ss-field\" hidden=\"\"><label for=\"fb-ss-sd-lead\">Lead-time standard deviation (days)<\/label><input id=\"fb-ss-sd-lead\" disabled=\"disabled\" min=\"0\" name=\"sdLead\" required=\"\" step=\"any\" type=\"number\" value=\"1\" \/><\/div>\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-service\">Target cycle service level<\/label><select id=\"fb-ss-service\" name=\"service\" aria-describedby=\"fb-ss-service-help\">\r\n<option value=\"90\">90%<\/option>\r\n<option selected=\"selected\" value=\"95\">95%<\/option>\r\n<option value=\"97.5\">97.5%<\/option>\r\n<option value=\"99\">99%<\/option>\r\n<\/select><span id=\"fb-ss-service-help\" class=\"fb-ss-help\">Probability of no stockout in a replenishment cycle under the model. This is not fill rate or a guarantee.<\/span><\/div>\r\n<\/div>\r\n<div id=\"fb-ss-simple-fields\" hidden=\"\">\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-max-demand\">Maximum daily demand (units\/day)<\/label><input id=\"fb-ss-max-demand\" disabled=\"disabled\" min=\"0\" name=\"maxDemand\" required=\"\" step=\"any\" type=\"number\" value=\"45\" \/><\/div>\r\n<div class=\"fb-ss-field\"><label for=\"fb-ss-max-lead\">Maximum lead time (days)<\/label><input id=\"fb-ss-max-lead\" disabled=\"disabled\" min=\"0\" name=\"maxLead\" required=\"\" step=\"any\" type=\"number\" value=\"12\" \/><\/div>\r\n<\/div>\r\n<div class=\"fb-ss-actions\"><button class=\"fb-ss-primary\" type=\"submit\">Calculate <span aria-hidden=\"true\">\u2197<\/span><\/button><button id=\"fb-ss-example\" type=\"button\">Load example<\/button><button type=\"reset\">Reset<\/button><\/div>\r\n<p class=\"fb-ss-private\">Calculated in your browser. Your figures are not sent anywhere.<\/p>\r\n<\/form>\r\n<div class=\"fb-ss-results\" aria-live=\"polite\" aria-atomic=\"true\">\r\n<div class=\"fb-ss-step\">02 Your inventory buffer<\/div>\r\n<p id=\"fb-ss-context\" class=\"fb-ss-context\">\u00a0<\/p>\r\n<div id=\"fb-ss-error\" role=\"status\" hidden=\"\">\u00a0<\/div>\r\n<div id=\"fb-ss-values\">\r\n<div class=\"fb-ss-metric\">SAFETY STOCK\r\n<div><output id=\"fb-ss-safety\">40<\/output><span class=\"fb-ss-unit\">units<\/span><\/div>\r\n<p>The extra buffer for uncertainty<\/p>\r\n<\/div>\r\n<div class=\"fb-ss-secondary\">\r\n<div>EXPECTED DEMAND DURING LEAD TIME\r\n<div><output id=\"fb-ss-expected\">270<\/output><span class=\"fb-ss-unit\">units<\/span><\/div>\r\n<\/div>\r\n<div>REORDER POINT\r\n<div><output id=\"fb-ss-reorder\">310<\/output><span class=\"fb-ss-unit\">units<\/span><\/div>\r\n<small>A replenishment trigger, not a purchase quantity<\/small><\/div>\r\n<\/div>\r\n<div class=\"fb-ss-working\">\r\n<h3>Behind the numbers<\/h3>\r\n<p id=\"fb-ss-formula\">\u00a0<\/p>\r\n<p id=\"fb-ss-calculation\">\u00a0<\/p>\r\n<p id=\"fb-ss-demand-formula\">\u00a0<\/p>\r\n<p id=\"fb-ss-reorder-formula\">\u00a0<\/p>\r\n<\/div>\r\n<p id=\"fb-ss-rounding\">Safety stock and the final reorder point are rounded upward to whole units. Calculations use unrounded values.<\/p>\r\n<p id=\"fb-ss-reading\" class=\"fb-ss-reading\">\u00a0<\/p>\r\n<\/div>\r\n<div class=\"fb-ss-caution\"><strong id=\"fb-ss-assumptions-title\">Check the model fit.<\/strong>\r\n<p id=\"fb-ss-assumptions\">\u00a0<\/p>\r\n<p>Seasonal, intermittent or correlated demand and delays need a different analysis. Test the result against actual replenishment cycles.<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<footer class=\"fb-ss-footer\">For continuous inventory review. A periodic review schedule needs a different protection period. <a href=\"#fb-ss-formula-guide\">Compare the methods below <span aria-hidden=\"true\">\u2193<\/span><\/a><\/footer><\/section>\r\n<p><script>\r\n(function (root) {\r\n  'use strict';\r\n  const quantiles = Object.freeze({'90':1.2815515655446004,'95':1.6448536269514722,'97.5':1.959963984540054,'99':2.3263478740408408});\r\n  function nonnegative(value, label) {\r\n    if (value === null || value === undefined || String(value).trim() === '') throw new Error('Enter ' + label + '.');\r\n    const result = Number(value);\r\n    if (!Number.isFinite(result) || 0 > result) throw new Error('Use a finite, non-negative number for ' + label + '.');\r\n    return result;\r\n  }\r\n  function roundUpUnits(value) {\r\n    \/\/ Ignore floating-point noise near a positive integer; keep any positive buffer above zero.\r\n    const nearest = Math.round(value);\r\n    const tolerance = Math.min(1e-9, Number.EPSILON * Math.max(1, Math.abs(value)) * 4);\r\n    if (nearest > 0) {\r\n      if (tolerance >= Math.abs(value - nearest)) return nearest;\r\n    }\r\n    return Math.ceil(value);\r\n  }\r\n  function calculateSafetyStock(input) {\r\n    if (!['fixed','variable','simple'].includes(input.mode)) throw new Error('Choose a calculation method.');\r\n    const demand = nonnegative(input.demand, 'average daily demand');\r\n    const lead = nonnegative(input.lead, 'replenishment lead time');\r\n    if (0 >= lead) throw new Error('Replenishment lead time must be greater than zero.');\r\n    const expected = demand * lead;\r\n    let raw, z = null;\r\n    if (input.mode === 'simple') {\r\n      const maxDemand = nonnegative(input.maxDemand, 'maximum daily demand');\r\n      const maxLead = nonnegative(input.maxLead, 'maximum lead time');\r\n      if (demand > maxDemand) throw new Error('Maximum daily demand must be at least the average daily demand.');\r\n      if (lead > maxLead) throw new Error('Maximum lead time must be at least the average lead time.');\r\n      raw = maxDemand * maxLead - expected;\r\n    } else {\r\n      const sdDemand = nonnegative(input.sdDemand, 'daily demand standard deviation');\r\n      if (!Object.hasOwn(quantiles, String(input.service))) throw new Error('Choose a supported cycle service target.');\r\n      z = quantiles[String(input.service)];\r\n      if (input.mode === 'fixed') raw = z * sdDemand * Math.sqrt(lead);\r\n      else {\r\n        const sdLead = nonnegative(input.sdLead, 'lead-time standard deviation');\r\n        raw = z * Math.hypot(Math.sqrt(lead) * sdDemand, demand * sdLead);\r\n      }\r\n    }\r\n    const safetyStock = roundUpUnits(raw);\r\n    const reorderPoint = roundUpUnits(expected + safetyStock);\r\n    for (const value of [expected, raw, safetyStock, reorderPoint]) {\r\n      if (!Number.isFinite(value) || 0 > value || value > Number.MAX_SAFE_INTEGER) throw new Error('These inputs are too large to produce reliable whole-unit results. Use a smaller inventory scope.');\r\n    }\r\n    return {raw, safetyStock, expected, reorderPoint, z};\r\n  }\r\n  if (typeof module !== 'undefined') {\r\n    if (module.exports) module.exports = {calculateSafetyStock, quantiles};\r\n  } else root.FBSafetyStock = {calculateSafetyStock};\r\n})(typeof globalThis !== 'undefined' ? globalThis : this);\r\n\r\n(function () {\r\n  'use strict';\r\n  const root = document.getElementById('fb-safety-stock');\r\n  if (!root) return;\r\n  const get = key => root.querySelector('#fb-ss-' + key);\r\n  const form = get('form');\r\n  let example = true;\r\n  const n = (value, decimals = 2) => (value === 0 ? false : (0.01 > Math.abs(value) || Math.abs(value) >= 1e12))\r\n    ? value.toExponential(3) : new Intl.NumberFormat('en-US', {maximumFractionDigits:decimals}).format(value);\r\n  const fieldIds = {demand:'demand',lead:'lead',sdDemand:'sd-demand',sdLead:'sd-lead',maxDemand:'max-demand',maxLead:'max-lead',service:'service'};\r\n  const modes = {\r\n    fixed: {name:'Fixed lead time',note:'Use when daily demand varies and replenishment lead time stays constant.',assumptions:'Assumes stable, independent daily demand, a fixed lead time and an approximately normal distribution of lead-time demand.'},\r\n    variable: {name:'Variable lead time',note:'Use when both daily demand and lead time vary independently.',assumptions:'Assumes stable, independent daily demand, independent demand and lead time, and an approximately normal distribution of lead-time demand.'},\r\n    simple: {name:'Maximum\u2013average estimate',note:'A scenario estimate using observed maximum and average values. It has no calibrated service-level target.',assumptions:'Uses sustained maximum daily demand across the maximum lead time. Observed extremes do not establish the worst possible future outcome or a service probability.'}\r\n  };\r\n  function setMode() {\r\n    const mode = get('method').value;\r\n    const simple = mode === 'simple';\r\n    get('statistical-fields').hidden = simple;\r\n    get('simple-fields').hidden = !simple;\r\n    get('variable-field').hidden = mode !== 'variable';\r\n    get('sd-demand').disabled = simple;\r\n    get('service').disabled = simple;\r\n    get('sd-lead').disabled = mode !== 'variable';\r\n    get('max-demand').disabled = !simple;\r\n    get('max-lead').disabled = !simple;\r\n    get('lead-label').textContent = mode === 'fixed' ? 'Fixed lead time' : 'Average lead time';\r\n    get('method-note').textContent = modes[mode].note;\r\n    get('assumptions').textContent = modes[mode].assumptions;\r\n    get('assumptions-title').textContent = simple ? 'An estimate, not a service promise.' : 'Check the model fit.';\r\n    return mode;\r\n  }\r\n  function update() {\r\n    const mode = setMode();\r\n    get('context').textContent = (example ? 'Illustrative example' : 'Your figures') + ' \u00b7 ' + modes[mode].name;\r\n    const inputs = [...form.querySelectorAll('input:not(:disabled)')];\r\n    inputs.forEach(input => input.removeAttribute('aria-invalid'));\r\n    try {\r\n      for (const input of inputs) {\r\n        if (!input.checkValidity()) {\r\n          input.setAttribute('aria-invalid','true');\r\n          const label = form.querySelector('label[for=\"'+input.id+'\"]').textContent;\r\n          throw new Error('Enter a finite, non-negative value for '+label.toLowerCase()+'.');\r\n        }\r\n      }\r\n      const data = Object.fromEntries(new FormData(form));\r\n      const r = FBSafetyStock.calculateSafetyStock(data);\r\n      const v = key => n(Number(data[key]));\r\n      get('safety').textContent = n(r.safetyStock,0);\r\n      get('expected').textContent = n(r.expected);\r\n      get('reorder').textContent = n(r.reorderPoint,0);\r\n      if (mode === 'simple') {\r\n        get('formula').textContent = 'Safety stock = (maximum daily demand \u00d7 maximum lead time) \u2212 (average daily demand \u00d7 average lead time)';\r\n        get('calculation').textContent = '('+v('maxDemand')+' \u00d7 '+v('maxLead')+') \u2212 ('+v('demand')+' \u00d7 '+v('lead')+') \u2248 '+n(r.raw,6)+' \u2192 '+n(r.safetyStock,0)+' units';\r\n        get('reading').textContent = 'This buffer is a maximum\u2013average scenario estimate. No cycle service probability is calculated.';\r\n      } else {\r\n        get('formula').textContent = mode === 'fixed' ? 'Safety stock = z \u00d7 \u03c3d \u00d7 \u221aL' : 'Safety stock = z \u00d7 \u221a(L\u0304 \u00d7 \u03c3d\u00b2 + d\u0304\u00b2 \u00d7 \u03c3L\u00b2)';\r\n        const inner = mode === 'fixed' ? v('sdDemand')+' \u00d7 \u221a'+v('lead') : '\u221a('+v('lead')+' \u00d7 '+v('sdDemand')+'\u00b2 + '+v('demand')+'\u00b2 \u00d7 '+v('sdLead')+'\u00b2)';\r\n        get('calculation').textContent = 'z \u2248 '+n(r.z,6)+' for a '+data.service+'% cycle service target. '+n(r.z,6)+' \u00d7 '+inner+' \u2248 '+n(r.raw,6)+' \u2192 '+n(r.safetyStock,0)+' units';\r\n        get('reading').textContent = 'The '+data.service+'% target refers to cycles without a stockout under the model. It does not mean '+data.service+'% of units or orders will be filled.';\r\n        if (r.safetyStock === 0) get('reading').textContent += ' Zero modeled variability produces no extra buffer; this does not rule out unmeasured risks.';\r\n      }\r\n      get('demand-formula').textContent = 'Expected lead-time demand = '+v('demand')+' \u00d7 '+v('lead')+' = '+n(r.expected)+' units';\r\n      get('reorder-formula').textContent = 'Reorder point = round up ('+n(r.expected)+' + '+n(r.safetyStock,0)+') = '+n(r.reorderPoint,0)+' units';\r\n      get('error').hidden = true;get('values').hidden = false;\r\n    } catch(error) {\r\n      get('values').hidden = true;get('error').hidden = false;get('error').textContent = error.message;\r\n    }\r\n  }\r\n  form.addEventListener('input', () => {example = false;update();});\r\n  form.addEventListener('change', () => {example = false;update();});\r\n  form.addEventListener('submit', event => {\r\n    event.preventDefault();update();\r\n    if(window.matchMedia('(max-width:760px)').matches) root.querySelector('.fb-ss-results').scrollIntoView({block:'start'});\r\n  });\r\n  form.addEventListener('reset', event => {\r\n    event.preventDefault();\r\n    Object.entries(fieldIds).forEach(([key,id]) => {get(id).value = key === 'service' ? '95' : '';});\r\n    example = false;update();get('demand').focus();\r\n  });\r\n  get('example').addEventListener('click', () => {\r\n    const values = {demand:30,lead:9,sdDemand:8,sdLead:1,maxDemand:45,maxLead:12,service:'95'};\r\n    Object.entries(values).forEach(([key,value]) => {get(fieldIds[key]).value = value;});\r\n    example = true;update();\r\n  });\r\n  update();\r\n  get('unavailable').hidden = true;\r\n  root.querySelector('.fb-ss-layout').hidden = false;\r\n})();\r\n<\/script><\/p>\r\n\r\n<h2 id=\"fb-ss-formula-guide\">Which safety stock formula should you use?<\/h2>\r\n<p>Safety stock is the buffer held above expected demand during replenishment. It covers uncertainty; it is not the full amount you expect to sell while waiting for an order.<\/p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Situation<\/th>\r\n<th>Starting method<\/th>\r\n<th>Main limitation<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Only maximum and average history available<\/td>\r\n<td>Maximum-average estimate<\/td>\r\n<td>No calibrated service probability<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Variable demand, fixed lead time<\/td>\r\n<td>z \u00d7 \u03c3d \u00d7 \u221aL<\/td>\r\n<td>Needs a suitable demand model<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Variable demand and lead time<\/td>\r\n<td>z \u00d7 \u221a(L\u0304 \u00d7 \u03c3d\u00b2 + d\u0304\u00b2 \u00d7 \u03c3L\u00b2)<\/td>\r\n<td>Assumes independent demand and lead time<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Seasonal, intermittent, or correlated demand and delays<\/td>\r\n<td>Model lead-time demand or forecast errors directly<\/td>\r\n<td>Needs a different analysis, not a plug-in correction<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p>The first two calculations are described in <a href=\"https:\/\/www.spscommerce.com\/community\/articles\/how-to-calculate-safety-stock-formulas-and-methods-that-fit-your-data\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">SPS Commerce&#8217;s safety stock guide<\/a>. The variable-lead-time expression uses the independent-variability approach explained by Peter L. King in APICS magazine. <a href=\"https:\/\/web.mit.edu\/2.810\/www\/files\/readings\/King_SafetyStock.pdf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">APICS safety stock article, hosted by MIT<\/a>.<\/p>\r\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1200\" height=\"840\" class=\"wp-image-1000995\" src=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection.webp\" alt=\"Four cards compare safety stock methods for different data and variability conditions.\" title=\"\" srcset=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection.webp 1200w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection-300x210.webp 300w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection-1024x717.webp 1024w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection-768x538.webp 768w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-method-selection-18x12.webp 18w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>\r\n<figcaption>Formula selection depends on the operating assumptions, not just available spreadsheet fields.<\/figcaption>\r\n<\/figure>\r\n<p>The statistical examples below assume continuous inventory review, reasonably stable demand, independent daily demand increments, and an approximately normal distribution of demand over the protection period. They are starting models to validate against your operation, not promises that a chosen buffer will deliver a stated result.<\/p>\r\n<h2>Prepare the inputs before calculating<\/h2>\r\n<p>Use one SKU, one replenishment destination, and one consistent unit of measure. Combining unrelated sizes or locations can hide the shortage you are trying to prevent.<\/p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Symbol<\/th>\r\n<th>Meaning<\/th>\r\n<th>Unit in this guide<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>d\u0304<\/td>\r\n<td>Average demand per day<\/td>\r\n<td>Units per day<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\u03c3d<\/td>\r\n<td>Standard deviation of daily demand quantities<\/td>\r\n<td>Units for a one-day period<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>L or L\u0304<\/td>\r\n<td>Fixed or average replenishment lead time<\/td>\r\n<td>Days<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>\u03c3L<\/td>\r\n<td>Standard deviation of replenishment lead time<\/td>\r\n<td>Days<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>z<\/td>\r\n<td>One-sided normal quantile for cycle service level<\/td>\r\n<td>No unit<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>SS<\/td>\r\n<td>Safety stock<\/td>\r\n<td>Units<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p>Measure lead time to <strong>usable stock at the location being replenished<\/strong>. A supplier&#8217;s production estimate alone may omit order processing, transport, receiving, or inspection. If your measurement ends at warehouse arrival but items remain on hold for two days, the replenishment process is not finished when your spreadsheet says it is. Keep calendar conventions consistent. Daily demand measured across all calendar days needs a compatible lead-time measure. Do not combine weekly demand variability with lead time in days without converting the periods correctly. Also check what your sales history records. Zero sales during a stockout do not prove that demand was zero. Returns, bulk orders, and promotions can distort the series if you treat every transaction as ordinary daily demand.<\/p>\r\n<h2>Method 1: the maximum-average estimate<\/h2>\r\n<p>The simple version is: <strong>SS = (maximum daily demand \u00d7 maximum lead time) \u2212 (average daily demand \u00d7 average lead time)<\/strong> For an illustrative SKU, suppose maximum daily demand is 45 units, maximum lead time is 12 days, average daily demand is 30 units, and average lead time is nine days: <strong>SS = (45 \u00d7 12) \u2212 (30 \u00d7 9) = 270 units.<\/strong> This estimate effectively builds a buffer around sustained peak demand across the longest observed lead time. It can be large. A single unusual promotion or delayed shipment can substantially change the result. Use it as a transparent scenario estimate when those inputs are all you have. Record the observation window and why the extremes are relevant. Do not label the resulting 270 units a \u201c95% service level\u201d calculation: there is no probability target in this formula. Nor does the largest value in your historical sample establish the worst possible future event. A short, quiet history can make this estimate too small.<\/p>\r\n<h2>Method 2: variable demand with a fixed lead time<\/h2>\r\n<p>For independent daily demand and constant lead time: <strong>SS = z \u00d7 \u03c3d \u00d7 \u221aL<\/strong> The square root matters. Under the independence assumption, daily demand variances add across days; the standard deviation therefore grows with the square root of the number of days. Use these hypothetical inputs:<\/p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Input<\/th>\r\n<th style=\"text-align: right;\">Value<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Average daily demand<\/td>\r\n<td style=\"text-align: right;\">30 units<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Daily demand standard deviation<\/td>\r\n<td style=\"text-align: right;\">8 units<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Fixed lead time<\/td>\r\n<td style=\"text-align: right;\">9 days<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Target cycle service level<\/td>\r\n<td style=\"text-align: right;\">95%<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>z, rounded<\/td>\r\n<td style=\"text-align: right;\">1.645<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<p>The calculation is: <strong>SS = 1.645 \u00d7 8 \u00d7 \u221a9 = 39.48 units.<\/strong> Round upward to <strong>40 units<\/strong> for an indivisible product. Expected demand during the nine-day lead time is 30 \u00d7 9 = <strong>270 units<\/strong>. The corresponding reorder point is 270 + 40 = <strong>310 units<\/strong>, before any separate implementation adjustments.<\/p>\r\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1200\" height=\"840\" class=\"wp-image-1000996\" src=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example.webp\" alt=\"Worked example calculates 40 safety stock units and a 310-unit reorder point.\" title=\"\" srcset=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example.webp 1200w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example-300x210.webp 300w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example-1024x717.webp 1024w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example-768x538.webp 768w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-fixed-lead-example-18x12.webp 18w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>\r\n<figcaption>Original hypothetical example; the buffer and reorder point are different quantities.<\/figcaption>\r\n<\/figure>\r\n<p>These values have different jobs. The buffer is 40 units. The expected lead-time demand is 270 units. The reorder trigger is 310 units. None of those figures, by itself, tells you how many units to buy on each order.<\/p>\r\n<h3>A spreadsheet version<\/h3>\r\n<p>If B2 contains average daily demand, B3 daily demand standard deviation, B4 fixed lead time, and B5 the cycle service target entered as 95%, the safety-stock calculation in common English-language spreadsheet syntax is: <code>=ROUNDUP(NORM.S.INV(B5)*B3*SQRT(B4),0)<\/code> The reorder point is: <code>=B2*B4+B6<\/code> Here, B6 contains the rounded safety-stock result. Validate the inputs before using the sheet: quantities and lead time must use compatible periods, and the service target must be between 0 and 1. This simple buffer model is intended for targets above 50%, not for producing negative safety stock. The spreadsheet uses a more precise normal quantile than the displayed 1.645. Both versions round to 40 units in this example.<\/p>\r\n<h2>Method 3: demand and lead time both vary<\/h2>\r\n<p>If demand and replenishment lead time are independent, a common normal-approximation calculation is: <strong>SS = z \u00d7 \u221a(L\u0304 \u00d7 \u03c3d\u00b2 + d\u0304\u00b2 \u00d7 \u03c3L\u00b2)<\/strong> The first term captures demand variation across the average lead time; the second captures exposure to lead-time variation. Keep the same daily-demand inputs and nine-day average lead time, then vary only the lead-time standard deviation.<\/p>\r\n<table>\r\n<thead>\r\n<tr>\r\n<th>Lead-time standard deviation<\/th>\r\n<th>Calculation using z = 1.645<\/th>\r\n<th style=\"text-align: right;\">Rounded buffer<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>0 days<\/td>\r\n<td>1.645 \u00d7 \u221a(9 \u00d7 8\u00b2)<\/td>\r\n<td style=\"text-align: right;\">40 units<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>1 day<\/td>\r\n<td>1.645 \u00d7 \u221a(9 \u00d7 8\u00b2 + 30\u00b2 \u00d7 1\u00b2)<\/td>\r\n<td style=\"text-align: right;\">64 units<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>3 days<\/td>\r\n<td>1.645 \u00d7 \u221a(9 \u00d7 8\u00b2 + 30\u00b2 \u00d7 3\u00b2)<\/td>\r\n<td style=\"text-align: right;\">154 units<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1200\" height=\"840\" class=\"wp-image-1000997\" src=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability.webp\" alt=\"A table compares safety stock of 40, 64 and 154 units as lead-time standard deviation increases.\" title=\"\" srcset=\"https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability.webp 1200w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability-300x210.webp 300w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability-1024x717.webp 1024w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability-768x538.webp 768w, https:\/\/fulfillbot.com\/wp-content\/uploads\/2026\/10\/safety-stock-formula-lead-time-variability-18x12.webp 18w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/>\r\n<figcaption>Sensitivity example, not a guaranteed reduction or a universal inventory target.<\/figcaption>\r\n<\/figure>\r\n<p>The average lead time is unchanged in all three rows. Its variability changes the buffer. Using only \u201cnine days on average\u201d would miss that difference. This example is a sensitivity calculation, not evidence that reducing lead-time variability will always produce the same savings. The result depends on the SKU&#8217;s demand pattern and other inputs. If demand surges also cause supplier delays, the independence assumption is doubtful. Do not force that situation into the formula or add an arbitrary percentage afterward. Consider modeling the observed joint behavior, or simulating replenishment with realistic demand and delay scenarios. Sparse data may require a deliberately conservative operating decision while you collect better evidence.<\/p>\r\n<h2>What does a 95% service level mean here?<\/h2>\r\n<p>These z-based calculations target <strong>cycle service level<\/strong>: the probability of avoiding a stockout during a replenishment cycle under the model. A 95% target does not mean that exactly 95% of units, orders, or customers will be fulfilled immediately. <strong>Fill rate<\/strong> measures how much demand is satisfied from stock. Stockout frequency and stockout size are different questions. Chris Caplice&#8217;s MIT logistics lecture defines cycle service level as the probability of no stockout in a replenishment cycle and item fill rate as the fraction of demand filled from on-hand inventory. <a href=\"https:\/\/ocw.mit.edu\/courses\/esd-260j-logistics-systems-fall-2006\/8b53c45fd26ffff706d815131e8d177e_lect11.pdf\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">MIT lecture on probabilistic inventory<\/a>. For reference, one-sided normal quantiles are approximately 1.282 for 90%, 1.645 for 95%, and 2.326 for 99%. Choose the target based on the consequences of shortage and the cost of holding stock. There is no single correct target for every product.<\/p>\r\n<h2>Turn the buffer into a replenishment rule<\/h2>\r\n<p>The usual continuous-review relationship is <strong>reorder point = expected demand during lead time + safety stock<\/strong>. Shopify&#8217;s <a href=\"https:\/\/www.shopify.com\/blog\/min-max-inventory\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">min-max inventory guide<\/a> also separates the reorder threshold from order quantity. In a basic continuous-review model, compare the threshold with <strong>inventory position<\/strong>, commonly defined as on-hand stock plus on-order stock minus backorders. Confirm how your system treats allocations, unavailable stock, and incoming orders. If its \u201cavailable\u201d figure already deducts a commitment, subtracting that commitment again would distort the trigger. For example, with 220 usable units on hand, 100 on order, and 20 backordered, inventory position is 300 units. That is below the illustrative reorder point of 310, even though the number physically on the shelf is a different figure. This simple example assumes the incoming supply is valid and appropriately timed; a late or uncertain PO needs separate attention. If you review inventory only once a week, demand can continue between reviews before a new order is placed. The protection period then generally includes the review interval as well as replenishment lead time. Use a periodic-review policy designed for that process rather than copying the continuous-review threshold unchanged.<\/p>\r\n<h2>Check the policy against purchasing and receiving reality<\/h2>\r\n<p>Before adopting the result, write down the SKU, destination, data window, formula, service metric, rounding rule, and review owner. Recheck it when demand changes materially, the supplier changes, or the replenishment route changes. Replay past replenishment cycles where data permits. Examine when shortages would have occurred, how large they would have been, and what stock the rule would have required. Treat that as a historical check; it cannot establish future performance if the operating conditions have changed. Supplier minimums belong in the order-size decision. If an MOQ forces a much larger purchase than the demand plan supports, explore <a href=\"https:\/\/fulfillbot.com\/blog\/negotiate-moq-chinese-suppliers\/\">smaller replenishment orders with Chinese suppliers<\/a> alongside price, packaging, and freight tradeoffs. Extra cycle stock created by a large order is not automatically a carefully designed safety buffer. Receiving delays also deserve attention. When discussing <a href=\"https:\/\/fulfillbot.com\/warehousing-distribution\/\">China warehousing and fulfillment<\/a>, agree which milestones will be recorded: arrival, count completion, inspection release, and availability for dispatch. Those timestamps can improve your lead-time input. Confirm the reporting arrangement for your account rather than assuming a warehouse service includes forecasting.<\/p>\r\n<h2>Frequently asked questions<\/h2>\r\n<h3>Is safety stock the same as minimum stock?<\/h3>\r\n<p>Not always. Software and businesses use \u201cminimum\u201d differently. In this guide, safety stock is the uncertainty buffer; the reorder point includes expected lead-time demand as well. Check the definition before copying a number into a system field.<\/p>\r\n<h3>Can I use a fixed percentage of sales?<\/h3>\r\n<p>You can set a provisional operating buffer that way, but a percentage alone does not account for demand variability, replenishment variability, or a defined cycle service target. Record it as a management assumption and review its results.<\/p>\r\n<h3>What if demand is seasonal or intermittent?<\/h3>\r\n<p>Do not treat an annual average and standard deviation as a complete model. For seasonal items, examine forecast errors over the relevant replenishment horizon. For intermittent demand, use a method that represents the many zero-demand periods and occasional orders. Validate the resulting policy against the service measure you actually need.<\/p>","protected":false},"excerpt":{"rendered":"<p>Elija una f\u00f3rmula de stock de seguridad que se ajuste a su demanda y plazo de entrega, calcule un ejemplo pr\u00e1ctico y separe su stock de seguridad del punto de reorden.<\/p>","protected":false},"author":1,"featured_media":1000998,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"no","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"default","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23],"tags":[667],"class_list":["post-1000994","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ecommerce","tag-safety-stock-formula"],"modified_by":"Alex Wong","_links":{"self":[{"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/posts\/1000994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/comments?post=1000994"}],"version-history":[{"count":4,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/posts\/1000994\/revisions"}],"predecessor-version":[{"id":1001020,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/posts\/1000994\/revisions\/1001020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/media\/1000998"}],"wp:attachment":[{"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/media?parent=1000994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/categories?post=1000994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fulfillbot.com\/es\/wp-json\/wp\/v2\/tags?post=1000994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}