Skip to content

quality_tracking

quality_tracking ¤

Quality and NOK (defective parts) tracking.

Essential module for daily quality analysis: - NOK parts by shift and part number - Scrap tracking - First pass yield - Quality rates

QualityTracking ¤

QualityTracking(
    dataframe: DataFrame,
    *,
    time_column: str = "systime",
    shift_definitions: Optional[
        Dict[str, tuple[str, str]]
    ] = None
)

Bases: Base

Track NOK (defective) parts and quality metrics.

Each UUID represents one signal: - ok_counter_uuid: counter for good parts - nok_counter_uuid: counter for defective parts - part_id_uuid: part number signal (optional) - defect_reason_uuid: defect reason code (optional)

Example usage

tracker = QualityTracking(df)

NOK parts per shift¤

shift_nok = tracker.nok_by_shift( ok_counter_uuid='good_parts', nok_counter_uuid='bad_parts' )

Quality by part number¤

part_quality = tracker.quality_by_part( ok_counter_uuid='good_parts', nok_counter_uuid='bad_parts', part_id_uuid='part_number' )

Initialize quality tracker.

Parameters:

Name Type Description Default
dataframe DataFrame

Input DataFrame with timeseries data

required
time_column str

Name of timestamp column (default: 'systime')

'systime'
shift_definitions Optional[Dict[str, tuple[str, str]]]

Dictionary mapping shift names to (start, end) times Default: 3-shift operation (06:00-14:00, 14:00-22:00, 22:00-06:00)

None

nok_by_shift ¤

nok_by_shift(
    ok_counter_uuid: str,
    nok_counter_uuid: str,
    *,
    value_column: str = "value_integer"
) -> pd.DataFrame

Calculate NOK (defective) parts per shift.

Parameters:

Name Type Description Default
ok_counter_uuid str

UUID for good parts counter

required
nok_counter_uuid str

UUID for defective parts counter

required
value_column str

Column containing counter values

'value_integer'

Returns:

Type Description
DataFrame

DataFrame with quality metrics by shift:

DataFrame
  • date: Production date
DataFrame
  • shift: Shift name
DataFrame
  • ok_parts: Good parts produced
DataFrame
  • nok_parts: Defective parts
DataFrame
  • total_parts: Total parts produced
DataFrame
  • nok_rate_pct: Percentage of defective parts
DataFrame
  • first_pass_yield_pct: Percentage of good parts
Example

nok_by_shift('good_counter', 'bad_counter') date shift ok_parts nok_parts total_parts nok_rate_pct first_pass_yield_pct 0 2024-01-01 shift_1 450 12 462 2.6 97.4 1 2024-01-01 shift_2 425 18 443 4.1 95.9 2 2024-01-01 shift_3 380 25 405 6.2 93.8

quality_by_part ¤

quality_by_part(
    ok_counter_uuid: str,
    nok_counter_uuid: str,
    part_id_uuid: str,
    *,
    value_column_counter: str = "value_integer",
    value_column_part: str = "value_string"
) -> pd.DataFrame

Calculate quality metrics by part number.

Parameters:

Name Type Description Default
ok_counter_uuid str

UUID for good parts counter

required
nok_counter_uuid str

UUID for defective parts counter

required
part_id_uuid str

UUID for part number signal

required
value_column_counter str

Column containing counter values

'value_integer'
value_column_part str

Column containing part numbers

'value_string'

Returns:

Type Description
DataFrame

DataFrame with quality by part:

DataFrame
  • part_number: Part number/ID
DataFrame
  • ok_parts: Good parts produced
DataFrame
  • nok_parts: Defective parts
DataFrame
  • total_parts: Total parts produced
DataFrame
  • nok_rate_pct: Percentage of defective parts
DataFrame
  • first_pass_yield_pct: Percentage of good parts
Example

quality_by_part('good', 'bad', 'part_id') part_number ok_parts nok_parts total_parts nok_rate_pct first_pass_yield_pct 0 PART_A 1255 55 1310 4.2 95.8 1 PART_B 890 38 928 4.1 95.9

nok_by_reason ¤

nok_by_reason(
    nok_counter_uuid: str,
    defect_reason_uuid: str,
    *,
    value_column_counter: str = "value_integer",
    value_column_reason: str = "value_string"
) -> pd.DataFrame

Analyze NOK parts by defect reason.

Parameters:

Name Type Description Default
nok_counter_uuid str

UUID for defective parts counter

required
defect_reason_uuid str

UUID for defect reason signal

required
value_column_counter str

Column containing counter values

'value_integer'
value_column_reason str

Column containing reason codes

'value_string'

Returns:

Type Description
DataFrame

DataFrame with NOK by reason:

DataFrame
  • reason: Defect reason code
DataFrame
  • nok_parts: Number of defective parts
DataFrame
  • pct_of_total: Percentage of total NOK
Example

nok_by_reason('bad_parts', 'defect_reason') reason nok_parts pct_of_total 0 Dimension_Error 45 40.5 1 Surface_Defect 28 25.2 2 Wrong_Color 22 19.8

daily_quality_summary ¤

daily_quality_summary(
    ok_counter_uuid: str,
    nok_counter_uuid: str,
    *,
    value_column: str = "value_integer"
) -> pd.DataFrame

Daily quality summary.

Parameters:

Name Type Description Default
ok_counter_uuid str

UUID for good parts counter

required
nok_counter_uuid str

UUID for defective parts counter

required
value_column str

Column containing counter values

'value_integer'

Returns:

Type Description
DataFrame

DataFrame with daily quality:

DataFrame
  • date: Production date
DataFrame
  • ok_parts: Good parts produced
DataFrame
  • nok_parts: Defective parts
DataFrame
  • total_parts: Total parts produced
DataFrame
  • nok_rate_pct: Percentage of defective parts
DataFrame
  • first_pass_yield_pct: Percentage of good parts
Example

daily_quality_summary('good', 'bad') date ok_parts nok_parts total_parts nok_rate_pct first_pass_yield_pct 0 2024-01-01 1255 55 1310 4.2 95.8 1 2024-01-02 1308 42 1350 3.1 96.9 2 2024-01-03 1290 60 1350 4.4 95.6