fix: [juil] 업무 Workflow 프로세스 순서 수정

- 영업/수주 → 영업 (수주는 견적 이후로 이동)
- 순서 변경: 영업 → 입찰 참여 → 견적서 작성 → 수주/계약
- 입찰 참여를 선택적 단계로 변경 (소규모/수의계약 시 생략 가능)
- 분기 표시: 대형/공공 vs 소규모/수의계약 경로 안내
This commit is contained in:
김보곤
2026-03-05 21:18:44 +09:00
parent b19eb8c217
commit 02e03b1044

View File

@@ -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}</div>
{process.branch && (
{process.optional && (
<div style={{
position: 'absolute', top: '-8px', right: '-8px',
width: '20px', height: '20px', borderRadius: '50%',
@@ -591,6 +591,11 @@ function ProcessNode({ process, isActive, onClick }) {
display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '10px',
}}></div>
)}
{process.optional && (
<div style={{
fontSize: '9px', color: '#F59E0B', fontWeight: 600, marginTop: '4px',
}}>생략 가능</div>
)}
</div>
);
}
@@ -870,15 +875,15 @@ function DetailModal({ process, onClose }) {
);
}
// --- 입찰 분기 표시 ---
// --- 분기 표시 ---
function BranchInfo() {
return (
<div style={{ display: 'flex', gap: '8px', justifyContent: 'center', margin: '8px 0', fontSize: '11px' }}>
<span style={{ padding: '2px 10px', borderRadius: '10px', backgroundColor: '#DCFCE7', color: '#166534', fontWeight: 600 }}>
계약 진행
<span style={{ padding: '2px 10px', borderRadius: '10px', backgroundColor: '#FEF3C7', color: '#92400E', fontWeight: 600 }}>
대형/공공 참여 견적서
</span>
<span style={{ padding: '2px 10px', borderRadius: '10px', backgroundColor: '#FEE2E2', color: '#991B1B', fontWeight: 600 }}>
유찰 입찰/종료
<span style={{ padding: '2px 10px', borderRadius: '10px', backgroundColor: '#DBEAFE', color: '#1E40AF', fontWeight: 600 }}>
소규모/수의계약 입찰 생략 견적서
</span>
</div>
);
@@ -968,7 +973,7 @@ function App() {
}}>
<span><strong>범례:</strong></span>
<span>클릭 상세 업무 모달</span>
<span> 분기점 (입찰 결과)</span>
<span> 생략 가능 단계 (입찰)</span>
<span> SAM 메뉴 바로가기</span>
<span>ESC 키로 모달 닫기</span>
</div>