주문
주문 탭은 고객이 넣은 모든 카페테리아 주문을 위한 실시간 대시보드입니다. 3초마다 클라우드를 폴링하며, 새 활동이 있으면 데스크톱 알림, 오디오 알림, 탭 헤더의 대기 수 배지로 알려 줍니다.
레이아웃
주문 페이지는 두 영역으로 나뉩니다.
| 영역 | 용도 |
|---|---|
| 상태 탭 | 주문 상태별 필터입니다: 전체, 접수됨, 확인됨, 준비 중, 준비 완료, 제공됨. 취소 및 환불된 주문은 기본적으로 필터링됩니다. |
| 주문 목록 | 최신 순으로 묶인 주문 카드가 하나씩 표시됩니다. 각 카드에는 테이블 코드, 제공된 경우 고객 전화번호, 항목, 총액, 작업 버튼이 보입니다. |
실시간 폴링
주문 대시보드는 /v1/cafeteria/admin/orders/poll을 3초마다 폴링합니다. 새 주문이 들어올 때마다 다음 작업이 발생합니다.
- 테이블 코드와 항목 수가 포함된 데스크톱 알림이 뜹니다.
- 설정 > 카페테리아에서 알림음이 켜져 있으면 서버 스피커에서 오디오 알림이 재생됩니다.
- 주문 탭의 대기 수 배지가 1 증가합니다.
- 프린터가 새 주문 시 자동 인쇄로 설정되어 있으면 영수증이 자동으로 인쇄됩니다.
배지는 placed 또는 confirmed 상태의 모든 주문이 다음 단계로 진행되거나 해제될 때까지 계속 표시됩니다. 배지는 사이드바의 카페테리아 섹션 전체에서 보이므로, 주문 탭을 열어 두지 않아도 확인할 수 있습니다.
주문 수명주기
모든 주문은 정의된 상태 순서를 따릅니다.
| 상태 | 의미 |
|---|---|
placed |
고객이 주문을 제출했습니다. 아직 직원 조치는 없습니다. |
confirmed |
직원이 주문을 확인했습니다. |
preparing |
주방에서 주문을 준비 중입니다. |
ready |
서비스 또는 픽업 준비가 끝났습니다. |
served |
주문이 고객에게 제공되었습니다. |
cancelled |
직원이 주문을 취소했습니다. 실시간 화면에서는 사라지지만 기록은 남습니다. |
refunded |
결제 후 환불이 처리되었습니다. |
각 주문 카드의 작업 바에는 다음에 가능한 상태가 표시됩니다. 진행은 한 번의 클릭으로 됩니다. UI는 낙관적 업데이트 패턴을 사용합니다. 새 상태가 즉시 표시되며, 서버가 변경을 거부하면 상태가 되돌아가고 오류 알림이 나타납니다.
항목별 상태
일부 주문은 항목마다 완료 시간이 다릅니다. 예를 들어 버거는 피자보다 먼저 준비될 수 있습니다. 항목별 상태를 사용하면 각 줄을 독립적으로 추적할 수 있습니다.
각 항목에는 placed, preparing, ready, served, cancelled의 다섯 가지 옵션이 있는 자체 드롭다운이 있습니다. 또한 각 항목에는 세 개의 타임스탬프가 있습니다.
created_at은 주문이 도착할 때 설정됩니다.ready_at은 항목이 처음ready상태가 될 때 설정됩니다.served_at은 항목이served상태가 될 때 설정됩니다.
고객 메뉴에서는 각 줄 옆에 배지가 표시되어 어떤 항목이 준비되었고 어떤 항목이 아직 진행 중인지 확인할 수 있습니다.
주문 취소
- 주문 카드를 엽니다.
- 취소를 클릭합니다.
- 나타나는 대화상자에서 확인합니다.
- 주문이
cancelled로 전환됩니다. 기록에는 남지만 기본 실시간 화면에서는 사라집니다.
취소는 주문 전체에 대한 작업입니다. 한 줄만 취소하려면 해당 줄의 항목 상태를 cancelled로 바꾸세요.
정산
정산은 테이블의 열린 주문을 한 번에 모두 마감합니다. 고객이 떠나면서 전체 금액을 결제하려 할 때 사용하세요.
- 테이블 페이지 또는 배치도 작업 메뉴에서 테이블을 엽니다.
- 정산을 클릭합니다.
- 모달에는 이미
served가 아닌 테이블의 모든 주문이 표시됩니다. - 결제 수단을 선택합니다. 옵션은 현금, 카드, 온라인, 기타입니다.
- 확인합니다.
서버는 다음 작업을 원자적으로 수행합니다.
- 테이블의 모든 열린 주문이
payment_status=paid와 함께served로 전환됩니다. - 총액, 결제 수단, 생성 시간을 담은
cafeteria_settlements레코드가 생성됩니다. - 어떤 주문이 이 정산에 속하는지 기록하는 settlement-orders 감사 추적이 남습니다.
- 테이블 보안 코드가 만료되어 QR이 무효화됩니다.
- 테이블이
idle로 돌아갑니다.
결제 수단으로 온라인을 선택한 경우 정산 레코드는 online-paid로 표시됩니다. 이 작업으로 Stripe 청구가 발생하지는 않습니다. 고객 측의 온라인 결제는 주문 생성 시 처리되며, 정산 작업은 장부용 현금 흐름 기록만 남깁니다.
열림 시각 타이머
각 테이블에는 고객이 앉을 때 설정되는 opened_at 타임스탬프가 있습니다. 배치도와 테이블 페이지에는 그 순간부터의 실시간 타이머가 표시됩니다. 이를 통해 직원은 오랫동안 주문이 없는 테이블이나 세션 종료가 가까워진 테이블을 쉽게 찾을 수 있습니다.
타이머는 테이블 닫기 또는 정산 시 0으로 재설정됩니다.
동적 준비 시간 표시
상품에 동적 준비 시간이 활성화되어 있으면 주문 카드에 상품명 옆으로 예상 시간이 표시됩니다. 고객용 "메뉴에 준비 시간 표시" 토글이 꺼져 있어도 직원은 이 추정치를 볼 수 있습니다.
예상 시간은 새 주문이 들어올 때와 주문이 완료될 때마다 업데이트됩니다. 시스템은 실제 주방 속도에서 학습합니다.
새 주문 알림 동작
알림은 탭별이 아니라 앱 전체에 대해 발생합니다. 즉, 관리자 패널이나 설정 같은 HandyCafe 서버의 다른 화면을 보고 있어도 알림을 받을 수 있습니다. 오디오 알림은 설정 > 카페테리아 > 알림음에서 켜고 끌 수 있습니다.
데스크톱 알림을 받으려면 운영체제가 HandyCafe에 알림 권한을 허용해야 합니다. 새 주문 후에도 알림이 보이지 않으면 OS 알림 설정을 확인하세요.
팁
- 상태 탭으로 업무를 나누세요.
preparing으로 필터링한 화면은 주방 대기열을 보여 줍니다.ready화면은 배달이 필요한 항목을 보여 줍니다. - 테이블을 빨리 닫으려면 정산이 가장 좋습니다. 개별 주문 취소는 명확한 실수일 때만 사용하세요.
- 직원이 상태를 일관되게 올리도록 교육하세요. 동적 준비 시간 추정기는 이런 신호를 학습하므로 상태를 건너뛰면 정확도가 떨어집니다.
- 취소 및 환불 주문은 관리자 엔드포인트에서 정기적으로 감사해 직원 실수 패턴을 찾아보세요.