ERP-node/docs/screen-implementation-guide/03_production/production-plan.md

24 KiB

생산계획관리 (Production Plan Management)

⚠️ 중요 안내: 이 화면은 복합형 레이아웃 (좌우 분할 패널 + 타임라인 스케줄러)으로, 현재 V2 컴포넌트만으로는 완전한 구현이 불가능합니다. 아래 문서는 화면 분석 및 향후 구현 계획을 위한 참조용입니다.


1. 화면 개요

항목 내용
화면명 생산계획관리
영문명 Production Plan Management
화면 유형 복합형 (좌우 분할 패널 + 타임라인 스케줄러)
메인 테이블 production_plan_mng
관련 테이블 sales_order_mng, item_info, equipment_info, bom_info
주요 기능 수주 기반 생산계획 수립, 타임라인 스케줄러, 자동 스케줄 생성, 반제품 계획 연동

2. 화면 구조 분석

2.1 레이아웃 구조

┌─────────────────────────────────────────────────────────────────────────────┐
│                              검색 섹션                                       │
│  [검색필드들...]           [사용자옵션] [엑셀업로드] [엑셀다운로드]            │
├────────────────────────────────┬──┬──────────────────────────────────────────┤
│     왼쪽 패널 (50%, 리사이즈)   │  │      오른쪽 패널 (50%)                    │
│ ┌────────────────────────────┐ │리│ ┌──────────────────────────────────────┐ │
│ │ [수주데이터] [안전재고부족] │ │사│ │ [완제품 생산계획] [반제품 생산계획]   │ │
│ ├────────────────────────────┤ │이│ ├──────────────────────────────────────┤ │
│ │                            │ │즈│ │                                      │ │
│ │  수주 목록 테이블           │ │핸│ │  타임라인 스케줄러                    │
│ │  (그룹화된 품목별 수주)      │ │들│ │  (간트차트 형태)                      │
│ │                            │ │  │ │                                      │ │
│ │  - 체크박스                 │ │  │ │  - 날짜별 그리드                      │
│ │  - 접기/펼치기 토글          │ │  │ │  - 생산계획 바 (드래그 가능)           │
│ │  - 품목별 그룹 행            │ │  │ │  - 납기일 마커                        │
│ │  - 수주 상세 행              │ │  │ │                                      │
│ │                            │ │  │ │                                      │
│ └────────────────────────────┘ │  │ └──────────────────────────────────────┘ │
│ [계획에 없는 품목만] [선택품목 불러오기] [새로고침] │ [자동스케줄] [저장] [초기화] │
└────────────────────────────────┴──┴──────────────────────────────────────────┘

2.2 탭 구조

왼쪽 패널 탭:

  1. 수주데이터: 수주 목록 (품목별 그룹핑)
  2. 안전재고 부족분: 안전재고 미달 품목 목록

오른쪽 패널 탭:

  1. 완제품 생산계획: 완제품 타임라인 스케줄러
  2. 반제품 생산계획: 반제품 타임라인 스케줄러

3. 테이블 정의

3.1 메인 테이블: production_plan_mng

컬럼명 타입 NULL 설명
id SERIAL NO PK
company_code VARCHAR(20) NO 회사 코드
plan_no VARCHAR(50) NO 생산계획번호
plan_date DATE NO 계획일자
item_code VARCHAR(50) NO 품목코드
item_name VARCHAR(200) YES 품명
plan_qty NUMERIC(15,3) NO 계획수량
start_date DATE NO 시작일
end_date DATE NO 종료일
due_date DATE YES 납기일
equipment_id INTEGER YES 설비 ID (FK)
equipment_name VARCHAR(100) YES 설비명
status VARCHAR(20) YES 상태 (계획/지시/진행/완료)
priority VARCHAR(20) YES 우선순위
work_shift VARCHAR(20) YES 작업조 (주간/야간/주야)
manager_name VARCHAR(100) YES 담당자
work_order_no VARCHAR(50) YES 작업지시번호
remarks TEXT YES 비고
order_no VARCHAR(50) YES 관련 수주번호
partner_id VARCHAR(50) YES 거래처 ID
hourly_capacity NUMERIC(15,3) YES 시간당 생산능력
daily_capacity NUMERIC(15,3) YES 일일 생산능력
lead_time INTEGER YES 리드타임 (일)
product_type VARCHAR(20) YES 제품유형 (완제품/반제품)
parent_plan_id INTEGER YES 모품목 계획 ID (반제품용)
created_date TIMESTAMPTZ YES 생성일시
created_by VARCHAR(50) YES 생성자
updated_date TIMESTAMPTZ YES 수정일시
updated_by VARCHAR(50) YES 수정자

