Determine the quality and efficiency of your assembly or manufacturing process by calculating the Fit Rate, often referred to as First Pass Yield (FPY). This metric indicates the percentage of units that complete a process pass without requiring rework or being scrapped.
Results:
First Time Fit Rate (FPY): –
Overall Fit Rate (After Rework): –
Total Defective Units (Rework + Scrap): –
Good Units (First Pass): –
Understanding Fit Rate and Quality Metrics
In manufacturing, engineering, and quality control, the "Fit Rate"—more commonly known as First Pass Yield (FPY) or First Time Quality (FTQ)—is a critical Key Performance Indicator (KPI). It measures the percentage of products that are manufactured correctly the first time through the process, without needing any rework, repair, or being scrapped entirely.
A high Fit Rate indicates a stable, capable process with minimal waste. Conversely, a low Fit Rate signals process inefficiencies, higher costs due to labor and materials spent on fixing defects, and potential bottlenecks in production throughput.
How the Calculations Work
This calculator determines two types of fit rates based on the inputs provided:
Total Units Processed: The total number of items that entered the manufacturing step or assembly line.
Units Requiring Rework: Items that failed initial inspection but can be repaired to meet specifications.
Units Scrapped: Items that failed inspection and cannot be repaired economically; they are total losses.
1. First Time Fit Rate (FPY) Formula
This measures how many units were perfect on the very first attempt. It is calculated by subtracting both reworked and scrapped units from the total, and dividing by the total.
Formula: ((Total Units – Rework Units – Scrap Units) / Total Units) * 100
2. Overall Fit Rate (After Rework) Formula
This measures the percentage of units that eventually meet specifications, even if they required rework. Only the scrapped (unusable) units are deducted.
Formula: ((Total Units – Scrap Units) / Total Units) * 100
Example Calculation
Imagine a production run where 5,000 widgets enter an assembly line. During inspection, 250 widgets are found to need minor adjustments (rework), and 50 widgets have critical flaws and must be discarded (scrap).
The gap between the 94% First Time rate and the 99% Overall rate represents the "hidden factory" effort spent repairing the 250 units.
function calculateFitRate() {
// Get inputs
var totalUnitsInput = document.getElementById('totalUnits').value;
var reworkUnitsInput = document.getElementById('reworkUnits').value;
var scrapUnitsInput = document.getElementById('scrapUnits').value;
// Clean inputs (handle empty strings as 0 for rework/scrap, ensure integer parsing)
var total = parseInt(totalUnitsInput);
var rework = reworkUnitsInput === "" ? 0 : parseInt(reworkUnitsInput);
var scrap = scrapUnitsInput === "" ? 0 : parseInt(scrapUnitsInput);
var errorDiv = document.getElementById('errorMessage');
var resultsDiv = document.getElementById('resultsBox');
// Reset previous results and errors
errorDiv.style.display = 'none';
errorDiv.innerHTML = ";
resultsDiv.style.display = 'none';
// Validation Logic
if (isNaN(total) || total <= 0) {
errorDiv.innerHTML = "Please enter a valid, positive number for 'Total Units Processed'.";
errorDiv.style.display = 'block';
return;
}
if (isNaN(rework) || rework < 0) {
errorDiv.innerHTML = "Please enter a valid non-negative number for 'Units Requiring Rework'.";
errorDiv.style.display = 'block';
return;
}
if (isNaN(scrap) || scrap total) {
errorDiv.innerHTML = "The sum of Rework and Scrap units cannot exceed the Total Units Processed.";
errorDiv.style.display = 'block';
return;
}
// Calculations
var goodUnitsFirstPass = total – totalDefects;
// First Time Fit Rate = (Good Units First Pass / Total) * 100
var firstTimeFitRate = (goodUnitsFirstPass / total) * 100;
var totalYieldAfterRework = total – scrap;
// Overall Fit Rate = (Total Units that eventually passed / Total) * 100
var overallFitRate = (totalYieldAfterRework / total) * 100;
// Display Results
document.getElementById('firstTimeFitRateResult').innerHTML = firstTimeFitRate.toFixed(2) + '%';
document.getElementById('overallFitRateResult').innerHTML = overallFitRate.toFixed(2) + '%';
document.getElementById('totalDefectsResult').innerHTML = totalDefects.toLocaleString();
document.getElementById('goodUnitsResult').innerHTML = goodUnitsFirstPass.toLocaleString();
resultsDiv.style.display = 'block';
}