온헤어 CRM 기능 요구사항 문서
1. 제품 개요
한 줄 콘셉트
온헤어의 원장님과 디자이너가 휴대전화 번호로 고객의 이전 시술 이력과 염색약 번호를 확인하고, 예약 확인 및 다음 예약 관리까지 한곳에서 끝내는 웹 서비스다.
대상 사용자
- 온헤어 원장님
- 온헤어 디자이너 2~4명
- 관리 대상 고객 100~999명
- 알림톡을 받는 온헤어 고객
구현 대상
- Next.js 기반 웹
- 시간대: Asia/Seoul
- 네이버 예약과 카카오톡 채널 대화는 기존 도구에서 계속 운영
- CRM에는 고객, 시술 기록, 예약 확인 건과 필요한 운영 기록을 저장
2. 첫 개발 범위
포함
- 가게 및 직원 계정 관리
- 원장님·디자이너 권한 관리
- 고객 등록, 검색, 상세 정보 관리
- 휴대전화 번호 정규화 및 중복 고객 병합
- 고객·방문 이력·시술 기록 CSV 자료 가져오기
- 수첩 자료 직접 입력
- 예약 확인 건 직접 등록 및 CSV 자료 가져오기
- 오늘·내일 예약 확인
- 전날 오후 6시 예약 확인 알림톡 자동 발송
- 방문 3시간 전 당일 예약 안내 알림톡 자동 발송
- 알림톡 실패 시 수동 연락 기록
- 시술 기록과 선택적 시술 사진 등록
- 시술 뒤 다음 예약 등록
- 시술 기록 미작성 내부 할 일
- 고객 단계 자동 분류
- 뜸해진 고객 목록 및 연락 관리
- 고객 병합 이력과 병합 취소
- 개인정보 및 마케팅 수신동의 관리
- 고객 조회·수정·내보내기·권한 변경 기록 확인
- 운영 지표 계산
첫 개발 범위에 포함하지 않는 기능
사용자가 첫 버전에서 제외하기로 확인한 항목이다.
- 네이버 예약 신규 내역 자동 취합
- 네이버 톡톡 대화 가져오기
- 카카오톡 채널 과거 대화 가져오기
- 개인 카카오톡·인스타그램·SNS·전화 대화 내용 가져오기
- 담당자별 전체 예약 달력
- 재방문 광고 자동 발송
- 고객별 재방문 주기에 따른 뜸해짐 기준 설정
- 시술 전후 사진 비교
- 담당 디자이너 퇴사 시 고객 인계
- 결제 기능
- 회원권·정액권 잔액 및 만료 관리
3. 역할과 접근 범위
| 기능 영역 | 원장님 | 디자이너 |
|---|---|---|
| 오늘·내일 예약 확인 | 가게 전체 | 자기 담당 예약 확인 건 |
| 고객 목록 | 가게 전체 | 자기 담당 고객 |
| 고객 상세 | 가게 전체 | 자기 담당 고객 |
| 시술 기록 | 전체 조회·작성 | 자기 담당 고객 조회·작성 |
| 뜸해진 고객 | 가게 전체 | 자기 담당 고객 |
| 자료 가져오기 | 가능 | 접근 불가 |
| 중복 고객 병합 | 가능 | 중복 후보 제시만 가능 |
| 병합 취소 | 가능 | 접근 불가 |
| 직원·권한 설정 | 가능 | 접근 불가 |
| 알림톡 설정 | 가능 | 상태 확인 범위는 확인 필요 |
| 조회·수정·내보내기 기록 | 확인 가능 | 접근 불가 |
담당 디자이너가 쉬는 날 다른 디자이너가 시술 이력과 염색약 번호를 확인해야 한다는 요구와, 디자이너가 자기 담당 고객만 자세히 본다는 권한 요구가 함께 존재한다. 처리 방식은 FR-006에 확인 필요로 기록한다.
4. 주요 상태와 판정 기준
예약 확인 건 방문 결과
- 결과 미입력
- 시술 완료
- 노쇼
- 고객 취소
- 매장 취소
운영 메시지 상태
- 발송 예정
- 처리 중
- 성공
- 실패
- 자동 발송 중지
- 수동 연락 완료
고객 기록 상태
- 활성
- 병합됨
- 삭제 또는 알아볼 수 없게 처리됨
고객 단계
- 문의 중
- 방문 예약됨
- 시술 완료
- 다음 예약 잡힘
- 재방문 고객
- 뜸해짐
개인정보 및 마케팅 수신동의 상태
각 동의 종류를 서로 분리해 관리한다.
- 동의
- 거부
- 동의 미확인
각 변경에는 변경 일시, 경로, 변경자와 이전 상태를 보관한다.
5. 기능 요구사항
FR-001 가게 확인 및 직원 로그인
- 주체: 원장님, 디자이너
- 시작 조건: 직원 계정이 활성 상태이고 가게에 소속되어 있다.
- 정상 흐름:
- 직원이 설정된 로그인 수단으로 로그인한다.
- 서버가 계정 활성 상태와 소속 가게를 확인한다.
- 서버가 원장님 또는 디자이너 역할을 확인한다.
- 허용된 가게 범위로 로그인 세션을 만든다.
- 오늘·내일 예약 확인 화면으로 이동한다.
- 예외 흐름:
- 계정이 차단됐으면 로그인을 허용하지 않고 차단 상태를 표시한다.
- 소속 가게가 없거나 가게가 비활성 상태면 접근을 중지한다.
- 로그인 정보가 올바르지 않으면 구체적인 계정 정보가 노출되지 않는 오류를 표시한다.
- 세션이 만료되면 로그인 화면으로 이동하고 저장하지 않은 입력이 있음을 안내한다.
- 완료 조건: 직원은 자기 가게와 역할에 해당하는 데이터만 조회할 수 있는 상태로 첫 화면에 진입한다.
FR-002 직원 계정과 권한 관리
- 주체: 원장님
- 시작 조건: 원장님이 직원·권한 설정 화면에 접근했다.
- 정상 흐름:
- 직원 이름과 로그인 수단을 등록한다.
- 역할을 원장님 또는 디자이너로 지정한다.
- 직원을 현재 가게에 소속시킨다.
- 계정 활성 상태를 설정한다.
- 변경된 권한과 변경 일시를 저장한다.
- 예외 흐름:
- 이미 사용 중인 로그인 식별 정보라면 중복 등록을 막는다.
- 마지막 원장님 계정을 차단하거나 디자이너로 변경하려는 경우 운영 불가 상태가 되지 않도록 경고한다.
- 다른 가게의 고객이나 직원이 연결되면 저장을 거부한다.
- 완료 조건: 직원이 지정된 가게와 역할로 로그인할 수 있고 권한 변경 이력이 남는다.
FR-003 고객 등록·수정·검색
- 주체: 원장님, 권한이 있는 디자이너
- 시작 조건: 고객 목록, 예약 확인 건 등록 또는 고객 상세에서 고객 등록·검색을 시작했다.
- 정상 흐름:
- 휴대전화 번호를 먼저 입력한다.
- 시스템이 정규화 번호를 생성하고 같은 가게의 기존 고객을 검색한다.
- 기존 고객이 없으면 이름, 담당 디자이너, 개인정보 동의, 마케팅 수신동의를 입력한다.
- 고객을 활성 상태로 저장한다.
- 예약 확인 건이나 시술 기록을 등록 중이었다면 새 고객과 연결한다.
- 예외 흐름:
- 같은 정규화 번호의 고객이 있으면 새 고객 생성을 바로 진행하지 않고 기존 고객을 표시한다.
- 동일 번호 고객의 이름이나 담당 디자이너가 다르면 중복 고객 병합 검토로 이동할 수 있게 한다.
- 번호가 없거나 검증되지 않으면 자동 병합하지 않고 검토 필요로 저장한다.
- 디자이너가 다른 담당 디자이너의 고객을 찾으면 FR-006에서 정한 범위만 표시한다.
- 완료 조건: 고객이 가게 안에서 한 명으로 식별되고 검색 및 후속 기록 연결이 가능하다.
FR-004 휴대전화 번호 정규화와 중복 판정
- 주체: 시스템
- 시작 조건: 고객 등록, 고객 수정, 예약 확인 건 등록 또는 자료 가져오기에서 휴대전화 번호가 입력됐다.
- 정상 흐름:
- 원본 입력값을 변경하지 않고 보관한다.
- 공백, 하이픈, 점, 괄호를 제거한다.
+82,0082,82형식을 한국 휴대전화 번호 형식으로 해석한다.- 정규화 번호와 화면 표시 번호를 만든다.
- 가게 식별값과 정규화 번호의 조합으로 중복을 판정한다.
- 예외 흐름:
- 기존
011,016,017,018,019번호는 임의로010으로 변경하지 않는다. - 자릿수 부족, 일반 전화번호, 숫자 외 메모 포함, 빈 값은 검토 필요로 처리한다.
- 서로 다른 가게의 고객은 같은 번호여도 중복으로 판정하지 않는다.
- 기존
- 완료 조건: 원본 번호, 정규화 번호, 화면 표시 번호, 검증 상태가 함께 저장되고 중복 판정에 사용할 수 있다.
FR-005 역할에 따른 고객과 기록 열람 제한
- 주체: 원장님, 디자이너, 시스템
- 시작 조건: 사용자가 고객, 예약 확인 건, 시술 기록, 시술 사진 또는 병합 이력을 조회하거나 수정한다.
- 정상 흐름:
- 서버가 사용자의 가게 소속을 확인한다.
- 원장님이면 같은 가게의 전체 기록 접근을 허용한다.
- 디자이너면 자기 담당 고객과 관련 기록 접근을 허용한다.
- 허용된 데이터만 화면에 반환한다.
- 예외 흐름:
- 화면 주소를 직접 입력하거나 요청 값을 조작해도 다른 가게의 데이터는 반환하지 않는다.
- 디자이너가 다른 담당 고객의 상세 정보나 시술 사진을 요청하면 FR-006 정책을 적용한다.
- 병합됨 고객은 활성 대표 고객으로 안내하되 원본 식별값을 임의로 노출하지 않는다.
- 완료 조건: 화면 표시와 서버 요청 모두에 같은 가게 및 담당 고객 권한이 적용된다.
FR-006 대체 시술 시 다른 담당 고객의 시술 이력 열람
- 주체: 원장님, 디자이너
- 시작 조건: 담당 디자이너가 쉬는 날 다른 디자이너가 고객의 시술 이력, 염색약 번호 또는 배합을 확인해야 한다.
- 정상 흐름:
- 다음 방식 중 사용자가 확정한 한 가지 방식을 구현한다.
- 디자이너가 임시 열람을 요청하고 원장님이 승인한다.
- 원장님이 일정 시간 동안 임시 열람 권한을 부여한다.
- 원장님이 고객의 담당 디자이너를 변경한다.
- 승인 또는 변경 후 필요한 고객 상세와 시술 이력을 표시한다.
- 열람자, 대상 고객, 열람 시각, 승인자를 기록한다.
- 다음 방식 중 사용자가 확정한 한 가지 방식을 구현한다.
- 예외 흐름:
- 승인되지 않았으면 다른 담당 고객의 상세 정보를 표시하지 않는다.
- 긴급 열람 기능을 둘 경우 사유 입력과 별도 이력 저장이 필요하다.
- 완료 조건: 자기 담당 고객 제한을 유지하면서 대체 시술자가 필요한 기록을 확인할 수 있고 열람 근거가 남는다.
- 확인 필요: 임시 열람 요청, 원장님 승인 또는 담당 디자이너 변경 중 어떤 방식을 사용할지 확정해야 한다.
FR-007 고객 상세 및 시술 이력 조회
- 주체: 원장님, 권한이 있는 디자이너
- 시작 조건: 고객 목록, 오늘·내일 예약 확인 또는 뜸해진 고객에서 고객을 선택했다.
- 정상 흐름:
- 고객 이름, 휴대전화 번호, 담당 디자이너와 고객 단계를 표시한다.
- 개인정보 동의 및 마케팅 수신동의 상태를 표시한다.
- 시술 이력을 최근 순서로 표시한다.
- 각 시술 기록의 시술 종류, 시술 메모, 염색약 번호, 배합, 담당 디자이너와 사진 여부를 표시한다.
- 미래 예약 확인 건과 다음 예약을 표시한다.
- 예외 흐름:
- 고객이 병합됨 상태면 대표 고객으로 이동할 수 있게 안내한다.
- 시술 사진 동의 또는 권한이 확인되지 않으면 사진을 표시하지 않는다.
- 삭제 또는 알아볼 수 없게 처리된 고객은 허용된 최소 이력만 표시한다.
- 완료 조건: 사용자가 한 화면에서 고객 정보, 시술 이력과 다음 예약을 확인할 수 있다.
FR-008 시술 기록 작성과 수정
- 주체: 원장님, 권한이 있는 디자이너
- 시작 조건: 고객 상세 또는 시술 완료된 예약 확인 건에서 시술 기록 작성을 선택했다.
- 정상 흐름:
- 고객과 연결된 예약 확인 건을 확인한다.
- 실제 시술 일시와 담당 디자이너를 입력한다.
- 시술 종류와 시술 메모를 입력한다.
- 염색 시술에 필요한 염색약 번호와 배합을 입력한다.
- 필요한 경우 시술 사진을 첨부한다.
- 필요한 경우 다음 예약 일시를 입력한다.
- 작성자, 작성일과 수정일을 저장한다.
- 예외 흐름:
- 시술 종류나 시술 메모가 없으면 완료 기록으로 저장하지 않는다.
- 다른 가게의 고객이나 예약 확인 건과 연결하려 하면 저장을 거부한다.
- 사진 동의가 없거나 보유기간이 설정되지 않았으면 사진 첨부를 중지하고 이유를 표시한다.
- 동시에 수정된 기록이면 최신 버전을 다시 확인하게 한다.
- 완료 조건: 시술 기록이 고객의 시술 이력에 표시되고 연결된 미작성 내부 할 일이 자동 완료된다.
- 확인 필요: 염색 시술에서 염색약 번호와 배합을 필수 입력으로 강제할지 확정해야 한다.
FR-009 시술 사진 관리
- 주체: 원장님, 권한이 있는 디자이너
- 시작 조건: 시술 기록 작성 또는 수정 중 사진 첨부를 선택했다.
- 정상 흐름:
- 해당 고객의 촬영·보관 동의 상태와 보유기간을 확인한다.
- 사진을 시술 기록에 연결한다.
- 업로드한 직원과 업로드 시각을 저장한다.
- 권한이 있는 사용자에게만 사진을 표시한다.
- 예외 흐름:
- 촬영·보관 동의가 없거나 미확인이면 업로드를 막는다.
- 허용되지 않은 파일이거나 업로드가 실패하면 시술 기록을 유지하고 사진 오류만 표시한다.
- 병합 시 파일을 복제하지 않고 시술 기록 연결 관계를 유지한다.
- 완료 조건: 선택한 사진이 시술 기록에 안전하게 연결되고 권한과 보유기간이 적용된다.
FR-010 예약 확인 건 등록·수정
- 주체: 원장님, 디자이너
- 시작 조건: 오늘·내일 예약 확인, 고객 상세 또는 시술 기록 작성에서 예약 등록을 선택했다.
- 정상 흐름:
- 휴대전화 번호로 기존 고객을 찾거나 새 고객을 등록한다.
- 방문 예정 일시, 담당 디자이너, 예정 시술과 접점을 입력한다.
- 고객 확인 상태를 입력한다.
- 예약 등록 당시 고객명과 휴대전화 번호를 예약 연락처 스냅샷으로 저장한다.
- 운영 메시지 발송 일정을 계산한다.
- 예외 흐름:
- 번호가 검토 필요이면 자동 발송을 예약하지 않고 검토 필요로 표시한다.
- 같은 고객, 방문 일시, 담당 디자이너의 중복 예약 후보가 있으면 경고한다.
- 방문 예정 일시가 과거이면 신규 미래 예약으로 저장하지 않는다.
- 다른 가게 직원이나 고객을 연결하면 저장을 거부한다.
- 완료 조건: 예약 확인 건이 고객 및 담당 디자이너와 연결되고 알림톡 발송 대상 여부가 계산된다.
FR-011 오늘·내일 예약 확인
- 주체: 원장님, 디자이너
- 시작 조건: 로그인 후 오늘·내일 예약 확인 화면에 접근했다.
- 정상 흐름:
- Asia/Seoul 기준 오늘과 내일의 예약 확인 건을 구분해 표시한다.
- 방문 예정 일시, 고객, 담당 디자이너, 예정 시술을 표시한다.
- 고객 확인 상태와 운영 메시지 발송 상태를 표시한다.
- 오늘 예약에는 방문 결과를 입력할 수 있게 한다.
- 예약 확인 건을 직접 추가하거나 수정할 수 있게 한다.
- 예외 흐름:
- 알림톡 설정이 유효하지 않으면 상단에 자동 발송 불가 원인을 표시한다.
- 실패한 운영 메시지가 있으면 수동 연락 대상으로 표시한다.
- 디자이너에게는 권한이 있는 예약 확인 건만 표시한다.
- 완료 조건: 사용자가 오늘·내일 예약의 안내 상태, 고객 확인 상태와 방문 결과를 한 화면에서 처리할 수 있다.
FR-012 전날 오후 6시 예약 확인 알림톡 발송
- 주체: 시스템
- 시작 조건: Asia/Seoul 기준 오후 6시가 됐고 다음 날 방문 예정인 예약 확인 건이 있다.
- 정상 흐름:
- 예약 확인 건이 고객 취소 또는 매장 취소가 아닌지 확인한다.
- 유효한 발신 프로필과 예약 확인 알림톡 템플릿을 확인한다.
- 예약 연락처 스냅샷의 번호를 검증한다.
- 방문 일시, 담당 디자이너, 예정 시술, 변경·취소 안내를 템플릿에 적용한다.
- 알림톡을 한 번 발송한다.
- 요청 식별값과 발송 상태를 예약 확인 건에 저장한다.
- 예외 흐름:
- 발신 프로필, 템플릿 또는 API 연결이 유효하지 않으면 발송을 중지한다.
- 번호 충돌이나 병합 검토가 끝나지 않았으면 자동 발송을 중지한다.
- 같은 예약 확인 건과 안내 종류가 이미 성공했다면 다시 발송하지 않는다.
- 오후 6시 이후 새로 등록된 다음 날 예약의 처리 방식은 확인 필요로 표시한다.
- 완료 조건: 대상 예약 확인 건마다 성공, 실패 또는 자동 발송 중지 상태와 원인이 남는다.
FR-013 방문 3시간 전 당일 예약 안내 알림톡 발송
- 주체: 시스템
- 시작 조건: 예약 방문 시각 3시간 전이고 방문 시간이 지나지 않았다.
- 정상 흐름:
- 예약 확인 건이 고객 취소 또는 매장 취소가 아닌지 확인한다.
- 당일 예약 안내 템플릿과 발신 프로필 상태를 확인한다.
- 예약 연락처 스냅샷을 발송 대상으로 사용한다.
- 당일 예약 안내 알림톡을 한 번 발송한다.
- 요청 식별값과 발송 상태를 예약 확인 건에 저장한다.
- 예외 흐름:
- 방문 시각이 지났으면 자동 발송하지 않는다.
- 번호 오류, 병합 충돌 또는 알림톡 연결 오류가 있으면 수동 연락 대상으로 전환한다.
- 이미 성공한 당일 안내는 상태 재계산 과정에서 다시 발송하지 않는다.
- 방문 3시간 이내에 새로 등록된 예약의 처리 방식은 확인 필요로 표시한다.
- 완료 조건: 당일 안내 발송 결과가 예약 확인 건에 기록되고 중복 발송이 발생하지 않는다.
FR-014 운영 메시지 상태 수신과 발송 일정 재계산
- 주체: 시스템
- 시작 조건: 알림톡 API 결과가 수신되거나 예약 확인 건의 시간·취소 상태·고객 연결이 변경됐다.
- 정상 흐름:
- 알림톡 요청 식별값과 결과 식별값으로 대상 운영 메시지를 찾는다.
- 처리 중, 성공 또는 실패 상태를 반영한다.
- 예약 시간이 변경되면 아직 성공하지 않은 발송 일정을 다시 계산한다.
- 고객 취소나 매장 취소가 입력되면 발송 예정 작업을 취소한다.
- 고객 병합 또는 번호 충돌이 발생하면 발송 대상 번호를 재검증한다.
- 예외 흐름:
- 같은 결과가 여러 번 들어와도 최종 상태가 잘못 바뀌지 않게 한다.
- 성공 상태를 뒤늦게 도착한 처리 중 상태로 되돌리지 않는다.
- 이미 성공한 운영 메시지는 예약 수정만으로 자동 재발송하지 않는다.
- 완료 조건: 예약 확인 건의 운영 메시지 상태가 실제 발송 결과와 일치하고 일정 변경에 안전하게 대응한다.
FR-015 알림톡 연결과 템플릿 상태 관리
- 주체: 원장님
- 시작 조건: 원장님이 알림톡 설정 화면에 접근했다.
- 정상 흐름:
- 발신 프로필 연결 상태를 확인한다.
- 예약 확인과 당일 안내에 사용할 알림톡 템플릿을 각각 연결한다.
- API 요청 및 결과 수신 연결 상태를 확인한다.
- 각 템플릿의 사용 가능 상태를 표시한다.
- 자동 발송 가능 여부를 저장한다.
- 예외 흐름:
- 템플릿이 승인되지 않았거나 발신 프로필이 유효하지 않으면 자동 발송을 중지한다.
- 연결 테스트에 실패하면 실패 원인과 수동 연락 대체 기능을 안내한다.
- 완료 조건: 원장님이 자동 발송 가능 여부와 불가능한 원인을 확인할 수 있다.
FR-016 알림톡 실패 시 수동 연락 관리
- 주체: 원장님, 담당 디자이너
- 시작 조건: 알림톡 연결이 불가능하거나 운영 메시지 발송이 실패 또는 중지됐다.
- 정상 흐름:
- 오늘·내일 예약 확인에 수동 연락 대상을 표시한다.
- 직원이 전화, 카카오톡 채널 등 실제 사용한 연락 채널을 선택한다.
- 연락 일시와 연락 결과를 입력한다.
- 예약 확인 건에 수동 연락 기록을 저장한다.
- 예외 흐름:
- 연락 결과가 없으면 완료로 처리하지 않는다.
- 알림톡이 나중에 성공해도 이미 저장된 수동 연락 기록은 삭제하지 않는다.
- 완료 조건: 알림톡을 보내지 못한 예약 확인 건마다 연락 여부와 결과를 추적할 수 있다.
FR-017 방문 결과 기록과 시술 기록 미작성 내부 할 일
- 주체: 원장님, 담당 디자이너, 시스템
- 시작 조건: 오늘 예약의 방문 결과를 처리한다.
- 정상 흐름:
- 시술 완료, 노쇼, 고객 취소 또는 매장 취소 중 하나를 선택한다.
- 시술 완료를 선택하면 연결된 시술 기록이 있는지 확인한다.
- 시술 기록이 없으면 담당 디자이너에게 내부 할 일을 한 번 생성한다.
- 내부 할 일에서 시술 기록 작성 화면으로 이동할 수 있게 한다.
- 시술 기록이 저장되면 내부 할 일을 자동 완료한다.
- 예외 흐름:
- 같은 예약 확인 건에 미작성 내부 할 일을 중복 생성하지 않는다.
- 방문 결과가 시술 완료에서 다른 결과로 변경되면 미작성 할 일을 취소 또는 종료한다.
- 담당 디자이너 계정이 차단 상태라면 원장님에게도 미작성 상태를 표시한다.
- 완료 조건: 모든 시술 완료 예약은 시술 기록과 연결되거나 미작성 내부 할 일로 추적된다.
FR-018 시술 뒤 다음 예약 등록
- 주체: 원장님, 담당 디자이너
- 시작 조건: 시술 기록을 작성하면서 고객의 다음 방문 일시를 정했다.
- 정상 흐름:
- 다음 예약 일시, 담당 디자이너와 예정 시술을 입력한다.
- 현재 고객과 연결된 새 예약 확인 건을 생성한다.
- 시술 직후 등록된 재예약임을 저장한다.
- 운영 메시지 발송 일정을 계산한다.
- 고객 단계를 다음 예약 잡힘으로 재계산한다.
- 예외 흐름:
- 다음 예약 일시가 시술 일시보다 빠르면 저장하지 않는다.
- 담당 디자이너가 비활성 상태이면 다른 담당 디자이너를 선택하게 한다.
- 동일 시간의 중복 후보가 있으면 경고한다.
- 완료 조건: 시술 기록과 다음 예약 확인 건이 연결되고 시술 직후 재예약 여부를 계산할 수 있다.
FR-019 고객 단계 자동 분류
- 주체: 시스템
- 시작 조건: 고객, 예약 확인 건, 방문 결과, 시술 기록, 병합 또는 병합 취소가 변경됐다.
- 정상 흐름:
- 완료된 시술 기록 수를 계산한다.
- 앞으로 잡힌 유효한 예약 확인 건이 있는지 확인한다.
- 마지막 시술일과 뜸해짐 기준일을 계산한다.
- 고객 단계를 다시 계산해 저장한다.
- 계산 근거를 다시 실행할 수 있게 유지한다.
- 예외 흐름:
- 고객 단계 저장값과 실제 기록이 다르면 실제 기록을 기준으로 다시 계산한다.
- 고객 취소·매장 취소·노쇼 예약은 미래 유효 예약으로 계산하지 않는다.
- 병합됨 고객은 대표 고객의 단계 계산에서 원본 기록이 중복 집계되지 않게 한다.
- 완료 조건: 고객의 현재 단계가 예약 확인 건과 시술 기록의 실제 상태를 반영한다.
- 구현 기준안:
- 미래 재예약이 있는 시술 고객: 다음 예약 잡힘
- 미래 예약이 있고 시술 이력이 없는 고객: 방문 예약됨
- 마지막 시술 후 달력 기준 2개월이 지났고 미래 예약이 없는 고객: 뜸해짐
- 시술 기록이 2건 이상이고 미래 예약이 없는 고객: 재방문 고객
- 시술 기록이 1건이고 미래 예약이 없는 고객: 시술 완료
- 시술 이력과 미래 예약이 없는 활성 고객: 문의 중
- 확인 필요: 여러 단계 조건이 동시에 맞을 때 위 우선순서를 사용할지 확정해야 한다.
FR-020 뜸해진 고객 자동 분류와 목록 조회
- 주체: 원장님, 디자이너, 시스템
- 시작 조건: 마지막 시술일에서 뜸해짐 기준일이 지났거나 뜸해진 고객 화면에 접근했다.
- 정상 흐름:
- 마지막 시술일로부터 달력 기준 2개월이 지난 고객을 찾는다.
- 앞으로 잡힌 유효 예약 확인 건이 없는지 확인한다.
- 조건에 맞으면 고객 단계를 뜸해짐으로 변경한다.
- 담당 디자이너별로 고객을 표시한다.
- 마지막 시술일과 마케팅 수신동의 상태를 함께 표시한다.
- 예외 흐름:
- 새 예약이 등록되면 뜸해진 고객 목록에서 제거하고 단계를 재계산한다.
- 마지막 시술일이 없으면 뜸해짐으로 분류하지 않는다.
- 고객 병합 또는 병합 취소 후 날짜와 예약을 다시 계산한다.
- 완료 조건: 원장님과 디자이너가 권한 범위에서 두 달 넘게 방문하지 않았고 미래 예약이 없는 고객을 확인할 수 있다.
- 확인 필요: ‘두 달’을 마지막 시술일의 시각까지 비교할지, 해당 날짜의 시작 또는 종료 시점으로 비교할지 확정해야 한다.
FR-021 뜸해진 고객 연락 관리
- 주체: 원장님, 담당 디자이너
- 시작 조건: 뜸해진 고객 목록에서 고객을 선택했다.
- 정상 흐름:
- 마케팅 수신동의 상태를 확인한다.
- 연락 일시, 연락 채널과 연락 결과를 입력한다.
- 입력자를 포함해 고객별 연락 이력으로 저장한다.
- 최근 연락 결과를 목록에 표시한다.
- 예외 흐름:
- 마케팅 수신동의가 거부 또는 미확인이면 광고성 연락 대상 선택을 막고 사유를 표시한다.
- 이미 발생한 연락 사실은 동의 상태와 관계없이 운영 기록으로 남길 수 있다.
- 이 화면에서는 재방문 광고를 자동 발송하지 않는다.
- 완료 조건: 뜸해진 고객별로 누가 언제 어떤 채널로 연락했고 결과가 무엇인지 확인할 수 있다.
FR-022 CSV 자료 가져오기와 수첩 자료 입력
- 주체: 원장님
- 시작 조건: 원장님이 자료 가져오기·중복 합치기 화면에서 파일 업로드 또는 수첩 자료 입력을 선택했다.
- 정상 흐름:
- 엑셀·구글시트에서 내려받은 CSV 파일을 업로드한다.
- 고객, 방문·시술 기록 또는 예약 확인 건 자료 유형을 선택한다.
- 원본 열을 CRM 항목과 연결한다.
- 전화번호, 날짜, 이름과 담당자 값을 임시 저장 영역에서 검증한다.
- 정상 행, 중복 후보, 가져오기 오류 행을 구분한다.
- 검토가 끝난 정상 자료만 운영 데이터에 반영한다.
- 수첩 자료는 고객 등록 및 시술 기록 작성 흐름을 통해 직접 입력한다.
- 예외 흐름:
- 원본 파일을 검증 없이 운영 데이터에 직접 저장하지 않는다.
- 현재 직원과 연결되지 않는 담당자 이름은 이전 담당자 텍스트로 보존한다.
- 전화번호가 없거나 잘못된 행은 삭제하지 않고 가져오기 오류 행으로 보관한다.
- 톡톡, 카카오톡 채널, 개인 카카오톡, SNS와 전화의 대화 내용은 가져오기 항목으로 제공하지 않는다.
- 완료 조건: 고객 정보, 방문 이력, 시술 메모, 염색약 번호, 배합과 필요한 예약 확인 정보가 검토 후 CRM에 반영된다.
FR-023 가져오기 오류 행 수정·재처리와 중복 방지
- 주체: 원장님, 시스템
- 시작 조건: 자료 가져오기에서 전화번호, 날짜 또는 담당자 연결 오류가 발견됐다.
- 정상 흐름:
- 원본 파일, 원본 행 번호, 원본 값과 오류 이유를 보관한다.
- 원장님이 잘못된 값을 수정한다.
- 해당 오류 행만 다시 검증한다.
- 정상으로 바뀐 행만 운영 데이터에 반영한다.
- 처리 결과를 자료 가져오기 작업에 기록한다.
- 예외 흐름:
- 같은 파일을 다시 업로드해도 자료 가져오기 작업 식별값과 행 식별값으로 중복 생성을 막는다.
- 일부 행 처리에 실패하면 실패 행을 남기고 정상 반영 결과와 구분한다.
- 완료 조건: 원장님이 가져오기 오류 행을 잃지 않고 수정·재처리할 수 있으며 고객과 시술 기록이 중복 생성되지 않는다.
FR-024 중복 고객 병합 검토와 실행
- 주체: 원장님
- 시작 조건: 같은 가게에서 정규화 번호가 같은 고객이 발견됐다.
- 정상 흐름:
- 두 고객의 이름, 담당 디자이너, 최근 시술일, 시술 기록 수를 비교한다.
- 개인정보 및 마케팅 수신동의 상태를 비교한다.
- 미래 예약 확인 건과 발송 예정 운영 메시지를 비교한다.
- 대표 고객을 선택한다.
- 충돌하는 이름, 담당 디자이너와 동의 상태의 대표값을 선택한다.
- 병합 사유를 입력한다.
- 시술 기록과 예약 확인 건을 대표 고객에 연결한다.
- 통합 대상 고객을 삭제하지 않고 병합됨 상태로 변경한다.
- 병합 이력을 생성한다.
- 예외 흐름:
- 정규화 번호가 검토 필요이면 자동 병합하지 않는다.
- 마케팅 수신동의가 충돌하면 수신 거부를 기본 제안하되 원본 이력을 모두 보존한다.
- 병합으로 새로운 동의를 만들거나 수신 거부를 동의로 확대하지 않는다.
- 미래 예약이나 발송 예정 알림톡의 연락처가 충돌하면 자동 발송을 중지하고 검토 필요로 표시한다.
- 병합 도중 오류가 발생하면 전체 작업을 되돌린다.
- 완료 조건: 대표 고객에서 통합된 시술 이력과 예약 확인 건을 볼 수 있고 통합 대상 고객과 병합 근거가 보존된다.
FR-025 병합 이력 조회와 병합 취소
- 주체: 원장님
- 시작 조건: 고객 상세, 중복 고객 병합 검토 또는 원장 설정에서 병합 이력을 선택했다.
- 정상 흐름:
- 병합 실행자, 실행 시각, 병합 사유와 충돌 선택값을 표시한다.
- 이동한 시술 기록과 예약 확인 건을 표시한다.
- 원장님이 병합 취소를 선택한다.
- 병합 작업으로 이동한 기록을 원래 고객으로 되돌린다.
- 대표 고객과 통합 대상 고객의 상태를 다시 계산한다.
- 고객 단계와 알림톡 발송 일정을 다시 계산한다.
- 예외 흐름:
- 병합 후 새로 생성된 기록은 자동으로 분리하지 않고 검토 필요로 표시한다.
- 다른 병합이나 수정이 진행 중이면 동시에 실행하지 않는다.
- 원래 고객이 삭제 또는 알아볼 수 없게 처리됐으면 자동 취소하지 않고 원인을 표시한다.
- 취소 도중 오류가 나면 전체 취소 작업을 되돌린다.
- 완료 조건: 병합 작업 단위로 원래 고객 연결을 복원할 수 있고 취소 이력이 추가로 남는다.
FR-026 개인정보 및 마케팅 수신동의 관리
- 주체: 원장님, 권한이 있는 디자이너
- 시작 조건: 고객을 등록하거나 고객의 동의 상태를 변경한다.
- 정상 흐름:
- 개인정보 이용 목적, 수집 항목과 보유기간을 안내한다.
- 개인정보 동의 상태, 동의일, 경로와 변경자를 저장한다.
- 마케팅 수신동의를 개인정보 동의와 별도로 저장한다.
- 상태가 바뀌면 이전 상태를 동의 이력에 보관한다.
- 기존 자료에서 동의를 확인할 수 없으면 동의 미확인으로 표시한다.
- 예외 흐름:
- 동의일이나 동의 경로가 없는 기존 자료는 임의로 동의 처리하지 않는다.
- 고객 병합으로 동의 범위를 확대하지 않는다.
- 마케팅 수신 거부 고객을 광고 연락 대상으로 선택하지 않는다.
- 완료 조건: 현재 동의 상태와 전체 변경 이력을 확인할 수 있고 개인정보 동의와 마케팅 수신동의가 분리되어 있다.
FR-027 보유기간 및 삭제 요청 처리
- 주체: 원장님
- 시작 조건: 고객의 정보 보유기간이 지났거나 고객이 삭제를 요청했다.
- 정상 흐름:
- 마지막 방문일과 설정된 보유기간을 기준으로 대상 고객을 찾는다.
- 원장님이 대상 기록과 연결된 예약 확인 건, 시술 기록과 사진을 확인한다.
- 정해진 운영 정책에 따라 삭제하거나 알아볼 수 없게 처리한다.
- 처리자, 처리 시각, 처리 근거와 처리 범위를 기록한다.
- 예외 흐름:
- 진행 중인 미래 예약이나 처리되지 않은 운영 메시지가 있으면 먼저 확인하게 한다.
- 병합됨 고객은 대표 고객과 병합 이력을 함께 검토한다.
- 보존이 필요한 운영 이력이 있으면 고객을 알아볼 수 없게 처리한 뒤 최소 정보만 유지한다.
- 완료 조건: 보유기간 초과 또는 삭제 요청 고객의 정보와 시술 사진이 정해진 정책에 따라 처리되고 처리 이력이 남는다.
- 확인 필요: 고객 정보, 시술 기록, 알림톡 결과, 병합 이력과 시술 사진의 구체적인 보유기간을 확정해야 한다.
FR-028 조회·수정·내보내기 및 권한 변경 이력
- 주체: 원장님, 시스템
- 시작 조건: 직원이 고객 상세, 시술 사진, CSV 원본 또는 병합 이력을 조회·수정·내보내거나 권한을 변경했다.
- 정상 흐름:
- 사용자, 가게, 작업 종류, 대상 기록과 발생 시각을 저장한다.
- 수정 작업에는 변경 전후 값을 확인할 수 있는 근거를 남긴다.
- 원장님이 직원·권한 설정에서 이력을 검색한다.
- 예외 흐름:
- 이력 저장 실패 시 개인정보 내보내기나 권한 변경처럼 추적이 필요한 작업을 완료 처리하지 않는다.
- 디자이너는 가게 전체 이력을 조회할 수 없다.
- 완료 조건: 원장님이 누가 언제 어떤 고객 기록을 조회·수정·내보냈고 권한을 변경했는지 확인할 수 있다.
FR-029 운영 지표 계산
- 주체: 원장님, 시스템
- 시작 조건: 원장님이 운영 지표를 확인하거나 관련 예약·시술 기록이 변경됐다.
- 정상 흐름:
- 노쇼율을 계산한다.
- 예약 확인 안내 발송률을 계산한다.
- 두 달 내 재방문율을 계산한다.
- 시술 기록 완료율을 계산한다.
- 시술 직후 재예약률을 계산한다.
- 계산 기간과 기준 건수를 함께 표시한다.
- 예외 흐름:
- 분모가 0이면 0%로 오해되지 않도록 계산 대상 없음으로 표시한다.
- 고객 취소와 매장 취소는 노쇼율 분모에서 제외한다.
- 병합됨 고객의 기록을 중복 집계하지 않는다.
- 완료 조건: 원장님이 실제 예약 확인 건과 시술 기록을 근거로 지표를 확인할 수 있다.
- 계산식:
- 노쇼율: 노쇼 건수 ÷ 시술 완료 또는 노쇼인 예약 확인 건수
- 예약 확인 안내 발송률: 정상 발송된 예정 안내 수 ÷ 발송 대상 예정 안내 수
- 두 달 내 재방문율: 이전 시술일로부터 두 달 안에 다음 시술을 완료한 고객 수 ÷ 두 달 관찰 기간이 지난 시술 고객 수
- 시술 기록 완료율: 시술 종류와 시술 메모가 있는 시술 기록 연결 건수 ÷ 시술 완료 예약 확인 건수
- 시술 직후 재예약률: 시술 기록 작성과 함께 다음 예약을 저장한 건수 ÷ 전체 시술 완료 건수
6. 화면 요구사항
UIR-001 로그인
- 화면 ID:
login - 사용 목적: 직원 계정으로 로그인하고 소속 가게와 역할을 확인한다.
- 사용자: 원장님, 디자이너
- 진입 경로: 서비스 접속, 로그아웃 후, 로그인 만료 후
- 주요 구성:
- 로그인 정보 입력
- 로그인 실행
- 계정 차단·오류 안내
- 완료 조건: 활성 직원이 역할과 가게가 적용된 상태로 오늘·내일 예약 확인 화면에 진입한다.
UIR-002 오늘·내일 예약 확인
- 화면 ID:
today-tomorrow-reservations - 사용 목적: 오늘·내일 예약을 확인하고 예약 확인 건, 운영 메시지와 방문 결과를 처리한다.
- 사용자: 원장님, 디자이너
- 진입 경로: 로그인 후 첫 화면
- 주요 구성:
- 오늘·내일 구분
- 방문 일시, 고객, 담당 디자이너, 예정 시술
- 고객 확인 상태
- 전날 확인·당일 안내 발송 상태
- 수동 연락 상태
- 방문 결과
- 예약 확인 건 추가·수정
- 시술 기록 작성
- 시술 기록 미작성 내부 할 일
- 알림톡 연결 오류 안내
- 완료 조건: 사용자가 자기 권한 범위의 예약 안내 상태와 방문 결과를 확인하고 필요한 후속 작업을 끝낼 수 있다.
UIR-003 고객 목록
- 화면 ID:
customer-list - 사용 목적: 휴대전화 번호, 이름과 담당 디자이너로 고객을 찾는다.
- 사용자: 원장님, 디자이너
- 진입 경로: 오늘·내일 예약 확인, 주 메뉴
- 주요 구성:
- 휴대전화 번호 검색
- 이름 검색
- 담당 디자이너 필터
- 고객 단계 필터
- 고객 등록
- 중복 후보 표시
- 완료 조건: 사용자가 기존 고객을 찾거나 중복 여부를 확인한 뒤 고객 상세로 이동할 수 있다.
UIR-004 고객 상세
- 화면 ID:
customer-detail - 사용 목적: 고객 정보, 동의 상태, 시술 이력, 염색약 번호, 배합과 다음 예약을 확인한다.
- 사용자: 원장님, 권한이 있는 디자이너
- 진입 경로: 고객 목록, 오늘·내일 예약 확인, 뜸해진 고객
- 주요 구성:
- 고객 기본 정보
- 원본 번호와 화면 표시 번호
- 담당 디자이너
- 고객 단계
- 개인정보 및 마케팅 수신동의
- 시술 이력
- 시술 사진
- 미래 예약 확인 건
- 시술 기록 작성
- 다음 예약 등록
- 중복 고객 찾기
- 병합 이력
- 완료 조건: 사용자가 고객의 과거 시술 내용과 앞으로의 예약을 한곳에서 확인하고 허용된 정보를 수정할 수 있다.
UIR-005 시술 기록 작성
- 화면 ID:
treatment-record - 사용 목적: 시술 종류, 시술 메모, 염색약 번호와 배합을 기록하고 필요한 경우 사진과 다음 예약을 추가한다.
- 사용자: 원장님, 권한이 있는 디자이너
- 진입 경로: 고객 상세, 오늘·내일 예약 확인, 시술 기록 미작성 내부 할 일
- 주요 구성:
- 고객과 예약 확인 건
- 시술 일시
- 실제 담당 디자이너
- 시술 종류
- 시술 메모
- 염색약 번호
- 배합
- 시술 사진
- 다음 예약 일시와 예정 시술
- 완료 조건: 필수 시술 정보가 저장되고 고객 시술 이력에 표시되며 연결된 미작성 내부 할 일이 완료된다.
UIR-006 뜸해진 고객
- 화면 ID:
inactive-customers - 사용 목적: 두 달 넘게 방문하지 않았고 미래 예약이 없는 고객을 확인하고 연락 결과를 관리한다.
- 사용자: 원장님, 디자이너
- 진입 경로: 오늘·내일 예약 확인, 주 메뉴
- 주요 구성:
- 고객명
- 담당 디자이너
- 마지막 시술일
- 마지막 시술 종류
- 마케팅 수신동의 상태
- 최근 연락 일시와 결과
- 연락 일시·채널·결과 입력
- 완료 조건: 권한 범위의 뜸해진 고객을 확인하고 고객별 연락 결과를 저장할 수 있다.
UIR-007 원장 설정
- 화면 ID:
owner-settings - 사용 목적: 가게 운영에 필요한 원장님 전용 설정 화면으로 이동한다.
- 사용자: 원장님
- 진입 경로: 주 메뉴, 오늘·내일 예약 확인
- 주요 구성:
- 가게 정보
- 직원·권한 설정 이동
- 자료 가져오기·중복 합치기 이동
- 알림톡 설정 이동
- 고객 병합 이력 이동
- 완료 조건: 원장님이 필요한 설정 화면을 선택해 이동할 수 있고 디자이너의 접근은 차단된다.
UIR-008 자료 가져오기·중복 합치기
- 화면 ID:
import-merge - 사용 목적: CSV와 수첩의 고객·방문·시술 기록을 검증하고 CRM에 반영한다.
- 사용자: 원장님
- 진입 경로: 원장 설정
- 주요 구성:
- 파일 선택
- 자료 유형 선택
- 원본 열과 CRM 항목 연결
- 형식 검증 결과
- 정상 행, 중복 후보, 가져오기 오류 행
- 담당자 연결 및 이전 담당자 텍스트
- 중복 고객 병합 검토 이동
- 오류 행 수정·재처리
- 처리 결과 요약
- 완료 조건: 정상 자료가 중복 없이 반영되고 오류 행과 중복 후보가 원본 행 단위로 보존된다.
UIR-009 직원·권한 설정
- 화면 ID:
staff-permissions - 사용 목적: 직원의 가게 소속, 원장님·디자이너 역할과 계정 활성 상태를 관리한다.
- 사용자: 원장님
- 진입 경로: 원장 설정
- 주요 구성:
- 직원 목록
- 직원 등록
- 역할 설정
- 로그인 수단
- 계정 활성·차단
- 마지막 권한 변경일
- 조회·수정·내보내기·권한 변경 이력
- 완료 조건: 직원 계정과 권한이 저장되고 변경 이력을 확인할 수 있다.
UIR-010 중복 고객 병합 검토
- 화면 ID:
customer-merge-review - 사용 목적: 같은 정규화 번호의 고객을 비교하고 대표 고객과 충돌 처리 값을 확정한다.
- 사용자: 원장님
- 진입 경로: 자료 가져오기·중복 합치기, 고객 목록, 고객 상세, 예약 직접 등록 중 기존 고객 검색
- 주요 구성:
- 고객별 이름, 번호, 담당 디자이너
- 최근 방문일과 시술 기록 수
- 시술 이력 비교
- 개인정보 및 마케팅 수신동의 비교
- 미래 예약과 예약 연락처 스냅샷
- 발송 예정 알림톡
- 대표 고객 선택
- 충돌 항목 선택
- 병합 사유
- 병합 실행
- 완료 조건: 모든 충돌 항목과 미래 예약 처리 방법이 선택된 경우에만 병합을 실행할 수 있다.
UIR-011 고객 병합 이력
- 화면 ID:
customer-merge-history - 사용 목적: 고객 병합의 실행자, 선택값과 이동 기록을 확인하고 필요한 병합을 취소한다.
- 사용자: 원장님
- 진입 경로: 중복 고객 병합 검토, 고객 상세, 원장 설정
- 주요 구성:
- 대표 고객과 통합 대상 고객
- 실행자와 실행 시각
- 병합 사유
- 충돌 선택값
- 이동한 시술 기록
- 이동한 예약 확인 건
- 병합 후 생성된 검토 필요 기록
- 병합 취소
- 완료 조건: 원장님이 병합 근거와 변경 범위를 확인하고 가능한 작업을 병합 단위로 취소할 수 있다.
UIR-012 알림톡 설정
- 화면 ID:
notification-settings - 사용 목적: 발신 프로필, 알림톡 템플릿과 API 연결 상태를 확인하고 자동 발송 가능 여부를 관리한다.
- 사용자: 원장님
- 진입 경로: 원장 설정, 오늘·내일 예약 확인의 발송 오류 안내
- 주요 구성:
- 발신 프로필 상태
- 예약 확인 템플릿 상태
- 당일 안내 템플릿 상태
- API 요청 연결 상태
- 결과 수신 상태
- 연결 테스트
- 자동 발송 가능 여부와 중지 원인
- 완료 조건: 원장님이 두 운영 메시지의 자동 발송 가능 여부를 확인하고 오류 원인을 찾을 수 있다.
7. 비기능 요구사항
NFR-001 웹 구현 환경
- 서비스는 Next.js 기반 웹으로 구현한다.
- 모바일 앱 스토어 설치를 전제로 하지 않는다.
- 원장님과 디자이너가 가게의 PC, 태블릿 또는 모바일 웹 브라우저에서 주요 업무를 수행할 수 있게 화면을 구성한다.
- 오늘·내일 예약 확인, 고객 검색과 시술 기록 작성은 작은 화면에서도 주요 버튼과 필드가 가려지지 않아야 한다.
NFR-002 가게 단위 데이터 분리
- 고객, 예약 확인 건, 시술 기록, 시술 사진, 직원, 자료 가져오기 원본과 병합 이력은 가게 식별값을 가져야 한다.
- 모든 서버 조회·수정 요청에서 로그인 사용자의 가게 식별값을 검사한다.
- 같은 휴대전화 번호라도 다른 가게의 고객을 검색하거나 병합하지 않는다.
NFR-003 권한과 개인정보 보호
- 권한 검사는 화면 표시뿐 아니라 서버에서 적용한다.
- 시술 사진과 CSV 원본은 공개 주소로 제공하지 않는다.
- 비활성 또는 퇴사 처리된 직원 계정은 새 요청을 처리할 수 없게 한다.
- 로그인 정보, 휴대전화 번호와 동의 이력은 전송 중 보호되는 연결을 사용한다.
- 피부 상태나 알레르기 같은 민감한 항목은 고객 또는 시술 기록의 기본 필드로 만들지 않는다.
NFR-004 예약 안내 작업의 중복 방지
- 시간 계산은 Asia/Seoul을 기준으로 한다.
- 같은 예약 확인 건과 안내 종류에는 중복 방지 키를 적용한다.
- 작업 재실행이나 API 결과 중복 수신으로 운영 메시지가 다시 발송되지 않아야 한다.
- 성공 상태는 예약 수정이나 지연된 결과 수신만으로 실패 또는 처리 중 상태로 돌아가지 않아야 한다.
NFR-005 병합과 병합 취소의 일관성
- 고객 상태 변경, 시술 기록 재연결, 예약 확인 건 재연결과 병합 이력 생성을 하나의 작업으로 처리한다.
- 중간 오류가 발생하면 전체 작업을 되돌린다.
- 병합 실행, 병합 취소와 고객 수정이 동시에 발생하지 않도록 고객 버전 확인 또는 잠금을 적용한다.
- 작성자, 작성일, 실제 담당 디자이너는 병합으로 변경하지 않는다.
NFR-006 자료 가져오기 안정성
- CSV는 임시 저장 영역에서 열 연결과 검증을 마친 후 운영 데이터에 반영한다.
- 자료 가져오기 작업과 원본 행을 식별할 수 있어야 한다.
- 같은 파일이나 행을 다시 처리해도 고객, 예약 확인 건과 시술 기록이 중복 생성되지 않아야 한다.
- 오류 행은 원본 행 번호와 오류 이유를 포함해 재처리 전까지 보관한다.
NFR-007 검색과 목록 처리
- 고객 100~999명과 해당 고객의 시술 이력을 처리할 수 있어야 한다.
- 고객 목록, 시술 이력, 뜸해진 고객과 병합 이력은 페이지 단위 또는 이어 보기 방식으로 나눠 불러온다.
- 휴대전화 번호 검색은 화면 표시 형식과 관계없이 정규화 번호를 사용한다.
- 목록 검색 중에도 역할 및 가게 권한을 먼저 적용한다.
NFR-008 접근성
- 모든 입력 항목에는 보이는 한국어 이름을 제공한다.
- 입력 오류는 해당 필드 가까이에 이유와 해결 방법을 표시한다.
- 키보드만으로 로그인, 고객 검색, 예약 등록과 시술 기록 저장을 수행할 수 있어야 한다.
- 모달과 병합 확인 화면은 초점 이동 순서를 유지한다.
- 상태는 색상만으로 구분하지 않고 텍스트나 아이콘 설명을 함께 사용한다.
NFR-009 변경 및 활동 추적
- 고객 정보, 동의 상태, 시술 기록, 예약 확인 건, 직원 권한과 병합 작업의 변경자를 저장한다.
- 활동 이력에는 가게, 사용자, 작업 종류, 대상 기록과 발생 시각을 포함한다.
- 활동 이력은 일반 고객 정보 수정 기능으로 변경하거나 삭제할 수 없게 한다.
NFR-010 오류 표시와 복구
- 알림톡, 사진 업로드, CSV 처리 또는 병합 작업이 실패하면 성공으로 표시하지 않는다.
- 오류 화면에는 실패한 대상과 다시 시도할 수 있는 작업을 표시한다.
- 일부 화면 데이터 로딩에 실패해도 사용자가 저장되지 않은 입력을 잃지 않도록 가능한 범위에서 유지한다.
8. 외부 연결
| 외부 도구 | 첫 개발 처리 |
|---|---|
| 네이버 예약 | 기존 운영 유지, 필요한 예약 확인 건은 직접 등록하거나 파일로 가져옴 |
| 네이버 톡톡 | 기존 운영 유지, 대화 내용은 가져오지 않음 |
| 카카오톡 채널 | 기존 대화는 그대로 사용, 알림톡 발신 프로필 연결에 사용 |
| 카카오 알림톡 API | 예약 확인 및 당일 안내 자동 발송, 결과 상태 수신 |
| 개인 카카오톡 | 대화는 가져오지 않고 필요한 고객·시술 정보만 직접 입력 |
| 인스타그램·SNS | 대화는 가져오지 않고 필요한 고객·시술 정보만 직접 입력 |
| 전화 | 통화 내용은 가져오지 않고 필요한 결과만 직접 입력 |
| 엑셀·구글시트 | CSV로 내려받아 자료 가져오기 수행 |
| 수첩 | 고객 정보와 시술 기록을 직접 입력 |
9. 확인 필요 항목
-
대체 시술 열람 방식
- 임시 열람 요청 후 원장님 승인
- 원장님이 일정 시간 임시 권한 부여
- 담당 디자이너 변경
세 방식 중 하나를 확정해야 한다.
-
뜸해짐 계산 시점
- 마지막 시술일로부터 달력 기준 2개월을 사용한다.
- 기준일 당일의 어느 시점부터 뜸해짐으로 표시할지 확정해야 한다.
-
고객 단계 우선순위
- FR-019의 우선순위 기준안을 사용할지 확정해야 한다.
-
고객 확인 상태
- 예약 확인 건에 저장할 고객 확인 상태의 구체적인 값은 확정되지 않았다.
-
늦게 등록된 예약의 운영 메시지
- 전날 오후 6시 이후 등록된 다음 날 예약
- 방문 3시간 이내에 등록된 당일 예약
위 예약을 즉시 자동 발송할지, 수동 연락 대상으로 둘지 확정해야 한다.
-
로그인 수단
- 직원 계정의 실제 로그인 수단과 계정 생성·재설정 방식을 확정해야 한다.
-
알림톡 사용 조건
- 온헤어 카카오톡 채널의 발신 프로필과 API 사용 조건을 확인해야 한다.
- 연결할 수 없는 경우에도 수동 연락 기능은 유지한다.
-
시술 사진 운영 기준
- 촬영·보관 동의 문구
- 사진 보유기간
- 허용 파일 형식과 파일 크기
- 삭제 요청 처리 범위
-
염색 기록 필수 범위
- 염색 시술에서 염색약 번호와 배합을 필수 입력으로 강제할지 확정해야 한다.
-
개인정보 보유기간
- 고객 정보, 시술 기록, 시술 사진, 운영 메시지 결과와 병합 이력별 보유기간을 확정해야 한다.
10. 운영·법률 확인 항목
- 고객 등록 시 개인정보 이용 목적, 수집 항목과 보유기간을 안내할 수 있는 문구를 준비한다.
- 마케팅 수신동의는 개인정보 동의와 분리한다.
- 예약 확인 및 당일 안내에 할인이나 재방문 권유를 포함하면 광고성 메시지 여부를 다시 검토한다.
- 광고성 메시지를 운영하게 될 경우
(광고)표시, 수신거부 방법과 야간 발송 제한 조건을 실제 발송 템플릿에 반영하는지 확인한다. - 시술 사진의 촬영·보관 동의와 보유기간을 별도로 운영할 수 있는지 확인한다.
- 알림톡 템플릿과 발신 프로필의 실제 등록·승인 조건은 연결할 발송 사업자 기준으로 확인한다.