PharmAlone 약국장 운영 매뉴얼
PharmAlone 약국장 운영 매뉴얼
약국장 (owner) 권한자가 알아야 할 운영 가이드입니다. 일반 사용 방법은 user_manual.md 를 먼저 참고하세요.
목차
- 약국장의 책임
- 약국 처음 만들기 (Day 0 setup)
- 멤버 초대 & 권한 분배 전략
- 초청 코드 운영
- 팀 관리 — 역할 변경 & 비활성화
- 감사 로그 활용
- 데이터 lifecycle (4가지 정리 액션)
- 마지막 약국장 (last owner) 가드
- 비상 상황 대처
- 운영 권장 사항
- 장애 보고 / 운영팀 연락
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 — 멤버 초대
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. 멤버를 잘못 비활성화했을 때
설정 → 팀 관리 → (이미 비활성화된 멤버는 리스트에 없음).
해결:
- 새 초청 코드를 그 사람에게 발급.
- 그 사람이 코드 입력 → 새 app_users row 로 다시 합류 (이전 데이터/이력은 그대로).
9-c. 다른 사람의 비밀번호를 분실했을 때
비밀번호 재설정 기능은 (향후 추가 예정). 현재는:
- owner 가 그 멤버를 비활성화.
- 멤버에게 새 초청 코드 발급.
- 멤버가 새 이메일로 신규 가입 → 합류.
9-d. 모든 클라우드 동기화가 안 됨
- 각 멤버 기기의 클라우드 아이콘 색상 확인 (모두 빨강이면 운영팀 장애).
- 네트워크 / WiFi 점검.
- 앱 재시작.
- 그래도 안 되면 운영팀 연락 + 발생 시각 + 기기 정보.
9-e. 사진이 동기화 안 됨
- 클라우드 아이콘 정상 (초록/보라) 인데도 사진만 안 옴 → 자동 재시도 (8초 간격, 5회).
- 1분 이내 표시되지 않으면 로그 첨부해 운영팀 보고.
10. 운영 권장 사항
10-a. 정기 점검 (월 1회)
- 감사 로그에서 비정상 활동 (휴가 중인 멤버 활동 / 한밤중 대량 변경) 확인.
- 비활성 멤버 (사퇴자) 가 남아있는지 → 비활성화.
- 만료 안 된 초청 코드 (사용 안 됨) → 삭제.
- 임박 약품 (3개월 이내) 점검 → 발주 / 폐기.
- CSV 내보내기 → 백업 (월말 보관).
10-b. 신규 직원 입사 시
- 본인 이메일로 회원가입 안내.
- 약국장 또는 매니저가 적절한 역할의 초청 코드 발급.
- 코드 전달 → 합류 확인 (팀 관리에서 새 멤버 표시).
- 첫 사용 안내 (user_manual.md 공유).
10-c. 직원 퇴사 시
- 즉시 비활성화 (당일).
- 인수인계 받을 직원에게 권한 변경 (역할 승격 등).
- 사고 방지 위해 같은 날 팀 관리 화면 확인.
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