Files
sam-docs/projects/legacy-5130/03_ESTIMATE.md
hskwon 08a8259313 docs: 5130 레거시 분석 문서 및 기존 문서 초기 커밋
- 5130 레거시 시스템 분석 (00_OVERVIEW ~ 08_SAM_COMPARISON)
- MES 프로젝트 문서
- API/프론트엔드 스펙 문서
- 가이드 및 레퍼런스 문서
2025-12-04 18:47:19 +09:00

290 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 견적 (Estimate) 분석
## 개요
- **디렉토리**: `/estimate/`
- **DB 테이블**: `estimate` (동적 테이블명 가능)
- **주요 기능**: 견적서 작성, 단가 자동계산, 견적 이력 관리
## 디렉토리 구조
```
/estimate/
├── _request.php # 요청 파라미터
├── _row.php # 행 렌더링
├── insert.php # 견적 저장
├── list.php # 견적 목록
├── list_unit.php # 단가 목록
├── write_form.php # 견적서 작성 폼 (103KB)
├── edit.php # 견적 수정
├── edit_slat.php # 슬랫 견적 수정
├── estimate.php # 견적서 메인
├── estimateSlat.php # 슬랫 견적
├── estimateUnit.php # 단가 견적
├── view.php # 견적 상세
├── viewEstimate.php # 견적서 보기
├── viewEstimateDetail.php # 견적 상세 보기
├── statistics.php # 견적 통계
├── fetch_unitprice.php # 단가 조회 (32KB)
├── get_estimate_amount.php # 견적 금액 계산
├── get_screen_amount.php # 스크린 금액 계산
├── get_slat_amount.php # 슬랫 금액 계산
├── generate_serial_pjnum.php # 프로젝트 번호 생성
├── screen_view_*.php # 스크린 견적 뷰
├── slat_view_*.php # 슬랫 견적 뷰
└── common/ # 공통 모듈
```
## DB 스키마
### estimate 테이블
```sql
CREATE TABLE estimate (
num INT AUTO_INCREMENT PRIMARY KEY,
-- 기본 정보
pjnum VARCHAR(50), -- 프로젝트 번호 (KD-PR-YYMMDD-NN)
indate DATE, -- 등록일
orderman VARCHAR(50), -- 담당자
outworkplace VARCHAR(200), -- 현장명/거래처
-- 분류 정보
major_category VARCHAR(50), -- 대분류 (슬랫, 스크린)
model_name VARCHAR(100), -- 모델명
position VARCHAR(50), -- 위치
-- 규격 정보
makeWidth INT, -- 제작 폭 (기본 160)
makeHeight INT, -- 제작 높이 (기본 350)
maguriWing VARCHAR(20), -- 마구리 윙 (기본 50)
-- 발주처 정보
con_num VARCHAR(50), -- 계약번호
secondord VARCHAR(100), -- 2차 발주처
secondordman VARCHAR(50), -- 2차 담당자
secondordmantel VARCHAR(20), -- 2차 담당자 연락처
secondordnum VARCHAR(50), -- 2차 발주번호
-- 견적 상세 (JSON)
estimateList TEXT, -- 스크린 견적 리스트 (JSON)
estimateList_auto TEXT, -- 스크린 자동계산 리스트 (JSON)
estimateSlatList TEXT, -- 슬랫 견적 리스트 (JSON)
estimateSlatList_auto TEXT, -- 슬랫 자동계산 리스트 (JSON)
-- 금액 정보
estimateTotal INT DEFAULT 0, -- 견적 총액
EstimateFirstSum INT DEFAULT 0, -- 최초 견적 합계
EstimateUpdatetSum INT DEFAULT 0, -- 수정 견적 합계
EstimateDiffer INT DEFAULT 0, -- 차액
estimateSurang INT DEFAULT 0, -- 수량
-- 할인 정보
EstimateDiscountRate INT DEFAULT 0,-- 할인율
EstimateDiscount INT DEFAULT 0, -- 할인금액
EstimateFinalSum INT DEFAULT 0, -- 최종 금액
-- 검사비/부가정보
inspectionFee INT DEFAULT 50000, -- 인정검사비
steel VARCHAR(50), -- 강종
motor VARCHAR(100), -- 모터
warranty VARCHAR(100), -- 보증기간
-- 체크 플래그
slatcheck VARCHAR(10), -- 슬랫 체크
partscheck VARCHAR(10), -- 부품 체크
-- 시스템 필드
comment TEXT, -- 비고
update_log TEXT, -- 수정이력
is_deleted TINYINT DEFAULT 0, -- 삭제플래그
INDEX idx_pjnum (pjnum),
INDEX idx_outworkplace (outworkplace),
INDEX idx_indate (indate)
);
```
## 견적 데이터 구조
### estimateList JSON 구조
```json
[
{
"item_name": "가이드레일",
"specification": "A형 65×80",
"unit": "EA",
"quantity": 2,
"unit_price": 150000,
"amount": 300000,
"remark": ""
},
{
"item_name": "스크린 판넬",
"specification": "1.0T × 1200W",
"unit": "m²",
"quantity": 24.5,
"unit_price": 45000,
"amount": 1102500,
"remark": "SUS304"
}
]
```
### estimateList_auto JSON 구조
```json
[
{
"item_code": "AUTO001",
"item_name": "벤딩 가공비",
"calc_type": "per_meter",
"base_value": 120.5,
"unit_price": 2500,
"amount": 301250
}
]
```
## 비즈니스 로직
### 프로젝트 번호 생성
```php
// generate_serial_pjnum.php
function generatePjnum() {
// 형식: KD-PR-YYMMDD-NN
// KD: 경동
// PR: 프로젝트
// YYMMDD: 날짜
// NN: 일련번호 (01~99)
$today = date('ymd');
$prefix = "KD-PR-{$today}-";
// 오늘 날짜의 마지막 번호 조회
$sql = "SELECT pjnum FROM estimate
WHERE pjnum LIKE '{$prefix}%'
ORDER BY pjnum DESC LIMIT 1";
// 일련번호 증가
$nextNum = str_pad($lastNum + 1, 2, '0', STR_PAD_LEFT);
return $prefix . $nextNum;
}
```
### 금액 계산
```php
// insert.php
$estimateTotal = intval(str_replace(',', '', $estimateTotal));
$EstimateFirstSum = intval(str_replace(',', '', $EstimateFirstSum));
$EstimateUpdatetSum = intval(str_replace(',', '', $EstimateUpdatetSum));
$EstimateDiffer = intval(str_replace(',', '', $EstimateDiffer));
$EstimateFinalSum = intval(str_replace(',', '', $EstimateFinalSum));
```
### 단가 조회 (fetch_unitprice.php)
- 모델별 기본 단가
- 규격별 가격 가감
- 강종(steel)별 가격 계수
- 마진율 적용
## 견적 유형
### 1. 스크린 견적 (Screen)
- **파일**: `estimate.php`, `screen_view_*.php`
- **특징**: 면적(m²) 기반 계산
- **주요 항목**: 판넬, 가이드레일, 브라켓
### 2. 슬랫 견적 (Slat)
- **파일**: `estimateSlat.php`, `slat_view_*.php`
- **특징**: 폭/높이 기반 계산
- **주요 항목**: 슬랫 코일, 인터락, 샤프트
### 3. 단가 견적 (Unit)
- **파일**: `estimateUnit.php`, `list_unit.php`
- **특징**: 품목별 단가 설정
## 견적서 출력
- `/estimate/print_list.php` - 견적 목록 인쇄
- `/estimate/viewEstimate.php` - 견적서 보기
- `/estimate/saveExcel.php` - 엑셀 저장
## SAM 마이그레이션 포인트
### 1. 견적 구조 개선
```sql
-- SAM: 견적 헤더/상세 분리
estimates (
id,
tenant_id,
estimate_number, -- 견적번호
customer_id, -- 거래처
project_name,
estimate_date,
valid_until, -- 유효기간
status, -- draft, sent, accepted, rejected
total_amount,
discount_rate,
discount_amount,
final_amount,
created_by
)
estimate_items (
id,
estimate_id,
item_type, -- manual, auto_calculated
item_code,
item_name,
specification,
unit,
quantity,
unit_price,
amount,
sort_order
)
```
### 2. 단가표 관리
```sql
-- SAM: 단가 마스터
price_masters (
id,
tenant_id,
category_id,
item_code,
item_name,
base_price,
effective_from,
effective_to,
is_active
)
-- SAM: 단가 조건
price_conditions (
id,
price_master_id,
condition_type, -- size, material, quantity
condition_value,
adjustment_type, -- fixed, percentage
adjustment_value
)
```
### 3. 견적 이력
```sql
-- SAM: 견적 버전 관리
estimate_versions (
id,
estimate_id,
version,
snapshot JSON, -- 견적 전체 스냅샷
changed_by,
changed_at,
change_reason
)
```
## 참고 파일
- `/estimate/insert.php` - 저장 로직
- `/estimate/write_form.php` - 견적서 UI (대용량 파일)
- `/estimate/fetch_unitprice.php` - 단가 계산 로직
- `/estimate/generate_serial_pjnum.php` - 번호 생성