3.2 관련 테이블

equipment_info (설비 정보)

컬럼명 타입 설명
id SERIAL PK
equipment_code VARCHAR(50) 설비코드
equipment_name VARCHAR(100) 설비명
equipment_type VARCHAR(50) 설비유형
capacity_per_hour NUMERIC(15,3) 시간당 생산능력
status VARCHAR(20) 상태

4. 구현 가능 여부 분석

4.1 현재 V2 컴포넌트로 구현 가능한 기능

기능 가능 여부 사용 컴포넌트 비고
검색 필터 v2-table-search-widget
기본 버튼 (엑셀, 사용자옵션) v2-button-primary
단일 테이블 목록 v2-table-list
기본 모달 폼 모달 화면
좌우 분할 패널 (기본) ⚠️ v2-split-panel-layout 테이블/리스트만 표시 가능
탭 컴포넌트 (기본) ⚠️ v2-tabs-widget 디자인 모드에서 컴포넌트 배치

4.2 현재 V2 컴포넌트의 제한 사항

v2-split-panel-layout 제한

현재 기능:

  • 좌우 분할 패널 (리사이즈 가능)
  • 각 패널에 테이블 또는 리스트 표시 (displayMode: "list" | "table")
  • leftPanel ↔ rightPanel 관계 설정 (relation)
  • 우측 패널에 추가 탭 (additionalTabs)

제한 사항:

  • 패널 안에 임의의 컴포넌트 (타임라인 등)를 배치할 수 없음
  • 그룹화된 테이블 (접기/펼치기) 미지원
  • 복잡한 커스텀 UI 배치 불가

v2-tabs-widget 제한

현재 기능:

  • 탭별 컴포넌트 자유 배치
  • 디자인 모드에서 드래그&드롭

제한 사항:

  • 탭 내에 다른 V2 컴포넌트를 완전히 자유롭게 배치하기 어려움
  • 런타임에서 복잡한 컴포넌트 렌더링 제한

4.3 생산계획관리에 필요한 기능 vs 현재 지원

필요 기능 현재 지원 설명
좌우 분할 패널 ⚠️ 부분 v2-split-panel-layout - 테이블만 가능
왼쪽 패널 탭 (수주/안전재고) 분할 패널 내 탭 조합 미지원
그룹화된 테이블 (품목별 접기/펼치기) 신규 개발 필요
오른쪽 패널 탭 (완제품/반제품) 분할 패널 내 탭 조합 미지원
타임라인 스케줄러 (간트차트) 신규 개발 필요
드래그&드롭 스케줄 이동 신규 개발 필요
복잡한 상세 모달 (분할, 설비할당) 커스텀 모달 개발 필요

4.4 향후 개발 필요 컴포넌트

필요 컴포넌트 목록:
1. v2-timeline-scheduler   - 타임라인/간트차트 스케줄러 (핵심!)
2. v2-table-grouped        - 그룹화된 테이블 (접기/펼치기)
3. v2-split-panel-enhanced - 패널 내 임의 컴포넌트 배치 가능한 확장판
4. v2-modal-complex        - 복잡한 모달 (분할, 다단계, 설비할당)

4.5 현재 구현 가능한 최대 범위

현재 V2 컴포넌트로 구현 가능한 최대 범위:

┌──────────────────────────────────────────────────────────────┐
│ 검색 섹션 (v2-table-search-widget)                           │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  생산계획 테이블 (v2-table-list) - 단일 테이블, 그룹화 없음   │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│ [등록] [수정] [삭제] (v2-button-primary)                      │
└──────────────────────────────────────────────────────────────┘

구현 불가능한 핵심 기능:

  • 품목별 그룹핑 (접기/펼치기)
  • 간트차트 타임라인
  • 자동 스케줄 생성
  • 드래그로 스케줄 이동

5. 단순화된 구현 방안 (임시)

현재 V2 컴포넌트만으로 간소화된 버전을 구현할 수 있습니다.

5.1 간소화 버전 레이아웃

