# 반도체 산업용 디자인 컴포넌트

npm 0.14.0에 포함된 5종 UI 스타터입니다. 실제 생산 데이터가 아닌 고정된 가상 데이터이며 MES 연결·설비 제어·자동 갱신은 포함하지 않습니다.

```text
/design semiconductor react
/design select vue/semi-wafer
/design code
/design apply src/components/WaferMap.vue
```

`react`, `vue`, `angular`, `svelte`를 선택할 수 있습니다. 생성 경로 확장자는 각각 `.jsx`, `.vue`, `.ts`, `.svelte`입니다. 갤러리에서 선택하면 `/design code`로 검토한 뒤 `/design apply`로 코드와 CSS를 생성합니다.

| ID | 기능 |
|---|---|
| semi-wafer | 다이 좌표·통과/불량/미검사 표시, 클릭·키보드 선택 |
| semi-process | 공정 단계 상태와 상세 펼치기 |
| semi-equipment | 설비 상태 필터·마지막 수신 시각 |
| semi-yield | 검사 완료 수량 기준 수율·불량 유형별 막대·수치 표 |
| semi-lot | LOT·설비 검색과 상태 필터 동시 적용, 이력 상세 |

웨이퍼 좌표는 예시로 왼쪽 위 원점, 오른쪽 X 증가, 아래쪽 Y 증가를 사용합니다. 실제 장비 좌표·노치 방향·BIN 정의에 맞게 변환하세요. 색상 외에도 P/F/?와 접근 가능한 이름으로 상태를 구분합니다.

샘플 수율은 통과 960 / 검사 완료 1,000 = 96%이며 미검사 25개는 제외합니다. 불량 유형별 수량 합계는 40개입니다. 서로 다른 검사 단계·재검사 기준의 데이터를 섞지 않도록 앱에서 정의하세요.

생성 코드는 기존 디자인 스타터와 같은 고정 마크업 방식입니다. 앱 데이터를 표시하려면 프레임워크의 목록 렌더링과 데이터 바인딩으로 교체하고 백엔드 조회·갱신·오류 처리를 연결하세요. 샘플은 대규모 웨이퍼 가상화나 실시간 스트리밍 엔진이 아닙니다.

다이 선택 시 `semiconductor-die` 이벤트에 `coordinates`, `bin`을 전달합니다. 필터 변경 시 `semiconductor-filter`에 `query`, `state`, `count`를 전달합니다. React `onAction`, Vue `@action`, Angular `(action)`, Svelte `onaction`으로 수신합니다. 컴포넌트별 동작과 테마는 서로 격리됩니다.

## 추가 컴포넌트 4종 (0.16.0)

기존 5종과 함께 0.16.0에서 총 9종의 화면 스타터을 제공합니다. React·Vue·Angular·Svelte·Next.js·Nuxt를 지원합니다.

| ID | 기능 |
|---|---|
| semi-alarms | 심각도와 검색어 동시 필터, 알람의 로컬 확인 표시·취소 |
| semi-maintenance | 예정·진행·완료 필터, 정비 체크리스트 펼치기 |
| semi-recipe | 읽기 전용 버전 비교, 변경·동일 항목 필터 |
| semi-metrology | 측정 항목 필터, 시간별 수치·단위·예시 범위 표시 |

```text
/design select next/semi-alarms
/design code
/design apply app/components/AlarmMonitor.jsx
```

알람 확인은 `semiconductor-alarm-note` 이벤트의 `id`, `confirmed`로 전달합니다. 로컬 표시만 바뀌며 실제 알람 ACK·해제 명령을 보내지 않습니다. 정비 체크리스트는 로컬 체크이며 작업 승인·일정 상태를 변경하지 않습니다. 모든 로컬 상태는 다시 렌더링하면 초기화됩니다.

레시피는 가상 값 비교이며 업로드·설비 적용이 없습니다. 측정값 범위는 UI 예시이며 SPC 관리한계 계산·공정 적합성 판정은 수행하지 않습니다. 실제 데이터·단위·시간대·범위와 권한·저장은 앱에서 연결하세요.

## 공통 데이터 입력 · LOT 연결 탐색 (0.16.0)

`semi-trace`가 추가되어 0.16.0은 총 10종입니다.

```text
/design select next/semi-trace
/design code
/design apply app/components/LotExplorer.jsx
```

생성한 화면에서 JSON 또는 CSV를 선택합니다. LOT → 웨이퍼 → 다이를 선택하면 측정값과 검사 상태가 표시됩니다. 파일은 브라우저 메모리에서 처리하며 외부 업로드·자동 저장·REST API 호출은 없습니다. 재입력에 실패하면 이전 데이터를 유지합니다. 재입력 성공 시 기존 LOT·웨이퍼가 존재하면 선택을 유지하지만 다이 선택과 페이지는 초기화됩니다.

### 데이터 형식

JSON은 `{"rows":[...]}`이며 행은 다음과 같습니다.

```json
{"lot":"LOT-A","wafer":"W-01","x":0,"y":0,"bin":"PASS","value":0,"unit":"nm"}
```

CSV 헤더는 정확히 `lot,wafer,x,y,bin,value,unit` 순서입니다. 따옴표·쉼표·CRLF를 지원합니다. CSV의 빈 측정값은 null이며 0과 구분합니다. `examples/semiconductor/inspection.json`과 `.csv`를 참고하세요.

- 최대 2 MiB, 1~10,000행. 다이는 화면에 100개씩 페이지로 표시합니다.
- LOT·웨이퍼 ID는 1~80자, 좌표는 ±100,000 이내 정수입니다.
- 동일 LOT·웨이퍼의 좌표 중복을 거부합니다.
- bin은 PASS·FAIL·UNTESTED만 허용합니다.
- 측정값은 유한한 숫자 또는 null입니다. 숫자가 있으면 단위가 필수입니다.
- 수율은 PASS / (PASS + FAIL)이며 검사 완료 수량이 0이면 ‘검사 없음’으로 표시합니다.
- 표시 시각은 파일을 불러온 시각이며 원본 측정 시각이 아닙니다. 실시간·자동 갱신을 의미하지 않습니다.

로컬 가져오기 완료는 `semiconductor-data-loaded`의 `count`, 다이 선택은 `semiconductor-trace-select`의 행 데이터로 전달합니다. REST 응답은 앱에서 조회한 뒤 같은 계약으로 검증할 수 있지만, 생성된 UI의 자동 API 바인딩은 이번 범위에 포함하지 않습니다. 기존 9종의 가상 데이터를 자동 교체하지 않는 독립 탐색 컴포넌트입니다.

## 실행 문제 해결 (0.16.1)

운영체제 터미널에서 `npx @choijinwon/oscode@0.16.1`을 실행하고, OSCODE 대화창 안에서 `/design semiconductor react`를 입력하세요. 갤러리는 브라우저 실행 권한이 필요합니다. 실행 승인을 확인하세요.

자동완성 누락을 보완했습니다. 브라우저 자동 실행에 실패해도 갤러리 서버를 유지하므로 출력된 로컬 주소를 직접 여세요. 터미널을 켜둔 채 5분 안에 선택하거나 Ctrl+C로 취소합니다.
