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
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
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
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
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
|
|
DataFrame
|
|
DataFrame
|
|
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
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
DataFrame
|
|
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