┌──────────────────────────────────────────────────────────────┐
│ 검색 섹션                                                    │
│ [품목코드] [품명] [계획기간] [상태]   [사용자옵션] [엑셀다운로드] │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│                  생산계획 목록 테이블                          │
│  (단일 테이블, 그룹화 없음)                                    │
│                                                              │
├──────────────────────────────────────────────────────────────┤
│ [신규등록] [수정] [삭제]                                       │
└──────────────────────────────────────────────────────────────┘

5.2 간소화 버전 테이블 컬럼

순서 컬럼명 표시명 정렬 형식
1 plan_no 계획번호 left text
2 plan_date 계획일자 center date
3 item_code 품목코드 left text
4 item_name 품명 left text
5 plan_qty 계획수량 right number
6 start_date 시작일 center date
7 end_date 종료일 center date
8 due_date 납기일 center date
9 equipment_name 설비 left text
10 status 상태 center badge
11 manager_name 담당자 left text
12 product_type 제품유형 center text

5.3 간소화 버전 모달 필드

필드명 라벨 타입 필수
plan_no 계획번호 text
plan_date 계획일자 date
item_code 품목코드 select (품목 검색)
item_name 품명 text (자동)
plan_qty 계획수량 number
start_date 시작일 date
end_date 종료일 date
due_date 납기일 date
equipment_id 설비 select
status 상태 select
priority 우선순위 select
work_shift 작업조 select
manager_name 담당자 text
remarks 비고 textarea
product_type 제품유형 select

6. 원본 HTML 기능 상세 분석

6.1 수주데이터 탭 (왼쪽 패널)

테이블 구조:

  • 품목별 그룹 행 (접기/펼치기 가능)
  • 수주 상세 행 (그룹 행 하위)

품목 그룹 행 컬럼:

컬럼 설명
체크박스 품목 그룹 선택
토글 상세 접기/펼치기
품목코드
품목명
총수주량 해당 품목의 모든 수주 합계
출고량
잔량 총수주량 - 출고량
현재고
안전재고
출하계획량
기생산계획량 이미 등록된 생산계획 수량
생산진행 현재 생산 중인 수량
필요생산계획 추가로 계획해야 할 수량 (빨간색 강조)

수주 상세 행:

  • 수주번호, 거래처, 상태 배지
  • 수주량, 출고량, 잔량
  • 납기일

버튼:

  • 계획에 없는 품목만 체크박스 필터
  • 선택 품목 불러오기: 선택한 품목을 생산계획으로 등록
  • 새로고침

6.2 안전재고 부족분 탭 (왼쪽 패널)

테이블 컬럼:

컬럼 설명
체크박스
품목코드
품목명
현재고
안전재고
부족수량 빨간색 (마이너스)
권장생산량 녹색
최종입고일

6.3 완제품 생산계획 탭 (오른쪽 패널)

스케줄 옵션:

  • 안전리드타임 (일)
  • 표시 기간 (주)
  • 미진행 계획 재계산 체크박스

범례:

  • 계획 (파란색)
  • 지시 (주황색)
  • 진행 (녹색)
  • 완료 (회색)
  • 납기일 (빨간 테두리)
  • 긴급 (빨간 아이콘)

타임라인 구조:

  • 날짜별 헤더 (일/월 표시, 주말 강조, 오늘 강조)
  • 품목별 행
  • 생산계획 바 (드래그로 이동 가능)
  • 클릭 시 상세 모달 오픈

버튼:

  • 새로고침
  • 자동 스케줄 생성: 선택된 품목에 대해 자동으로 생산계획 생성
  • 선택 계획 병합: 같은 품목의 계획을 하나로 병합
  • 선택 품목 → 반제품 계획: BOM 기반 반제품 계획 생성
  • 저장
  • 초기화

6.4 반제품 생산계획 탭 (오른쪽 패널)

옵션:

  • 현재고 및 안전재고 감안
  • 진행중인 계획 유지하고 재계산
  • 투입 완료된 반제품 제외

안내:

  • 완제품 생산계획 기준으로 필요한 반제품 계획 자동 생성
  • 모품목 생산 시작일 고려하여 납기일 설정
  • BOM(자재명세서) 정보 기반 필요 수량 계산

6.5 생산 스케줄 상세 모달

