# FEMS 데이터베이스 구조

## 1. 핵심 엔티티

### Company (기업)

- **설명**: 최상위 기업 정보 관리
- **주요 필드**:
  - id (UUID, PK)
  - name (String)
  - businessNumber (String, Unique)
  - address, tel, email
  - representative
  - isActive (Boolean)
  - contractStartDate, contractEndDate

### Branch (지점/공장)

- **설명**: 기업의 지점 및 공장 정보
- **주요 필드**:
  - id (UUID, PK)
  - companyId (UUID, FK)
  - name, address, tel
  - isActive (Boolean)

### User (사용자)

- **설명**: 시스템 사용자 관리
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId, departmentId (FK)
  - username, password
  - name, email, phone
  - role (Enum)
  - isActive, lastLoginAt

### Equipment (설비)

- **설명**: 설비 기본 정보
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId, zoneId (FK)
  - name, model, manufacturer
  - type (Enum)
  - specifications (JSON)
  - installationDate, lastMaintenance

## 2. 계약/과금 관리

### Contract (계약)

- **설명**: 서비스 계약 관리
- **주요 필드**:
  - id (UUID, PK)
  - companyId (FK)
  - contractNumber (Unique)
  - status (Enum)
  - startDate, endDate
  - totalAmount, paymentTerms
  - termsConditions (JSON)

### ContractDetail (계약 상세)

- **설명**: 계약 세부사항
- **주요 필드**:
  - id (UUID, PK)
  - contractId (FK)
  - serviceType
  - specifications (JSON)
  - unitPrice, quantity

## 3. 조직 관리

### Department (부서)

- **설명**: 부서 정보 (계층 구조)
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - parentId (UUID, Self-referential)
  - name, description
  - isActive

### Role (권한)

- **설명**: 권한 그룹 관리
- **주요 필드**:
  - id (UUID, PK)
  - companyId (FK)
  - name, description
  - permissions (JSON)
  - isActive

### UserRole (사용자-권한 매핑)

- **설명**: 사용자와 권한 연결
- **주요 필드**:
  - id (UUID, PK)
  - userId, roleId (FK)

## 4. 에너지 관리

### EnergyUsage (사용량)

- **설명**: 실시간 에너지 사용량
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - timestamp
  - electricity, gas, water, steam

### EnergyCost (비용)

- **설명**: 에너지 비용 정보
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - year, month
  - category (Enum)
  - amount, usage, unitPrice

### EnergyTarget (목표)

- **설명**: 에너지 절감 목표
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - year, month, category
  - targetUsage, targetCost

### EnergyPrediction (예측)

- **설명**: 에너지 사용량 예측
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - modelType, parameters (JSON)
  - accuracy, lastTrainingDate
  - status, validationMetrics

## 5. 설비 관리

### Zone (구역)

- **설명**: 공장 내 구역 정보
- **주요 필드**:
  - id (UUID, PK)
  - branchId (FK)
  - name, description
  - area (Float)

### EquipmentData (설비 데이터)

- **설명**: 설비 실시간 데이터
- **주요 필드**:
  - id (UUID, PK)
  - equipmentId (FK)
  - timestamp
  - parameters, measurements (JSON)

### MaintenanceLog (정비 이력)

- **설명**: 설비 정비 이력
- **주요 필드**:
  - id (UUID, PK)
  - equipmentId (FK)
  - type, status (Enum)
  - scheduledDate, completionDate
  - description, findings, actions
  - parts, cost, personnelInfo (JSON)

## 6. 모니터링/알람

### AlarmRule (알람 규칙)

- **설명**: 알람 규칙 설정
- **주요 필드**:
  - id (UUID, PK)
  - companyId, branchId (FK)
  - severity (Enum)
  - conditions, actions (JSON)
  - schedule, notificationConfig

### Alert (알람)

- **설명**: 알람 이력
- **주요 필드**:
  - id (UUID, PK)
  - type (Enum)
  - message
  - read (Boolean)
  - companyId, branchId (FK)

## 7. 대시보드

### Dashboard (대시보드)

- **설명**: 대시보드 설정
- **주요 필드**:
  - id (UUID, PK)
  - userId (FK)
  - name, description
  - layout, isDefault

### Widget (위젯)

- **설명**: 위젯 구성
- **주요 필드**:
  - id (UUID, PK)
  - dashboardId (FK)
  - type, title
  - configuration (JSON)
  - position, size
  - refreshInterval

## 8. 시스템 설정

### SystemSetting (환경 설정)

- **설명**: 시스템 환경 설정
- **주요 필드**:
  - id (UUID, PK)
  - companyId (FK)
  - category, key
  - value, description
  - dataType (Enum)
  - isSystem

### ApiKey (API 인증)

- **설명**: API 인증 관리
- **주요 필드**:
  - id (UUID, PK)
  - companyId (FK)
  - keyName, apiKey
  - permissions (JSON)
  - expiryDate, lastUsedAt
  - ipRestrictions

## 9. 보고서 관리

### ReportTemplate (보고서 템플릿)

- **설명**: 보고서 템플릿 관리
- **주요 필드**:
  - id (UUID, PK)
  - companyId (FK)
  - name, description
  - type (Enum: daily/weekly/monthly/quarterly/yearly/custom)
  - configuration (JSON)
  - scheduleConfig (JSON)
  - version

### Report (보고서)

- **설명**: 생성된 보고서 관리
- **주요 필드**:
  - id (UUID, PK)
  - templateId, companyId, branchId (FK)
  - generatedBy, approvedBy (FK)
  - title, reportDate
  - status (Enum: draft/generated/approved/published)
  - data (JSON)
  - format (Enum: pdf/excel/html)
  - approvedAt, publishedAt
  - storageUrl

---

**Note**: 모든 테이블은 created_at, updated_at 타임스탬프를 포함합니다.