PharmAlone 약국장 운영 매뉴얼

약국장 (owner) 권한자가 알아야 할 운영 가이드입니다. 일반 사용 방법은 user_manual.md 를 먼저 참고하세요.


목차

  1. 약국장의 책임
  2. 약국 처음 만들기 (Day 0 setup)
  3. 멤버 초대 & 권한 분배 전략
  4. 초청 코드 운영
  5. 팀 관리 — 역할 변경 & 비활성화
  6. 감사 로그 활용
  7. 데이터 lifecycle (4가지 정리 액션)
  8. 마지막 약국장 (last owner) 가드
  9. 비상 상황 대처
  10. 운영 권장 사항
  11. 장애 보고 / 운영팀 연락

1. 약국장의 책임

PharmAlone 의 약국장은 본인의 약국 데이터에 대한 단독 관리자 역할을 갖습니다.

약국장만 할 수 있는 일

  • 멤버의 역할 변경 (manager ↔ staff ↔ viewer ↔ owner).
  • 멤버의 비활성화 (=강제 추방).
  • 약국 자체 삭제 (= 모든 데이터 영구 파기).

약국장도 못 하는 일 (가드)

  • 본인을 비활성화 (자기 자신 추방 불가).
  • 마지막 owner 인 본인을 강등 (약국이 owner 없는 상태 방지).
  • 다른 약국의 데이터 접근 (Row-Level Security 로 시스템 차단).

권장

  • 약국장은 최소 2명 운영. 한 명이 아프거나 휴가 중이어도 운영 지속 가능.
  • 신뢰할 수 있는 매니저급 직원에게 manager 부여. owner 까지는 신중히.

2. 약국 처음 만들기 (Day 0 setup)

Step 1 — 회원가입

user_manual §2-c 참고. 이메일은 약국장 본인의 상시 사용 이메일 권장 (비상 시 OTP 코드 수신용).

Step 2 — 약국 만들기

설정 → “약국” 섹션 → 내 약국 만들기.

  • 약국 이름: 실제 사업자등록증의 약국명 권장.
  • 닉네임: 본인이 팀에 보일 이름 (예: “박약사”).

자동으로 owner 등록 + 기본 수납장 1개 생성.

Step 3 — 수납장 셋업

user_manual §6 참고.

권장 셋업:

  • 약국의 모든 물리적 수납 위치를 등록. 예시:
    • 전문의약품 (1단 / 2단 / 3단)
    • 일반의약품 (좌 / 우)
    • 한약 / 건강기능식품 / 냉장고 / 온장고 / 마약장
  • 각 수납장에 사진 등록 + 칸 편집 → 약품 추가 시 위치를 한눈에 파악.

Step 4 — 멤버 초대

§3 멤버 초대 & 권한 분배 전략 참고.

Step 5 — 초기 재고 입력

권장:

  • 카운터 직원이 시간 날 때 카메라로 모든 박스를 한 번씩 스캔.
  • 또는 기존 재고 엑셀 → 직접 수동 입력.
  • 며칠에 걸쳐 분산해서 진행하면 부담 적음.

3. 멤버 초대 & 권한 분배 전략

3-a. 권장 권한 매트릭스 (전형적인 약국)

직책 PharmAlone 역할 이유
약국장 (대표 약사) owner 단독 관리자
부원장 / 매니저 manager 데이터 관리 + 멤버 초대 가능
정직원 약사 staff 일상 재고 추가/수정/내보내기 (삭제 X)
파트타임 / 인턴 viewer 보기만 — 실수 / 데이터 유출 차단

3-b. staff 와 manager 구분

작업 staff manager
재고 추가 / 수정 / 내보내기
재고 삭제
수납장 관리
알약 카운팅
초청 코드 발급
감사 로그
멤버 역할 변경 / 비활성화 ❌ (owner 만)

→ “권한이 강한 직원” = manager. 일반 직원 = staff.

3-c. viewer 의 가치

  • 파트타임 / 인턴 / 임시 직원: 데이터 변경 권한 없이 약품 위치만 확인 가능.
  • 임원 / 자문: 운영 상태 확인 용도.
  • 필요할 때만 staff 로 승격.

4. 초청 코드 운영

4-a. 발급

설정 → 초청 코드 관리새 코드 생성.

