# Node.js 크로스체크 — 미수정 항목 (6건)

> **기준**: DDL v1.4 + Java Entity/Enum
> **검토일**: 2026-03-16
> **이전 리포트**: `NODEJS_SPRING_CROSSCHECK.md`
> **상태**: 1차 수정 완료 후 잔여 불일치 확인

---

## 수정 완료 항목 ✅

| # | 항목 | 상태 |
|---|------|------|
| 1 | `WithdrawalStatus`: `CANCELED` → `CANCELLED` | ✅ 완료 |
| 2 | `WalletApprovalRepo`: `approve_status` → `status` 컬럼 사용 | ✅ 완료 |
| 3 | `NonceTrackerRepo`: `network_id` 컬럼 제거 | ✅ 완료 |

---

## 미수정 항목 (6건)

### 1. `RelayerStatus` — `status`와 `registration_status` 혼용

**파일**: `packages/common/src/types/wallet.ts`

**현재 (Node.js)**:
```typescript
export type RelayerStatus = 'REGISTERING' | 'ACTIVE' | 'INACTIVE' | 'DEREGISTERING';
```

**DDL v1.4 정의** — 2개 별도 컬럼:
```sql
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE'
    COMMENT 'ACTIVE / PAUSED',

registration_status VARCHAR(20) NOT NULL DEFAULT 'PENDING'
    COMMENT 'PENDING / REGISTERED / REVOKED',
```

**수정안**:
```typescript
export type RelayerStatus = 'ACTIVE' | 'PAUSED';
export type RegistrationStatus = 'PENDING' | 'REGISTERED' | 'REVOKED';
```

**💬 논의 필요**: `REGISTERING`/`DEREGISTERING`은 DDL에 없는 값. 온체인 등록 TX 브로드캐스트 후 확인 대기 중인 상태를 표현하려면:
- **옵션 A**: `registration_status`에 `REGISTERING`/`DEREGISTERING` 추가 (DDL 변경)
- **옵션 B**: `PENDING` 하나로 통합, 등록/해제 구분은 별도 플래그 또는 코드 분기로 처리

---

### 2. `WalletAddressStatus` — `SUSPENDED` 제거

**파일**: `packages/common/src/types/wallet.ts`

**현재**:
```typescript
export type WalletAddressStatus = 'ACTIVE' | 'INACTIVE' | 'SUSPENDED';
```

**DDL v1.4**:
```sql
status VARCHAR(20) NOT NULL DEFAULT 'ACTIVE' COMMENT 'ACTIVE / INACTIVE',
```

**수정안**:
```typescript
export type WalletAddressStatus = 'ACTIVE' | 'INACTIVE';
```

---

### 3. `CollectionStatus` — `COMPLETED` → `CONFIRMED`

**파일**: `packages/common/src/types/tx.ts`

**현재**:
```typescript
export type CollectionStatus =
  | 'QUEUED'
  | 'DEFERRED'
  | 'COLLECTING'
  | 'BROADCASTING'
  | 'COMPLETED'
  | 'FAILED';
```

**DDL v1.4**:
```sql
status VARCHAR(20) NOT NULL DEFAULT 'QUEUED'
    COMMENT 'QUEUED → COLLECTING → BROADCASTING → CONFIRMED / FAILED / DEFERRED',
```

**수정안**: `'COMPLETED'` → `'CONFIRMED'`

**영향 범위**: `CollectionQueueRepo.ts`의 상태 업데이트 쿼리, `CollectionPoller.ts`의 성공 처리 로직

---

### 4. `WithdrawalType` — 값 축약

**파일**: `packages/common/src/types/tx.ts`

**현재**:
```typescript
export type WithdrawalType = 'USER' | 'REFUND' | 'PARTNER';
```

**DDL v1.4**:
```sql
withdrawal_type VARCHAR(20) NOT NULL DEFAULT 'USER_PAYOUT'
    COMMENT 'USER_PAYOUT / REFUND / PARTNER_WITHDRAW / SETTLEMENT_WITHDRAW / INTERNAL',
```

**수정안**:
```typescript
export type WithdrawalType = 'USER_PAYOUT' | 'REFUND' | 'PARTNER_WITHDRAW';
```

**영향 범위**: `WithdrawalPoller.ts` 및 `WithdrawalRepo.ts`에서 `withdrawal_type` 비교/삽입 부분

---

### 5. `WalletKey.key_version` → `encryption_key_version`

**파일**: `packages/common/src/types/wallet.ts`

**현재**:
```typescript
key_version: string;
```

**DDL v1.4**:
```sql
encryption_key_version VARCHAR(20) NOT NULL DEFAULT 'v1'
    COMMENT '암호화 키 버전 (키 로테이션 지원)',
```

**수정안**: 타입 정의 + Repository 쿼리 모두 `encryption_key_version`으로 변경

---

### 6. `WalletIndexManager.last_index` → `current_index`

**파일**: `packages/common/src/types/wallet.ts`

**현재**:
```typescript
last_index: number;
```

**DDL v1.4**:
```sql
current_index BIGINT NOT NULL DEFAULT 0
    COMMENT '마지막 할당된 인덱스',
```

**수정안**: 타입 정의 + Repository 쿼리 모두 `current_index`로 변경

---

## 수정 체크리스트

- [ ] **#1** `RelayerStatus` 분리 → 논의 후 결정
- [ ] **#2** `WalletAddressStatus`: `SUSPENDED` 제거
- [ ] **#3** `CollectionStatus`: `COMPLETED` → `CONFIRMED` (타입 + Repo + Poller)
- [ ] **#4** `WithdrawalType`: `USER` → `USER_PAYOUT`, `PARTNER` → `PARTNER_WITHDRAW` (타입 + Repo + Poller)
- [ ] **#5** `WalletKey`: `key_version` → `encryption_key_version` (타입 + Repo)
- [ ] **#6** `WalletIndexManager`: `last_index` → `current_index` (타입 + Repo)
