diff --git a/ideas/250909_attendance_management_system.md b/ideas/250909_attendance_management_system.md new file mode 100644 index 0000000..91681de --- /dev/null +++ b/ideas/250909_attendance_management_system.md @@ -0,0 +1,278 @@ +# 자연어 기반 근태관리 시스템 - 로빙 에이전트 + +## 작성일: 2025-09-09 +## 작성자: Claude (51123 서버 관리자) + +## 1. 개요 +플렉스 등 유료 HR 솔루션의 근태관리 기능(월 7,700원/인)을 로빙이 슬랙 자연어 대화로 대체. +"출근했어", "내일 오후 반차" 같은 일상 대화로 근태를 관리하고 구글 워크스페이스와 자동 연동. + +## 2. 시장 기회 및 가치 제안 + +### 2.1 타겟 시장 +- 10-50명 규모 스타트업 +- 구글 워크스페이스 + 슬랙 사용 기업 +- 플렉스/네이버웍스 전환 검토 중인 기업 + +### 2.2 비용 절감 효과 +``` +현재: 플렉스 베이직(7,700원) + 전자계약(1,000원) = 8,700원/인/월 +30명 스타트업: 261,000원/월 = 3,132,000원/년 + +로빙 대체 시: 0원 (또는 저렴한 구독료) +연간 절감액: 300만원 이상 +``` + +## 3. 핵심 기능 + +### 3.1 자연어 출퇴근 관리 +```slack +직원: 출근! +로빙: 🏢 오늘도 화이팅! 09:03 출근 기록했어요. + +직원: 퇴근할게 +로빙: 🏠 수고하셨어요! 18:32 퇴근 (근무시간: 9시간 29분) +``` + +### 3.2 휴가/연차 신청 +```slack +직원: 내일 오후 반차 쓸게, 병원 가야해 +로빙: 🏥 10월 15일 오후 반차 신청했어요. + └ 팀장님께 알림 전송 + └ 구글 캘린더 등록 + └ 잔여 연차: 10.5일 + +팀장: 승인 +로빙: ✅ 반차 승인 완료! 병원 다녀오세요. +``` + +### 3.3 지능형 컨텍스트 이해 +- "아파서 못 가" → 병가 자동 분류 +- "재택할게" → 재택근무 모드 설정 +- "오늘 외근" → 외근 상태 + 위치 기록 옵션 + +## 4. 기술 아키텍처 + +### 4.1 시스템 구성도 +``` +┌─────────────┐ ┌──────────────┐ ┌───────────────────┐ +│ Slack │────▶│ rb8001 │────▶│ skill-attendance │ +└─────────────┘ └──────────────┘ └───────────────────┘ + │ + ┌──────────────────────────────┼──────────────────┐ + │ │ │ + ┌───────▼────────┐ ┌──────────▼────────┐ ┌─────▼──────┐ + │ PostgreSQL │ │ Google Calendar │ │ Slack │ + │ (근태 기록) │ │ API │ │ Status │ + └────────────────┘ └───────────────────┘ └────────────┘ +``` + +### 4.2 자연어 처리 파이프라인 +```python +# 예시 처리 로직 +def process_attendance_message(text): + # 1. 의도 분류 + intent = classify_intent(text) # 'check_in', 'leave_request', etc. + + # 2. 엔티티 추출 + entities = extract_entities(text) # 날짜, 시간, 사유 등 + + # 3. 컨텍스트 보강 + context = enrich_context(user_id, entities) # 팀 정보, 잔여 연차 등 + + # 4. 액션 실행 + return execute_action(intent, entities, context) +``` + +## 5. 데이터베이스 설계 + +### 5.1 PostgreSQL 스키마 +```sql +-- 근태 기록 +CREATE TABLE attendance_records ( + id UUID PRIMARY KEY, + user_id UUID REFERENCES users(id), + date DATE NOT NULL, + check_in_time TIMESTAMP, + check_out_time TIMESTAMP, + work_type VARCHAR(20), -- 'office', 'remote', 'field' + status VARCHAR(20), -- 'normal', 'late', 'early_leave' + location JSONB, -- GPS 좌표 (옵션) + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +-- 휴가 신청 +CREATE TABLE leave_requests ( + id UUID PRIMARY KEY, + user_id UUID REFERENCES users(id), + leave_type VARCHAR(20), -- 'annual', 'sick', 'personal' + start_date DATE, + end_date DATE, + half_day BOOLEAN DEFAULT FALSE, + half_day_type VARCHAR(10), -- 'morning', 'afternoon' + reason TEXT, + status VARCHAR(20), -- 'pending', 'approved', 'rejected' + approver_id UUID, + approved_at TIMESTAMP, + google_calendar_event_id VARCHAR(255) +); + +-- 연차 잔여 +CREATE TABLE leave_balances ( + user_id UUID PRIMARY KEY REFERENCES users(id), + total_days DECIMAL(3,1), + used_days DECIMAL(3,1), + remaining_days DECIMAL(3,1), + year INTEGER, + updated_at TIMESTAMP +); +``` + +## 6. 구글 워크스페이스 연동 + +### 6.1 Calendar API 연동 +```python +async def sync_to_google_calendar(leave_request): + event = { + 'summary': f"{leave_request.user_name} - {leave_request.leave_type}", + 'start': {'date': leave_request.start_date}, + 'end': {'date': leave_request.end_date}, + 'description': leave_request.reason, + 'attendees': [{'email': leave_request.user_email}] + } + + result = await calendar_service.events().insert( + calendarId='team@company.com', + body=event + ).execute() + + return result['id'] +``` + +### 6.2 Gmail 월간 리포트 +- 매월 1일 자동 발송 +- PDF 첨부 (근태 요약, 연차 사용 내역) +- 관리자/HR 담당자 CC + +## 7. 슬랙 인터페이스 + +### 7.1 실시간 상태 감지 +```python +@slack_events_adapter.on("presence_change") +async def handle_presence_change(event): + if event['presence'] == 'active' and is_first_active_today(event['user']): + await auto_check_in(event['user']) +``` + +### 7.2 대화형 휴가 신청 +```slack +직원: 다음주 월화 연차 쓸 예정이야 +로빙: 📅 10월 21일(월) ~ 22일(화) 연차 신청하시는 거죠? + + 사유를 입력해주세요 (선택사항): + [개인 사유] [가족 행사] [여행] [직접 입력] + +직원: 가족 행사 +로빙: 신청 내용: + • 기간: 10/21(월) ~ 10/22(화) [2일] + • 사유: 가족 행사 + • 잔여 연차: 12일 → 10일 + + [✅ 신청] [❌ 취소] +``` + +## 8. AI 기반 고급 기능 + +### 8.1 패턴 분석 및 이상 감지 +- 비정상적 근태 패턴 감지 (번아웃 위험) +- 팀 단위 휴가 집중도 분석 +- 연차 소진율 예측 + +### 8.2 스마트 알림 +```python +# 연차 만료 예정 알림 +if remaining_leave_days > 0 and days_until_expiry < 60: + await send_reminder( + f"연차가 {days_until_expiry}일 후 만료됩니다. " + f"남은 연차: {remaining_leave_days}일" + ) +``` + +### 8.3 인수인계 자동화 +- 휴가 신청 시 진행 중 업무 자동 체크 +- 대체 담당자 추천 +- 인수인계 체크리스트 생성 + +## 9. 보안 및 컴플라이언스 + +### 9.1 개인정보 보호 +- 위치 정보 암호화 저장 +- 최소 권한 원칙 (본인/팀장/HR만 조회) +- 근태 기록 5년 보관 (근로기준법) + +### 9.2 감사 로그 +```json +{ + "action": "leave_approved", + "approver": "team_lead_uuid", + "target": "employee_uuid", + "timestamp": "2025-09-09T10:00:00Z", + "details": { + "leave_type": "annual", + "days": 2 + } +} +``` + +## 10. 차별화 전략 + +### 10.1 자연어 처리 우위 +- 한국어 근태 용어 특화 학습 +- 맥락 기반 의도 파악 +- 오타/축약어 자동 인식 + +### 10.2 팀 문화 적응 +- 팀별 근무 패턴 학습 +- 유연근무제 자동 적응 +- 커스텀 휴가 정책 설정 + +### 10.3 통합 대시보드 +```slack +관리자: @로빙 이번 달 팀 근태 요약 +로빙: 📊 10월 개발팀 근태 현황 + + 출근율: 95.2% + 평균 근무시간: 8시간 24분 + 연차 사용: 12일 (4명) + 재택 근무: 8일 (3명) + + [상세 리포트] [개인별 조회] +``` + +## 11. 구현 로드맵 + +### Phase 1 (2주): 기본 출퇴근 +- 슬랙 명령어 기반 출퇴근 +- PostgreSQL 기록 저장 +- 일일 근태 조회 + +### Phase 2 (2주): 휴가 시스템 +- 연차/반차 신청 플로우 +- 승인 프로세스 +- 잔여 연차 관리 + +### Phase 3 (1주): 구글 연동 +- Calendar API 연동 +- 자동 일정 등록 +- Gmail 리포트 + +### Phase 4 (1주): AI 고도화 +- 자연어 처리 개선 +- 패턴 분석 +- 스마트 알림 + +## 12. 예상 성과 +- 개발 투자: 6주 (1명) +- 목표 고객: 100개 스타트업 +- 월 절감액: 30명 기준 26만원 +- 연간 시장 규모: 3.1억원 \ No newline at end of file