From 106e654cbd6902552d10fcd3865ff761506c5e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Thu, 5 Mar 2026 21:18:44 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[juil]=20=EC=97=85=EB=AC=B4=20Workflow?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=EC=84=B8=EC=8A=A4=20=EC=88=9C=EC=84=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 영업/수주 → 영업 (수주는 견적 이후로 이동) - 순서 변경: 영업 → 입찰 참여 → 견적서 작성 → 수주/계약 - 입찰 참여를 선택적 단계로 변경 (소규모/수의계약 시 생략 가능) - 분기 표시: 대형/공공 vs 소규모/수의계약 경로 안내 --- resources/views/juil/workflow.blade.php | 149 ++++++++++++------------ 1 file changed, 77 insertions(+), 72 deletions(-) diff --git a/resources/views/juil/workflow.blade.php b/resources/views/juil/workflow.blade.php index 19c3480a..72055f76 100644 --- a/resources/views/juil/workflow.blade.php +++ b/resources/views/juil/workflow.blade.php @@ -16,9 +16,9 @@ // --- 업무 프로세스 데이터 (상세 서브플로우 포함) --- const processes = [ { - id: 1, phase: 'sales', name: '영업/수주', icon: '📋', dept: '영업팀', + id: 1, phase: 'sales', name: '영업', icon: '📋', dept: '영업팀', color: '#3B82F6', bgColor: '#EFF6FF', - description: '건설사/시행사로부터 프로젝트 정보 수집 및 수주 활동', + description: '건설사/시행사로부터 프로젝트 정보를 수집하고 영업 활동을 수행한다.', documents: ['입찰공고문', '현장조사서', '고객 요구사항서'], samLink: null, samMenu: null, subSteps: [ @@ -50,10 +50,10 @@ duration: '1~3시간', }, { - id: 'S1-4', name: '수주 가능성 평가', icon: '📊', - description: '수집된 정보를 바탕으로 수주 가능성과 수익성을 평가하여 입찰 참여 여부를 결정한다.', + id: 'S1-4', name: '프로젝트 검토', icon: '📊', + description: '수집된 정보를 바탕으로 수익성을 평가하여 진행 여부를 결정한다.', input: ['고객 요구사항서', '예상 공사비', '경쟁 현황'], - output: ['수주 검토서 (Go/No-Go 결정)'], + output: ['프로젝트 검토서 (Go/No-Go 결정)'], responsible: '영업팀장', tips: ['수익률 10% 미만 프로젝트는 팀장 승인 필요', '리스크 요소 반드시 기재'], duration: '1일', @@ -61,60 +61,15 @@ ], }, { - id: 2, phase: 'estimate', name: '견적서 작성', icon: '🧮', dept: '견적팀', - color: '#8B5CF6', bgColor: '#F5F3FF', - description: '자재/인건비/경비를 산출하여 견적서 작성', - documents: ['견적서', '단가산출서', '자재목록'], - samLink: '/juil/estimate', samMenu: '견적/입찰/공사관리', - subSteps: [ - { - id: 'S2-1', name: '물량 산출', icon: '📏', - description: '도면과 실측 데이터를 기반으로 자재별 물량(수량)을 산출한다.', - input: ['도면', '실측 데이터', '현장조사서'], - output: ['물량산출서 (자재별 수량)'], - responsible: '견적 담당자', - tips: ['로스율(5~10%) 반드시 반영', '현장 여건에 따른 추가 물량 고려'], - duration: '2~3일', - }, - { - id: 'S2-2', name: '단가 산정', icon: '💵', - description: '자재 단가, 인건비, 장비비, 경비 등 각 항목의 단가를 산정한다.', - input: ['물량산출서', '최근 자재 시세', '노무단가표'], - output: ['단가산출서'], - responsible: '견적 담당자', - tips: ['자재 시세는 최근 3개월 평균 적용', '노무단가는 대한건설협회 기준 참조'], - duration: '1~2일', - }, - { - id: 'S2-3', name: '견적가 산출', icon: '🧮', - description: '물량 x 단가를 계산하고, 이윤율/관리비를 적용하여 최종 견적가를 산출한다.', - input: ['물량산출서', '단가산출서', '이윤율 기준'], - output: ['원가계산서', '내부 견적서'], - responsible: '견적팀장', - tips: ['이윤율은 프로젝트 규모별 차등 적용', '원가 대비 견적가 검증 필수'], - duration: '1일', - }, - { - id: 'S2-4', name: '견적서 작성/검토', icon: '📋', - description: '고객 제출용 견적서를 작성하고, 팀장 검토 후 최종 확정한다.', - input: ['원가계산서', '고객 요구 양식'], - output: ['공식 견적서 (PDF)'], - responsible: '견적팀장 → 대표이사 승인', - tips: ['고객사 양식이 별도로 있는지 확인', '견적 유효기간 명시 (보통 30일)'], - duration: '1일', - }, - ], - }, - { - id: 3, phase: 'bid', name: '입찰 참여', icon: '🏷️', dept: '영업팀', + id: 2, phase: 'bid', name: '입찰 참여', icon: '🏷️', dept: '영업팀', color: '#EC4899', bgColor: '#FDF2F8', - description: '견적서 기반으로 입찰에 참여', + description: '공공/대형 프로젝트의 경우 입찰에 참여한다. 소규모 업체나 수의계약의 경우 이 단계를 생략하고 바로 견적서 작성으로 진행한다.', documents: ['입찰서', '기술제안서', '사업자등록증 사본'], samLink: '/juil/estimate', samMenu: '견적/입찰/공사관리', - branch: true, + branch: true, optional: true, subSteps: [ { - id: 'S3-1', name: '입찰서류 준비', icon: '📂', + id: 'S2-1', name: '입찰서류 준비', icon: '📂', description: '입찰 참여에 필요한 서류(사업자등록증, 실적증명, 재무제표 등)를 준비한다.', input: ['입찰 공고문 (필요서류 목록)', '회사 기본서류'], output: ['입찰서류 패키지'], @@ -123,7 +78,7 @@ duration: '2~3일', }, { - id: 'S3-2', name: '기술제안서 작성', icon: '📝', + id: 'S2-2', name: '기술제안서 작성', icon: '📝', description: '시공 방법, 품질관리 계획, 안전관리 계획 등을 포함한 기술제안서를 작성한다.', input: ['현장조사서', '시공 실적', '품질/안전 매뉴얼'], output: ['기술제안서'], @@ -132,7 +87,7 @@ duration: '3~5일', }, { - id: 'S3-3', name: '입찰가 결정', icon: '🎯', + id: 'S2-3', name: '입찰가 결정', icon: '🎯', description: '견적가를 기반으로 경쟁 상황을 고려한 최종 입찰가를 결정한다.', input: ['내부 견적서', '경쟁사 동향', '예정가 분석'], output: ['최종 입찰가 결정서'], @@ -141,7 +96,7 @@ duration: '당일', }, { - id: 'S3-4', name: '입찰서 제출', icon: '📮', + id: 'S2-4', name: '입찰서 제출', icon: '📮', description: '준비된 서류와 입찰가를 포함하여 입찰서를 제출한다.', input: ['입찰서류 패키지', '최종 입찰가', '입찰보증금'], output: ['입찰 접수증', '입찰 결과 대기'], @@ -152,25 +107,70 @@ ], }, { - id: 4, phase: 'contract', name: '낙찰/계약', icon: '📝', dept: '영업팀', + id: 3, phase: 'estimate', name: '견적서 작성', icon: '🧮', dept: '견적팀', + color: '#8B5CF6', bgColor: '#F5F3FF', + description: '자재/인건비/경비를 산출하여 견적서를 작성한다. 입찰 프로젝트는 입찰가 산정에, 수의계약은 고객 제출용으로 활용한다.', + documents: ['견적서', '단가산출서', '자재목록'], + samLink: '/juil/estimate', samMenu: '견적/입찰/공사관리', + subSteps: [ + { + id: 'S3-1', name: '물량 산출', icon: '📏', + description: '도면과 실측 데이터를 기반으로 자재별 물량(수량)을 산출한다.', + input: ['도면', '실측 데이터', '현장조사서'], + output: ['물량산출서 (자재별 수량)'], + responsible: '견적 담당자', + tips: ['로스율(5~10%) 반드시 반영', '현장 여건에 따른 추가 물량 고려'], + duration: '2~3일', + }, + { + id: 'S3-2', name: '단가 산정', icon: '💵', + description: '자재 단가, 인건비, 장비비, 경비 등 각 항목의 단가를 산정한다.', + input: ['물량산출서', '최근 자재 시세', '노무단가표'], + output: ['단가산출서'], + responsible: '견적 담당자', + tips: ['자재 시세는 최근 3개월 평균 적용', '노무단가는 대한건설협회 기준 참조'], + duration: '1~2일', + }, + { + id: 'S3-3', name: '견적가 산출', icon: '🧮', + description: '물량 x 단가를 계산하고, 이윤율/관리비를 적용하여 최종 견적가를 산출한다.', + input: ['물량산출서', '단가산출서', '이윤율 기준'], + output: ['원가계산서', '내부 견적서'], + responsible: '견적팀장', + tips: ['이윤율은 프로젝트 규모별 차등 적용', '원가 대비 견적가 검증 필수'], + duration: '1일', + }, + { + id: 'S3-4', name: '견적서 작성/검토', icon: '📋', + description: '고객 제출용 견적서를 작성하고, 팀장 검토 후 최종 확정한다.', + input: ['원가계산서', '고객 요구 양식'], + output: ['공식 견적서 (PDF)'], + responsible: '견적팀장 → 대표이사 승인', + tips: ['고객사 양식이 별도로 있는지 확인', '견적 유효기간 명시 (보통 30일)'], + duration: '1일', + }, + ], + }, + { + id: 4, phase: 'contract', name: '수주/계약', icon: '📝', dept: '영업팀', color: '#10B981', bgColor: '#ECFDF5', - description: '낙찰 후 공사 계약 체결', + description: '견적 승인 또는 낙찰 후 공사 계약을 체결하고 프로젝트를 등록한다.', documents: ['공사계약서', '착공계', '공정표'], samLink: '/juil/project', samMenu: '프로젝트관리/기성청구', subSteps: [ { - id: 'S4-1', name: '낙찰 통보 확인', icon: '🏆', - description: '입찰 결과를 확인하고, 낙찰 통보서를 수령한다.', - input: ['입찰 결과 공고', '낙찰 통보서'], - output: ['낙찰 확인 (사내 공유)'], + id: 'S4-1', name: '수주 확정', icon: '🏆', + description: '입찰 낙찰 통보 또는 고객 견적 승인을 확인하고 수주를 확정한다.', + input: ['낙찰 통보서 또는 견적 승인 회신'], + output: ['수주 확정 (사내 공유)'], responsible: '영업 담당자', - tips: ['낙찰 후 계약 기한 확인 (보통 7~10일)', '유찰 시 원인 분석하여 다음 입찰에 반영'], + tips: ['입찰: 낙찰 후 계약 기한 확인 (보통 7~10일)', '수의계약: 고객 승인 서면 확보 필수'], duration: '당일', }, { id: 'S4-2', name: '계약서 검토/체결', icon: '🖊️', description: '계약 조건(금액, 공기, 하자보증 등)을 검토하고 계약서에 서명한다.', - input: ['계약서 초안 (발주처 제공)', '낙찰 내역서'], + input: ['계약서 초안 (발주처 제공)', '견적서/낙찰 내역서'], output: ['공사계약서 (날인본)', '계약보증금 납부 영수증'], responsible: '대표이사 + 경영지원팀', tips: ['지체상금 조항 반드시 확인', '하자보증기간/비율 확인', '대금지급 조건 확인'], @@ -583,7 +583,7 @@ function ProcessNode({ process, isActive, onClick }) { fontSize: '11px', color: '#FFF', backgroundColor: process.color, borderRadius: '10px', padding: '1px 8px', display: 'inline-block', }}>{process.dept} - {process.branch && ( + {process.optional && (
)} + {process.optional && ( +
생략 가능
+ )} ); } @@ -870,15 +875,15 @@ function DetailModal({ process, onClose }) { ); } -// --- 입찰 분기 표시 --- +// --- 분기 표시 --- function BranchInfo() { return (
- - 낙찰 → 계약 진행 + + 대형/공공 → 입찰 참여 → 견적서 - - 유찰 → 재입찰/종료 + + 소규모/수의계약 → 입찰 생략 → 견적서
); @@ -968,7 +973,7 @@ function App() { }}> 범례: 클릭 → 상세 업무 모달 - ⑂ 분기점 (입찰 결과) + ⑂ 생략 가능 단계 (입찰) ↗ SAM 메뉴 바로가기 ESC 키로 모달 닫기