만들 사람이 기준으로 삼는 문서

기능 요구사항

요구사항마다 주체·시작 조건·정상 흐름·예외·완료 조건을 적었습니다. 「디자이너는 자기 담당 고객만」과 「쉬는 날 다른 디자이너가 염색약 번호를 확인」이 부딪히는 것을 여기서 찾아 확인 필요로 남겼습니다.

25,165자 · 시스템이 만든 그대로입니다

온헤어 CRM 기능 요구사항 문서

1. 제품 개요

한 줄 콘셉트

온헤어의 원장님과 디자이너가 휴대전화 번호로 고객의 이전 시술 이력과 염색약 번호를 확인하고, 예약 확인 및 다음 예약 관리까지 한곳에서 끝내는 웹 서비스다.

대상 사용자

  • 온헤어 원장님
  • 온헤어 디자이너 2~4명
  • 관리 대상 고객 100~999명
  • 알림톡을 받는 온헤어 고객

구현 대상

  • Next.js 기반 웹
  • 시간대: Asia/Seoul
  • 네이버 예약과 카카오톡 채널 대화는 기존 도구에서 계속 운영
  • CRM에는 고객, 시술 기록, 예약 확인 건과 필요한 운영 기록을 저장

2. 첫 개발 범위

포함

  • 가게 및 직원 계정 관리
  • 원장님·디자이너 권한 관리
  • 고객 등록, 검색, 상세 정보 관리
  • 휴대전화 번호 정규화 및 중복 고객 병합
  • 고객·방문 이력·시술 기록 CSV 자료 가져오기
  • 수첩 자료 직접 입력
  • 예약 확인 건 직접 등록 및 CSV 자료 가져오기
  • 오늘·내일 예약 확인
  • 전날 오후 6시 예약 확인 알림톡 자동 발송
  • 방문 3시간 전 당일 예약 안내 알림톡 자동 발송
  • 알림톡 실패 시 수동 연락 기록
  • 시술 기록과 선택적 시술 사진 등록
  • 시술 뒤 다음 예약 등록
  • 시술 기록 미작성 내부 할 일
  • 고객 단계 자동 분류
  • 뜸해진 고객 목록 및 연락 관리
  • 고객 병합 이력과 병합 취소
  • 개인정보 및 마케팅 수신동의 관리
  • 고객 조회·수정·내보내기·권한 변경 기록 확인
  • 운영 지표 계산

첫 개발 범위에 포함하지 않는 기능

사용자가 첫 버전에서 제외하기로 확인한 항목이다.

  • 네이버 예약 신규 내역 자동 취합
  • 네이버 톡톡 대화 가져오기
  • 카카오톡 채널 과거 대화 가져오기
  • 개인 카카오톡·인스타그램·SNS·전화 대화 내용 가져오기
  • 담당자별 전체 예약 달력
  • 재방문 광고 자동 발송
  • 고객별 재방문 주기에 따른 뜸해짐 기준 설정
  • 시술 전후 사진 비교
  • 담당 디자이너 퇴사 시 고객 인계
  • 결제 기능
  • 회원권·정액권 잔액 및 만료 관리

3. 역할과 접근 범위

기능 영역원장님디자이너
오늘·내일 예약 확인가게 전체자기 담당 예약 확인 건
고객 목록가게 전체자기 담당 고객
고객 상세가게 전체자기 담당 고객
시술 기록전체 조회·작성자기 담당 고객 조회·작성
뜸해진 고객가게 전체자기 담당 고객
자료 가져오기가능접근 불가
중복 고객 병합가능중복 후보 제시만 가능
병합 취소가능접근 불가
직원·권한 설정가능접근 불가
알림톡 설정가능상태 확인 범위는 확인 필요
조회·수정·내보내기 기록확인 가능접근 불가

담당 디자이너가 쉬는 날 다른 디자이너가 시술 이력과 염색약 번호를 확인해야 한다는 요구와, 디자이너가 자기 담당 고객만 자세히 본다는 권한 요구가 함께 존재한다. 처리 방식은 FR-006에 확인 필요로 기록한다.

4. 주요 상태와 판정 기준

예약 확인 건 방문 결과

  • 결과 미입력
  • 시술 완료
  • 노쇼
  • 고객 취소
  • 매장 취소

운영 메시지 상태

  • 발송 예정
  • 처리 중
  • 성공
  • 실패
  • 자동 발송 중지
  • 수동 연락 완료

고객 기록 상태

  • 활성
  • 병합됨
  • 삭제 또는 알아볼 수 없게 처리됨

고객 단계

  • 문의 중
  • 방문 예약됨
  • 시술 완료
  • 다음 예약 잡힘
  • 재방문 고객
  • 뜸해짐

개인정보 및 마케팅 수신동의 상태

각 동의 종류를 서로 분리해 관리한다.

  • 동의
  • 거부
  • 동의 미확인

각 변경에는 변경 일시, 경로, 변경자와 이전 상태를 보관한다.


5. 기능 요구사항

