============================================================ */ (function(){ 'use strict'; function init(){ var root = document.getElementById('zssb'); if(!root) return; /* ── State ──────────────────────────────────────── */ var s1Type = 'sleeper'; // 'sleeper' or 'offduty' var s2Type = 'sleeper'; /* ── Toggle button setup ────────────────────────── */ function setupToggle(slpId, offId, callback){ var slpBtn = document.getElementById(slpId); var offBtn = document.getElementById(offId); if(!slpBtn || !offBtn) return; slpBtn.addEventListener('click', function(){ slpBtn.classList.add('active'); offBtn.classList.remove('active'); callback('sleeper'); }); offBtn.addEventListener('click', function(){ offBtn.classList.add('active'); slpBtn.classList.remove('active'); callback('offduty'); }); } setupToggle('zssb-s1-sleeper', 'zssb-s1-offduty', function(t){ s1Type = t; }); setupToggle('zssb-s2-sleeper', 'zssb-s2-offduty', function(t){ s2Type = t; }); /* ── Format decimal hours → "Xh Ym" ─────────────── */ function fmtHrs(h){ if(isNaN(h) || h < 0) return '0h 0m'; var hh = Math.floor(h); var mm = Math.round((h - hh) * 60); if(mm === 60){ hh++; mm = 0; } if(hh === 0 && mm === 0) return '0h 0m'; if(hh === 0) return mm + 'm'; if(mm === 0) return hh + 'h'; return hh + 'h ' + mm + 'm'; } /* ── Add decimal hours to a time string ─────────── */ function addHrs(timeStr, hrs){ if(!timeStr || timeStr === '') return null; var parts = timeStr.split(':'); if(parts.length < 2) return null; var totalMins = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10) + Math.round(hrs * 60); totalMins = ((totalMins % 1440) + 1440) % 1440; var h = Math.floor(totalMins / 60); var m = totalMins % 60; return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; } /* ── Convert 24hr "HH:MM" → 12hr "H:MM AM/PM" ─── */ function to12hr(t24){ if(!t24) return null; var p = t24.split(':'); var h = parseInt(p[0], 10); var m = p[1]; var ampm = h >= 12 ? 'PM' : 'AM'; h = h % 12; if(h === 0) h = 12; return h + ':' + m + ' ' + ampm; } /* ── Warning helpers ─────────────────────────────── */ function showWarn(msg){ var w = document.getElementById('zssb-warn'); var wm = document.getElementById('zssb-wmsg'); if(w && wm){ wm.textContent = msg; w.classList.add('show'); } } function hideWarn(){ var w = document.getElementById('zssb-warn'); if(w) w.classList.remove('show'); } /* ── Status bar progress ─────────────────────────── */ function setStatus(step){ var pills = ['zssb-pill-1', 'zssb-pill-2', 'zssb-pill-3']; for(var i = 0; i < pills.length; i++){ var el = document.getElementById(pills[i]); if(el){ el.classList[i < step ? 'add' : 'remove']('active'); } } } /* ════════════════════════════════════════════════ MAIN CALCULATION — FMCSA 49 CFR §395.1(g) ════════════════════════════════════════════════ */ function calc(){ hideWarn(); setStatus(2); /* Read inputs */ var drivenBefore = parseFloat(document.getElementById('zssb-driven').value) || 0; var drivenBetween = parseFloat(document.getElementById('zssb-driven-between').value) || 0; var s1h = parseFloat(document.getElementById('zssb-s1-hrs').value) || 0; var s1m = parseFloat(document.getElementById('zssb-s1-min').value) || 0; var s2h = parseFloat(document.getElementById('zssb-s2-hrs').value) || 0; var s2m = parseFloat(document.getElementById('zssb-s2-min').value) || 0; var s1Start = document.getElementById('zssb-s1-start').value; var s2Start = document.getElementById('zssb-s2-start').value; /* Convert to decimal hours */ var split1 = s1h + (s1m / 60); var split2 = s2h + (s2m / 60); /* ── Validation ────────────────────────────────── */ if(split1 <= 0 && split2 <= 0){ showWarn('Please enter the duration for at least one split rest period.'); return; } if(split1 < 0 || split2 < 0){ showWarn('Rest period durations cannot be negative.'); return; } if(drivenBefore < 0 || drivenBetween < 0){ showWarn('Driving hours cannot be negative.'); return; } var totalDriven = drivenBefore + drivenBetween; if(totalDriven > 11){ showWarn('Total hours driven (' + totalDriven.toFixed(2) + ' hrs) exceeds the 11-hour driving limit.'); return; } /* ── FMCSA Split Sleeper Berth Logic ───────────── RULE 1: Combined rest >= 10 hours RULE 2: The longer period must be >= 7 hrs AND in sleeper berth RULE 3: The shorter period must be >= 2 hrs (sleeper or off-duty) ─────────────────────────────────────────────────── */ var totalRest = split1 + split2; var combinedOk = totalRest >= 10; var longSplit = Math.max(split1, split2); var shortSplit = Math.min(split1, split2); var longIsS1 = split1 >= split2; var longType = longIsS1 ? s1Type : s2Type; /* Long split: must be >= 7 hrs AND sleeper berth */ var longOk = (longSplit >= 7) && (longType === 'sleeper'); /* Short split: must be >= 2 hrs (any type) */ var shortOk = (shortSplit >= 2); /* Single-split detection (only one period entered) */ var oneSplit = (split1 > 0 && split2 === 0) || (split1 === 0 && split2 > 0); var isCompliant = false; var reason = ''; if(oneSplit){ isCompliant = false; reason = 'Only one split period entered. Please enter both Split 1 and Split 2 durations to check full FMCSA compliance.'; } else { var failReasons = []; if(!longOk){ if(longSplit < 7){ failReasons.push('Longer split (' + fmtHrs(longSplit) + ') is under the required 7-hour minimum.'); } else { failReasons.push('Longer split (' + fmtHrs(longSplit) + ') must be in the sleeper berth, not off-duty.'); } } if(!shortOk){ failReasons.push('Shorter split (' + fmtHrs(shortSplit) + ') is under the required 2-hour minimum.'); } if(!combinedOk){ failReasons.push('Combined rest (' + fmtHrs(totalRest) + ') is under the 10-hour minimum required.'); } isCompliant = longOk && shortOk && combinedOk; if(isCompliant){ reason = 'Both splits meet FMCSA requirements. Your 14-hour clock is paused during both rest periods and restarts at the end of Split 2.'; } else { reason = failReasons.join(' '); } } /* ── Remaining drive time ───────────────────────── */ var driveRemaining = Math.max(0, 11 - totalDriven); /* ── Timeline data (if start times provided) ──── */ var timelineData = null; if(s1Start && s1Start !== ''){ var s1End = addHrs(s1Start, split1); var midDrive = s2Start && s2Start !== '' ? s2Start : (s1End ? addHrs(s1End, drivenBetween) : null); var s2End = midDrive ? addHrs(midDrive, split2) : null; timelineData = { s1Start: to12hr(s1Start), s1End: to12hr(s1End), s2Start: s2Start && s2Start !== '' ? to12hr(s2Start) : (midDrive ? to12hr(midDrive) : null), s2End: to12hr(s2End), resumeTime: s2End ? to12hr(s2End) : null }; } /* ── Render results ──────────────────────────────── */ renderResults(isCompliant, reason, { split1: split1, split2: split2, totalRest: totalRest, longSplit: longSplit, shortSplit: shortSplit, longOk: longOk, shortOk: shortOk, combinedOk: combinedOk, longType: longType, drivenBefore: drivenBefore, drivenBetween: drivenBetween, totalDriven: totalDriven, driveRemaining:driveRemaining, s1Type: s1Type, s2Type: s2Type, oneSplit: oneSplit }, timelineData); setStatus(3); } /* ════════════════════════════════════════════════ RENDER RESULTS ════════════════════════════════════════════════ */ function renderResults(isCompliant, reason, d, tl){ /* Element refs */ var resEl = document.getElementById('zssb-res'); var banner = document.getElementById('zssb-banner'); var bannerStatus= document.getElementById('zssb-banner-status'); var bannerReason= document.getElementById('zssb-banner-reason'); var bannerSvg = document.getElementById('zssb-banner-svg'); var cardsEl = document.getElementById('zssb-cards'); var breakdownEl = document.getElementById('zssb-breakdown'); var timelineEl = document.getElementById('zssb-timeline'); var tlWrap = document.getElementById('zssb-timeline-wrap'); /* ── Compliance Banner ──────────────────────────── */ if(d.oneSplit){ banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = 'Incomplete — Enter Both Splits'; bannerSvg.innerHTML = ''; } else if(isCompliant){ banner.className = 'compliance-banner compliant'; bannerStatus.textContent = '✅ FMCSA Compliant — Valid Split'; bannerSvg.innerHTML = ''; } else { banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = '❌ Non-Compliant — Invalid Split'; bannerSvg.innerHTML = ''; } bannerReason.textContent = reason; /* ── Summary Cards ──────────────────────────────── */ var cards = []; if(!d.oneSplit){ cards.push({ v: fmtHrs(d.split1), u: d.s1Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 1 Duration', cls: d.s1Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.split2), u: d.s2Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 2 Duration', cls: d.s2Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.totalRest), u: 'TOTAL REST', n: 'Combined Off-Duty', cls: d.combinedOk ? 'green' : 'red' }); cards.push({ v: fmtHrs(d.driveRemaining), u: 'REMAINING', n: 'Drive Time Left', cls: d.driveRemaining > 4 ? 'green' : (d.driveRemaining > 2 ? 'orange' : 'red') }); } cardsEl.innerHTML = cards.map(function(c){ return '
' + '
' + c.v + '
' + '
' + c.u + '
' + '
' + c.n + '
' + '
'; }).join(''); /* ── Breakdown Table ────────────────────────────── */ var rows = []; if(!d.oneSplit){ rows.push({lbl: 'Split 1 (' + (d.s1Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split1), cls: ''}); rows.push({lbl: 'Split 2 (' + (d.s2Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split2), cls: ''}); rows.push({lbl: 'Combined Rest Total', val: fmtHrs(d.totalRest) + (d.totalRest >= 10 ? ' ✓' : ' ✗ (Need ≥10h)'), cls: d.combinedOk ? 'ok' : 'fail'}); rows.push({lbl: 'Longer Split ≥7 hrs in Sleeper Berth', val: d.longOk ? '✓ Pass' : '✗ Fail', cls: d.longOk ? 'ok' : 'fail'}); rows.push({lbl: 'Shorter Split ≥2 hrs (any type)', val: d.shortOk ? '✓ Pass' : '✗ Fail', cls: d.shortOk ? 'ok' : 'fail'}); rows.push({lbl: 'Hours Driven Before Split 1', val: fmtHrs(d.drivenBefore), cls: 'info'}); rows.push({lbl: 'Hours Driven Between Splits', val: fmtHrs(d.drivenBetween), cls: 'info'}); rows.push({lbl: 'Total Hours Driven', val: fmtHrs(d.totalDriven) + ' / 11 hrs max', cls: d.totalDriven < 11 ? 'ok' : 'fail'}); rows.push({lbl: 'Drive Time Remaining After Splits', val: fmtHrs(d.driveRemaining), cls: d.driveRemaining > 0 ? 'ok' : 'fail'}); rows.push({lbl: '14-Hour Clock Paused During Splits', val: isCompliant ? 'Yes — Both periods excluded' : 'Not applicable (fix issues above)', cls: isCompliant ? 'ok' : 'fail'}); } breakdownEl.innerHTML = rows.map(function(r){ return '
' + '' + r.lbl + '' + '' + r.val + '' + '
'; }).join(''); /* ── Timeline ───────────────────────────────────── */ if(!d.oneSplit){ tlWrap.style.display = 'block'; var items = []; items.push({ dot: 'drive', label: 'Started Driving', desc: 'Drove ' + fmtHrs(d.drivenBefore) + ' before first rest period.' }); items.push({ dot: 'sleep', label: 'Split 1 Begins' + (tl && tl.s1Start ? ' at ' + tl.s1Start : ''), desc: fmtHrs(d.split1) + ' ' + (d.s1Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s1End ? ' → Ends: ' + tl.s1End : '') }); if(d.drivenBetween > 0){ items.push({ dot: 'drive', label: 'Resumed Driving Between Splits', desc: 'Drove ' + fmtHrs(d.drivenBetween) + ' between the two rest periods.' }); } items.push({ dot: 'sleep', label: 'Split 2 Begins' + (tl && tl.s2Start ? ' at ' + tl.s2Start : ''), desc: fmtHrs(d.split2) + ' ' + (d.s2Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s2End ? ' → Ends: ' + tl.s2End : '') }); if(isCompliant){ items.push({ dot: 'done', label: '14-Hour Clock Restarts' + (tl && tl.resumeTime ? ' at ' + tl.resumeTime : ''), desc: 'Both splits complete. ' + fmtHrs(d.driveRemaining) + ' drive time remaining.' }); } else { items.push({ dot: 'off', label: 'Non-Compliant — Cannot Resume', desc: 'Fix the split issues above before resuming driving.' }); } timelineEl.innerHTML = items.map(function(it){ return '
' + '
' + '
' + '
' + it.label + '
' + '
' + it.desc + '
' + '
'; }).join(''); } else { tlWrap.style.display = 'none'; } /* ── Show results panel ─────────────────────────── */ resEl.classList.add('show'); setTimeout(function(){ resEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } /* ════════════════════════════════════════════════ RESET ════════════════════════════════════════════════ */ function resetAll(){ /* Clear number inputs */ var numIds = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numIds.forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Clear time inputs */ ['zssb-s1-start', 'zssb-s2-start'].forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Reset toggle states */ s1Type = 'sleeper'; s2Type = 'sleeper'; ['zssb-s1-sleeper', 'zssb-s2-sleeper'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.add('active'); }); ['zssb-s1-offduty', 'zssb-s2-offduty'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.remove('active'); }); /* Hide warning and results */ hideWarn(); var resEl = document.getElementById('zssb-res'); if(resEl) resEl.classList.remove('show'); setStatus(1); } /* ── Event Listeners ──────────────────────────────── */ var calcBtn = document.getElementById('zssb-btn'); if(calcBtn) calcBtn.addEventListener('click', calc); var rstBtn = document.getElementById('zssb-reset'); if(rstBtn) rstBtn.addEventListener('click', resetAll); /* Enter key triggers calculation */ var numFields = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numFields.forEach(function(id){ var el = document.getElementById(id); if(el) el.addEventListener('keydown', function(e){ if(e.key === 'Enter') calc(); }); }); } /* end init() */ /* ── Safe DOM-ready execution ───────────────────────── */ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
Process Capability Index Calculator
Calculate Cp, Cpk, CPU & CPL instantly — with DPMO & sigma level.
Process Parameters
Upper Spec Limit (USL)
Maximum acceptable value
Lower Spec Limit (LSL)
Minimum acceptable value
Process Mean (μ)
Average of measured data
Standard Deviation (σ)
Must be greater than zero
Target / Nominal (Optional)
For Cpm calculation
!
Please fill in all required fields with valid numbers.
Process Status
📊 Calculated Indices
Poor (0) Cpk Scale World Class (2.0+)
00.671.01.331.672.0
DPMO
Process Yield
Sigma Level
📋 Cpk Interpretation Reference
Cpk Range Rating DPMO (approx.) Verdict
≥ 2.00 World Class < 3.4 Six Sigma — near-zero defects
1.67 – 1.99 Excellent < 64 Exceeds most industry standards
1.33 – 1.66 Capable < 64 – 233 Industry minimum standard
1.00 – 1.32 Marginal < 2,700 Borderline; monitor closely
0.67 – 0.99 Inadequate < 45,500 Producing defects; improve urgently
< 0.67 Poor > 45,500 High defect rate; immediate action
Formulas, References & Notes
  • Cp(USL − LSL) ÷ (6 × σ) — Potential capability (assumes centered process)
  • CPU(USL − μ) ÷ (3 × σ) — Upper capability index
  • CPL(μ − LSL) ÷ (3 × σ) — Lower capability index
  • Cpkmin(CPU, CPL) — Actual capability (accounts for centering)
  • Cpm(USL − LSL) ÷ (6 × √(σ² + (μ − T)²)) — Taguchi capability (requires Target)
  • DPMO is estimated from Cpk using the normal distribution: DPMO ≈ 1,000,000 × 2 × Φ(−3 × Cpk)
  • Industry standard minimum: Cpk ≥ 1.33 (ISO, AIAG PPAP). Safety-critical: Cpk ≥ 1.67.
  • This calculator assumes a normal (Gaussian) distribution and short-term within-subgroup variation. Use Ppk for long-term analysis.
  • Sources: ASQ.org, iSixSigma.com, AIAG APQP/PPAP Manual, Wikipedia — Process capability index

Process Capability Index Calculator: Find Your Cpk Score Instantly

Not sure if your manufacturing or business process is meeting quality standards? The Process Capability Index Calculator on ZoCalculator.com does the heavy lifting for you — enter your process data and instantly find out whether your process is capable, borderline, or needs improvement. It's built for quality engineers, Six Sigma practitioners, students, and anyone who needs a fast, reliable process capability index cpk calculation without manually crunching numbers.


What This Calculator Tells You

Enter your process specs and this tool returns all the critical values you need in one shot:

  • Cp (Process Capability) — How well your process fits within specification limits
  • Cpk (Process Capability Index) — Whether your process is centered and capable simultaneously
  • CPU (Upper Capability Index) — Distance from the process mean to the Upper Specification Limit (USL)
  • CPL (Lower Capability Index) — Distance from the process mean to the Lower Specification Limit (LSL)
  • Process Mean (μ) — The average output value of your process
  • Standard Deviation (σ) — The spread or variability within your process
  • Pass/Fail Status — A plain-language verdict on whether your process meets the Six Sigma benchmark

How the Calculator Works (The Formula & Logic)

The process capability index calculation formula is grounded in statistical process control (SPC). The goal is to measure how much of your process output falls within acceptable specification limits relative to natural variation.

Core Formulas:

Cp = (USL − LSL) / (6 × σ)

CPU = (USL − μ) / (3 × σ)

CPL = (μ − LSL) / (3 × σ)

Cpk = Minimum of (CPU, CPL)

Where:

  • USL = Upper Specification Limit
  • LSL = Lower Specification Limit
  • μ (mu) = Process Mean (average)
  • σ (sigma) = Process Standard Deviation

Why Cpk matters more than Cp: Cp only tells you if there's enough room between your spec limits for the process to fit. Cpk tells you if the process is actually centered within those limits. A process can have a great Cp but a poor Cpk if it's consistently drifting toward one boundary.


Standard Ratings & Classifications (Comparison Chart)

Use this table to interpret your process capability index calculation result instantly:

Cpk ValueProcess RatingWhat It Means
Cpk ≥ 2.00World ClassExceptionally capable; near-zero defects
Cpk ≥ 1.67ExcellentMeets Six Sigma standards comfortably
Cpk ≥ 1.33CapableIndustry standard minimum; acceptable quality
Cpk = 1.00Marginally CapableExactly on the edge; ~0.27% defect rate
Cpk 0.67 – 0.99InadequateProducing defects; process needs improvement
Cpk < 0.67Poor / IncapableHigh defect rate; immediate action required

Industry Rule of Thumb: Most quality standards, including ISO and automotive (AIAG), require a minimum Cpk of 1.33 for a process to be considered capable.


Step-by-Step Practical Example

Let's walk through a real process capability index calculation example so you can see exactly how the result is derived.

Scenario: A factory produces metal rods. The required length is 50 mm, with tolerance of ±2 mm.

  • USL = 52 mm
  • LSL = 48 mm
  • Process Mean (μ) = 50.5 mm
  • Standard Deviation (σ) = 0.5 mm

Step 1 — Calculate Cp:
Cp = (52 − 48) / (6 × 0.5) = 4 / 3 = 1.33

Step 2 — Calculate CPU and CPL:
CPU = (52 − 50.5) / (3 × 0.5) = 1.5 / 1.5 = 1.00
CPL = (50.5 − 48) / (3 × 0.5) = 2.5 / 1.5 = 1.67

Step 3 — Calculate Cpk:
Cpk = Minimum (1.00, 1.67) = 1.00

Interpretation: Even though Cp = 1.33 looks acceptable, the Cpk of 1.00 reveals the process mean is shifted toward the upper limit. The process is only marginally capable and needs to be re-centered closer to 50 mm to reduce risk of out-of-spec parts.


How to Use Zo Calculator's Process Capability Index Tool

Using the capability index calculator on ZoCalculator.com takes less than a minute:

  1. Enter the Upper Specification Limit (USL) — This is the maximum acceptable value for your process output.
  2. Enter the Lower Specification Limit (LSL) — This is the minimum acceptable value.
  3. Enter the Process Mean (μ) — Input your measured average from collected process data.
  4. Enter the Standard Deviation (σ) — Use the actual standard deviation from your sample data (not estimated).
  5. Click "Calculate" — The tool instantly returns Cp, Cpk, CPU, CPL, and a capability verdict.
  6. Read the color-coded result — Green means capable, yellow means marginal, red means action needed.

No login, no spreadsheet, no formula headaches. Just enter your values and you have your answer.


Practical Applications and Real-World Uses

When you calculate process capability index values, the insights apply across a wide range of industries and roles:

  • Manufacturing & Production — Verify that machining, assembly, or filling processes consistently produce parts within engineering tolerances before shipping.
  • Pharmaceutical & Medical Devices — Demonstrate regulatory compliance (FDA, ISO 13485) by proving that drug dosing or device dimensions meet strict specification windows.
  • Automotive Industry (APQP/PPAP) — Suppliers must submit Cpk data ≥ 1.67 to OEM customers as part of the Production Part Approval Process.
  • Food & Beverage Packaging — Ensure fill weights, seal integrity, and label placement stay within acceptable ranges to avoid under-fill complaints or safety violations.
  • Six Sigma & Lean Projects — Use Cpk as the baseline metric during the Measure phase of DMAIC to quantify the extent of a quality problem.
  • Academic & Training Use — Students studying industrial engineering, quality management, or statistics use a process capability index calculator to validate hand-calculated exercises and deepen concept understanding.

Important Notes & Technical Limitations

To use this tool responsibly, keep the following assumptions in mind:

  1. Normal distribution assumed. The Cp and Cpk formulas are only valid when your process data follows a roughly normal (bell-curve) distribution. Non-normal processes require different capability indices (e.g., Cnpk or Ppk with transformation).
  2. Short-term vs. long-term variation. Cpk typically reflects short-term capability using within-subgroup variation. Long-term performance is measured by Ppk, which accounts for additional sources of variation over time. These two values are not interchangeable.
  3. Sample size matters. Standard deviation calculated from fewer than 30 data points may be unreliable. For high-stakes decisions, use larger, representative samples from stable, in-control processes.
  4. This tool is for reference and planning purposes only. Results should be validated with certified statistical software (Minitab, JMP, etc.) before being submitted in formal quality documentation or regulatory submissions.

Helpful References & Sources

  • iSixSigma.com — Industry-leading resource for Six Sigma methodology, Cpk benchmarks, and capability analysis tutorials.
  • ASQ.org (American Society for Quality) — Official standards body providing definitions, guidelines, and body-of-knowledge references for process capability indices.
  • Wikipedia.org/wiki/Process_capability_index — A technically accurate overview of Cp, Cpk, Pp, and Ppk with mathematical derivations and historical context.

🙋 Frequently Asked Questions (FAQs)

What is the Process Capability Index (Cpk)?

The Process Capability Index, or Cpk, is a statistical measure that shows how well a process produces output within its specification limits while also accounting for whether the process is centered. A Cpk of 1.33 is the widely accepted minimum standard for a capable process, meaning virtually all output falls within acceptable bounds. Unlike Cp, which only measures spread, Cpk penalizes a process for being off-center.

What is the difference between Cp and Cpk?

Cp measures the potential capability of a process — it compares the specification width to the process spread, assuming the process is perfectly centered. Cpk measures actual capability by factoring in where the process mean sits relative to both limits. You can think of Cp as the best-case score and Cpk as the real-world score; Cpk will always be equal to or less than Cp.

What is a good Cpk value?

A Cpk of 1.33 or higher is the general industry minimum for an acceptable process, equivalent to roughly 64 defects per million opportunities (DPMO). For safety-critical industries like aerospace or medical devices, a Cpk of 1.67 or higher is typically required. World-class processes target a Cpk of 2.0 or above, which corresponds to Six Sigma quality levels.

How do I calculate the Process Capability Index manually?

To calculate the process capability index manually, you need four values: the Upper Specification Limit (USL), Lower Specification Limit (LSL), process mean (μ), and standard deviation (σ). First, calculate CPU = (USL − μ) / (3σ) and CPL = (μ − LSL) / (3σ), then Cpk is simply the smaller of these two values. For a full process capability index calculation example with real numbers, see the step-by-step walkthrough section above.

What does a Cpk of 1.0 mean?

A Cpk of exactly 1.0 means your process is just barely fitting within specification limits, with the process spread equal to the distance from the mean to the nearest spec limit. At this level, approximately 2,700 defects per million opportunities (DPMO) are expected, assuming a normal distribution. It signals that the process is marginally capable and vulnerable to any shift in the mean or increase in variation.

What is the difference between Cpk and Ppk?

Cpk uses within-subgroup standard deviation and reflects short-term process capability under controlled, stable conditions. Ppk uses overall standard deviation from all collected data and reflects long-term process performance, including variation from shift changes, tool wear, or raw material differences. For initial process qualification, Cpk is reported; for ongoing monitoring, Ppk gives a more complete real-world picture.

Can Cpk be negative?

Yes, Cpk can be negative, and it indicates a seriously out-of-control process where the process mean has drifted completely outside the specification limits. A negative Cpk means the majority of your process output is already out of spec. In this situation, the process requires immediate corrective action before any meaningful capability analysis makes sense.

What inputs do I need to use the capability index calculator?

You need exactly four inputs: the Upper Specification Limit (USL), the Lower Specification Limit (LSL), the process mean (μ), and the process standard deviation (σ). All four values should come from actual measured data collected from a stable, in-control process. If you don't yet have a standard deviation, you can calculate it first using Zo Calculator's Standard Deviation Calculator.

Is Cpk used in Six Sigma?

Yes, Cpk is one of the core metrics in Six Sigma methodology. During the Measure phase of a DMAIC project, teams calculate Cpk to quantify the baseline capability of the process being improved. The ultimate goal of a Six Sigma initiative is to achieve a long-term Cpk of 1.5 or higher, which corresponds to no more than 3.4 defects per million opportunities.

Why does my Cp look fine but my Cpk is low?

This is a classic sign that your process has enough room to fit within spec (good Cp) but the process mean is shifted toward one of the specification limits (poor Cpk). The fix is usually process centering — adjusting the process target so the mean moves back toward the midpoint between USL and LSL. Once centered, Cpk will rise toward the Cp value without needing to reduce variability.


Explore Related Calculators on Zo Calculator