Skip to content
Quality & Process Control

What Is IQC, IPQC, FQC, and OQC

IQC, IPQC, FQC, and OQC are quality control stages in manufacturing. Learn what each covers and how to track quality data with TofuPilot.

JJulien Buteau
beginner7 min readMarch 14, 2026

What Is IQC, IPQC, FQC, and OQC with TofuPilot

Manufacturing quality control happens at four stages: incoming (IQC), in-process (IPQC), final (FQC), and outgoing (OQC). Each stage catches different types of defects at different costs. This guide covers what each stage involves, what it catches, and how to track quality data across all stages with TofuPilot.

The Four Quality Gates

StageFull NameWhenWhat It Catches
IQCIncoming Quality ControlMaterials arriveBad components, wrong parts, supplier issues
IPQCIn-Process Quality ControlDuring manufacturingProcess drift, assembly errors, contamination
FQCFinal Quality ControlAfter assembly completeFunctional failures, cosmetic defects
OQCOutgoing Quality ControlBefore shipmentPackaging damage, labeling errors, sampling verification

Each stage is a gate. Material that fails a gate gets quarantined, reworked, or rejected. Material that passes moves to the next stage.

IQC: Incoming Quality Control

IQC inspects raw materials and components when they arrive from suppliers. It prevents bad inputs from entering the production line.

CheckMethod
Visual inspectionPackaging damage, correct labels, moisture indicators
Dimensional checkCaliper or CMM measurement against drawing
Electrical sample testMeasure key parameters on a sample (AQL-based)
Certificate reviewVerify CoC, RoHS compliance, lot codes

IQC sampling follows AQL (Acceptable Quality Limit) tables. You don't test every component. You test a statistically valid sample and accept or reject the lot.

IPQC: In-Process Quality Control

IPQC monitors the manufacturing process while it's running. It catches drift before it produces a batch of defective units.

CheckMethod
SPI after paste printingAutomated solder paste volume measurement
AOI after reflowAutomated optical inspection of solder joints
First piece inspectionFull check of the first unit after setup
Hourly spot checksOperator verifies key dimensions or parameters
Process parameter monitoringTemperature, pressure, speed within control limits

IPQC is where SPC (statistical process control) lives. Control charts track process parameters in real time and flag out-of-control conditions before they produce defects.

FQC: Final Quality Control

FQC tests the finished product against its full specification. This is where functional testing, safety testing, and cosmetic inspection happen.

CheckMethod
Functional testAutomated test (ATE) against design spec
Safety testHipot, ground continuity, leakage current
Cosmetic inspectionVisual check for scratches, dents, label alignment
Calibration verificationConfirm calibrated parameters are within spec

FQC is typically 100% inspection for critical tests and sample-based for cosmetic checks.

OQC: Outgoing Quality Control

OQC is the final check before the product ships. It verifies that packing, labeling, and quantity are correct, and runs a final sample test.

CheckMethod
Packaging integrityBox condition, cushioning, moisture barrier
Label verificationPart number, serial, lot, regulatory marks
Quantity countMatches packing list and order
Sample retestPull samples and rerun functional test

OQC is the last chance to catch problems. A failure here is expensive because the product is fully packaged and ready to ship.

Prerequisites

  • Python 3.10+
  • OpenHTF installed (pip install openhtf)
  • TofuPilot Python SDK installed (pip install tofupilot)

Step 1: Log Quality Checks at Each Stage

Create separate test procedures for each quality stage. This keeps the data organized and lets you track yield per stage independently.

iqc_check.py
import openhtf as htf
from openhtf.util import units


@htf.measures(
    htf.Measurement("component_resistance_ohm")
    .in_range(minimum=4700, maximum=5100)
    .with_units(units.OHM),
    htf.Measurement("visual_inspection").equals("PASS"),
)
def phase_iqc_sample(test):
    """IQC sample test for incoming resistor lot."""
    test.measurements.component_resistance_ohm = 4850
    test.measurements.visual_inspection = "PASS"
fqc_test.py
import openhtf as htf
from openhtf.util import units


@htf.measures(
    htf.Measurement("output_voltage_V")
    .in_range(minimum=4.9, maximum=5.1)
    .with_units(units.VOLT),
    htf.Measurement("safety_hipot").equals("PASS"),
)
def phase_fqc(test):
    """FQC: functional and safety test on finished unit."""
    test.measurements.output_voltage_V = 5.01
    test.measurements.safety_hipot = "PASS"

Step 2: Connect Each Stage to TofuPilot

Each quality stage uploads results independently. TofuPilot links them by serial number, giving you full traceability from incoming materials to outgoing product.

fqc_test.py
from tofupilot.openhtf import TofuPilot

test = htf.Test(phase_fqc)

with TofuPilot(test):
    test.execute(test_start=lambda: input("Scan unit serial: "))

Step 3: Track Quality Across All Stages

TofuPilot tracks results from all quality stages. Open the Analytics tab to see:

  • Yield per stage (IQC, IPQC, FQC, OQC separately)
  • Failure Pareto per stage showing top defect types
  • Supplier quality by tracking IQC rejection rates per vendor
  • Full traceability from incoming lot to shipped unit

Put this guide into practice