FR-001 가게 확인 및 직원 로그인

  • 주체: 원장님, 디자이너
  • 시작 조건: 직원 계정이 활성 상태이고 가게에 소속되어 있다.
  • 정상 흐름:
    1. 직원이 설정된 로그인 수단으로 로그인한다.
    2. 서버가 계정 활성 상태와 소속 가게를 확인한다.
    3. 서버가 원장님 또는 디자이너 역할을 확인한다.
    4. 허용된 가게 범위로 로그인 세션을 만든다.
    5. 오늘·내일 예약 확인 화면으로 이동한다.
  • 예외 흐름:
    • 계정이 차단됐으면 로그인을 허용하지 않고 차단 상태를 표시한다.
    • 소속 가게가 없거나 가게가 비활성 상태면 접근을 중지한다.
    • 로그인 정보가 올바르지 않으면 구체적인 계정 정보가 노출되지 않는 오류를 표시한다.
    • 세션이 만료되면 로그인 화면으로 이동하고 저장하지 않은 입력이 있음을 안내한다.
  • 완료 조건: 직원은 자기 가게와 역할에 해당하는 데이터만 조회할 수 있는 상태로 첫 화면에 진입한다.

FR-002 직원 계정과 권한 관리

  • 주체: 원장님
  • 시작 조건: 원장님이 직원·권한 설정 화면에 접근했다.
  • 정상 흐름:
    1. 직원 이름과 로그인 수단을 등록한다.
    2. 역할을 원장님 또는 디자이너로 지정한다.
    3. 직원을 현재 가게에 소속시킨다.
    4. 계정 활성 상태를 설정한다.
    5. 변경된 권한과 변경 일시를 저장한다.
  • 예외 흐름:
    • 이미 사용 중인 로그인 식별 정보라면 중복 등록을 막는다.
    • 마지막 원장님 계정을 차단하거나 디자이너로 변경하려는 경우 운영 불가 상태가 되지 않도록 경고한다.
    • 다른 가게의 고객이나 직원이 연결되면 저장을 거부한다.
  • 완료 조건: 직원이 지정된 가게와 역할로 로그인할 수 있고 권한 변경 이력이 남는다.

FR-003 고객 등록·수정·검색

  • 주체: 원장님, 권한이 있는 디자이너
  • 시작 조건: 고객 목록, 예약 확인 건 등록 또는 고객 상세에서 고객 등록·검색을 시작했다.
  • 정상 흐름:
    1. 휴대전화 번호를 먼저 입력한다.
    2. 시스템이 정규화 번호를 생성하고 같은 가게의 기존 고객을 검색한다.
    3. 기존 고객이 없으면 이름, 담당 디자이너, 개인정보 동의, 마케팅 수신동의를 입력한다.
    4. 고객을 활성 상태로 저장한다.
    5. 예약 확인 건이나 시술 기록을 등록 중이었다면 새 고객과 연결한다.
  • 예외 흐름:
    • 같은 정규화 번호의 고객이 있으면 새 고객 생성을 바로 진행하지 않고 기존 고객을 표시한다.
    • 동일 번호 고객의 이름이나 담당 디자이너가 다르면 중복 고객 병합 검토로 이동할 수 있게 한다.
    • 번호가 없거나 검증되지 않으면 자동 병합하지 않고 검토 필요로 저장한다.
    • 디자이너가 다른 담당 디자이너의 고객을 찾으면 FR-006에서 정한 범위만 표시한다.
  • 완료 조건: 고객이 가게 안에서 한 명으로 식별되고 검색 및 후속 기록 연결이 가능하다.

FR-004 휴대전화 번호 정규화와 중복 판정

  • 주체: 시스템
  • 시작 조건: 고객 등록, 고객 수정, 예약 확인 건 등록 또는 자료 가져오기에서 휴대전화 번호가 입력됐다.
  • 정상 흐름:
    1. 원본 입력값을 변경하지 않고 보관한다.
    2. 공백, 하이픈, 점, 괄호를 제거한다.
    3. +82, 0082, 82 형식을 한국 휴대전화 번호 형식으로 해석한다.
    4. 정규화 번호와 화면 표시 번호를 만든다.
    5. 가게 식별값과 정규화 번호의 조합으로 중복을 판정한다.
  • 예외 흐름:
    • 기존 011, 016, 017, 018, 019 번호는 임의로 010으로 변경하지 않는다.
    • 자릿수 부족, 일반 전화번호, 숫자 외 메모 포함, 빈 값은 검토 필요로 처리한다.
    • 서로 다른 가게의 고객은 같은 번호여도 중복으로 판정하지 않는다.
  • 완료 조건: 원본 번호, 정규화 번호, 화면 표시 번호, 검증 상태가 함께 저장되고 중복 판정에 사용할 수 있다.

FR-005 역할에 따른 고객과 기록 열람 제한

  • 주체: 원장님, 디자이너, 시스템
  • 시작 조건: 사용자가 고객, 예약 확인 건, 시술 기록, 시술 사진 또는 병합 이력을 조회하거나 수정한다.
  • 정상 흐름:
    1. 서버가 사용자의 가게 소속을 확인한다.
    2. 원장님이면 같은 가게의 전체 기록 접근을 허용한다.
    3. 디자이너면 자기 담당 고객과 관련 기록 접근을 허용한다.
    4. 허용된 데이터만 화면에 반환한다.
  • 예외 흐름:
    • 화면 주소를 직접 입력하거나 요청 값을 조작해도 다른 가게의 데이터는 반환하지 않는다.
    • 디자이너가 다른 담당 고객의 상세 정보나 시술 사진을 요청하면 FR-006 정책을 적용한다.
    • 병합됨 고객은 활성 대표 고객으로 안내하되 원본 식별값을 임의로 노출하지 않는다.
  • 완료 조건: 화면 표시와 서버 요청 모두에 같은 가게 및 담당 고객 권한이 적용된다.