기본 정보:

  • 품목코드 (읽기전용)
  • 품목명 (읽기전용)

근거 정보:

  • 수주번호, 안전재고, 재고부족 등 표시

생산 정보:

  • 총 생산수량
  • 납기일 (읽기전용)
  • 계획 시작일 (수정 가능)
  • 계획 종료일 (수정 가능)
  • 생산 기간 (자동 계산)

과거 계획 경고:

  • 시작일이 과거인 경우 경고 표시
  • 오늘부터 재조정 버튼
  • 작업지시 즉시 생성 버튼

계획 분할:

  • 분할 개수 선택 (2~4개)
  • 각 분할 수량 입력
  • 분할 실행

설비 할당:

  • 설비 선택 버튼
  • 선택된 설비 목록

생산 상태:

  • 상태 (자동 관리): 계획됨/작업지시/진행중/완료

추가 정보:

  • 담당자
  • 작업지시번호
  • 비고

버튼:

  • 삭제
  • 취소
  • 저장

7. 구현 우선순위

Phase 1: 간소화 버전 (현재 구현 가능)

V2 컴포넌트로 기본 CRUD 화면 구현:

  • 검색 위젯
  • 단일 테이블 (그룹화 없음)
  • 기본 모달 폼
  • 상태 배지

Phase 2: 컴포넌트 개발 후

  1. v2-tabs 컴포넌트 개발
  2. v2-split-panel 컴포넌트 개발
  3. v2-table-grouped 컴포넌트 개발

Phase 3: 타임라인 스케줄러

  1. v2-timeline-scheduler 컴포넌트 개발
  2. 드래그&드롭 기능
  3. 자동 스케줄 생성 로직
  4. 반제품 연동

8. 참고 사항

8.1 상태 배지 스타일

상태 배경색 글자색 설명
계획 #dbeafe #1e40af 파란색
지시 #fef3c7 #92400e 주황색
진행 #d1fae5 #065f46 녹색
완료 #f3f4f6 #4b5563 회색
긴급 #fee2e2 #991b1b 빨간색

8.2 자동 스케줄 생성 로직

1. 선택된 품목의 필요 생산수량 계산
   - 필요수량 = 잔량 + 안전재고 - 현재고 - 기생산계획량

2. 납기일에서 안전리드타임 차감하여 완료일 계산

3. 일일 생산능력으로 필요 생산일수 계산

4. 완료일에서 역산하여 시작일 계산

5. 설비 가용성 확인 및 자동 할당

6. 반제품이 필요한 경우 BOM 기반 반제품 계획 생성

8.3 계획 분할 로직

1. 원본 계획의 총 수량 확인

2. 분할 개수 선택 (2~4개)

3. 각 분할 수량 입력 (합계 = 원본 수량)

4. 분할 실행 시:
   - 원본 계획 삭제
   - 새로운 N개의 계획 생성
   - 각각 별도의 시작일/종료일 설정 가능

9. DB INSERT JSON (간소화 버전)

⚠️ 이 JSON은 간소화 버전입니다. 전체 기능 구현 시 별도 개발이 필요합니다.

9.1 screen_definitions

{
  "screen_name": "생산계획관리",
  "screen_code": "{COMPANY_CODE}_PP_MAIN",
  "table_name": "production_plan_mng",
  "company_code": "{COMPANY_CODE}",
  "description": "생산계획 관리 화면 (간소화 버전)",
  "is_active": "Y",
  "db_source_type": "internal",
  "data_source_type": "database"
}

9.2 screen_layouts_v2.layout_data (간소화 버전)

