30 KiB
30 KiB
유지보수 업무 요청/처리 관리 작업계획서
작성일: 2026-01-10 예상 기간: 5~7일 우선순위: 3
1. 기능 개요
1.1 핵심 컨셉
- 기존 엑셀/구글시트로 관리하던 유지보수 업무를 시스템화
- AI가 다양한 양식의 파일을 파싱 → 표준 형식으로 변환
- 파싱 결과를 사용자가 검토/수정 후 등록
- 처리 완료/진행중 업무 → 주간보고 실적 자동 반영
1.2 플로우
[엑셀/구글시트 파일 업로드]
↓
🤖 AI 파싱
(다양한 양식 → 표준 형식)
↓
[검토 화면에 로드]
(사용자가 확인/수정)
↓
[등록]
↓
[상태 관리: 미진행→진행중→완료]
↓
[주간보고 작성 시]
↓
🤖 완료/진행중 업무 → 실적 자동 작성
(유사 실적 있으면 AI가 병합)
1.3 결정 사항
| # | 항목 | 결정 |
|---|---|---|
| 1 | 데이터 소스 | 엑셀/구글시트 파일 업로드 |
| 2 | 양식 | 통일 안됨 → AI 파싱 |
| 3 | 파싱 결과 | 검토 화면에서 사용자 확인 후 등록 |
| 4 | 주간보고 연계 | 완료/진행중 → 실적 자동 작성, 유사 건 병합 |
2. 데이터 모델
2.1 유지보수 업무 테이블 (wr_maintenance_task)
CREATE TABLE wr_maintenance_task (
task_id SERIAL PRIMARY KEY,
-- 프로젝트/사업 연결
project_id INTEGER REFERENCES wr_project_info(project_id),
business_id INTEGER REFERENCES wr_business(business_id),
-- 요청 정보
request_date DATE NOT NULL, -- 접수일자
task_title VARCHAR(300) NOT NULL, -- 제목
task_content TEXT, -- 내용
requester_name VARCHAR(50), -- 요청자
priority VARCHAR(20) DEFAULT 'MEDIUM', -- 우선순위: HIGH/MEDIUM/LOW
-- 처리 정보
assignee_id INTEGER REFERENCES wr_employee_info(employee_id), -- 담당자
task_status VARCHAR(20) DEFAULT 'PENDING', -- 상태
-- PENDING: 미진행, IN_PROGRESS: 진행중, COMPLETED: 완료
completed_date DATE, -- 작업완료일자
-- 반영 여부
is_dev_deployed BOOLEAN DEFAULT false, -- 개발서버 반영
dev_deployed_date DATE,
is_prod_deployed BOOLEAN DEFAULT false, -- 운영서버 반영
prod_deployed_date DATE,
is_customer_confirmed BOOLEAN DEFAULT false, -- 고객 확인
customer_confirmed_date DATE,
-- 주간보고 연계
linked_report_id INTEGER REFERENCES wr_weekly_report(report_id),
linked_task_id INTEGER REFERENCES wr_weekly_report_task(task_id),
-- 업로드 출처
upload_batch_id INTEGER, -- 일괄 업로드 시 배치 ID
source_row_number INTEGER, -- 원본 파일 행 번호
-- 메타
author_id INTEGER NOT NULL REFERENCES wr_employee_info(employee_id),
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
created_ip VARCHAR(50),
created_email VARCHAR(100),
updated_ip VARCHAR(50),
updated_email VARCHAR(100)
);
-- 인덱스
CREATE INDEX idx_maint_project ON wr_maintenance_task(project_id);
CREATE INDEX idx_maint_business ON wr_maintenance_task(business_id);
CREATE INDEX idx_maint_status ON wr_maintenance_task(task_status);
CREATE INDEX idx_maint_assignee ON wr_maintenance_task(assignee_id);
CREATE INDEX idx_maint_request_date ON wr_maintenance_task(request_date);
CREATE INDEX idx_maint_completed_date ON wr_maintenance_task(completed_date);
2.2 업로드 배치 테이블 (wr_maintenance_upload_batch)
CREATE TABLE wr_maintenance_upload_batch (
batch_id SERIAL PRIMARY KEY,
-- 파일 정보
file_name VARCHAR(200) NOT NULL,
file_type VARCHAR(20), -- EXCEL, GOOGLE_SHEET
-- 처리 결과
total_rows INTEGER, -- 전체 행 수
parsed_rows INTEGER, -- 파싱 성공
registered_rows INTEGER, -- 등록 완료
skipped_rows INTEGER, -- 스킵 (중복 등)
-- AI 파싱 원본
ai_parsed_json TEXT, -- AI 파싱 결과 원본
-- 메타
uploaded_by INTEGER NOT NULL REFERENCES wr_employee_info(employee_id),
uploaded_at TIMESTAMP DEFAULT NOW()
);
3. API 설계
3.1 유지보수 업무 API
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/maintenance/list | 업무 목록 조회 (필터: 상태, 기간, 프로젝트) |
| GET | /api/maintenance/[id]/detail | 업무 상세 조회 |
| POST | /api/maintenance/create | 업무 직접 등록 |
| PUT | /api/maintenance/[id]/update | 업무 수정 |
| PUT | /api/maintenance/[id]/status | 상태 변경 |
| DELETE | /api/maintenance/[id]/delete | 업무 삭제 |
3.2 파일 업로드/AI 파싱 API
| Method | Endpoint | 설명 |
|---|---|---|
| POST | /api/maintenance/upload/parse | 파일 업로드 → AI 파싱 |
| POST | /api/maintenance/upload/register | 파싱 결과 검토 후 일괄 등록 |
| GET | /api/maintenance/upload/history | 업로드 이력 조회 |
3.3 통계 API
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/maintenance/stats/weekly | 주간 통계 (요청/처리 건수) |
| GET | /api/maintenance/stats/by-project | 프로젝트별 통계 |
| GET | /api/maintenance/stats/by-assignee | 담당자별 통계 |
3.4 주간보고 연계 API
| Method | Endpoint | 설명 |
|---|---|---|
| GET | /api/maintenance/for-report | 주간보고용 업무 목록 (완료/진행중) |
| POST | /api/maintenance/link-to-report | 업무 → 주간보고 실적 연계 |
4. 화면 설계
4.1 유지보수 업무 목록 (/maintenance)
┌─────────────────────────────────────────────────────────────────┐
│ 유지보수 업무 관리 [파일 업로드] [+ 직접등록] │
├─────────────────────────────────────────────────────────────────┤
│ 프로젝트: [전체 ▼] 상태: [전체 ▼] 기간: [____] ~ [____] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📊 이번 주 현황: 요청 12건 | 완료 8건 | 진행중 3건 | 미진행 1건 │
│ │
├─────────────────────────────────────────────────────────────────┤
│ 접수일 | 제목 | 요청자 | 담당자 | 상태 | 반영 │
│ ────────────────────────────────────────────────────────────── │
│ 01/10 | 로그인 오류 수정 | 김담당 | 조효성 | ✅완료 | 🟢🟢🟢 │
│ 01/09 | 보고서 양식 변경 | 박과장 | 서혜원 | 🔄진행 | 🟢⚪⚪ │
│ 01/09 | 엑셀 다운로드 추가 | 김담당 | - | ⏳미진행| ⚪⚪⚪ │
│ 01/08 | 대시보드 통계 오류 | 이대리 | 조효성 | ✅완료 | 🟢🟢🟢 │
│ ... │
└─────────────────────────────────────────────────────────────────┘
* 반영: 개발/운영/고객확인 (🟢완료 ⚪미완료)
4.2 파일 업로드 → AI 파싱 (/maintenance/upload)
┌─────────────────────────────────────────────────────────────────┐
│ 유지보수 업무 파일 업로드 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 📁 엑셀 또는 구글시트 파일을 드래그하세요 │ │
│ │ │ │
│ │ [파일 선택] │ │
│ │ │ │
│ │ 지원 형식: .xlsx, .xls, .csv │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ 프로젝트: [PIMS 유지보수 ▼] ← 기본 프로젝트 선택 │
│ │
│ [업로드 및 분석] │
└─────────────────────────────────────────────────────────────────┘
↓ AI 파싱 중... ↓
┌─────────────────────────────────────────────────────────────────┐
│ 🤖 AI 분석 결과 [전체선택] [등록] │
├─────────────────────────────────────────────────────────────────┤
│ 파일: 유지보수현황_202601.xlsx │
│ 분석: 15건 감지 (신규 12건, 중복 3건) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ☑ #1 (신규) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 접수일: 2026-01-10 요청자: 김담당 │ │
│ │ 제목: [로그인 오류 수정__________________________] │ │
│ │ 내용: [세션 만료 후 재로그인 시 오류 발생________] │ │
│ │ 우선순위: [높음 ▼] 담당자: [조효성 ▼] 상태: [완료 ▼] │ │
│ │ 완료일: [2026-01-10] │ │
│ │ 반영: ☑개발 ☑운영 ☑고객확인 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ☑ #2 (신규) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 접수일: 2026-01-09 요청자: 박과장 │ │
│ │ 제목: [보고서 양식 변경__________________________] │ │
│ │ ... │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ☐ #3 (⚠️ 중복 - 기존 건과 유사) │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 제목: 로그인 문제 수정 │ │
│ │ 💡 유사 건: #1234 "로그인 오류 수정" (01/10 등록) │ │
│ │ [병합] [별도 등록] [스킵] │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ [선택 항목 등록 (10건)] │
└─────────────────────────────────────────────────────────────────┘
4.3 업무 상세/수정 (/maintenance/[id])
┌─────────────────────────────────────────────────────────────────┐
│ 유지보수 업무 상세 [수정] [삭제] │
├─────────────────────────────────────────────────────────────────┤
│ 프로젝트: PIMS 유지보수 │
│ 접수일: 2026-01-10 │
│ 요청자: 김담당 (고객사) │
├─────────────────────────────────────────────────────────────────┤
│ 제목: 로그인 오류 수정 │
│ 우선순위: 🔴 높음 │
├─────────────────────────────────────────────────────────────────┤
│ 내용: │
│ 세션 만료 후 재로그인 시 "잘못된 요청입니다" 오류 발생 │
│ 크롬 브라우저에서만 발생, IE는 정상 │
├─────────────────────────────────────────────────────────────────┤
│ 📋 처리 현황 │
│ ─────────────────────────────────────────────────────────────── │
│ 담당자: 조효성 │
│ 상태: ✅ 완료 (2026-01-10) │
│ │
│ ☑ 개발서버 반영 (2026-01-10) │
│ ☑ 운영서버 반영 (2026-01-10) │
│ ☑ 고객 확인 (2026-01-10) │
├─────────────────────────────────────────────────────────────────┤
│ 🔗 주간보고 연계 │
│ ─────────────────────────────────────────────────────────────── │
│ 연계됨: 2026년 2주차 주간보고 - 조효성 │
│ "PIMS 로그인 세션 오류 수정 (2h)" │
└─────────────────────────────────────────────────────────────────┘
4.4 주간보고 작성 시 연계
┌─────────────────────────────────────────────────────────────────┐
│ 💡 이번 주 처리한 유지보수 업무가 있습니다 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ☑ 로그인 오류 수정 (완료, 01/10) │
│ → 실적 추가: "PIMS 로그인 세션 오류 수정" │
│ → 예상 시간: [2]시간 │
│ │
│ ☑ 대시보드 통계 오류 (완료, 01/08) │
│ → 실적 추가: "대시보드 월별 통계 쿼리 수정" │
│ → 예상 시간: [1]시간 │
│ │
│ ☐ 보고서 양식 변경 (진행중) │
│ → 실적 추가 안함 (진행중은 선택) │
│ │
│ ─────────────────────────────────────────────────────────────── │
│ ⚠️ 유사한 기존 실적이 있습니다: │
│ │
│ "로그인 오류 수정" ↔ 기존: "PIMS 인증 버그 수정 (1h)" │
│ [병합 (3h로 합산)] [별도 유지] [기존 건에 추가] │
│ │
│ [선택 항목 실적에 추가] │
└─────────────────────────────────────────────────────────────────┘
4.5 통계 대시보드 (/maintenance/stats)
┌─────────────────────────────────────────────────────────────────┐
│ 📊 유지보수 업무 통계 │
├─────────────────────────────────────────────────────────────────┤
│ 기간: [2026-01 ▼] 프로젝트: [전체 ▼] │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 이번 달 현황 │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │ 총 요청 │ 완료 │ 진행중 │ 미진행 │ │
│ │ 45건 │ 32건 │ 8건 │ 5건 │ │
│ │ │ (71%) │ (18%) │ (11%) │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
│ │
│ 주간 추이 (최근 4주) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 12 ████████████ │ │
│ │ 10 ██████████ ████████ │ │
│ │ 8 ████████ ██████ ████████████ │ │
│ │ 6 ██████ ████ ██████████ │ │
│ │ ────────────────────────────────── │ │
│ │ 1주차 2주차 3주차 4주차 │ │
│ │ ■ 요청 ■ 완료 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ 담당자별 처리 현황 │
│ ───────────────────────────────────────────────────────────── │
│ 조효성: ████████████████ 18건 │
│ 서혜원: ████████████ 14건 │
│ 미배정: ████ 5건 │
│ │
│ 평균 처리 시간: 1.8일 │
│ SLA 준수율: 92% (24시간 내 완료 기준) │
│ │
└─────────────────────────────────────────────────────────────────┘
5. AI 프롬프트 설계
5.1 파일 파싱 프롬프트
당신은 엑셀/CSV 파일에서 유지보수 업무 데이터를 추출하는 전문가입니다.
다양한 양식의 파일에서 아래 표준 형식으로 데이터를 변환해주세요.
## 입력 데이터
{file_content_as_text}
## 추출할 필드
- request_date: 접수일자 (YYYY-MM-DD)
- title: 제목/요약
- content: 상세 내용
- requester: 요청자
- priority: 우선순위 (HIGH/MEDIUM/LOW, 긴급/높음→HIGH, 보통/일반→MEDIUM, 낮음→LOW)
- assignee: 담당자
- status: 상태 (PENDING/IN_PROGRESS/COMPLETED)
- 미진행/대기/접수 → PENDING
- 진행/진행중/처리중 → IN_PROGRESS
- 완료/종료/해결 → COMPLETED
- completed_date: 완료일자 (있는 경우)
- is_dev_deployed: 개발 반영 여부 (true/false)
- is_prod_deployed: 운영 반영 여부 (true/false)
- is_customer_confirmed: 고객 확인 여부 (true/false)
## 출력 형식 (JSON)
{
"parsed_rows": [
{
"row_number": 1,
"request_date": "2026-01-10",
"title": "로그인 오류 수정",
"content": "세션 만료 후 재로그인 시 오류",
"requester": "김담당",
"priority": "HIGH",
"assignee": "조효성",
"status": "COMPLETED",
"completed_date": "2026-01-10",
"is_dev_deployed": true,
"is_prod_deployed": true,
"is_customer_confirmed": true,
"confidence": 0.95,
"parse_notes": "정상 파싱"
}
],
"summary": {
"total_rows": 15,
"parsed_successfully": 14,
"parse_failed": 1,
"notes": "1행은 헤더로 스킵"
}
}
## 규칙
1. 헤더 행은 자동 감지하여 스킵
2. 빈 행은 스킵
3. 날짜는 다양한 형식 인식 (01/10, 2026.01.10, 1월10일 등)
4. 상태/우선순위는 유사 표현 매핑
5. 파싱 불확실한 필드는 confidence 낮게, parse_notes에 이유 기재
6. JSON 외 다른 텍스트 출력 금지
5.2 중복/유사 건 감지 프롬프트
당신은 유지보수 업무의 중복/유사 건을 판단하는 전문가입니다.
## 신규 업무
- 제목: {new_title}
- 내용: {new_content}
- 접수일: {new_date}
## 기존 업무 목록
{existing_tasks_json}
## 판단 기준
1. 제목이 80% 이상 유사하면 중복 의심
2. 내용의 핵심 키워드가 동일하면 중복 의심
3. 같은 날짜에 동일 요청자가 등록한 유사 건은 중복 가능성 높음
## 출력 형식 (JSON)
{
"is_duplicate": true,
"similar_task_id": 1234,
"similarity_score": 0.85,
"reason": "제목과 내용이 85% 유사, 동일 요청자",
"recommendation": "MERGE | SKIP | REGISTER_SEPARATE"
}
5.3 주간보고 실적 생성 프롬프트
당신은 유지보수 업무를 주간보고 실적으로 변환하는 전문가입니다.
## 이번 주 처리 업무
{maintenance_tasks_json}
## 기존 주간보고 실적
{existing_report_tasks_json}
## 작업
1. 각 유지보수 업무를 주간보고 실적 문장으로 변환
2. 기존 실적 중 유사한 것이 있으면 병합 제안
3. 예상 소요 시간 추정
## 출력 형식 (JSON)
{
"generated_tasks": [
{
"maintenance_task_id": 123,
"report_description": "PIMS 로그인 세션 오류 수정",
"estimated_hours": 2,
"similar_existing": {
"task_id": 456,
"description": "PIMS 인증 버그 수정",
"merge_recommendation": "MERGE | KEEP_SEPARATE",
"merged_description": "PIMS 로그인/인증 오류 수정",
"merged_hours": 3
}
}
]
}
6. 작업 일정
Phase 1: 기본 CRUD (2일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- DB 테이블 생성 (wr_maintenance_task, wr_maintenance_upload_batch)
- 유지보수 업무 CRUD API
- 업무 목록/상세/등록/수정 화면
- 상태 변경 기능
Phase 2: 파일 업로드 + AI 파싱 (2일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- 파일 업로드 API (엑셀/CSV)
- AI 파싱 프롬프트 구현
- 파싱 결과 검토 화면
- 중복 감지 로직
- 일괄 등록 기능
Phase 3: 주간보고 연계 (2일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- 주간보고 작성 시 유지보수 업무 조회
- AI 실적 문장 생성
- 유사 실적 병합 기능
- 연계 정보 저장
Phase 4: 통계 + 테스트 (1일)
- 시작:
- 완료:
- 소요시간:
작업 내용:
- 통계 API (주간/월간/담당자별)
- 통계 대시보드 화면
- 전체 테스트 및 버그 수정
작업 완료 결과
Phase별 작업 시간
| Phase | 작업 내용 | 시작 | 완료 | 소요시간 |
|---|---|---|---|---|
| 1 | 기본 CRUD | - | - | - |
| 2 | 파일 업로드 + AI 파싱 | - | - | - |
| 3 | 주간보고 연계 | - | - | - |
| 4 | 통계 + 테스트 | - | - | - |
| 총 소요시간 | - |
생성/수정된 파일
| 구분 | 파일 | 작업 |
|---|---|---|
| DB | wr_maintenance_task | 신규 테이블 |
| DB | wr_maintenance_upload_batch | 신규 테이블 |
| API | backend/api/maintenance/*.ts | 신규 |
| API | backend/api/maintenance/upload/*.ts | 신규 |
| API | backend/api/maintenance/stats/*.ts | 신규 |
| Frontend | frontend/pages/maintenance/*.vue | 신규 |
| Frontend | frontend/pages/report/weekly/write.vue | 수정 |
| Utils | backend/utils/openai.ts | 수정 (프롬프트 추가) |
| Utils | backend/utils/excel-parser.ts | 신규 |
7. 기술 스택
- Backend: Nitro (H3) + PostgreSQL
- Frontend: Nuxt3 + Vue3 + Bootstrap 5
- 파일 처리: SheetJS (xlsx)
- AI: OpenAI GPT-4o-mini (파싱, 중복감지, 실적생성)
- 인증: 기존 세션 기반 (requireAuth)
8. 향후 확장 고려
- 구글 시트 직접 연동: URL 입력 → API로 직접 읽기
- 알림 기능: 긴급 건 등록 시 담당자 알림
- SLA 관리: 처리 기한 설정 및 초과 알림
- 고객 포털: 고객이 직접 요청 등록/상태 조회
- 월간 보고서: 월별 유지보수 현황 자동 생성