FR-006 대체 시술 시 다른 담당 고객의 시술 이력 열람

  • 주체: 원장님, 디자이너
  • 시작 조건: 담당 디자이너가 쉬는 날 다른 디자이너가 고객의 시술 이력, 염색약 번호 또는 배합을 확인해야 한다.
  • 정상 흐름:
    • 다음 방식 중 사용자가 확정한 한 가지 방식을 구현한다.
      1. 디자이너가 임시 열람을 요청하고 원장님이 승인한다.
      2. 원장님이 일정 시간 동안 임시 열람 권한을 부여한다.
      3. 원장님이 고객의 담당 디자이너를 변경한다.
    • 승인 또는 변경 후 필요한 고객 상세와 시술 이력을 표시한다.
    • 열람자, 대상 고객, 열람 시각, 승인자를 기록한다.
  • 예외 흐름:
    • 승인되지 않았으면 다른 담당 고객의 상세 정보를 표시하지 않는다.
    • 긴급 열람 기능을 둘 경우 사유 입력과 별도 이력 저장이 필요하다.
  • 완료 조건: 자기 담당 고객 제한을 유지하면서 대체 시술자가 필요한 기록을 확인할 수 있고 열람 근거가 남는다.
  • 확인 필요: 임시 열람 요청, 원장님 승인 또는 담당 디자이너 변경 중 어떤 방식을 사용할지 확정해야 한다.

FR-007 고객 상세 및 시술 이력 조회

  • 주체: 원장님, 권한이 있는 디자이너
  • 시작 조건: 고객 목록, 오늘·내일 예약 확인 또는 뜸해진 고객에서 고객을 선택했다.
  • 정상 흐름:
    1. 고객 이름, 휴대전화 번호, 담당 디자이너와 고객 단계를 표시한다.
    2. 개인정보 동의 및 마케팅 수신동의 상태를 표시한다.
    3. 시술 이력을 최근 순서로 표시한다.
    4. 각 시술 기록의 시술 종류, 시술 메모, 염색약 번호, 배합, 담당 디자이너와 사진 여부를 표시한다.
    5. 미래 예약 확인 건과 다음 예약을 표시한다.
  • 예외 흐름:
    • 고객이 병합됨 상태면 대표 고객으로 이동할 수 있게 안내한다.
    • 시술 사진 동의 또는 권한이 확인되지 않으면 사진을 표시하지 않는다.
    • 삭제 또는 알아볼 수 없게 처리된 고객은 허용된 최소 이력만 표시한다.
  • 완료 조건: 사용자가 한 화면에서 고객 정보, 시술 이력과 다음 예약을 확인할 수 있다.

FR-008 시술 기록 작성과 수정

  • 주체: 원장님, 권한이 있는 디자이너
  • 시작 조건: 고객 상세 또는 시술 완료된 예약 확인 건에서 시술 기록 작성을 선택했다.
  • 정상 흐름:
    1. 고객과 연결된 예약 확인 건을 확인한다.
    2. 실제 시술 일시와 담당 디자이너를 입력한다.
    3. 시술 종류와 시술 메모를 입력한다.
    4. 염색 시술에 필요한 염색약 번호와 배합을 입력한다.
    5. 필요한 경우 시술 사진을 첨부한다.
    6. 필요한 경우 다음 예약 일시를 입력한다.
    7. 작성자, 작성일과 수정일을 저장한다.
  • 예외 흐름:
    • 시술 종류나 시술 메모가 없으면 완료 기록으로 저장하지 않는다.
    • 다른 가게의 고객이나 예약 확인 건과 연결하려 하면 저장을 거부한다.
    • 사진 동의가 없거나 보유기간이 설정되지 않았으면 사진 첨부를 중지하고 이유를 표시한다.
    • 동시에 수정된 기록이면 최신 버전을 다시 확인하게 한다.
  • 완료 조건: 시술 기록이 고객의 시술 이력에 표시되고 연결된 미작성 내부 할 일이 자동 완료된다.
  • 확인 필요: 염색 시술에서 염색약 번호와 배합을 필수 입력으로 강제할지 확정해야 한다.

FR-009 시술 사진 관리

  • 주체: 원장님, 권한이 있는 디자이너
  • 시작 조건: 시술 기록 작성 또는 수정 중 사진 첨부를 선택했다.
  • 정상 흐름:
    1. 해당 고객의 촬영·보관 동의 상태와 보유기간을 확인한다.
    2. 사진을 시술 기록에 연결한다.
    3. 업로드한 직원과 업로드 시각을 저장한다.
    4. 권한이 있는 사용자에게만 사진을 표시한다.
  • 예외 흐름:
    • 촬영·보관 동의가 없거나 미확인이면 업로드를 막는다.
    • 허용되지 않은 파일이거나 업로드가 실패하면 시술 기록을 유지하고 사진 오류만 표시한다.
    • 병합 시 파일을 복제하지 않고 시술 기록 연결 관계를 유지한다.
  • 완료 조건: 선택한 사진이 시술 기록에 안전하게 연결되고 권한과 보유기간이 적용된다.

