견적 기능 개발 마스터 플랜 및 공통 정책 문서 추가

- 공통 정책 문서 신규 생성 (guides/PROJECT_DEVELOPMENT_POLICY.md)
  - DB 테이블 정책 (Hybrid EAV, options JSON)
  - 코드 컨벤션 (추측 금지 원칙)
  - Enum 지양 정책 (common_codes 테이블 활용)
  - Phase 진행 방식 및 세션/커밋 정책
- 견적 기능 개발 문서 생성 (projects/quotation/)
  - MASTER_PLAN.md: 4단계 개발 흐름 정의
  - PROGRESS.md: 진행 현황 추적용
This commit is contained in:
2025-12-19 10:26:06 +09:00
parent a3a18b4b63
commit 441faa8922
3 changed files with 733 additions and 0 deletions

View File

@@ -0,0 +1,411 @@
# SAM 프로젝트 개발 공통 정책
> **적용 대상:** 견적, 수주, 생산, 출하, 품질 등 모든 MES 기능 개발
> **최종 업데이트:** 2025-12-19
---
## 📋 개요
이 문서는 SAM 시스템의 모든 기능 개발에 공통으로 적용되는 정책을 정의합니다.
각 기능별 개발 문서(MASTER_PLAN.md)는 이 문서를 참조합니다.
---
## 🚨 필수 준수 규칙
### 1. 테이블 정책
```
❌ 절대 금지:
- 새로운 테이블 임의 생성 (price_new, order_items_v2 등)
- 기존 테이블 구조 임의 변경
- mng에서 마이그레이션 실행
✅ 필수:
- 기존 테이블 우선 활용
- 테이블 추가 필요 시 → 사용자 승인 필수
- DB 마이그레이션은 api 프로젝트에서만 실행
```
### 2. 기술 스택
| 프로젝트 | 기술 스택 | 주의사항 |
|---------|----------|----------|
| mng | Laravel 12 + Plain Blade + Tailwind + Livewire + Filament | ❌ Alpine.js 금지 |
| api | Laravel 12 REST API + Swagger | Multi-tenant 필수 |
| 5130 | PHP + jQuery + 레거시 JS | 분석 대상 (참조용) |
| react | Next.js 15 | 프론트엔드 담당자 별도 |
### 3. 코드 컨벤션 (추측 금지 원칙)
**🔴 핵심: 모든 코드 요소는 실제 확인 후 사용**
```
❌ 절대 금지 - 추측/할루시네이션:
- 컬럼명 추측 (tenant.name → 실제는 tenant.company_name)
- 관계명 추측 (user.roles → 실제는 user.userRoles)
- 경로 추측 (App\Models\User → 실제 경로 다를 수 있음)
- 메서드명 추측 (getName() → 실제는 getCompanyName())
- 설정값 추측 (config('app.name') → 실제 키 다를 수 있음)
- 라우트명 추측 (route('users.index') → 실제 라우트명 확인 필요)
- 테이블명 추측 (users → 실제는 sam_users 일 수 있음)
- Enum 값 추측 (Status::ACTIVE → 실제 Enum 확인 필요)
```
```
✅ 필수 - 실제 확인 후 사용:
- 모델 파일 열어서 컬럼명/관계명 확인
- 마이그레이션 파일에서 테이블 구조 확인
- 기존 코드에서 사용 패턴 확인
- config 파일에서 실제 키 확인
- routes 파일에서 라우트명 확인
- 불확실하면 → 반드시 질문
```
**확인 우선순위:**
```
1. 모델 파일 (app/Models/*.php)
2. 마이그레이션 (database/migrations/*.php)
3. 기존 컨트롤러/서비스 사용 패턴
4. 라우트 파일 (routes/*.php)
5. 설정 파일 (config/*.php)
```
### 4. 정책 충돌 해결
```
문서 간 정책 충돌 발견 시:
1. 최신 날짜 문서 우선
2. 날짜 동일 → 상위 문서(CLAUDE.md) 우선
3. 모호한 경우 → 반드시 사용자에게 질문
4. 해결된 정책 → PROGRESS.md에 기록
```
---
## 🗄️ DB 테이블 정책
### 테이블 매핑 원칙
```
┌─────────────────────────────────────────────────────────────────┐
│ 5130 (레거시) │
│ ├── 모든 테이블 존재 (이미 개발 완료) │
│ └── 분석 대상 (구조/데이터 참조용) │
└─────────────────────────────────────────────────────────────────┘
↓ 매핑
┌─────────────────────────────────────────────────────────────────┐
│ SAM (api/mng) │
│ ├── 있는 테이블: 매핑하여 활용 │
│ ├── 이름 다른 테이블: 매핑 테이블 문서화 후 활용 │
│ └── 없는 테이블: 신규 생성 (SAM 설계 정책 적용) │
└─────────────────────────────────────────────────────────────────┘
```
### SAM 테이블 설계 정책 (Hybrid EAV)
```
┌─────────────────────────────────────────────────────────────────┐
│ 컬럼 분류 기준 │
├─────────────────────────────────────────────────────────────────┤
│ 🔴 필수 컬럼 (일반 컬럼으로 생성) │
│ - 조인에 사용되는 필드 (FK: tenant_id, product_id 등) │
│ - 인덱싱이 필요한 필드 (검색/정렬: status, created_at 등) │
│ - 고빈도 쿼리 필드 (WHERE 조건 자주 사용) │
│ - 유니크 제약 필드 (code, slug 등) │
├─────────────────────────────────────────────────────────────────┤
│ 🟢 가변 컬럼 (options JSON으로 통합) │
│ - 비즈니스 로직용 데이터 │
│ - 설정/옵션 값 │
│ - 확장 가능성 있는 필드 │
│ - 조인/검색에 사용되지 않는 필드 │
└─────────────────────────────────────────────────────────────────┘
```
### 컬럼 타입 정책
```
┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ Enum 지양 정책 │
├─────────────────────────────────────────────────────────────────┤
│ 요구사항은 언제든 변경될 수 있음 → 유연한 타입 사용 │
│ │
│ ❌ 지양: │
│ - DB enum 타입 (ALTER TABLE 필요, 마이그레이션 복잡) │
│ - PHP Enum 하드코딩 (변경 시 코드 수정 필요) │
│ │
│ ✅ 권장: │
│ - string/varchar 타입 + common_codes 테이블 관리 │
│ - is_* 필드: boolean 허용 (true/false 명확한 경우만) │
│ - status 필드: string + common_codes 연동 │
│ - type 필드: string + common_codes 연동 │
│ │
│ 💡 예외 (Enum 허용): │
│ - 절대 변경되지 않는 값 (예: 성별 M/F) │
│ - is_* boolean 필드 (2가지 상태만 존재 확실할 때) │
└─────────────────────────────────────────────────────────────────┘
```
**예시:**
```php
// ❌ 지양: DB Enum
$table->enum('status', ['pending', 'approved', 'rejected']);
// ❌ 지양: 나중에 상태 추가되면 코드 수정 필요
enum OrderStatus: string {
case PENDING = 'pending';
case APPROVED = 'approved';
}
// ✅ 권장: string + 코드 테이블
$table->string('status', 20)->default('pending');
// 상태값은 common_codes 테이블에서 관리
// ✅ 허용: is_* boolean (명확한 2가지 상태)
$table->boolean('is_active')->default(true);
$table->boolean('is_deleted')->default(false);
```
### 테이블 생성 예시
```php
// ✅ SAM 테이블 설계 정책 적용 예시
Schema::create('example_table', function (Blueprint $table) {
$table->id();
// 🔴 필수 컬럼 (조인/인덱싱)
$table->foreignId('tenant_id')->constrained()->cascadeOnDelete();
$table->foreignId('related_id')->constrained()->cascadeOnDelete();
$table->string('code')->unique();
$table->string('status')->index();
$table->decimal('amount', 15, 2)->index();
// 🟢 가변 컬럼 (JSON)
$table->json('options')->nullable();
// options 예시: {
// "custom_field_1": "value",
// "settings": {...},
// "metadata": {...}
// }
$table->timestamps();
$table->softDeletes();
});
```
### 테이블 매핑 문서 템플릿
```markdown
## 테이블 매핑: [기능명]
### 매핑 현황
| 5130 테이블 | SAM 테이블 | 상태 | 비고 |
|------------|-----------|------|------|
| legacy_table | sam_table | 🆕 신규 생성 | SAM 정책 적용 |
| legacy_items | sam_items | ✅ 존재 | 동일 |
### 컬럼 매핑 상세
| 5130 컬럼 | SAM 컬럼 | 타입 | 분류 | 비고 |
|----------|---------|------|------|------|
| id | id | bigint | 필수 | PK |
| company_id | tenant_id | bigint | 필수 | FK, 조인 |
| code | code | string | 필수 | 유니크 |
| memo | options->notes | json | 가변 | JSON 내부 |
```
### 테이블 작업 프로세스
```
Step 1: 5130 테이블 분석
└── 컬럼 목록, 관계, 인덱스 파악
Step 2: SAM 테이블 확인
├── 존재 여부 확인 (api/database/migrations/)
├── 이름 다른 경우 매핑 관계 문서화
└── 없는 경우 신규 생성 대상으로 표시
Step 3: 컬럼 분류
├── 🔴 필수 컬럼 식별 (조인/인덱싱/검색)
└── 🟢 가변 컬럼 → options JSON 통합
Step 4: 매핑 문서 작성
└── docs/projects/[기능명]/phase-X/table-mapping.md
Step 5: 사용자 승인
├── 신규 테이블 생성 승인
├── 컬럼 분류(필수/가변) 승인
└── 매핑 관계 승인
Step 6: 마이그레이션 생성 (api 프로젝트에서만!)
└── api/database/migrations/
```
### 기존 테이블 처리 정책
```
┌─────────────────────────────────────────────────────────────────┐
│ 기존 SAM 테이블 (options JSON 미적용) │
├─────────────────────────────────────────────────────────────────┤
│ ⏳ 추후 변환 작업 예정 │
│ │
│ 현재 작업 시: │
│ ├── 기존 테이블 구조 그대로 사용 │
│ ├── 기존 컬럼 활용 (임의 변경 금지) │
│ └── 신규 테이블만 SAM 정책(options JSON) 적용 │
│ │
│ 변환 작업 시 (추후): │
│ ├── 가변 컬럼 → options JSON 마이그레이션 │
│ └── 별도 마이그레이션 계획 수립 │
└─────────────────────────────────────────────────────────────────┘
```
### Model options 처리 패턴
```php
// app/Models/ExampleModel.php
class ExampleModel extends Model
{
use BelongsToTenant, SoftDeletes;
protected $casts = [
'options' => 'array', // JSON 자동 변환
];
// options 헬퍼 메서드
public function getOption(string $key, mixed $default = null): mixed
{
return data_get($this->options, $key, $default);
}
public function setOption(string $key, mixed $value): void
{
$options = $this->options ?? [];
data_set($options, $key, $value);
$this->options = $options;
}
}
```
### DB 작업 체크리스트
```markdown
신규 테이블 생성 시:
- [ ] 5130 원본 테이블 구조 분석 완료
- [ ] SAM 기존 테이블 존재 여부 확인
- [ ] 컬럼 분류 (필수 🔴 / 가변 🟢) 완료
- [ ] 테이블 매핑 문서 작성
- [ ] 사용자 승인 획득
- [ ] api 프로젝트에서 마이그레이션 생성
- [ ] 모델 생성 및 options 캐스팅 설정
기존 테이블 활용 시:
- [ ] 현재 테이블 구조 확인
- [ ] 필요 컬럼 존재 여부 확인
- [ ] 없는 컬럼 → 추가 마이그레이션 (승인 필요)
- [ ] 이름 다른 컬럼 → 매핑 문서화
```
---
## 🔄 Phase 진행 방식
### Phase 시작 시
```markdown
1. PROGRESS.md 확인 → 현재 상태 파악
2. 해당 Phase README.md 확인 → 체크리스트 로드
3. 관련 문서 링크 확인 → 참조 문서 읽기
4. MCP Sequential Thinking으로 작업 계획 수립
5. 사용자 승인 후 진행
```
### Phase 진행 중
```markdown
1. SuperClaude 페르소나 적용
- 분석: root-cause-analyst
- 설계: backend-architect
- 구현: backend-architect, quality-engineer
2. 단계별 문서 업데이트 (승인 불필요)
3. 코드 변경 시 code-workflow 스킬 적용
4. 체크리스트 진행 상황 실시간 반영
```
### Phase 완료 시
```markdown
1. 해당 Phase 문서 최종 정리
2. PROGRESS.md 업데이트
3. Git 태그 생성: [기능명]/phase-X-complete
4. 커밋 (정책에 따라 한글 메시지)
5. 다음 Phase 준비 사항 명시
```
---
## ⚠️ 세션 및 커밋 정책
### 롤백 포인트 설정
```markdown
각 Phase 완료 시 Git 태그 생성:
- [기능명]/phase-1-complete
- [기능명]/phase-2-complete
- ...
```
### 세션 중단 대응
```markdown
세션 중단 시 복구 절차:
1. PROGRESS.md 확인 → 마지막 완료 상태
2. 해당 Phase README.md → 체크리스트 상태
3. 미완료 항목부터 이어서 진행
4. 이전 문서 내용 참조하여 컨텍스트 복구
```
### 커밋 정책
```markdown
- 한글 커밋 메시지
- 단계별/스텝별 커밋
- 푸시는 사용자 수동 진행
- 커밋 후 푸시 여부 묻지 않음
```
---
## 🔗 참조 문서 목록
### SAM 전체 문서
```
docs/specs/ # 시스템 스펙
docs/reference/ # 레퍼런스
docs/guides/ # 가이드 (이 문서 포함)
```
### 개별 프로젝트 문서
```
api/docs/ # API 프로젝트 문서
mng/docs/ # mng 프로젝트 문서
```
### 테이블 참조
```
api/database/migrations/ # 마이그레이션 파일
api/app/Models/ # 모델 정의
```
---
## 📝 변경 이력
| 날짜 | 변경 내용 | 작성자 |
|------|----------|--------|
| 2025-12-19 | 초기 공통 정책 문서 작성 (견적에서 분리) | Claude |
---
> **Note:** 각 기능별 개발 문서(MASTER_PLAN.md)는 이 문서를 참조합니다.
> 기능별 특화 내용만 각 MASTER_PLAN.md에 작성하세요.

