**아래 내용 전체를 복사해서** `superportPRD.md` **파일로 저장하시면 됩니다.**

---

# supERPort ERP - 초기 프론트엔드 PRD (Flutter)

본 문서는 Flutter로 제작할 ERP 웹/앱 프론트엔드의 최소 기능 요구사항과 디렉터리 구조, 스타일 가이드, 그리고 AI 코드 생성에 활용 가능한 프롬프트를 포함하고 있습니다. 현재 계획은 확장 가능하며, 추후 대화와 요구사항 변경에 따라 자동으로 업데이트할 수 있습니다.

## 1. 개요

- **이름**: supERPort
    
- **기술 스택**: Flutter
    
- **주요 화면**:
    
    1. 장비 입고
        
    2. 장비 출고
        
    3. 회사 등록
        
    4. 사용자 등록
        
    5. 라이센스 등록
        

## 2. 공통 스타일 가이드

- **디자인 레퍼런스**: [Metronic Admin Template](https://themeforest.net/item/metronic-responsive-admin-dashboard-template/4021469)
    
    - **디자인 레퍼런스를 철저히 검토 및 적용**: Metronic의 Layout, 컬러 팔레트, 컴포넌트, 인터랙션 가이드라인을 꼼꼼하게 분석하여, Flutter 및 Material Icons와 조화롭게 적용해야 합니다.
    - 하나의 화면에 중복되는 정보를 제공하지 않아야 합니다.
        
- **아이콘**: Material Icons
    
- **UI 기조**: 모던하고 직관적인 플랫 디자인, 적절한 그림자(Elevation)와 여백 사용
    
- **메인 컬러 예시**:
    
    - Primary: #5867dd (Metronic 기본색)
        
    - Secondary: #34bfa3
        
    - Background: #f7f8fa
        
- **타이포그래피**: 가독성 높은 산세리프 폰트(예: Roboto, Noto Sans)
    
- **반응형 고려**: Web & Mobile 겸용, Responsive Layout 구성
    

## 3. 기능 요구사항

### 3.1 장비 입고 화면

- **등록 후 리스트로 관리**
    
    - 새로운 장비 입고 기록을 추가 (Form)
        
    - 등록된 목록을 리스트(테이블)로 보여주고, 항목별 Editing 기능 제공
        
- **필수 데이터**
    
    1. **제조사명** (varchar 필수)
        
    2. **장비명** (varchar 필수)
        
    3. **대분류 / 중분류 / 소분류** (varchar, Email 선택 UI 유사 방식)
        
    4. **시리얼 넘버** (varchar)
        
    5. **바코드 입력** (varchar, 차후에 바코드 스캔 기능과 연동 예정)
        
    6. **물품 수** (int 필수)
        
        - 시리얼 번호가 존재할 경우 1 고정 및 수정 불가
            
        - 시리얼 번호가 없으면 직접 입력
            
    7. **입고일** (datetime)
        
        - 당일 날짜를 기본값으로 설정
            
        - 캘린더에서 과거 날짜만 선택 가능
            
    8. (DB 연계 시) **장비(장비이력) 테이블**과 매핑
        
        - **입출고**는 “I”(입고)로 기록
            
        - **발생시간**: 입고 시점(= 입고일)
            

### 3.2 장비 출고 화면

- **등록 후 리스트로 관리**
    
    - 새 출고 정보 등록 (Form)
        
    - 출고 기록 목록 표시 및 편집 기능
        
- **필수 데이터**
    
    1. **장비명** (varchar 필수)
        
    2. **대분류 / 중분류 / 소분류** (출고 시점에 불러오고 수정 가능 여부는 정책 결정)
        
    3. **시리얼 넘버** (varchar)
        
    4. **바코드** (varchar, 바코드 스캔 기능 연동 예정)
        
    5. **출고 수량** (int 필수)
        
    6. **출고일** (datetime)
        
    7. (DB 연계 시) **장비(장비이력) 테이블**과 매핑
        
        - **입출고**는 “O”(출고)로 기록
            
        - **발생시간**: 출고 시점(= 출고일)
            

### 3.3 회사 등록 화면

- **등록 후 리스트로 관리**
    
    - 새 회사 정보 등록 (Form)
        
    - 회사 목록 조회 및 편집
        
- **필수 데이터**
    
    1. **회사명** (varchar 필수)
        
    2. **주소** (varchar)
        
    3. (확장) **지점 정보** (Optional / 별도 화면 구성 가능)
        
        - 지점명 (varchar)
            
        - 대표전화번호 (varchar)
            
        - 주소 (varchar)
            
    4. (DB 연계 시) **고객(회사) / 고객(지점)** 테이블 매핑
        
        - 회사 ID, 지점 ID 등 Primary Key, FK 관계
            

### 3.4 사용자 등록 화면

- **등록 후 리스트로 관리**
    
    - 사용자(직원) 가입/등록 Form
        
    - 사용자 목록 조회 및 편집
        
- **필수 데이터**
    
    1. **이름** (varchar 필수)
        
    2. **소속 회사ID** (int)
        
    3. **관리등급** (char) – 예) S(관리자), M(멤버)
        
    4. (DB 연계 시) **서비스(직원)** 테이블 매핑
        