FR-010 예약 확인 건 등록·수정

  • 주체: 원장님, 디자이너
  • 시작 조건: 오늘·내일 예약 확인, 고객 상세 또는 시술 기록 작성에서 예약 등록을 선택했다.
  • 정상 흐름:
    1. 휴대전화 번호로 기존 고객을 찾거나 새 고객을 등록한다.
    2. 방문 예정 일시, 담당 디자이너, 예정 시술과 접점을 입력한다.
    3. 고객 확인 상태를 입력한다.
    4. 예약 등록 당시 고객명과 휴대전화 번호를 예약 연락처 스냅샷으로 저장한다.
    5. 운영 메시지 발송 일정을 계산한다.
  • 예외 흐름:
    • 번호가 검토 필요이면 자동 발송을 예약하지 않고 검토 필요로 표시한다.
    • 같은 고객, 방문 일시, 담당 디자이너의 중복 예약 후보가 있으면 경고한다.
    • 방문 예정 일시가 과거이면 신규 미래 예약으로 저장하지 않는다.
    • 다른 가게 직원이나 고객을 연결하면 저장을 거부한다.
  • 완료 조건: 예약 확인 건이 고객 및 담당 디자이너와 연결되고 알림톡 발송 대상 여부가 계산된다.

FR-011 오늘·내일 예약 확인

  • 주체: 원장님, 디자이너
  • 시작 조건: 로그인 후 오늘·내일 예약 확인 화면에 접근했다.
  • 정상 흐름:
    1. Asia/Seoul 기준 오늘과 내일의 예약 확인 건을 구분해 표시한다.
    2. 방문 예정 일시, 고객, 담당 디자이너, 예정 시술을 표시한다.
    3. 고객 확인 상태와 운영 메시지 발송 상태를 표시한다.
    4. 오늘 예약에는 방문 결과를 입력할 수 있게 한다.
    5. 예약 확인 건을 직접 추가하거나 수정할 수 있게 한다.
  • 예외 흐름:
    • 알림톡 설정이 유효하지 않으면 상단에 자동 발송 불가 원인을 표시한다.
    • 실패한 운영 메시지가 있으면 수동 연락 대상으로 표시한다.
    • 디자이너에게는 권한이 있는 예약 확인 건만 표시한다.
  • 완료 조건: 사용자가 오늘·내일 예약의 안내 상태, 고객 확인 상태와 방문 결과를 한 화면에서 처리할 수 있다.

FR-012 전날 오후 6시 예약 확인 알림톡 발송

  • 주체: 시스템
  • 시작 조건: Asia/Seoul 기준 오후 6시가 됐고 다음 날 방문 예정인 예약 확인 건이 있다.
  • 정상 흐름:
    1. 예약 확인 건이 고객 취소 또는 매장 취소가 아닌지 확인한다.
    2. 유효한 발신 프로필과 예약 확인 알림톡 템플릿을 확인한다.
    3. 예약 연락처 스냅샷의 번호를 검증한다.
    4. 방문 일시, 담당 디자이너, 예정 시술, 변경·취소 안내를 템플릿에 적용한다.
    5. 알림톡을 한 번 발송한다.
    6. 요청 식별값과 발송 상태를 예약 확인 건에 저장한다.
  • 예외 흐름:
    • 발신 프로필, 템플릿 또는 API 연결이 유효하지 않으면 발송을 중지한다.
    • 번호 충돌이나 병합 검토가 끝나지 않았으면 자동 발송을 중지한다.
    • 같은 예약 확인 건과 안내 종류가 이미 성공했다면 다시 발송하지 않는다.
    • 오후 6시 이후 새로 등록된 다음 날 예약의 처리 방식은 확인 필요로 표시한다.
  • 완료 조건: 대상 예약 확인 건마다 성공, 실패 또는 자동 발송 중지 상태와 원인이 남는다.

FR-013 방문 3시간 전 당일 예약 안내 알림톡 발송

  • 주체: 시스템
  • 시작 조건: 예약 방문 시각 3시간 전이고 방문 시간이 지나지 않았다.
  • 정상 흐름:
    1. 예약 확인 건이 고객 취소 또는 매장 취소가 아닌지 확인한다.
    2. 당일 예약 안내 템플릿과 발신 프로필 상태를 확인한다.
    3. 예약 연락처 스냅샷을 발송 대상으로 사용한다.
    4. 당일 예약 안내 알림톡을 한 번 발송한다.
    5. 요청 식별값과 발송 상태를 예약 확인 건에 저장한다.
  • 예외 흐름:
    • 방문 시각이 지났으면 자동 발송하지 않는다.
    • 번호 오류, 병합 충돌 또는 알림톡 연결 오류가 있으면 수동 연락 대상으로 전환한다.
    • 이미 성공한 당일 안내는 상태 재계산 과정에서 다시 발송하지 않는다.
    • 방문 3시간 이내에 새로 등록된 예약의 처리 방식은 확인 필요로 표시한다.
  • 완료 조건: 당일 안내 발송 결과가 예약 확인 건에 기록되고 중복 발송이 발생하지 않는다.

FR-014 운영 메시지 상태 수신과 발송 일정 재계산

  • 주체: 시스템
  • 시작 조건: 알림톡 API 결과가 수신되거나 예약 확인 건의 시간·취소 상태·고객 연결이 변경됐다.
  • 정상 흐름:
    1. 알림톡 요청 식별값과 결과 식별값으로 대상 운영 메시지를 찾는다.
    2. 처리 중, 성공 또는 실패 상태를 반영한다.
    3. 예약 시간이 변경되면 아직 성공하지 않은 발송 일정을 다시 계산한다.
    4. 고객 취소나 매장 취소가 입력되면 발송 예정 작업을 취소한다.
    5. 고객 병합 또는 번호 충돌이 발생하면 발송 대상 번호를 재검증한다.
  • 예외 흐름:
    • 같은 결과가 여러 번 들어와도 최종 상태가 잘못 바뀌지 않게 한다.
    • 성공 상태를 뒤늦게 도착한 처리 중 상태로 되돌리지 않는다.
    • 이미 성공한 운영 메시지는 예약 수정만으로 자동 재발송하지 않는다.
  • 완료 조건: 예약 확인 건의 운영 메시지 상태가 실제 발송 결과와 일치하고 일정 변경에 안전하게 대응한다.