필드 설명
역할 owner / manager / staff / viewer 중 선택. 받는 사람이 자동으로 그 역할로 합류.
만료 기간 기본 7일. 보통 24시간 ~ 7일이 적절.
메모 (선택) — 누구에게 발급했는지 기록용.

생성 → 8자리 코드 표시. 메시지/카카오톡 등으로 직접 전달.

4-b. 코드 보안

  • 코드는 1회 사용 만 가능. 사용 시 자동 무효화.
  • 만료 시간 지나면 자동 무효화.
  • 외부에 노출되면 즉시 폐기 (“초청 코드 관리” 화면에서 삭제).

4-c. 코드 발급 체크리스트

발급 전 확인:

  • 받는 사람의 역할이 정확한가? (잘못 발급하면 합류 후 owner 가 변경 가능하지만 번거로움)
  • 만료 기간이 적절한가? (24시간 권장)
  • 같은 사람에게 중복 발급 안 했나?

5. 팀 관리 — 역할 변경 & 비활성화

5-a. 진입

설정 → 팀 관리 → 멤버 리스트 표시.

5-b. 역할 변경

멤버 카드 탭 → 역할 변경 → 4가지 중 선택 → 확인.

  • 즉시 적용 (수 초 이내 해당 멤버의 권한 갱신).
  • 강등된 멤버에겐 메인 화면에 “역할이 변경되었습니다” 알림이 8초간 표시됨.
  • staff / viewer 강등 시 사용자에게 사전 안내 권장.

5-c. 비활성화 (=추방)

멤버 카드 탭 → 비활성화 → 확인.

시점 동작
즉시 해당 멤버의 모든 기기에 “이 계정은 비활성화되었습니다” 알림.
확인 후 그 기기의 약국 데이터 삭제 + AuthenticatedSolo 진입 (인증 유지).
향후 같은 사람에게 새 초청 코드 발급 시 다시 합류 가능.

⚠️ 비활성화는 즉시 효과. 본인이 충돌 / 분쟁 후 감정적으로 누르지 마세요. 일단 staff / viewer 로 강등 → 며칠 지켜보고 결정 권장.

5-d. 가드 (시스템이 자동 막음)

  • 자기 자신 비활성화 ❌.
  • 마지막 owner 강등 / 비활성화 ❌ → 먼저 다른 owner 임명.

6. 감사 로그 활용

설정 → 감사 로그 → 모든 멤버의 활동 이력 (시간순).

6-a. 기록되는 액션

  • 재고 추가 / 수정 / 삭제
  • 수납장 / 칸 변경
  • 사진 업로드 / 삭제
  • 멤버 초청 / 역할 변경 / 비활성화
  • 약국 데이터 초기화 / 삭제

각 항목: 누가 / 언제 / 무엇을 / (가능하면) 어떻게 변경했는지.

6-b. 활용 사례

상황 감사 로그 활용
약품이 사라진 것 같음 누가 삭제했는지 확인
수량이 이상함 마지막 수정자 + 시간
분쟁 발생 객관적 이력으로 사실 확인
정기 점검 활동량이 비정상인 멤버 (휴가 중인데 활동? 등)

6-c. 검색 / 필터

  • 멤버별 / 액션별 / 시간 범위 필터 가능.
  • 특정 약품 syncId 로 검색 시 해당 약품의 모든 변경 이력.

7. 데이터 lifecycle (4가지 정리 액션)

7-a. 비교

액션 약국 자체 약국 데이터 다른 멤버 본인 모드 사용 시나리오
약국 떠나기 유지 유지 영향 없음 AuthenticatedSolo 본인이 약국에서 빠지고 싶을 때
데이터 초기화 유지 삭제 모두 영향 OnlineMember 그대로 테스트 데이터 정리 / 새출발
약국 자체 삭제 삭제 삭제 강제 로그아웃 AuthenticatedSolo 약국 폐업 / 운영 종료
회원탈퇴 (조건부) (조건부) 영향 없음 SoloOffline 본인 계정 자체 삭제

7-b. 약국 떠나기

설정 → 탈퇴 / 데이터 정리약국 떠나기 → 확인.

  • 본인의 app_users row 만 비활성화.
  • 약국 / 다른 멤버 / 데이터 모두 그대로.
  • 본인은 자동으로 “약국 만들기 / 합류하기” 화면 (인증 유지).