### 3.5 라이센스 등록 화면

- **등록 후 리스트로 관리**
    
    - 유지보수 라이센스 정보 등록 (Form)
        
    - 등록된 라이센스 목록 표시 및 편집
        
- **필수 데이터**
    
    1. **서비스(회사)ID** (int) – 라이센스가 적용될 회사/서비스 정보
        
    2. **라이센스명** (varchar, 예: “1년 유지보수”)
        
    3. **라이센스기간** (int, 월 단위)
        
    4. **방문주기** (int, 유지보수 방문 주기)
        
    5. (DB 연계 시) **유지(라이센스)** 테이블과 매핑
        

## 4. 추천 디렉터리 구조

동일한 기능을 담은 모듈(파일)이 300라인을 초과하게 될 경우, **하위 파일로 분리**해 관리하는 것을 권장합니다.  
장비(Equipment) 모델과 장비 입고(In) / 출고(Out) 모델을 **분리**하여, 공통 필드와 입·출고 전용 필드를 구분해 유지보수를 용이하게 합니다.

lib/  
┣ models/  
┃ ┣ equipment_model.dart (장비(Equipment) 공통 모델)  
┃ ┣ equipment_in_model.dart (장비 입고 관련 모델, 장비 + 입고 필드)  
┃ ┣ equipment_out_model.dart (장비 출고 관련 모델, 장비 + 출고 필드)  
┃ ┣ company_model.dart (회사 정보 모델)  
┃ ┣ user_model.dart (사용자 정보 모델)  
┃ ┗ license_model.dart (유지보수 라이센스 정보 모델)  
┣ screens/  
┃ ┣ equipment_in/  
┃ ┃ ┣ equipment_in_list.dart (장비 입고 리스트 화면)  
┃ ┃ ┗ equipment_in_form.dart (장비 입고 등록/수정 폼)  
┃ ┣ equipment_out/  
┃ ┃ ┣ equipment_out_list.dart (장비 출고 리스트 화면)  
┃ ┃ ┗ equipment_out_form.dart (장비 출고 등록/수정 폼)  
┃ ┣ company/  
┃ ┃ ┣ company_list.dart (회사 목록 화면)  
┃ ┃ ┗ company_form.dart (회사 등록/수정 폼)  
┃ ┣ user/  
┃ ┃ ┣ user_list.dart (사용자 목록 화면)  
┃ ┃ ┗ user_form.dart (사용자 등록/수정 폼)  
┃ ┣ license/  
┃ ┃ ┣ license_list.dart (라이센스 목록 화면)  
┃ ┃ ┗ license_form.dart (라이센스 등록/수정 폼)  
┃ ┗ common/  
┃ ┣ custom_widgets.dart (공통 위젯)  
┃ ┗ theme.dart (스타일, 테마 정보)  
┣ services/  
┃ ┗ mock_data_service.dart (서버 없는 샘플 데이터 관리)  
┣ utils/  
┃ ┣ validators.dart (입력값 검증 함수)  
┃ ┗ constants.dart (상수 관리, 예: 라우트명, 컬러코드)  
┗ main.dart

## 5. 데이터베이스 설계

아래는 장비, 회사(고객), 서비스(직원/결제), 유지보수 라이센스 등에 대한 **예시** 테이블입니다. 실제 구현 시에는 필요에 따라 테이블을 통합하거나 컬럼명을 조정할 수 있습니다.

### 5.1 고객 관련 테이블

