# 유전체/유전자 검사 가능 조건 요약

## 1. DB 상태값 정의

### chipSireName (아비명)

| DB 값 | 의미 | 분석 가능 여부 |
|-------|------|----------------|
| `일치` | 친자감별 일치 |  가능 |
| `불일치` | 친자감별 불일치 |  유전체 불가 /  유전자 가능 |
| `분석불가` | 모근 오염/불량 등 기타 사유 |  불가 |
| `정보없음` | 개체 식별번호/형식 오류 |  불가 |
| `null` | 미분석 (의뢰 없음) | - 표시 |

## - 아비명 가능한 개체에 대해서 어미명 판단 진행

### chipDamName (어미명)

| DB 값 | 의미 | 분석 가능 여부 |
|-------|------|----------------|
| `일치` | 친자감별 일치 |  통과 |
| `불일치` | 친자감별 불일치 |  유전체 불가 /  유전자 가능 |
| `이력제부재` | 모 이력제 정보 없음 |  유전체 불가 /  유전자 가능 |
| `정보없음` | 정보 없음 | 통과 |
| `null` | 정보 없음 |  통과 |

---

## 2. 탭별 검사 가능 조건

### 유전체 탭
```
유효 조건 (모두 충족해야 함):
1. chipSireName === '일치'
2. chipDamName !== '불일치'
3. chipDamName !== '이력제부재'
4. cowId가 EXCLUDED_COW_IDS에 포함되지 않음
```

### 유전자 탭
```
유효 조건:
1. chipSireName !== '분석불가'
2. chipSireName !== '정보없음'
3. cowId가 EXCLUDED_COW_IDS에 포함되지 않음

※ 불일치/이력제부재도 유전자 데이터가 있으면 표시 가능
```

---

## 3. 개체 목록 배지 표시 (unavailableReason)

### 분석일자 컬럼

| unavailableReason | 배지 색상 | 표시 텍스트 |
|-------------------|-----------|-------------|
| `null` | - | `-` |
| `분석불가` |  회색 | 분석불가 |
| `부 불일치` |  빨간색 | 부 불일치 |
| `모 불일치` |  주황색 | 모 불일치 |
| `모 이력제부재` |  주황색 | 모 이력제부재 |
| `형질정보없음` |  회색 | 형질정보없음 |

### unavailableReason 결정 로직 (cow.service.ts)

```typescript
if (!latestRequest || !latestRequest.chipSireName) {
  unavailableReason = null;  // '-' 표시
} else if (chipSireName === '분석불가' || chipSireName === '정보없음') {
  unavailableReason = '분석불가';
} else if (chipSireName !== '일치') {
  unavailableReason = '부 불일치';
} else if (chipDamName === '불일치') {
  unavailableReason = '모 불일치';
} else if (chipDamName === '이력제부재') {
  unavailableReason = '모 이력제부재';
}

// 형질 데이터 없으면
unavailableReason = '형질정보없음';
```

---

## 4. 개체 상세 페이지 배지

### 부 KPN 배지 (renderSireBadge)

| 조건 | 배지 색상 | 표시 |
|------|-----------|------|
| `EXCLUDED_COW_IDS` 포함 | 회색 | 분석불가 |
| `chipSireName === '분석불가'` | 회색 | 분석불가 |
| `chipSireName === '정보없음'` | 회색 | 분석불가 |
| `chipSireName === '일치'` | 초록색 | 일치 |
| 그 외 | 빨간색 | 불일치 |
| `null` | - | 표시 안 함 |

### 모 개체 배지 (renderDamBadge)

| 조건 | 배지 색상 | 표시 |
|------|-----------|------|
| `chipDamName === '일치'` | 초록색 | 일치 |
| `chipDamName === '불일치'` | 빨간색 | 불일치 |
| `chipDamName === '이력제부재'` | 주황색 | 이력제부재 |
| 그 외/null | - | 표시 안 함 |

---

## 5. 분석불가 안내 문구

| 상태 | 안내 문구 |
|------|-----------|
| `분석불가` (DB) | 모근 오염 및 불량 등 기타 사유로 유전체 분석 보고서를 제공할 수 없습니다. |
| `정보없음` (DB) | 개체 식별번호 및 형식오류로 유전체 분석 보고서를 제공할 수 없습니다. |
| `부 불일치` | 부 친자감별 결과가 불일치하여 유전체 분석 보고서를 제공할 수 없습니다. |
| `모 불일치` | 모 친자감별 결과가 불일치하여 유전체 분석 보고서를 제공할 수 없습니다. |
| `모 이력제부재` | 모 이력제 정보가 부재하여 유전체 분석 보고서를 제공할 수 없습니다. |
| `EXCLUDED_COW_IDS` | 모근 오염 및 불량 등 기타 사유로 유전체 분석 보고서를 제공할 수 없습니다. |

---

## 6. 관련 파일

### 백엔드
- `backend/src/common/config/GenomeAnalysisConfig.ts` - 유효성 검사 함수
- `backend/src/cow/cow.service.ts` - unavailableReason 결정 로직

### 프론트엔드
- `frontend/src/lib/utils/genome-analysis-config.ts` - 유효성 검사, 메시지 함수
- `frontend/src/app/cow/page.tsx` - 개체 목록 배지
- `frontend/src/app/cow/[cowNo]/page.tsx` - 개체 상세 배지, 탭 조건

---

## 7. 제외 개체 목록 (EXCLUDED_COW_IDS)

특수 사유로 분석 불가한 개체를 하드코딩으로 관리:

```typescript
export const EXCLUDED_COW_IDS = [
  'KOR002191642861', // 모근상태 불량으로 인한 DNA분해
];
```

> 이 목록에 포함된 개체는 유전체/유전자 탭 모두 분석불가로 처리됨