마지막 owner 인 본인은 떠나기 ❌ → 다른 owner 임명 또는 “약국 자체 삭제” 먼저.

7-c. 약국 데이터 초기화 (manager 이상)

설정 → 약국 데이터 초기화 → 확인.

  • 약국의 모든 약품 / 수납장 / 사진 / 로그 삭제.
  • 약국과 멤버는 그대로 유지.
  • 빈 약국 + 기본 수납장 1개로 다시 시작.
  • 모든 멤버에게 영향. 사전 안내 + 합의 후 진행 권장.
  • 되돌릴 수 없음.

7-d. 약국 자체 삭제 (owner)

설정 → 약국 자체 삭제 → 확인 → 확인 (이중 확인).

시점 서버 상태 클라이언트
즉시 약국 + 모든 멤버 / 약품 / 수납장 / 사진 / 로그 영구 삭제 모든 멤버 기기에 “이 약국이 삭제되었습니다” 알림 (수 초 이내) + 클라이언트 wipe

복구 불가. 약국 삭제 = 영구 파기. 신중히 진행.

7-e. 회원탈퇴

설정 → 회원탈퇴 → 확인.

본인 약국장인 약국 수 동작
0 (멤버 X) 즉시 가능
1 (마지막 owner) ❌ 가드. 약국 자체 삭제 또는 다른 owner 임명 먼저
2+ (다른 owner 있음) 즉시 가능. 본인만 빠짐

8. 마지막 약국장 (last owner) 가드

서버가 자동으로 막는 4가지 케이스:

8-a. 마지막 owner 자기 비활성화

자기 자신 비활성화 자체가 막혀있어 발생 안 함. 단 owner 가 1명일 때 그 owner 가 다른 owner 를 비활성화하면 본인만 owner — 가드 통과 (owner 가 1명 남는 상태로 정상).

8-b. 마지막 owner 강등

owner → manager / staff / viewer 시도 시:

  • 다른 owner 가 1명+ 있으면 OK.
  • 없으면 ❌ + 안내 메시지 (“최소 1명의 약국장이 필요합니다”).

8-c. 마지막 owner 약국 떠나기

→ ❌ + “약국 자체 삭제 또는 다른 owner 임명 먼저” 안내.

8-d. 마지막 owner 회원탈퇴

→ ❌ + 동일 안내. 클라이언트에서 자동으로 안내 다이얼로그 표시.


9. 비상 상황 대처

9-a. 약국을 잘못 삭제했을 때

약국 삭제는 즉시 영구 파기. 복구 불가.

  • 잘못된 삭제 방지를 위해 약국 삭제 다이얼로그에 이중 확인이 적용되어 있음.
  • 폐업 / 운영 종료 외 삭제하지 마세요.
  • 데이터 비우기만 원하면 “약국 자체 삭제” 가 아닌 “약국 데이터 초기화” 사용 (§7-c 참고).

9-b. 멤버를 잘못 비활성화했을 때

설정 → 팀 관리 → (이미 비활성화된 멤버는 리스트에 없음).

해결:

  1. 새 초청 코드를 그 사람에게 발급.
  2. 그 사람이 코드 입력 → 새 app_users row 로 다시 합류 (이전 데이터/이력은 그대로).

9-c. 다른 사람의 비밀번호를 분실했을 때

비밀번호 재설정 기능은 (향후 추가 예정). 현재는:

  • owner 가 그 멤버를 비활성화.
  • 멤버에게 새 초청 코드 발급.
  • 멤버가 새 이메일로 신규 가입 → 합류.

9-d. 모든 클라우드 동기화가 안 됨

  • 각 멤버 기기의 클라우드 아이콘 색상 확인 (모두 빨강이면 운영팀 장애).
  • 네트워크 / WiFi 점검.
  • 앱 재시작.
  • 그래도 안 되면 운영팀 연락 + 발생 시각 + 기기 정보.

9-e. 사진이 동기화 안 됨

  • 클라우드 아이콘 정상 (초록/보라) 인데도 사진만 안 옴 → 자동 재시도 (8초 간격, 5회).
  • 1분 이내 표시되지 않으면 로그 첨부해 운영팀 보고.

