# ECOUNT 출근 점검 / 근태 대응 / 근태 조정 매뉴얼
## 목적 ECOUNT 출/퇴근기록부와 Google Calendar(BRYZE 캘린더)를 함께 확인하여 전 직원의 당일 출근 상태를 분류하고, 필요 시 지정 인원에게 Google Chat 알림을 발송하거나 ECOUNT에서 출근 조정을 수행한다.
—
## 사용 도구 - Python + Playwright: ECOUNT 웹 접속, 출근기록 확인, 근태 조정 - Google Calendar: BRYZE 캘린더에서 반차 일정 확인 - gog: Google Chat 메시지 발송 - 도두위키 조직도: 이름/직급 확인 보조
—
## 접속 정보 - ECOUNT 로그인 URL: `https://login.ecount.com/Login/` - 회사코드: `****` - ID: `****` - PW: `**********`
민감정보가 포함되어 있으므로 파일 접근 권한 관리에 주의한다.
—
## 1. ECOUNT 접속 1. `https://login.ecount.com/Login/` 접속 2. 회사코드 `****` 입력 3. ID `****` 입력 4. PW `**********` 입력 5. 로그인
### 로그인 직후 유의사항 - 로그인 직후 `새로운 기기 로그인 알림` 팝업이 뜰 수 있다. - 자동화가 멈추지 않도록 먼저 팝업을 확인하고, 필요 시 `등록안함` 버튼(role=button 기준) 으로 진행한다. - `등록안함` 텍스트가 중복으로 잡힐 수 있으므로 단순 `text=등록안함` 클릭보다 버튼 역할 기반 선택을 우선한다. - 로그인 직후 잠깐은 로그인 화면처럼 보여도 실제로는 ERP 세션이 열린 상태일 수 있다. 현재 URL이 `view/erp` 또는 `app.login/erp_login` 계열인지 확인한 뒤 다음 단계로 진행한다. - 메뉴가 일반 링크 클릭처럼 바로 동작하지 않을 수 있으므로, 자동화 시 내부 해시 경로(`#menuType=…`) 기반 진입도 고려한다.
—
## 2. 근태 확인
### ECOUNT 확인 경로 1. `그룹웨어 → 업무관리 → 출/퇴근 → 출/퇴근기록부(ID)` 이동 2. 사용자 옆에 `전체` 탭 클릭 3. 해당 월에서 오늘 날짜 클릭 4. 각 직원의 출근 시간 확인 5. 아래 인원은 제외
### 화면 조작 유의사항 - 기본 탭이 `사용자`로 열릴 수 있으므로 반드시 `전체` 탭으로 전환했는지 확인한다. - 날짜를 눌러도 바로 상세 표가 안 뜰 수 있으므로 로딩 대기 후 재확인한다. - 자동화 시 메뉴 클릭 실패를 대비해 내부 해시 경로 진입을 준비한다. - 실제 확인된 출/퇴근기록부 직접 진입 해시:
- 메뉴 텍스트는 보여도 요소가 숨김 상태일 수 있으므로, 단순 클릭 timeout이 나면 직접 해시 진입 → `전체` 전환 → 오늘 날짜 DOM 클릭 순서로 우회한다. - 오늘 날짜 셀은 `.calItem.today` 가 중복되거나 숨김 상태일 수 있다. 이 경우 보이는 요소만 골라 DOM click 하는 방식이 안정적이다.
—
## 3. 캘린더 확인 기준 BRYZE 캘린더를 확인하여 당일 `오전반반차`, `오전 반차` 여부를 함께 본다.
### 반차 기준 - 오전반반차: 11시 30분 출근 인정 - 오전 반차: 2시 30분 출근 인정
### 근태이슈자 인정 범위 - BRYZE 캘린더에 `오전 반차` 또는 `오전반반차`로 표기된 사람은 `근태이슈자`로 본다. - BRYZE 캘린더에 `연차`, `연차(X)` 등 당일 정상 출근 예외 사유가 확인되는 사람도 `근태이슈자`로 본다. - `오후 반차`는 출근 점검 기준상 `근태이슈자`로 처리하지 않는다.
—
## 4. 분류 기준 전 인원을 아래 4개 그룹으로 분류한다.
### 1) 지각자 - 캘린더 기록이 없음 - ECOUNT 출근 시간이 오전 9시 30분 이후임
### 2) 근태이슈자 - BRYZE 캘린더에 `오전 반차` 또는 `오전반반차`가 표기되어 있음 - BRYZE 캘린더에 `연차`, `연차(X)` 등 당일 정상 출근 예외 사유가 표기되어 있음
### 3) 출근누락자 - 캘린더에 근태 이슈가 없음 - ECOUNT에 출근 체크가 되어 있지 않음
### 4) 정상출근자 - 위 3개 조건에 해당하지 않고 정상적으로 출근 체크가 확인되는 사람
—
## 5. 보고 방식 1. 전 직원을 `지각자 / 근태이슈자 / 출근누락자 / 정상출근자`로 분류한다. 2. 현재 메신저에 아래 항목을 모두 보고한다.
3. 각 인원은 가능하면 이름과 출근시간까지 함께 적는다.
—
## 6. 근태 대응 분류된 인원 목록 중 사용자가 지정한 사람에게만 Google Chat 메시지를 발송한다.
### 발송 대상 - `지각자` - `출근누락자`
### 발송 제외 - `근태이슈자` - `정상출근자` - 사용자가 지정하지 않은 사람
### 이름/직급 확인 - 이름/직급을 찾기 어려울 때에는 도두위키 조직도 페이지를 참조한다. - 주소: `http://192.168.0.14:8080/doku.php?id=company:org`
### 발송 도구 - 실제 발송은 `gog`를 사용한다.
### 지각자 문구 ```text (이름) (직급) 님 송란 부대표님께서 오늘 지각으로 확인되었다고 전달 주셨습니다. 출퇴근 시간 관리에 유의해주시고, 다음부터는 동일한 일이 반복되지 않도록 잘 챙겨주시기 바랍니다. ```
### 출근누락자 문구 ```text (이름) (직급) 송란 부대표님께서 오늘 출근 버튼이 아직 확인되지 않았다고 하셔서 전달드립니다. 확인 후 출근 등록 부탁드리며, 다음부터는 출근 관리가 누락되지 않도록 잘 챙겨주시면 감사하겠습니다 ```
—
## 7. 근태 조정 사용자가 지정한 사람에게만 적용하는 작업이다.
### 조정 경로 1. ECOUNT 로그인 2. `그룹웨어 → 업무관리 → 출/퇴근 → 출/퇴근기록부(ID)` 이동 3. 사용자 옆에 `전체` 탭 클릭 4. 해당 월에서 조정이 필요한 일자 클릭 5. 조정 대상자의 ID 클릭 6. `[출근 00/00 오전 00:00]` 항목 클릭 7. 사유란에 아래 문구 입력
8. `저장` 버튼 클릭 9. 처리 완료 후 현재 메신저에 결과 보고
### 근태 조정 보고 방식 - 조정 대상자 이름 - 조정한 날짜 - 처리 완료 여부 - 필요 시 비고
### 근태 조정 실패사례 / 우회 방법 실제 자동화 시행착오를 기준으로 아래 상황을 유의한다.
1. `전체` 탭 클릭 실패
2. `전체` 탭으로 전환되지 않고 `사용자` 팝업으로 빠지는 문제
3. 오늘 날짜 클릭 후 상세표가 늦게 뜨거나 안 뜨는 문제
4. 로그인 후 화면이 다시 로그인 페이지처럼 보이거나 세션이 꼬이는 문제
5. 대상자 행은 찾았지만 `[출근 00/00 오전 00:00]` 클릭이 안 되는 문제
6. 사유 입력은 됐는데 `저장` 버튼을 못 찾는 문제
7. 여러 명을 한 번에 처리하다가 두 번째 대상부터 꼬이는 문제
8. 근태조정 완료 여부를 착각할 위험
9. 로그인은 되었는데 원하는 화면 대신 메인/교육/위젯 화면으로 보이는 문제
10. 출/퇴근기록부(ID) 링크는 찾았지만 보이지 않아 클릭이 안 되는 문제
11. 표는 떴지만 Google Chat에서 중간 실행 로그가 너무 많이 보여 결과가 묻히는 문제
—
## 8. 실제 작업 절차 1. Python + Playwright로 ECOUNT 로그인 2. 로그인 직후 팝업 확인 및 처리 3. 출/퇴근기록부(ID)로 이동 4. `전체` 탭 전환 확인 5. 오늘 날짜 클릭 후 직원별 출근 시간 수집 6. 제외 인원 제거 7. BRYZE 캘린더에서 당일 `오전 반차` / `오전반반차` 일정 확인 8. 전 인원을 아래로 분류
9. 현재 메신저에 전체 결과 보고 10. 사용자가 지정한 사람에게만 Google Chat 발송 11. 사용자가 별도 지시한 경우에만 ECOUNT에서 근태 조정 수행 12. 조정 완료 시 현재 메신저에 결과 보고
—
## 9. 구현 시 체크포인트 - 날짜는 반드시 오늘 기준으로 처리하되, 근태 조정은 사용자가 지정한 날짜 기준으로 처리한다. - 로그인 후 `새로운 기기 로그인 알림` 팝업이 뜨는지 먼저 확인하고 자동화가 멈추지 않도록 선처리한다. - ECOUNT 메뉴가 일반 클릭으로 바로 안 열릴 수 있으므로 자동화 시 내부 해시(`#menuType=…`) 방식 진입도 준비한다. - `사용자` 탭이 기본으로 열릴 수 있으므로 반드시 `전체` 탭으로 전환했는지 확인한다. - 날짜를 눌러도 바로 상세 표가 안 뜨면 로딩 대기 후 재확인한다. - 캘린더 일정 제목이 사람 이름과 정확히 매칭되는지 확인한다. - 이름/직급이 불명확하면 도두위키 조직도 페이지(`company:org`)로 보완 확인한다. - 동명이인 가능성이 있으면 부서/직급 정보로 교차검증한다. - ECOUNT에 출근 시간이 없더라도 캘린더에 `오전 반차`, `오전반반차`, `연차`, `연차(X)`가 있으면 `출근누락자`가 아니라 `근태이슈자`로 본다. - `오전 반차`, `오전반반차`, `연차`, `연차(X)` 대상자는 일반 지각자/출근누락자로 오분류하지 않도록 주의한다. - `오후 반차`는 본 매뉴얼 기준상 근태이슈자로 보지 않으므로 별도 오분류에 주의한다. - Google Chat 메시지는 반드시 사용자 지정 대상에게만 발송한다. - 근태 조정은 반드시 사용자 지시가 있을 때만 수행한다. - 근태 조정 사유 문구는 `송란 부대표 컴펌하에 출근조정 지각 제외`로 통일한다. - 근태 조정 시에는 `탭 전환 성공 → 날짜 상세표 확인 → 대상자 선택 → 출근 항목 클릭 → 사유 입력 → 저장 → 반영 확인` 순서를 체크리스트처럼 확인한다. - 여러 명을 한 번에 처리하다가 꼬일 수 있으므로, 성공률이 낮으면 한 명씩 단독 처리로 전환한다. - 저장 버튼 클릭 시도만으로 완료 처리하지 말고, 실제 반영 여부를 다시 확인한 뒤 보고한다. - 메시지 발송 전과 근태 조정 전에는 최종 대상자를 한 번 더 검토한다.
—
## 10. 권장 산출물 - 내부 보고용 표
- 발송 로그
- 근태 조정 로그
—
## 11. 후속 자동화 아이디어 - Playwright + Calendar API + gog를 하나의 Python 스크립트로 통합 - 이름/직급 매핑 테이블 별도 관리 - 보고용 Markdown 자동 생성 - 발송 전 승인 단계 추가 - 근태 조정 결과를 별도 로그 파일로 누적 저장