FR-015 알림톡 연결과 템플릿 상태 관리

  • 주체: 원장님
  • 시작 조건: 원장님이 알림톡 설정 화면에 접근했다.
  • 정상 흐름:
    1. 발신 프로필 연결 상태를 확인한다.
    2. 예약 확인과 당일 안내에 사용할 알림톡 템플릿을 각각 연결한다.
    3. API 요청 및 결과 수신 연결 상태를 확인한다.
    4. 각 템플릿의 사용 가능 상태를 표시한다.
    5. 자동 발송 가능 여부를 저장한다.
  • 예외 흐름:
    • 템플릿이 승인되지 않았거나 발신 프로필이 유효하지 않으면 자동 발송을 중지한다.
    • 연결 테스트에 실패하면 실패 원인과 수동 연락 대체 기능을 안내한다.
  • 완료 조건: 원장님이 자동 발송 가능 여부와 불가능한 원인을 확인할 수 있다.

FR-016 알림톡 실패 시 수동 연락 관리

  • 주체: 원장님, 담당 디자이너
  • 시작 조건: 알림톡 연결이 불가능하거나 운영 메시지 발송이 실패 또는 중지됐다.
  • 정상 흐름:
    1. 오늘·내일 예약 확인에 수동 연락 대상을 표시한다.
    2. 직원이 전화, 카카오톡 채널 등 실제 사용한 연락 채널을 선택한다.
    3. 연락 일시와 연락 결과를 입력한다.
    4. 예약 확인 건에 수동 연락 기록을 저장한다.
  • 예외 흐름:
    • 연락 결과가 없으면 완료로 처리하지 않는다.
    • 알림톡이 나중에 성공해도 이미 저장된 수동 연락 기록은 삭제하지 않는다.
  • 완료 조건: 알림톡을 보내지 못한 예약 확인 건마다 연락 여부와 결과를 추적할 수 있다.

FR-017 방문 결과 기록과 시술 기록 미작성 내부 할 일

  • 주체: 원장님, 담당 디자이너, 시스템
  • 시작 조건: 오늘 예약의 방문 결과를 처리한다.
  • 정상 흐름:
    1. 시술 완료, 노쇼, 고객 취소 또는 매장 취소 중 하나를 선택한다.
    2. 시술 완료를 선택하면 연결된 시술 기록이 있는지 확인한다.
    3. 시술 기록이 없으면 담당 디자이너에게 내부 할 일을 한 번 생성한다.
    4. 내부 할 일에서 시술 기록 작성 화면으로 이동할 수 있게 한다.
    5. 시술 기록이 저장되면 내부 할 일을 자동 완료한다.
  • 예외 흐름:
    • 같은 예약 확인 건에 미작성 내부 할 일을 중복 생성하지 않는다.
    • 방문 결과가 시술 완료에서 다른 결과로 변경되면 미작성 할 일을 취소 또는 종료한다.
    • 담당 디자이너 계정이 차단 상태라면 원장님에게도 미작성 상태를 표시한다.
  • 완료 조건: 모든 시술 완료 예약은 시술 기록과 연결되거나 미작성 내부 할 일로 추적된다.

FR-018 시술 뒤 다음 예약 등록

  • 주체: 원장님, 담당 디자이너
  • 시작 조건: 시술 기록을 작성하면서 고객의 다음 방문 일시를 정했다.
  • 정상 흐름:
    1. 다음 예약 일시, 담당 디자이너와 예정 시술을 입력한다.
    2. 현재 고객과 연결된 새 예약 확인 건을 생성한다.
    3. 시술 직후 등록된 재예약임을 저장한다.
    4. 운영 메시지 발송 일정을 계산한다.
    5. 고객 단계를 다음 예약 잡힘으로 재계산한다.
  • 예외 흐름:
    • 다음 예약 일시가 시술 일시보다 빠르면 저장하지 않는다.
    • 담당 디자이너가 비활성 상태이면 다른 담당 디자이너를 선택하게 한다.
    • 동일 시간의 중복 후보가 있으면 경고한다.
  • 완료 조건: 시술 기록과 다음 예약 확인 건이 연결되고 시술 직후 재예약 여부를 계산할 수 있다.

FR-019 고객 단계 자동 분류

  • 주체: 시스템
  • 시작 조건: 고객, 예약 확인 건, 방문 결과, 시술 기록, 병합 또는 병합 취소가 변경됐다.
  • 정상 흐름:
    1. 완료된 시술 기록 수를 계산한다.
    2. 앞으로 잡힌 유효한 예약 확인 건이 있는지 확인한다.
    3. 마지막 시술일과 뜸해짐 기준일을 계산한다.
    4. 고객 단계를 다시 계산해 저장한다.
    5. 계산 근거를 다시 실행할 수 있게 유지한다.
  • 예외 흐름:
    • 고객 단계 저장값과 실제 기록이 다르면 실제 기록을 기준으로 다시 계산한다.
    • 고객 취소·매장 취소·노쇼 예약은 미래 유효 예약으로 계산하지 않는다.
    • 병합됨 고객은 대표 고객의 단계 계산에서 원본 기록이 중복 집계되지 않게 한다.
  • 완료 조건: 고객의 현재 단계가 예약 확인 건과 시술 기록의 실제 상태를 반영한다.
  • 구현 기준안:
    1. 미래 재예약이 있는 시술 고객: 다음 예약 잡힘
    2. 미래 예약이 있고 시술 이력이 없는 고객: 방문 예약됨
    3. 마지막 시술 후 달력 기준 2개월이 지났고 미래 예약이 없는 고객: 뜸해짐
    4. 시술 기록이 2건 이상이고 미래 예약이 없는 고객: 재방문 고객
    5. 시술 기록이 1건이고 미래 예약이 없는 고객: 시술 완료
    6. 시술 이력과 미래 예약이 없는 활성 고객: 문의 중
  • 확인 필요: 여러 단계 조건이 동시에 맞을 때 위 우선순서를 사용할지 확정해야 한다.

FR-020 뜸해진 고객 자동 분류와 목록 조회

  • 주체: 원장님, 디자이너, 시스템
  • 시작 조건: 마지막 시술일에서 뜸해짐 기준일이 지났거나 뜸해진 고객 화면에 접근했다.
  • 정상 흐름:
    1. 마지막 시술일로부터 달력 기준 2개월이 지난 고객을 찾는다.
    2. 앞으로 잡힌 유효 예약 확인 건이 없는지 확인한다.
    3. 조건에 맞으면 고객 단계를 뜸해짐으로 변경한다.
    4. 담당 디자이너별로 고객을 표시한다.
    5. 마지막 시술일과 마케팅 수신동의 상태를 함께 표시한다.
  • 예외 흐름:
    • 새 예약이 등록되면 뜸해진 고객 목록에서 제거하고 단계를 재계산한다.
    • 마지막 시술일이 없으면 뜸해짐으로 분류하지 않는다.
    • 고객 병합 또는 병합 취소 후 날짜와 예약을 다시 계산한다.
  • 완료 조건: 원장님과 디자이너가 권한 범위에서 두 달 넘게 방문하지 않았고 미래 예약이 없는 고객을 확인할 수 있다.
  • 확인 필요: ‘두 달’을 마지막 시술일의 시각까지 비교할지, 해당 날짜의 시작 또는 종료 시점으로 비교할지 확정해야 한다.

FR-021 뜸해진 고객 연락 관리

  • 주체: 원장님, 담당 디자이너
  • 시작 조건: 뜸해진 고객 목록에서 고객을 선택했다.
  • 정상 흐름:
    1. 마케팅 수신동의 상태를 확인한다.
    2. 연락 일시, 연락 채널과 연락 결과를 입력한다.
    3. 입력자를 포함해 고객별 연락 이력으로 저장한다.
    4. 최근 연락 결과를 목록에 표시한다.
  • 예외 흐름:
    • 마케팅 수신동의가 거부 또는 미확인이면 광고성 연락 대상 선택을 막고 사유를 표시한다.
    • 이미 발생한 연락 사실은 동의 상태와 관계없이 운영 기록으로 남길 수 있다.
    • 이 화면에서는 재방문 광고를 자동 발송하지 않는다.
  • 완료 조건: 뜸해진 고객별로 누가 언제 어떤 채널로 연락했고 결과가 무엇인지 확인할 수 있다.

FR-022 CSV 자료 가져오기와 수첩 자료 입력

  • 주체: 원장님
  • 시작 조건: 원장님이 자료 가져오기·중복 합치기 화면에서 파일 업로드 또는 수첩 자료 입력을 선택했다.
  • 정상 흐름:
    1. 엑셀·구글시트에서 내려받은 CSV 파일을 업로드한다.
    2. 고객, 방문·시술 기록 또는 예약 확인 건 자료 유형을 선택한다.
    3. 원본 열을 CRM 항목과 연결한다.
    4. 전화번호, 날짜, 이름과 담당자 값을 임시 저장 영역에서 검증한다.
    5. 정상 행, 중복 후보, 가져오기 오류 행을 구분한다.
    6. 검토가 끝난 정상 자료만 운영 데이터에 반영한다.
    7. 수첩 자료는 고객 등록 및 시술 기록 작성 흐름을 통해 직접 입력한다.
  • 예외 흐름:
    • 원본 파일을 검증 없이 운영 데이터에 직접 저장하지 않는다.
    • 현재 직원과 연결되지 않는 담당자 이름은 이전 담당자 텍스트로 보존한다.
    • 전화번호가 없거나 잘못된 행은 삭제하지 않고 가져오기 오류 행으로 보관한다.
    • 톡톡, 카카오톡 채널, 개인 카카오톡, SNS와 전화의 대화 내용은 가져오기 항목으로 제공하지 않는다.
  • 완료 조건: 고객 정보, 방문 이력, 시술 메모, 염색약 번호, 배합과 필요한 예약 확인 정보가 검토 후 CRM에 반영된다.