10. 운영 권장 사항

10-a. 정기 점검 (월 1회)

  • 감사 로그에서 비정상 활동 (휴가 중인 멤버 활동 / 한밤중 대량 변경) 확인.
  • 비활성 멤버 (사퇴자) 가 남아있는지 → 비활성화.
  • 만료 안 된 초청 코드 (사용 안 됨) → 삭제.
  • 임박 약품 (3개월 이내) 점검 → 발주 / 폐기.
  • CSV 내보내기 → 백업 (월말 보관).

10-b. 신규 직원 입사 시

  1. 본인 이메일로 회원가입 안내.
  2. 약국장 또는 매니저가 적절한 역할의 초청 코드 발급.
  3. 코드 전달 → 합류 확인 (팀 관리에서 새 멤버 표시).
  4. 첫 사용 안내 (user_manual.md 공유).

10-c. 직원 퇴사 시

  1. 즉시 비활성화 (당일).
  2. 인수인계 받을 직원에게 권한 변경 (역할 승격 등).
  3. 사고 방지 위해 같은 날 팀 관리 화면 확인.

10-d. 권한 분배 원칙

  • 최소 권한 원칙 — 그 사람이 일하는데 필요한 만큼만.
  • 모르겠으면 staff (위험 적음) → 필요 시 승격.
  • viewer 는 “확인만 필요한 사람”.

10-e. 백업

  • 클라우드에 모든 데이터가 자동 저장되어 일반 백업 불필요.
  • 단 정기적으로 CSV 내보내기 → 외부 보관 권장 (회계 / 감사 대비).

10-a. 약국 이름 / 닉네임 변경 (Phase 8)

권한

역할 약국 이름 본인 닉네임
owner
manager ❌ (정보만)
staff ❌ (정보만)
viewer ❌ (정보만)

약국 이름은 약국 정체성 통제권 (사업자등록증 영업명) 이라 약국장만 변경 가능. manager / staff 는 본인 닉네임만 변경 가능. viewer 는 둘 다 정보만 조회.

설정 → “계정 / 약국” Section 에 약국 이름 + 닉네임 row 가 표시. 권한자는 chevron + tap 으로 변경 화면 진입.

약국 이름 변경 시 주의

  • 약국 이름은 모든 멤버에게 다음 동기화 시점에 반영 (자동 30초 catch-up 또는 수동 sync).
  • 영업명을 바꾸지 않는데 PharmAlone 의 약국 이름만 바꾸면 직원이 혼란할 수 있음.
  • 1~50자 한도. 빈 입력 / 51자+ → server 가 거부.
  • 약국장 단독 권한이라 직원의 잘못된 변경은 시스템 가드로 차단됨.

닉네임의 의미

  • 본인이 동료에게 표시되는 이름.
  • inventory 의 “마지막 수정” 배지 / 감사 로그 / 팀 관리 화면 등에 노출.
  • 1~30자.
  • 본인 row 만 변경 가능 (RLS).

잘못된 약국 이름 / 닉네임 복구

  • 잘못 변경 후 재변경 가능 (상시).
  • 감사 로그에 변경 이력 남음 (현재 미구현일 수 있음).

11. 장애 보고 / 운영팀 연락

11-a. 보고 형식 권장

- 약국명: ...
- 약국장 이메일: ...
- 발생 시각: 2026-MM-DD HH:MM (대략)
- 기기: 예) iPhone 15 Pro / iOS 17.4 / 앱 v1.2.3
- 절차: 1. ... 2. ... 3. ...
- 기대: ...
- 실제: ...
- 화면 캡처: (첨부)

11-b. 빠른 자가 점검

운영팀 보고 전:

  • 다른 기기 / 다른 멤버에서도 같은 증상?
  • 앱 재시작 후에도 같은가?
  • 인터넷 연결 정상인가?
  • 본인의 역할로 그 기능을 사용할 수 있는가?

11-c. 응급 연락처

  • 일반 문의: km.fitflow@gmail.com

PharmAlone 의 운영자로서 약국 데이터를 책임지고 관리하시는 데 도움이 되길 바랍니다.

문의 / 개선 제안: (운영팀 채널).


마지막 업데이트: 2026-05-06