From 0854c55d9d7987240b77915c864e6d31c68a70eb Mon Sep 17 00:00:00 2001 From: nns Date: Thu, 28 May 2026 12:10:45 +0500 Subject: [PATCH] docs(sprint4): P1-12b done --- docs/sprint4-progress.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/sprint4-progress.md b/docs/sprint4-progress.md index 30f1718..3257606 100644 --- a/docs/sprint4-progress.md +++ b/docs/sprint4-progress.md @@ -16,10 +16,15 @@ с required-полями, конверты `PosSyncResponse` и `PosSaleBatchResponse`, двойная идемпотентность (batch IdempotencyKey + per-sale ClientSaleId). 3 unit-теста на round-trip сериализации. -2. [ ] **P1-12b POS Sync API** — `GET /api/pos/sync?since={iso8601}` возвращает +2. [x] **P1-12b POS Sync API** — `GET /api/pos/sync?since={iso8601}` возвращает изменения после ts (товары, цены, остатки, контрагенты). `POST /api/pos/sales` принимает батч продаж с idempotency-key (повторный запрос возвращает прежний результат без дублей). Multi-tenant: POS-токен ↔ один магазин. + ✅ `/api/pos/v1/sync` и `/api/pos/v1/sales` (URL-versioned). Двойная + идемпотентность: `PosBatchAck` (unique idx OrgId+Key, race ловится 23505) + + ClientSaleId через маркер `pos:GUID32` в `RetailSale.Notes`. Pre-flight + на остатки — недостающие позиции попадают в `Failed`, остальные проводятся. + 7 интеграционных тестов. 3. [ ] **P1-17 Метрики Prometheus** — `prometheus-net.AspNetCore`, `/metrics`. `http_requests_total`, `http_request_duration_seconds`, `db_query_duration_seconds` (через EF interceptor), бизнес: