대시보드

0명
준비
-
업무 유형:
일반일반업무
프로젝트프로젝트
미팅미팅
현장현장/외근
연차HR 자동 (수정은 HR앱)
★중요중요/강조
🎨
두구루 플래너 디자인 시스템 & 개발 가이드
버전 히스토리
v4.0.9로그인 정상화 — 로그인 시 '사번 단독'을 먼저 시도해 매 로그인마다 GoTrue 인증실패 1회가 강제되던 결함 시정. 자격 후보 순서를 실제 계정 규격에 맞게 교정. 입력 방식·비밀번호·DB·RLS·권한 무변경. §6 verifyOtp 매직링크 전환·5회30분 잠금은 전사 인증 트랙 별도.
v4.0.8모바일 저장 정상화 — 종료 직전(beacon/keepalive) 저장 경로가 publishable(anon) 키만 첨부해 wp_* 쓰기가 RLS에서 거부되던 결함 시정(v3.0r5 회귀). 사용자 JWT를 Bearer로 첨부. 부수: persistToSupabase가 쓰기 오류를 console.warn만 하고 '✓ 저장됨'을 표시하던 은폐 제거 — 실패 시 dirty 보존 + 재로그인 안내. 클라이언트 한정, DB·RLS·GRANT·auth.users 무수정.
v3.0r5모바일 저장 사라짐 버그 수정 — 모바일에서 입력 후 새로고침/앱전환 시 저장된 것처럼 보이지만 실제로는 사라지던 버그 해소. 원인: persistToSupabase가 await 없이 호출되어 fetch가 페이지 종료와 함께 abort됨. 해소: ① 'UI ✓ 자동저장됨' 표시를 Supabase 응답 후로 이동(저장 중에는 ⏳ 표시), ② pagehide/visibilitychange='hidden' 시점에 navigator.sendBeacon으로 wp_tasks REST 직접 INSERT(브라우저가 페이지 종료 후에도 전송 보장), ③ 기존 항목 UPDATE는 fetch keepalive로 강제 전송. 디자인·콘텐츠 변경 0건. DB 변경 0건.
v3.0r4전사 열람 모델 — 모든 직원이 모든 직원의 일정을 볼 수 있게 변경. 쓰기(추가/수정/삭제)는 본인 + 관리자만 가능. 다른 직원 셀에는 [+ 추가] 버튼 숨김, 클릭 시 편집 패널이 열리되 read-only 모드(입력 영역 숨김 + 🔒 안내 배너 노출). 헤더 라벨도 "전사 열람 · 본인만 편집"으로 변경. DB 변경 0건 (이미 anon SELECT 권한 부여 상태).
v3.0r3복구함 노출 강화 — 상단 도구 바에 [🔄 복구함] 독립 버튼(빨간 카운트 배지), 첫 진입 시 자동 배너(2주 활성, 24h dismiss). 0건일 때 버튼·배너 자동 숨김. 등급 배지 (A 확실 / B 가능 / C 의도가능) + A등급 재해석 안내문 ("같은 본문 반복 = 저장 안 된 줄 알고 다시 입력한 흔적, 거의 확정 유실"). RPC fn_wp_v3_recovered_count 사용. hotfix1: loadFromSupabase await 처리 + setConnStatus(online)에서 카운트 자동 갱신(SB_ONLINE race 해소). hotfix2: .recover-box에 position:relative+z-index:1 추가 — .hm-bg(absolute, backdrop-filter:blur)가 모달 박스를 가려 컨텐츠가 흐려보이던 v3.0 base 결함 해소
v3.0전면 재설계 — 직원별 데이터 격리 + 자동 안전망 — 직원별 4월 사고 대비 12개 테이블 격리(wp_tasks_<slug>), DB 트리거 자동 history·휴지통, 빈 본문 INSERT 차단(CHECK), 173건 4월 유실 본문 검토 복구함 신설, 관리자(김종현·백혜진·현준규) 통합 뷰 wp_admin_all_*, STORE_KEY v40 갱신
v2.7휴지통 UI 신설 — 삭제된 task를 30일간 휴지통에 보관, 사용자 메뉴에서 복원·영구삭제 가능. 본인 항목만 표시(관리자는 전체). 영구삭제는 더블 확인. STORE_KEY v36 갱신
v2.6업무 유형 "연차" 제거 (HR SSOT 일원화) — 직접 등록 불가, HR앱에서만 신청. 기존 연차 task 53건 자동 정리(공휴일·HR중복), 개인메모 4건 일반 type으로 변환 보존
v2.5HR 연차 자동 표시 + 월간 뷰 버그픽스 — 두구루 HR 앱의 승인된 연차/반차/병가를 셀에 자동 표시(파란 좌측보더), 노동절 명칭 정정, 개인↔팀 월간 전환 시 렌더 깨짐 수정
v2.4토/일/공휴일 색상 구분 — 토(파랑)/일(빨강)/공휴일(빨강+휴일명 표시), 2026 대한민국 공휴일 + 대체공휴일 보강
v2.3주간 7일 표시 (Google Calendar 방식) — 일~토 7일 무조건 표시, 월 경계 무시. 다른 달 날짜는 흐리게 표시. STORE_KEY v32 갱신
v2.2캐시 무효화 강제 적용 — no-cache 헤더, STORE_KEY v31 갱신(localStorage 강제 초기화), Realtime 채널 v31
v2.1데이터 유실 핫픽스 — 빈 배열 덮어쓰기 차단, 변경 셀만 저장(dirty tracking), 다중 세션 안전
v2.0개인 뷰 일간·주간·월간 연동 (보기×구분 6가지 조합), VIEW_MODE/SCOPE 독립 상태 관리
v5.2상단 토글 재설계: 보기[일간·주간·월간] + 구분[개인·팀별] — 레이아웃 고정
v5.1스타일 버튼 삭제, 사용법 전면 개편(개인 뷰 포함), 보기/주간 토글 시인성 개선
v5.0개인 월간 스케줄 뷰 신설 (직원별 캘린더·업무 통계·유형별 카운트·관리자 fallback)
v4.0요청사항 삭제 권한 확장(모든 로그인 사용자), 삭제 확인 모달 추가(타인 요청 경고 표시)
v4.0요청사항 삭제 권한 확장(모든 로그인 사용자), 삭제 확인 모달 추가(타인 요청 경고 표시)
v1.1좌측 패널 3섹션(OKR·팀업무·요청사항), 팀 업무 시스템, 사용법·스타일 가이드 전면 개편
v1.0로그인/로그아웃, 권한관리, 요청사항, 활동로그, 실시간협업, 완료유형, 엑셀다운로드
v9Supabase 연동, OKR 팀목표, 자동 새로고침
v8기업 블루 디자인, OKR 패널, 주간/월간/일자별 뷰, 업무 유형 7종
배포 & 서버 정보
NET
Netlify
  • : DDUGURU
  • 계정: duguruasia@gmail.com
  • URL: duguru-workplanner.netlify.app
  • 파일명: index.html (PWA — sw.js, manifest.json, icon 동반)
  • 업데이트: Deploys → 파일 드래그 앤 드롭
  • SB
    Supabase
  • Project ID: jdmzgsyqsozjzakxppls
  • 리전: Northeast Asia
  • 테이블:
    wp_tasks_<slug> × 12 (직원별),
    wp_admin_all_tasks/trash (관리자 뷰),
    wp_okr, wp_requests, wp_log,
    wp_holidays, wp_trash_<slug>
  • 플랜: Free tier
  • 파일 수정 원칙
  • CONTENT ZONE (▼▼▼ ~ ▲▲▲) 안의 데이터만 수정하세요
  • MEMBERS 배열: 팀원 추가/변경 (name, empId, rank, team, c, init)
  • TASK_TYPES: 업무 유형 추가 시 CSS 변수도 함께 추가
  • STORE_KEY: 버전 변경 시 키 업데이트 (기존 localStorage 초기화)
  • ADMINS 배열: 관리자 이름 목록
  • 색상 팔레트 — CSS 변수
    업무 유형 색상
    --c-gen 일반
    --c-proj 프로젝트
    --c-meet 미팅
    --c-field 현장
    --c-leave 연차
    --c-key 중요
    #065F46 완료
    시스템 색상
    --blue 주요 액션
    #EF4444 요청사항
    #6D28D9 OKR
    #3ECF8E Supabase
    팀 컬러 (MEMBERS.c 값)
    기획팀#2e7d20
    디자인팀#0060b0
    마케팅팀#b86000
    지원팀#6a2eaa
    연출팀(EET)#b02020
    📋 팀 업무 추가
    팀 전체가 공유할 업무·공지를 입력하세요.
    🔴 요청 추가
    📋활동 로그
    시간
    이름
    액션
    내용
    🗑️휴지통 삭제 후 30일 보관
    로딩 중...
    🔄복구함 — 4월 유실 본문
    로딩 중...
    🔴나에게 온 요청
    TODAY
    다른 직원의 일정입니다. 보기만 가능합니다 (수정·삭제는 본인 또는 관리자).
    등록된 업무
    업무 추가
    프로젝트 연결 선택
    유형 선택
    여러 줄 입력 → 각 줄이 별도 업무로 추가됨
    🔴 요청사항
    ▣ 프로젝트 집계
    불러오는 중…
    연도
    연간 현황
    월간 현황
    결제 현황
    담당자별 워크로드
    연도
    미결제 프로젝트
    프로젝트거래처PO합계금입금액미결제결제율시작일
    가동 대기 큐CRM이 등록한 draft 중 거래처가 연결된 건 — 골라서 가동(active)하세요
    프로젝트 문의하기 CRM 유입 문의 원장 — 읽기 전용. [프로젝트로 전환]을 눌러야 프로젝트가 생성됩니다
    출처
    2026년 5월 기준
    진행/대기 상태는 항상 표시
    연도
    기간 ~
    MEGA 프로젝트
    MEGA 프로젝트· 계약·견적 1억 이상 자동 편입 · 종료건·타 연도 포함 · 아래 단계별 목록에도 표시
    프로젝트거래처단계상태PO/PM합계금미결제마감
    진행 단계
    문의
    프로젝트거래처단계상태PO/PM합계금미결제마감
    제안
    프로젝트거래처단계상태PO/PM합계금미결제마감
    계약
    프로젝트거래처단계상태PO/PM합계금미결제마감
    시공
    프로젝트거래처단계상태PO/PM합계금미결제마감
    완결· 정산·하자·아카이브
    프로젝트거래처단계상태PO/PM합계금미결제마감
    진행 외
    보류· 진행하지 않는 프로젝트
    프로젝트거래처단계상태PO/PM합계금미결제마감
    취소· 사유 기록 필수
    프로젝트거래처단계상태PO/PM합계금미결제마감
    완료· 종결된 프로젝트
    프로젝트거래처단계상태PO/PM합계금미결제마감
    * 대시보드 기간 필터 공유
    담당자별 워크로드 v4.7.0 * SSOT: ops_projects (is_deleted=false) · 누계는 종료 포함 전건 · 목록은 기본 진행만
    담당자별 진행/완료/미수관여 역할(CD/PO/PM/디자이너) 기준 · 미수는 회계 연결분만 점등
    새 요청사항 등록
    받은 요청사항
    보낸 요청사항
    채팅방
    왼쪽에서 채팅방을 선택하거나 새로 만드세요
    자료 업로드
    work planner 열기 ↗
    인조조경연출 시공/설치 납품/발송 공휴일 · 일정 클릭 시 연결된 프로젝트로 이동
    DUGURU Work Flow 사용법
    v4.5.3 | 5단계 정합 + 월경계 해소 + 빠른등록 · 대외비 내부 운영 시스템
    1. 대시보드
    연도 필터 — 상단 연도 버튼을 클릭하면 해당 연도 프로젝트만 표시됩니다. 기본값은 올해(2026)입니다.
    KPI 카드 — 전체/진행/대기/완료 건수와 총 계약금·미결제이 실시간으로 집계됩니다.
    오늘 진행 프로젝트 — 오늘 날짜가 시작일~마감일 사이인 프로젝트가 자동 표시됩니다.
    담당자별 현황 (CD/PO/PM/DE) — 역할별 담당자 카드입니다. 이름 클릭 시 담당 프로젝트 목록이 펼쳐집니다. 프로젝트 클릭 시 상세 화면으로 이동합니다.
    월별 그리드 — 올해 선택 시 1~12월 현황이 그리드로 표시됩니다. 완료/진행/계약금을 월별로 확인할 수 있습니다.
    진행 중 프로젝트 — 최신순/마감순/금액순으로 정렬할 수 있습니다. 마감이 임박하면 주황, 지연되면 빨간색으로 강조됩니다.
    2. 프로젝트 관리
    새 프로젝트 등록 — 좌측 하단 "+ 새 프로젝트" 버튼 또는 우측 상단 버튼을 클릭합니다. 프로젝트명, 거래처, CD/PO/PM/DE, 시작일, 마감일, 금액을 입력합니다.
    프로젝트 상세 — 목록에서 프로젝트를 클릭하면 전체 화면으로 전환됩니다. 상단에 타임라인/결제/할일 진행률이 바로 표시됩니다.
    상태 변경 — 상세 화면 우측 상단 버튼으로 진행/완료/보류를 변경합니다.
    결제 탭 — 착결제·중도금·잔금 입금 내역을 기록합니다. 입력하면 결제율이 자동 계산됩니다.
    대화 탭 — 프로젝트별 메시지를 기록합니다. 유형: 일반/공지/이슈/요청으로 분류됩니다.
    할일 탭 — 프로젝트 내 세부 할일을 등록하고 담당자를 지정합니다. 체크하면 완료 처리됩니다.
    하위 프로젝트 — 메인 프로젝트 아래 세부 현장/단계를 하위로 등록할 수 있습니다.
    검색·정렬·필터 — 전체 프로젝트 탭에서 검색창, 상태 필터, 최근순/마감순/금액순 정렬이 가능합니다.
    3. 결제 현황
    연도 필터 — 연도별로 결제 현황을 분리해서 확인합니다. 2026년 선택 시 월별 그리드가 추가로 표시됩니다.
    정렬 — 미결제순(기본)/금액순/최신순으로 전환할 수 있습니다.
    결제율 — 전체 계약금 대비 입금액 비율이 상단 KPI와 각 행의 바 차트로 표시됩니다.
    미결제 관리 — 미결제순 정렬 시 금액이 큰 미결제 프로젝트부터 표시됩니다. 행 클릭 시 해당 프로젝트 결제 탭으로 바로 이동합니다.
    4. 팀별 현황
    팀 클릭 — 팀 헤더를 클릭하면 팀원 목록이 펼쳐집니다.
    팀원 클릭 — 각 팀원 행을 클릭하면 담당 프로젝트 목록이 펼쳐집니다. 오늘 진행 중인 프로젝트는 강조 표시됩니다.
    상태 필터 — 상단 드롭다운으로 진행/대기 상태만 필터링할 수 있습니다.
    역할 표시 — 각 프로젝트에서의 역할(PO/PM/DE/연출)이 함께 표시됩니다.
    5. 캘린더
    Google 연동 — 두구루 구글 캘린더 9개와 실시간 동기화됩니다. 탭 진입 시 자동 로그인을 시도합니다.
    일정 조회 — 월 선택 후 월간 그리드와 목록을 함께 확인합니다. 날짜 클릭 시 해당 날짜 일정만 필터링됩니다.
    일정 추가 — "+ 일정 추가" 버튼 → 제목/시간/장소/설명 입력 → 저장 확인 후 구글 캘린더에 즉시 반영됩니다.
    프로젝트 자동 생성 — 일정 추가 후 프로젝트 등록 폼이 자동으로 열립니다. 제목에 "프로젝트명 - 백혜진PO, 최정현PM" 형식으로 입력하면 PO/PM이 자동 추출됩니다. 내용 확인 후 저장하세요.
    일정 수정 — 목록에서 일정 클릭 → 편집 화면에서 수정 → 변경 내역 확인 후 저장합니다.
    일정 삭제 — 삭제 버튼 클릭 시 일정 정보 확인 모달이 표시됩니다. 영구 삭제이므로 주의하세요.
    6. 할일 · 요청사항
    내 할일 — 전체 프로젝트의 할일을 담당자별로 필터링해서 확인합니다. 완료 버튼으로 즉시 처리 가능합니다.
    요청사항 — 팀원 간 요청 사항을 등록합니다. 수신자, 프로젝트, 마감일을 지정할 수 있습니다. 받은/보낸 요청사항을 분리해서 확인합니다.
    7. 공지 시스템
    공지 배너 — 활성 공지가 있으면 상단 바에 자동 표시됩니다. 유형: 공지 / 주의 / 긴급 / 완료
    공지 등록 — 대표(김종현)만 접근 가능합니다. 배너 우측 "관리" 버튼을 클릭합니다.
    공지 닫기 — "닫기" 버튼을 클릭하면 해당 브라우저에서 숨겨집니다. 재접속 시 다시 표시됩니다.
    8. 접속자 현황
    접속자 버튼 — 상단 topbar의 초록 점 버튼을 클릭하면 현재 접속자 목록이 표시됩니다.
    접속 기준 — 최근 10분 이내 활동한 사용자를 온라인으로 표시합니다.
    자동 업데이트 — 3분마다 자동으로 접속자 현황이 갱신됩니다.
    9. 전체 로그 (대표 전용)
    접근 권한 — 대표(김종현)만 사이드바에서 " 전체 로그" 탭이 표시됩니다.
    기록 항목 — 로그인, 프로젝트 생성/수정/삭제, 상태 변경, 결제 기록, 요청사항 등록 등 모든 주요 행동이 자동으로 기록됩니다.
    필터 — 날짜 범위, 사용자, 행동 유형으로 필터링할 수 있습니다.
    다운로드 — 엑셀(.xlsx) 또는 CSV 형식으로 다운로드할 수 있습니다. 대외비 자료이므로 외부 유출에 주의하세요.
    단축키 · 팁
    프로젝트 상세에서 돌아가기 클릭 → 이전 화면 복귀
    사이드바 탭 클릭 → 상세 화면 자동 닫힘
    다크모드 토글 → 상단 버튼
    캘린더 새로고침 → "새로고침" 버튼
    프로젝트 검색 → 전체 프로젝트 탭 검색창
    연도 전환 → 대시보드/결제현황 연도 버튼
    기술 문서 · 개발 참조
    v2.1 기준 · 이 섹션은 앱 유지보수 시 참조용입니다
    데이터 클린업 시스템
    문제 배경
    구글 캘린더·Flow에서 가져온 데이터에 HTML 엔터티(&gt;, &lt;), 이모지(), 과잉 텍스트가 포함됩니다. esc() 함수가 이중 이스케이프하여 화면에 &gt;가 그대로 노출되는 문제가 발생했습니다.
    범용 클린업 함수 (6개)
    _decodeEntities(s)
    &gt;>, &lt;<, &amp;& 복원. 이중 인코딩도 처리합니다.
    적용: 모든 텍스트 필드, 메모, 결제메모
    _stripEmoji(s)
    등 장식용 이모지를 제거합니다. 일반 텍스트 이모지( 등)는 보존합니다.
    적용: 파싱 결과 필드 (현장명, 주소, 담당자 등)
    _cleanRaw(s)
    엔터티 디코딩 + 이모지 제거 + -> 변환 + 공백 정리를 한 번에 수행하는 통합 함수입니다.
    적용: _parseProjectNotes() 소스 텍스트, _formatMemo() 입력
    _cleanField(s, maxLen)
    _cleanRaw() + 과잉 캡처 방지 (품목/시공지시 등에서 잘라내기) + 최대 길이 제한. 파싱 시 필드에 메모 전체가 들어가는 문제를 방지합니다.
    필드별 제한: 현장명 80자, 현장주소 120자, 거래처 60자, 디자이너 30자
    _cleanName(s)
    이름 필드 전용. 한글 이름(2~5자)만 추출합니다. "홍길동 PO" → "홍길동"
    적용: PO, PM, CD 필드
    _cleanCrew(s)
    연출팀 전용. 담당자+전화번호까지만 남기고 이후 시공 지시사항을 잘라냅니다. 최대 200자.
    적용: crew 필드
    적용 포인트 (3곳)
    ① _parseProjectNotes() — 소스 텍스트를 _cleanRaw()로 사전 정리 후 파싱, 결과값에 필드별 클린업
    ② _formatMemo() — 메모 표시 전 _cleanRaw()로 엔터티 이중 이스케이프 방지
    ③ loadAll() 데이터 매핑 — DB에서 로드된 모든 프로젝트 필드에 클린업 패스 일괄 적용
    비프로젝트 분류 시스템
    is_project 컬럼 — DB ops_projects 테이블에 is_project boolean DEFAULT true 컬럼 필요. 없으면 코드에서 true로 기본 처리.
    NP_KEYWORDS 배열 — 비프로젝트 자동 추천 키워드 목록. 코드 내에서 수정 가능: 사무실 이전, 시험, 검사, 점검, 자동차, 회의, 미팅, 교육, 출장, 휴가, 연차, 개인, 점심, 저녁, 식사, 청소, 이사, 인사, 면접, 채용
    SHOW_NON_PROJECTS — 전역 토글 변수. 전체 프로젝트 탭 "비프로젝트 포함" 버튼으로 전환.
    toggleIsProject(pid) — 프로젝트 상세에서 개별 전환. DB 즉시 반영.
    분류 설정 모달 — 전체 프로젝트 탭 → "분류 설정" 버튼. 키워드 기반 일괄 마킹 + 체크박스 선택 후 적용.
    [프로젝트] 태그 — Google Calendar 제목에 [프로젝트] 붙이면 자동 분류. 태그 없으면 비프로젝트.
    워크플로우 단계 (WF_STAGES)
    기본 6단계 — 견적문의(inquiry) → 수주·계약(contract) → 기획·설계(design) → 착공 준비(prep) → 시공(construct) → 완료(complete)
    커스텀 단계 — 프로젝트별 "단계 추가" 버튼으로 생성. DB custom_stages JSON 컬럼에 저장.
    단계별 할일 템플릿TASK_TEMPLATES 객체에 단계별 기본 할일 목록 정의. 단계 전환 시 자동 추가 제안.
    완료 제외 로직workflow_stage==='complete'인 프로젝트는 대시보드·담당자별 현황에서 제외.
    "오늘 진행" 판단 로직
    조건start_datedue_date 둘 다 있어야만 "오늘 진행"으로 분류됩니다. 날짜 하나라도 없으면 제외.
    수식start_date <= 오늘 && due_date >= 오늘
    적용 위치 (5개소) — 대시보드 todayP, getWeekGroup(), todayCount/weekCount/nextWeekCount, 팀별 s.오늘, 팀별 isToday
    주의 — 기존에는 날짜 없는 프로젝트가 전부 "오늘 진행"에 포함되던 버그가 있었으며, 현재 수정 완료.
    내 할일 필터 로직
    완료 프로젝트 제외status==='완료' 또는 workflow_stage==='complete'인 프로젝트의 할일은 표시하지 않음.
    보류 프로젝트 제외status==='보류'인 프로젝트도 제외.
    퇴사자 제외 — 피드백 미작성 체크 시 STAFF.includes(name)으로 현재 재직자만 검사.
    섹션 구분 — 기한 초과 / 피드백 미작성 / 오늘 마감 / 이번 주 / 다음 주 이후 / 기한 없음
    메모 파싱 시스템 (_resolveProjectFields)
    3단계 우선순위 — ① Supabase 구조화 컬럼 → ② notes/memo 텍스트 파싱 → ③ 프로젝트명 파싱
    _parseProjectNotes(memo) — 정규식으로 PO/PM/CD/DE/연출/현장명/현장주소/담당자/연락처/거래처 추출.
    _parseProjectName(name) — 프로젝트명에서 "홍길동PO", "PO 홍길동" 패턴 추출.
    주의: 파싱 과잉 캡처 방지_cleanField()로 품목·시공지시·도착안내 등에서 자동 잘라내기. 추가 키워드가 필요하면 _cleanField() 내부 cutPatterns 배열에 추가.
    _formatMemo(text) — 파이프(|) 구분 + 번호(1.) 구분으로 key:value 행을 렌더링. 소스를 _cleanRaw()로 사전 정리 후 esc()로 안전하게 출력.
    관리자 · 권한 시스템
    ADMINS 배열['김종현','백혜진','현준규']. 관리자 추가/제거 시 이 배열 수정.
    isAdmin() — 현재 사용자가 ADMINS에 포함되는지 검사.
    canEditNote(authorName) — 관리자이거나 본인이 작성한 노트만 수정/삭제 가능.
    관리자 전용 기능 — 전체 로그 탭, 공지 관리, 타인 피드백 수정/삭제 (수정 로그 자동 기록)
    버그 수정 이력 (v2.1)
    ES5 호환성 수정 (모바일 크래시 방지)
    Optional chaining(?.) 제거 — saveFeedbackEdit()에서 ?.sender_name → 변수 분리 처리. iOS 13/구형 Android 크래시 방지.
    ES6 shorthand property 제거 — createNotice()에서 {title,content,type}{title:title,content:content,type:type}
    구조분해 할당 제거 — 월 파싱 로직에서 var[y,m]=var _ym=...;var y=_ym[0]; 패턴으로 통일.
    데이터 표시 수정
    히스토리 파일 중복 — _buildHistoryTimeline()에서 file_upload 이벤트가 HISTORY_NOTES 순회 + 별도 필터 순회로 2중 표시 → 중복 블록 삭제.
    &gt; 이중 이스케이프 — DB 원본 → _cleanRaw() → esc() 순서로 정리하여 화면에 &gt; 그대로 노출 방지.
    이모지 잔류 — 등 구글 캘린더 체크마크가 필드값에 혼입 → _stripEmoji()로 자동 제거.
    파싱 과잉 캡처 — 현장주소·연출 필드에 메모 전체가 들어가던 문제 → _cleanField()로 길이 제한 + cutPatterns 적용.
    외부 확인 필요 항목
    is_project 컬럼 SQLALTER TABLE ops_projects ADD COLUMN IF NOT EXISTS is_project boolean DEFAULT true; Supabase에서 실행 여부 확인.
    Supabase RLS — SB_KEY가 HTML에 노출. Row Level Security 정책 반드시 적용 필요.
    Supabase 테이블 참조
    ops_projects — 프로젝트 마스터. name, status, workflow_stage, is_project, contract_amount, start_date, end_date, pm_id, designer_id, po_name, pm_name, cd_name, crew, memo, notes, parent_id, custom_stages 등
    employees — 직원. name, team, position, auth_role, status(재직/퇴사)
    clients — 거래처. name, contact_name, contact_phone, contact_email
    ops_tasks — 할일(Task). project_id, title, assigned_to, status, due_date, employee_name
    acc_receivables — 미수금. project_id, contract_amt, paid_amt
    acc_payments_in — 입금 내역. project_id, amount, date, category, note
    ops_project_docs — 파일. project_id, title, file_url, file_type, file_size, uploaded_by
    chat_messages — 대화/히스토리/피드백. project_id, session_id, sender_type(note/feedback/alert), sender_name, content, note_type, is_active
    presence — 접속 현황. employee_id, employee_name, last_active
    ops_audit_logs — 활동 로그. user_name, module, action, detail
    notices — 공지. title, content, type(info/warning/urgent/success), is_active, created_by
    주요 전역 변수
    PROJECTS[] — 전체 프로젝트 배열. loadAll()에서 DB 로드 + 필드 매핑 + 클린업.
    TASKS[] — 할일(ops_tasks) 배열. status는 pending→대기, done→완료로 정규화.
    PAYMENTS[] — 입금 내역 배열.
    CHATS{pid:[]} — 프로젝트별 대화 메시지 맵.
    HISTORY_NOTES{pid:[]} — 프로젝트별 히스토리 노트 맵.
    STAFF[] — 재직 직원 이름 배열. loadEmployees()에서 로드.
    STAFF_MAP{name:obj, id:obj} — 이름/ID로 직원 검색용 맵.
    CLIENTS_MAP{id:obj} — 거래처 ID → 거래처 객체 맵.
    ONLINE_USERS{name:{status,mins}} — 접속 현황 맵.
    DASH_YEAR, DASH_MONTH, DASH_MONTH_END — 대시보드 기간 필터 상태.
    PAY_YEAR, PROJ_YEAR — 결제/프로젝트 탭 연도 필터.
    SHOW_NON_PROJECTS — 비프로젝트 표시 토글 (기본 false).
    isLocal — 항상 false 유지. true로 변경 금지 (DB 연결 끊김).
    currentUser — 현재 선택된 사용자. 기본 '김종현'.
    currentPid — 현재 열린 프로젝트 ID. null이면 목록 화면.
    캘린더 (work planner 일정)
    데이터 SSOT — Master DB의 wp_admin_all_tasks · wp_leaves_view · wp_holidays · wp_members 4개 테이블 (읽기 전용).
    월별 그리드 — 7열×6주, 각 칸 = 하루. 칸 안에 휴가자, 근무 인원수, 할일 건수 표시.
    그날 상세 — 칸 클릭 → 모달에 그날 전 직원 일정(팀별 그룹, 오전/오후, 휴가)을 풍부하게 표시.
    쓰기 위치 — 직원별 할일 입력·수정은 work planner 본 앱(바로가기)에서 수행. work flow는 시야 통합 용도.
    새 창에서 이어갈 때 체크리스트
    1. 이 파일(duguru-work-flow-v2.1.html)을 업로드해서 이어가기
    2. isLocal 변수는 건드리지 말 것 — 항상 false 유지
    3. is_project 컬럼 SQL 실행 여부 확인
    4. ES5 호환 유지 — const/let, 화살표 함수, optional chaining(?.), 구조분해 할당 사용 금지
    5. 새 클린업 키워드 추가 시 → _cleanField()cutPatterns 배열에 추가
    6. 새 이모지 제거 필요 시 → _stripEmoji()의 유니코드 범위에 추가
    7. 비프로젝트 키워드 추가 시 → NP_KEYWORDS 배열에 추가
    전체 활동 로그
    관리자 전용
    ~
    일시사용자유형행동상세
    불러오는 중…
    프로젝트 360 데이터를 불러오는 중…
    알림판
    빠른 등록
    알람
    불러오는 중
    공유 메모
    0/4000
    불러오는 중
    내 오늘 지금 챙길 것
    불러오는 중
    워크로드 임계치
    Work Planner