View File

@@ -0,0 +1,193 @@
# 견적(Quotation) 기능 개발 마스터 플랜
> **목표:** 5130 레거시 견적 기능을 SAM 시스템(mng + api)으로 이관
> **공통 정책:** [PROJECT_DEVELOPMENT_POLICY.md](../../guides/PROJECT_DEVELOPMENT_POLICY.md) 참조
> **최종 업데이트:** 2025-12-19
---
## 📋 프로젝트 개요
### 개발 흐름
```
Phase 1: 5130 견적 기능 분석
Phase 2: mng 견적 수식 관리 분석
Phase 3: mng 견적 기능 구현 (5130 수식 적용)
Phase 4: 견적 API 개발
```
### 핵심 원칙
1. **기존 테이블 활용**: 새 테이블 임의 생성 금지, 기존 prices/products 등 활용
2. **5130 수식 정확 반영**: JS 파일 분석으로 모든 수식 누락 없이 이관
3. **품목기준관리 연동**: SAM 품목 데이터 기반으로 견적 산출
4. **단계별 문서화**: 세션 중단 시에도 이어서 작업 가능하도록 진행 상황 기록
---
## 📁 문서 구조
```
docs/projects/quotation/
├── MASTER_PLAN.md # 이 문서
├── PROGRESS.md # 진행 현황
├── phase-1-5130-analysis/ # 1단계: 5130 분석
│ ├── README.md
│ ├── ui-analysis.md
│ ├── js-formulas.md # ⚠️ 핵심: 수식 분석
│ ├── db-structure.md
│ └── business-logic.md
├── phase-2-mng-analysis/ # 2단계: mng 분석
│ ├── README.md
│ ├── current-state.md
│ └── issues.md
├── phase-3-implementation/ # 3단계: 구현
│ ├── README.md
│ ├── table-mapping.md
│ ├── formula-spec.md
│ └── implementation.md
└── phase-4-api/ # 4단계: API 개발
├── README.md
└── api-spec.md
```
---
## 📊 Phase 상세
### Phase 1: 5130 견적 기능 분석
**목표:** 5130 레거시 견적 시스템 완전 분석 및 문서화
**분석 대상:**
- https://5130.sam.kr/estimate/list.php
- 관련 모든 PHP 파일
- **⚠️ 핵심: 모든 JS 파일 (수식 분석)**
**산출물:**
| 파일 | 설명 |
|------|------|
| README.md | 체크리스트 및 요약 |
| ui-analysis.md | 화면별 기능 분석 |
| js-formulas.md | JS 수식 전체 분석 (핵심!) |
| db-structure.md | 테이블/컬럼 구조 |
| business-logic.md | 비즈니스 로직 정리 |
**수식 분석 체크리스트:**
```markdown
각 수식 분석 시 필수 기록:
- [ ] 수식 이름/ID
- [ ] 입력 변수 목록
- [ ] 계산 공식 (수학적 표기)
- [ ] 출력 값 및 단위
- [ ] 예외 처리 조건
- [ ] 테스트 케이스 (입력 → 예상 출력)
```
---
### Phase 2: mng 견적 수식 관리 분석
**목표:** 현재 mng 견적 기능 상태 파악 및 문제점 도출
**분석 대상:**
- https://mng.sam.kr/quote-formulas
- 관련 Filament 리소스
- 모델 및 마이그레이션
**산출물:**
| 파일 | 설명 |
|------|------|
| README.md | 체크리스트 및 요약 |
| current-state.md | 현재 구현 상태 |
| issues.md | 오류/문제점 목록 |
**분석 포인트:**
- 현재 수식 관리 기능 동작 여부
- 오류 및 버그 목록
- 5130과의 차이점
- 개선 필요 사항
---
### Phase 3: mng 견적 기능 구현
**목표:** 5130 수식을 SAM 품목기준관리와 연동하여 구현
**핵심 원칙:**
- 5130 수식 정확히 반영
- SAM 기존 테이블 활용
- 품목기준관리 데이터 연동
**참조 문서:**
- `docs/projects/mes/v1-analysis/quotation-analysis.md`
- Phase 1 분석 결과 (js-formulas.md)
- Phase 2 분석 결과
**산출물:**
| 파일 | 설명 |
|------|------|
| README.md | 체크리스트 및 요약 |
| table-mapping.md | 테이블 매핑 (5130 → SAM) |
| formula-spec.md | 수식 명세 (SAM 버전) |
| implementation.md | 구현 상세 |
---
### Phase 4: 견적 API 개발
**목표:** React 프론트엔드 연동을 위한 REST API 개발
**산출물:**
| 파일 | 설명 |
|------|------|
| README.md | 체크리스트 및 요약 |
| api-spec.md | API 명세 (Swagger) |
**API 개발 원칙:**
- SAM API Rules 준수
- Swagger 문서화 필수
- Multi-tenant 지원
- FormRequest 검증
---
## 🔗 참조 문서
### 공통 정책 (필독)
- [PROJECT_DEVELOPMENT_POLICY.md](../../guides/PROJECT_DEVELOPMENT_POLICY.md) - **DB 정책, 기술 스택, 코드 컨벤션, Phase 진행 방식**
### 견적 관련
- [docs/projects/mes/v1-analysis/quotation-analysis.md](../mes/v1-analysis/quotation-analysis.md) - MES 견적 분석
- [PROGRESS.md](./PROGRESS.md) - 진행 현황
---
## 🚀 시작 명령어 예시
```
견적 기능 개발 Phase 1 시작:
1. 공통 정책 확인: docs/guides/PROJECT_DEVELOPMENT_POLICY.md
2. PROGRESS.md 확인
3. 5130 견적 페이지 분석 시작
- https://5130.sam.kr/estimate/list.php
- 관련 JS 파일 전체 분석
4. phase-1-5130-analysis/ 문서 작성
MCP: Sequential Thinking 적용
페르소나: root-cause-analyst (분석 단계)
```
---
## 📝 변경 이력
| 날짜 | 변경 내용 | 작성자 |
|------|----------|--------|
| 2025-12-19 | 공통 정책 분리, 견적 특화 내용만 유지 | Claude |
| 2025-12-19 | 초기 마스터 플랜 작성 | Claude |