{
  "version": "2.0",
  "components": [
    {
      "id": "comp_search",
      "url": "@/lib/registry/components/v2-table-search-widget",
      "size": { "width": 1920, "height": 80 },
      "position": { "x": 0, "y": 20, "z": 1 },
      "overrides": {
        "type": "v2-table-search-widget",
        "label": "검색 필터"
      },
      "displayOrder": 0
    },
    {
      "id": "comp_table",
      "url": "@/lib/registry/components/v2-table-list",
      "size": { "width": 1920, "height": 700 },
      "position": { "x": 0, "y": 120, "z": 1 },
      "overrides": {
        "type": "v2-table-list",
        "label": "생산계획 목록",
        "columns": [
          { "columnName": "plan_no", "displayName": "계획번호", "order": 0, "visible": true, "sortable": true, "format": "text", "align": "left" },
          { "columnName": "plan_date", "displayName": "계획일자", "order": 1, "visible": true, "sortable": true, "format": "date", "align": "center" },
          { "columnName": "item_code", "displayName": "품목코드", "order": 2, "visible": true, "sortable": true, "format": "text", "align": "left" },
          { "columnName": "item_name", "displayName": "품명", "order": 3, "visible": true, "sortable": true, "format": "text", "align": "left" },
          { "columnName": "plan_qty", "displayName": "계획수량", "order": 4, "visible": true, "sortable": true, "format": "number", "align": "right" },
          { "columnName": "start_date", "displayName": "시작일", "order": 5, "visible": true, "sortable": true, "format": "date", "align": "center" },
          { "columnName": "end_date", "displayName": "종료일", "order": 6, "visible": true, "sortable": true, "format": "date", "align": "center" },
          { "columnName": "due_date", "displayName": "납기일", "order": 7, "visible": true, "sortable": true, "format": "date", "align": "center" },
          { "columnName": "equipment_name", "displayName": "설비", "order": 8, "visible": true, "sortable": true, "format": "text", "align": "left" },
          { "columnName": "status", "displayName": "상태", "order": 9, "visible": true, "sortable": true, "format": "text", "align": "center" },
          { "columnName": "product_type", "displayName": "제품유형", "order": 10, "visible": true, "sortable": true, "format": "text", "align": "center" },
          { "columnName": "manager_name", "displayName": "담당자", "order": 11, "visible": true, "sortable": true, "format": "text", "align": "left" }
        ],
        "selectedTable": "production_plan_mng",
        "pagination": { "enabled": true, "pageSize": 20, "pageSizeOptions": [10, 20, 50, 100] },
        "checkbox": { "enabled": true, "multiple": true },
        "horizontalScroll": { "enabled": true, "minColumnWidth": 80, "maxColumnWidth": 200 }
      },
      "displayOrder": 1
    },
    {
      "id": "comp_btn_register",
      "url": "@/lib/registry/components/v2-button-primary",
      "size": { "width": 100, "height": 40 },
      "position": { "x": 1580, "y": 70, "z": 1 },
      "overrides": {
        "text": "신규 등록",
        "type": "v2-button-primary",
        "action": { "type": "modal", "modalTitle": "생산계획 등록", "targetScreenId": null },
        "variant": "success"
      },
      "displayOrder": 2
    },
    {
      "id": "comp_btn_edit",
      "url": "@/lib/registry/components/v2-button-primary",
      "size": { "width": 80, "height": 40 },
      "position": { "x": 1690, "y": 70, "z": 1 },
      "overrides": {
        "text": "수정",
        "type": "v2-button-primary",
        "action": { "type": "edit", "modalTitle": "생산계획 수정", "targetScreenId": null },
        "variant": "secondary"
      },
      "displayOrder": 3
    },
    {
      "id": "comp_btn_delete",
      "url": "@/lib/registry/components/v2-button-primary",
      "size": { "width": 80, "height": 40 },
      "position": { "x": 1780, "y": 70, "z": 1 },
      "overrides": {
        "text": "삭제",
        "type": "v2-button-primary",
        "action": { "type": "delete" },
        "variant": "danger"
      },
      "displayOrder": 4
    }
  ]
}

10. 구현 체크리스트

10.1 간소화 버전 (현재 구현 가능)

체크 항목 설명
테이블 생성 production_plan_mng 테이블 생성
화면 정의 screen_definitions INSERT
모달 화면 생성 등록/수정 모달 화면 생성
메인 화면 생성 screen_layouts_v2 INSERT
메뉴 연결 대상 메뉴에 화면 할당
기본 CRUD 테스트 등록/수정/삭제/조회 테스트

10.2 전체 버전 (향후 구현)

체크 항목 설명
v2-tabs 개발 탭 컴포넌트 개발
v2-split-panel 개발 분할 패널 컴포넌트 개발
v2-table-grouped 개발 그룹화 테이블 컴포넌트 개발
v2-timeline-scheduler 개발 타임라인 스케줄러 개발
자동 스케줄 로직 자동 스케줄 생성 백엔드 API
반제품 연동 BOM 기반 반제품 계획 생성
드래그&드롭 타임라인 드래그 이동 기능

11. 관련 문서