FR-023 가져오기 오류 행 수정·재처리와 중복 방지

  • 주체: 원장님, 시스템
  • 시작 조건: 자료 가져오기에서 전화번호, 날짜 또는 담당자 연결 오류가 발견됐다.
  • 정상 흐름:
    1. 원본 파일, 원본 행 번호, 원본 값과 오류 이유를 보관한다.
    2. 원장님이 잘못된 값을 수정한다.
    3. 해당 오류 행만 다시 검증한다.
    4. 정상으로 바뀐 행만 운영 데이터에 반영한다.
    5. 처리 결과를 자료 가져오기 작업에 기록한다.
  • 예외 흐름:
    • 같은 파일을 다시 업로드해도 자료 가져오기 작업 식별값과 행 식별값으로 중복 생성을 막는다.
    • 일부 행 처리에 실패하면 실패 행을 남기고 정상 반영 결과와 구분한다.
  • 완료 조건: 원장님이 가져오기 오류 행을 잃지 않고 수정·재처리할 수 있으며 고객과 시술 기록이 중복 생성되지 않는다.

FR-024 중복 고객 병합 검토와 실행

  • 주체: 원장님
  • 시작 조건: 같은 가게에서 정규화 번호가 같은 고객이 발견됐다.
  • 정상 흐름:
    1. 두 고객의 이름, 담당 디자이너, 최근 시술일, 시술 기록 수를 비교한다.
    2. 개인정보 및 마케팅 수신동의 상태를 비교한다.
    3. 미래 예약 확인 건과 발송 예정 운영 메시지를 비교한다.
    4. 대표 고객을 선택한다.
    5. 충돌하는 이름, 담당 디자이너와 동의 상태의 대표값을 선택한다.
    6. 병합 사유를 입력한다.
    7. 시술 기록과 예약 확인 건을 대표 고객에 연결한다.
    8. 통합 대상 고객을 삭제하지 않고 병합됨 상태로 변경한다.
    9. 병합 이력을 생성한다.
  • 예외 흐름:
    • 정규화 번호가 검토 필요이면 자동 병합하지 않는다.
    • 마케팅 수신동의가 충돌하면 수신 거부를 기본 제안하되 원본 이력을 모두 보존한다.
    • 병합으로 새로운 동의를 만들거나 수신 거부를 동의로 확대하지 않는다.
    • 미래 예약이나 발송 예정 알림톡의 연락처가 충돌하면 자동 발송을 중지하고 검토 필요로 표시한다.
    • 병합 도중 오류가 발생하면 전체 작업을 되돌린다.
  • 완료 조건: 대표 고객에서 통합된 시술 이력과 예약 확인 건을 볼 수 있고 통합 대상 고객과 병합 근거가 보존된다.

FR-025 병합 이력 조회와 병합 취소

  • 주체: 원장님
  • 시작 조건: 고객 상세, 중복 고객 병합 검토 또는 원장 설정에서 병합 이력을 선택했다.
  • 정상 흐름:
    1. 병합 실행자, 실행 시각, 병합 사유와 충돌 선택값을 표시한다.
    2. 이동한 시술 기록과 예약 확인 건을 표시한다.
    3. 원장님이 병합 취소를 선택한다.
    4. 병합 작업으로 이동한 기록을 원래 고객으로 되돌린다.
    5. 대표 고객과 통합 대상 고객의 상태를 다시 계산한다.
    6. 고객 단계와 알림톡 발송 일정을 다시 계산한다.
  • 예외 흐름:
    • 병합 후 새로 생성된 기록은 자동으로 분리하지 않고 검토 필요로 표시한다.
    • 다른 병합이나 수정이 진행 중이면 동시에 실행하지 않는다.
    • 원래 고객이 삭제 또는 알아볼 수 없게 처리됐으면 자동 취소하지 않고 원인을 표시한다.
    • 취소 도중 오류가 나면 전체 취소 작업을 되돌린다.
  • 완료 조건: 병합 작업 단위로 원래 고객 연결을 복원할 수 있고 취소 이력이 추가로 남는다.

FR-026 개인정보 및 마케팅 수신동의 관리

  • 주체: 원장님, 권한이 있는 디자이너
  • 시작 조건: 고객을 등록하거나 고객의 동의 상태를 변경한다.
  • 정상 흐름:
    1. 개인정보 이용 목적, 수집 항목과 보유기간을 안내한다.
    2. 개인정보 동의 상태, 동의일, 경로와 변경자를 저장한다.
    3. 마케팅 수신동의를 개인정보 동의와 별도로 저장한다.
    4. 상태가 바뀌면 이전 상태를 동의 이력에 보관한다.
    5. 기존 자료에서 동의를 확인할 수 없으면 동의 미확인으로 표시한다.
  • 예외 흐름:
    • 동의일이나 동의 경로가 없는 기존 자료는 임의로 동의 처리하지 않는다.
    • 고객 병합으로 동의 범위를 확대하지 않는다.
    • 마케팅 수신 거부 고객을 광고 연락 대상으로 선택하지 않는다.
  • 완료 조건: 현재 동의 상태와 전체 변경 이력을 확인할 수 있고 개인정보 동의와 마케팅 수신동의가 분리되어 있다.

