Auth-RBAC · PIN flow (POS / KDS)

PIN-логин кассира на POS и оператора на KDS. Manager-approval flow для escalations.

Endpoints (через POS BFF, недоступны снаружи стенда)

POST /api/v1/pos/auth/pin                   PIN-логин
                                            требует X-Device-Id header (зарегистрированный POS/KDS device)
                                            body: {pin: "1234"}
GET  /api/v1/pos/auth/me
POST /api/v1/pos/auth/refresh
POST /api/v1/pos/auth/logout

POST /api/v1/pos/manager-auth/verify-pin    manager-approval flow
                                            возвращает X-Approval-Token для escalation действий

Headers

Authorization:    Bearer <jwt>            (после PIN-логина)
X-Device-Id:      <device_id>            (обязателен для всех /api/v1/pos/* запросов)
X-Active-Store:   <store_id>
X-App-Version:    "0.1.1"
X-Approval-Token: <от manager-auth>      (для escalations)

Findings

(пока пусто — PIN flow тестировался только из-за того что snowflake POS desktop работает на стенде)

Тест-кейсы

TC-PIN-001 — Корректный PIN кассира

Status: ⛔ blocked (pos-bff недоступен снаружи) Через POS desktop у Александр работает. Не воспроизводимо через CLI.

TC-PIN-002 — Неверный PIN

Status: ◯ todo (POS desktop)

TC-PIN-003 — PIN-логин без pos.access permission

Status: ◯ todo · TC-CHAIN-087 Кассир без pos.access → отказ при PIN-логине

TC-PIN-KDS-001 — KDS-оператор PIN

Status: ⛔ blocked (тот же эндпоинт /pos/auth/pin) По спеке: KDS-оператор требует kds.access permission, не pos.access.

TC-PIN-MANAGER-APPROVAL — Manager PIN для escalation

Status: ◯ todo Какие действия требуют approval? Нужны спека / observation.

  • pos.discount.apply (скидка)
  • pos.item.cancel (отмена позиции после accepted?)
  • pos.refund (?)