Files
egg e83d8e1a36 feat(reject-history): fix Pareto datasources, multi-select filtering, and UX enhancements
- Fix dimension Pareto datasources: PJ_TYPE/PRODUCTLINENAME from DW_MES_CONTAINER,
  WORKFLOWNAME from DW_MES_LOTWIPHISTORY via WIPTRACKINGGROUPKEYID, EQUIPMENTNAME
  from LOTREJECTHISTORY only (no WIP fallback), workcenter dimension uses WORKCENTER_GROUP
- Add multi-select Pareto click filtering with chip display and detail list integration
- Add TOP 20 display scope selector for TYPE/WORKFLOW/機台 dimensions
- Pass Pareto selection (dimension + values) through to list/export endpoints
- Enable TRACE_WORKER_ENABLED=true by default in start_server.sh and .env.example
- Archive reject-history-pareto-datasource-fix and reject-history-pareto-ux-enhancements
- Update reject-history-api and reject-history-page specs with new Pareto behaviors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 13:23:16 +08:00

2.0 KiB

MODIFIED Requirements

Requirement: Reject History SQL base query SHALL source dimension columns from correct tables

The base query (performance_daily.sql, performance_daily_lot.sql) SHALL source each dimension column from its authoritative table.

Scenario: PJ_TYPE sourced from DW_MES_CONTAINER

  • WHEN the base query resolves PJ_TYPE
  • THEN it SHALL use DW_MES_CONTAINER.PJ_TYPE only
  • THEN it SHALL NOT fall back to DW_MES_WIP

Scenario: PRODUCTLINENAME sourced from DW_MES_CONTAINER

  • WHEN the base query resolves PRODUCTLINENAME (package)
  • THEN it SHALL use DW_MES_CONTAINER.PRODUCTLINENAME only
  • THEN it SHALL NOT fall back to DW_MES_WIP

Scenario: EQUIPMENTNAME sourced from DW_MES_LOTREJECTHISTORY only

  • WHEN the base query resolves EQUIPMENTNAME
  • THEN it SHALL use DW_MES_LOTREJECTHISTORY.EQUIPMENTNAME only
  • THEN it SHALL NOT perform any additional lookup when the value is NULL

Scenario: WORKFLOWNAME sourced from DW_MES_LOTWIPHISTORY via WIPTRACKINGGROUPKEYID

  • WHEN the base query resolves WORKFLOWNAME
  • THEN it SHALL LEFT JOIN DW_MES_LOTWIPHISTORY on WIPTRACKINGGROUPKEYID
  • THEN it SHALL use DW_MES_LOTWIPHISTORY.WORKFLOWNAME
  • THEN it SHALL NOT fall back to SPECNAME or any other field

Scenario: No DW_MES_WIP dependency in base query

  • WHEN the base query CTEs are examined
  • THEN there SHALL be no CTE or JOIN referencing DW_MES_WIP

Requirement: Dimension Pareto workcenter dimension SHALL use WORKCENTER_GROUP

The workcenter dimension in Pareto analysis SHALL group by WORKCENTER_GROUP, not individual WORKCENTERNAME.

Scenario: Cache-based Pareto workcenter mapping

  • WHEN reject_dataset_cache.py computes workcenter dimension Pareto
  • THEN the dimension column SHALL be WORKCENTER_GROUP

Scenario: SQL-based Pareto workcenter mapping

  • WHEN reject_history_service.py builds workcenter dimension Pareto SQL
  • THEN the dimension column SHALL be b.WORKCENTER_GROUP