FR-027 보유기간 및 삭제 요청 처리

  • 주체: 원장님
  • 시작 조건: 고객의 정보 보유기간이 지났거나 고객이 삭제를 요청했다.
  • 정상 흐름:
    1. 마지막 방문일과 설정된 보유기간을 기준으로 대상 고객을 찾는다.
    2. 원장님이 대상 기록과 연결된 예약 확인 건, 시술 기록과 사진을 확인한다.
    3. 정해진 운영 정책에 따라 삭제하거나 알아볼 수 없게 처리한다.
    4. 처리자, 처리 시각, 처리 근거와 처리 범위를 기록한다.
  • 예외 흐름:
    • 진행 중인 미래 예약이나 처리되지 않은 운영 메시지가 있으면 먼저 확인하게 한다.
    • 병합됨 고객은 대표 고객과 병합 이력을 함께 검토한다.
    • 보존이 필요한 운영 이력이 있으면 고객을 알아볼 수 없게 처리한 뒤 최소 정보만 유지한다.
  • 완료 조건: 보유기간 초과 또는 삭제 요청 고객의 정보와 시술 사진이 정해진 정책에 따라 처리되고 처리 이력이 남는다.
  • 확인 필요: 고객 정보, 시술 기록, 알림톡 결과, 병합 이력과 시술 사진의 구체적인 보유기간을 확정해야 한다.

FR-028 조회·수정·내보내기 및 권한 변경 이력

  • 주체: 원장님, 시스템
  • 시작 조건: 직원이 고객 상세, 시술 사진, CSV 원본 또는 병합 이력을 조회·수정·내보내거나 권한을 변경했다.
  • 정상 흐름:
    1. 사용자, 가게, 작업 종류, 대상 기록과 발생 시각을 저장한다.
    2. 수정 작업에는 변경 전후 값을 확인할 수 있는 근거를 남긴다.
    3. 원장님이 직원·권한 설정에서 이력을 검색한다.
  • 예외 흐름:
    • 이력 저장 실패 시 개인정보 내보내기나 권한 변경처럼 추적이 필요한 작업을 완료 처리하지 않는다.
    • 디자이너는 가게 전체 이력을 조회할 수 없다.
  • 완료 조건: 원장님이 누가 언제 어떤 고객 기록을 조회·수정·내보냈고 권한을 변경했는지 확인할 수 있다.

FR-029 운영 지표 계산

  • 주체: 원장님, 시스템
  • 시작 조건: 원장님이 운영 지표를 확인하거나 관련 예약·시술 기록이 변경됐다.
  • 정상 흐름:
    1. 노쇼율을 계산한다.
    2. 예약 확인 안내 발송률을 계산한다.
    3. 두 달 내 재방문율을 계산한다.
    4. 시술 기록 완료율을 계산한다.
    5. 시술 직후 재예약률을 계산한다.
    6. 계산 기간과 기준 건수를 함께 표시한다.
  • 예외 흐름:
    • 분모가 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. 확인 필요 항목

  1. 대체 시술 열람 방식

    • 임시 열람 요청 후 원장님 승인
    • 원장님이 일정 시간 임시 권한 부여
    • 담당 디자이너 변경
      세 방식 중 하나를 확정해야 한다.
  2. 뜸해짐 계산 시점

    • 마지막 시술일로부터 달력 기준 2개월을 사용한다.
    • 기준일 당일의 어느 시점부터 뜸해짐으로 표시할지 확정해야 한다.
  3. 고객 단계 우선순위

    • FR-019의 우선순위 기준안을 사용할지 확정해야 한다.
  4. 고객 확인 상태

    • 예약 확인 건에 저장할 고객 확인 상태의 구체적인 값은 확정되지 않았다.
  5. 늦게 등록된 예약의 운영 메시지

    • 전날 오후 6시 이후 등록된 다음 날 예약
    • 방문 3시간 이내에 등록된 당일 예약
      위 예약을 즉시 자동 발송할지, 수동 연락 대상으로 둘지 확정해야 한다.
  6. 로그인 수단

    • 직원 계정의 실제 로그인 수단과 계정 생성·재설정 방식을 확정해야 한다.
  7. 알림톡 사용 조건

    • 온헤어 카카오톡 채널의 발신 프로필과 API 사용 조건을 확인해야 한다.
    • 연결할 수 없는 경우에도 수동 연락 기능은 유지한다.
  8. 시술 사진 운영 기준

    • 촬영·보관 동의 문구
    • 사진 보유기간
    • 허용 파일 형식과 파일 크기
    • 삭제 요청 처리 범위
  9. 염색 기록 필수 범위

    • 염색 시술에서 염색약 번호와 배합을 필수 입력으로 강제할지 확정해야 한다.
  10. 개인정보 보유기간

    • 고객 정보, 시술 기록, 시술 사진, 운영 메시지 결과와 병합 이력별 보유기간을 확정해야 한다.

10. 운영·법률 확인 항목

  • 고객 등록 시 개인정보 이용 목적, 수집 항목과 보유기간을 안내할 수 있는 문구를 준비한다.
  • 마케팅 수신동의는 개인정보 동의와 분리한다.
  • 예약 확인 및 당일 안내에 할인이나 재방문 권유를 포함하면 광고성 메시지 여부를 다시 검토한다.
  • 광고성 메시지를 운영하게 될 경우 (광고) 표시, 수신거부 방법과 야간 발송 제한 조건을 실제 발송 템플릿에 반영하는지 확인한다.
  • 시술 사진의 촬영·보관 동의와 보유기간을 별도로 운영할 수 있는지 확인한다.
  • 알림톡 템플릿과 발신 프로필의 실제 등록·승인 조건은 연결할 발송 사업자 기준으로 확인한다.
기능 요구사항 — 동네 헤어샵의 시술 이력과 예약 확인 | Prometheon