View File

@@ -0,0 +1,129 @@
# 견적 기능 개발 진행 현황
> **마스터 플랜:** [MASTER_PLAN.md](./MASTER_PLAN.md)
> **공통 정책:** [PROJECT_DEVELOPMENT_POLICY.md](../../guides/PROJECT_DEVELOPMENT_POLICY.md)
> **최종 업데이트:** 2025-12-19
---
## 📊 전체 진행률
| Phase | 상태 | 진행률 | 시작일 | 완료일 |
|-------|------|--------|--------|--------|
| Phase 1: 5130 분석 | ⏳ 대기 | 0% | - | - |
| Phase 2: mng 분석 | ⏳ 대기 | 0% | - | - |
| Phase 3: 구현 | ⏳ 대기 | 0% | - | - |
| Phase 4: API 개발 | ⏳ 대기 | 0% | - | - |
---
## 🔄 현재 작업
**현재 Phase:** 시작 전
**현재 작업:** 마스터 플랜 작성 완료
---
## 📋 Phase 1: 5130 견적 기능 분석
### 체크리스트
- [ ] UI/화면 분석 (list.php, form.php 등)
- [ ] JS 수식 분석 (모든 JS 파일)
- [ ] DB 구조 분석
- [ ] 비즈니스 로직 문서화
- [ ] README.md 작성
### 산출물
- [ ] phase-1-5130-analysis/README.md
- [ ] phase-1-5130-analysis/ui-analysis.md
- [ ] phase-1-5130-analysis/js-formulas.md
- [ ] phase-1-5130-analysis/db-structure.md
- [ ] phase-1-5130-analysis/business-logic.md
### 메모
_Phase 1 진행 시 메모 기록_
---
## 📋 Phase 2: mng 견적 수식 관리 분석
### 체크리스트
- [ ] 현재 구현 상태 분석
- [ ] 오류/문제점 목록화
- [ ] 개선 방향 도출
- [ ] README.md 작성
### 산출물
- [ ] phase-2-mng-analysis/README.md
- [ ] phase-2-mng-analysis/current-state.md
- [ ] phase-2-mng-analysis/issues.md
### 메모
_Phase 2 진행 시 메모 기록_
---
## 📋 Phase 3: mng 견적 기능 구현
### 체크리스트
- [ ] 테이블 매핑 (5130 → SAM)
- [ ] 수식 명세 작성
- [ ] UI 구현 (Livewire + Blade)
- [ ] 테스트 및 검증
- [ ] README.md 작성
### 산출물
- [ ] phase-3-implementation/README.md
- [ ] phase-3-implementation/table-mapping.md
- [ ] phase-3-implementation/formula-spec.md
- [ ] phase-3-implementation/implementation.md
### 메모
_Phase 3 진행 시 메모 기록_
---
## 📋 Phase 4: 견적 API 개발
### 체크리스트
- [ ] API 엔드포인트 설계
- [ ] Swagger 문서화
- [ ] React 연동 스펙
- [ ] README.md 작성
### 산출물
- [ ] phase-4-api/README.md
- [ ] phase-4-api/api-spec.md
### 메모
_Phase 4 진행 시 메모 기록_
---
## 🏷️ Git 태그
| 태그 | 설명 | 생성일 |
|------|------|--------|
| - | - | - |
---
## 📝 정책 결정 기록
| 날짜 | 항목 | 결정 내용 | 근거 |
|------|------|----------|------|
| 2025-12-19 | DB 작업 위치 | api 프로젝트에서만 | mng 마이그레이션 방지 |
| 2025-12-19 | 신규 테이블 정책 | options JSON 적용 | Hybrid EAV 전략 |
---
## ⚠️ 이슈/블로커
_현재 이슈 없음_
---
## 📚 참조 문서
- [MASTER_PLAN.md](./MASTER_PLAN.md) - 마스터 플랜
- [docs/projects/mes/v1-analysis/quotation-analysis.md](../mes/v1-analysis/quotation-analysis.md) - MES 견적 분석