|테이블명|필드명|타입|예시|비고|
|---|---|---|---|---|
|고객(회사)|ID|Integer|1|Primary Key|
||회사명|Varchar|LG전자|고객 회사명|
||주소|Varchar|서울시 종로구|고객 회사 주소|
|고객(지점)|ID|Integer|10|Primary Key|
||회사ID|Integer|1|FK - 고객(회사)|
||지점명|Varchar|본사|고객 지점명|
||주소|Varchar|서울시 종로구|지점 주소|
||대표전화번호|Varchar|02-3403-2222|지점 연락처|

### 5.2 서비스 관련 테이블

|테이블명|필드명|타입|예시|비고|
|---|---|---|---|---|
|서비스(직원)|ID|Integer|20|Primary Key|
||회사ID|Integer|1|FK - 서비스(회사) 또는 고객(회사)|
||이름|Varchar|홍길동|직원 이름|
||관리등급|Char|M|S(관리자)/M(멤버)|
|서비스(결제)|ID|Integer|30|Primary Key|
||서비스(직원)ID|Integer|20|FK - 서비스(직원)|
||결제여부|Char|A|승인(A)/반려(D)|
||결제일|Datetime|2025-03-04 11:00|결제 일시|

### 5.3 장비 관련 테이블

|테이블명|필드명|타입|예시|비고|
|---|---|---|---|---|
|장비(장비정보)|ID|Integer|50|Primary Key|
||장비(회사명)ID|Integer|1|FK - 장비(회사명) or 고객(회사)|
||장비명|Varchar|라우터 123|장비 모델명|
|장비(장비이력)|ID|Integer|60|Primary Key|
||장비(장비바코드)ID|Integer|50|FK - 장비(장비바코드)|
||입출고|Varchar|I|입고(I)/출고(O)/임대(R) 등 구분|
||발생시간|Datetime|2025-03-04 11:00|이력 발생 시간|

### 5.4 유지보수 라이센스 관련 테이블

|테이블명|필드명|타입|예시|비고|
|---|---|---|---|---|
|유지(라이센스)|ID|Integer|70|Primary Key|
||서비스(회사)ID|Integer|1|FK - 서비스(회사)|
||라이센스명|Varchar|1년 유지보수|유지보수 라이센스명|
||라이센스기간|Integer|12|월 단위|
||방문주기|Integer|1|유지보수 방문 주기|

> 위 테이블들은 예시이며, 실제 구현 시에는 **API 요청/응답 형식**과 **화면 요구사항**에 따라 컬럼을 추가/수정/제거할 수 있습니다.

## 6. 코드 생성용 AI 프롬프트 예시

(아래 텍스트는 코드 자동생성용 프롬프트 작성 예시일 뿐, 실제 환경에 맞춰 수정해서 사용하세요.)

[System]  
You are Claude, a large language model trained by Anthropic.

[User]  
read document "doc/doc name" at first.

- 앱 이름: supERPort
    
- 화면 개요: 장비 입고, 장비 출고, 회사 등록, 사용자 등록
    
- 참조 스타일: Metronic Admin + Material Icons
    
- 필수 폴더 구조와 기능
    

1. equipment_in (리스트 & 폼)
    
2. equipment_out (리스트 & 폼)
    
3. company (리스트 & 폼)
    
4. user (리스트 & 폼)
    

Generate Flutter code with the above requirements.

- Use a consistent coding style.
    
- Provide minimal working code example for each screen.
    
- Utilize Material Icons.
    
- Implement basic validation in the forms.
    

## 7. 추후 업데이트 사항

- 장비 출고 시 필수 데이터 상세
    
- 회사 등록/사용자 등록 시 필수 데이터 구조 정의 (지점 정보, 연락처 등 확장)
    
- Form 유효성 검사 규칙 세부화
    
- 권한(관리자/사용자)별 접근 제어
    
- 바코드 스캔 기능 연동
    
- API 연동 및 서버 연결
    
- **유지보수 라이센스** 관련 화면 및 기능 확대 (결제/계약 기간 연동 등)
    

---

본 문서는 ERP 플랫폼 “supERPort”의 Flutter 프론트엔드 개발에 필요한 **최소 요구사항**, **디렉터리 구조**, **스타일 가이드**, 그리고 **데이터베이스 설계** 정보를 담고 있습니다. 여기서 정의되지 않은 사항은 추후 대화에서 확정된 후 문서에 자동 반영될 예정입니다. 필요에 따라 Markdown 형식으로 다운로드해, 버전 관리 시스템에 추가하거나 직접 열람할 수 있습니다.