Files
sam-docs/dev/changes/20260316_stock_production_order.md
김보곤 029d4b6f02 docs: [order] 재고생산관리 개발문서 + React 구현 요청서 추가
- dev/changes/20260316_stock_production_order.md: 변경이력
- plans/stock-production-react-request.md: 프론트 개발자 전달 문서
- INDEX.md 등록
2026-03-16 22:28:49 +09:00

4.8 KiB

재고생산관리 기능 추가

날짜: 2026-03-16 작업자: Claude Code


변경 개요

수주 없이 재고 목적으로 생산하는 경우를 관리하는 재고생산관리 기능을 추가했다. 기존 orders 테이블을 공유하며, order_type_code = 'STOCK'으로 일반 수주와 구분한다.

설계 원칙

  • 내부 오더(Internal Order) 패턴 — 재고생산도 수주로 취급
  • 기존 테이블/API 재사용 — 별도 테이블/엔드포인트 없음
  • 하류 시스템(작업지시, 생산, 출하, 품질검사) 변경 없이 동작

수정된 파일

커밋 1: feat: [order] 재고생산관리(STOCK) 타입 추가

파일 변경 내용
app/Models/Orders/Order.php TYPE_STOCK = 'STOCK' 상수 추가
app/Http/Requests/Order/StoreOrderRequest.php STOCK validation 허용, production_reason/target_stock_qty 옵션 추가
app/Http/Requests/Order/UpdateOrderRequest.php 동일
app/Services/OrderService.php STK 채번, stats order_type 필터, 매출 생성 스킵
app/Http/Controllers/Api/V1/OrderController.php stats에 order_type 파라미터 전달

커밋 2: feat: [order] 재고생산 생산지시 자동 처리

파일 변경 내용
app/Services/OrderService.php store(): STOCK → site_name='재고생산' 자동 설정
app/Services/OrderService.php createProductionOrder(): STOCK 분기 추가 (절곡 자동, project_name, scheduled_date)
lang/ko/error.php bending_process_not_found 에러 메시지 추가
lang/en/error.php 동일 (영문)

상세 변경 사항

1. Order 모델 — 타입 상수

public const TYPE_ORDER = 'ORDER';       // 수주
public const TYPE_PURCHASE = 'PURCHASE'; // 발주
public const TYPE_STOCK = 'STOCK';       // 재고생산 (신규)

2. 채번 규칙

타입 접두사 형식 예시
ORDER ORD ORD{YYYYMMDD}{NNNN} ORD202603160001
STOCK STK STK{YYYYMMDD}{NNNN} STK202603160001

3. store() — STOCK 자동 처리

if ($isStock) {
    $data['site_name'] = '재고생산';
}

4. createProductionOrder() — STOCK 분기

항목 ORDER (기존) STOCK (신규)
공정 매칭 BOM item_id → process_items 매핑 절곡 공정 직접 할당 (BOM 스킵)
project_name order.site_name ?? client_name '재고생산' 고정
scheduled_date order.delivery_date now()
매출 생성 sales_recognition 정책 적용 생성 안 함

절곡 공정 조회:

$bendingProcess = Process::where('tenant_id', $tenantId)
    ->where('process_name', '절곡')
    ->where('is_active', true)
    ->first();

5. stats() — order_type 필터

public function stats(?string $orderType = null): array

GET /api/v1/orders/stats?order_type=STOCK 으로 재고생산 전용 통계 조회 가능.

6. 매출 생성 스킵

if ($status === Order::STATUS_CONFIRMED
    && $order->order_type_code !== Order::TYPE_STOCK  // STOCK 제외
    && $order->shouldCreateSaleOnConfirm()) {

영향범위 분석

영역 영향 이유
기존 수주(ORDER) 없음 $isStock 조건 분기, else 블록에서 기존 코드 그대로 실행
기존 발주(PURCHASE) 없음 동일
작업지시(WorkOrder) 정상 동작 sales_order_id FK로 연결, 절곡 공정 할당됨
생산/품질검사 없음 WorkOrder 기반 하류 시스템, Order 타입 무관
출하(Shipment) 없음 WorkOrder 참조, Order.site_name 미사용
캘린더 표시됨 project_name='재고생산', scheduled_date=now()
생산지시 목록 표시됨 site_name='재고생산'으로 현장명 표시

테스트 체크리스트

  • STOCK 수주 생성 → order_no STK 접두사 확인
  • STOCK 수주 생성 → site_name='재고생산' 자동 설정 확인
  • STOCK 수주 확정 → 매출 자동 생성 안 됨 확인
  • STOCK 생산지시 생성 → 절곡 공정 자동 선택 확인
  • STOCK 생산지시 생성 → project_name='재고생산' 확인
  • STOCK 생산지시 생성 → scheduled_date=today 확인
  • 기존 ORDER 수주 생산지시 → 기존 BOM 매칭 정상 동작 확인
  • 생산지시 목록에서 STOCK 건 표시 확인

관련 문서


최종 업데이트: 2026-03-16