Set CRM order status to PACKED after Checkbox accepts the receipt

- ExoCrmClient.set_status: live SetStatus needs {Orders: [id], Status} and
  replies per order, unlike the documented {ID, Status}
- receipts.crm_status_set_at (migration 0006); set right after creation,
  retried by cron, row-locked to avoid a repeat PACKED overwriting a newer status
- CRM errors under capitalized 'Errors' and non-JSON replies are reported

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-24 14:04:26 +03:00
co-authored by Claude Opus 5.5
parent 3a6ad85d11
commit cbf9832e5b
12 changed files with 266 additions and 19 deletions
+2
View File
@@ -138,6 +138,8 @@ webhook в Checkbox, и Checkbox **сам фискализирует** чек.
как в чеках из портала. Боевой API отдаёт статусы строчными (`created`/`done`) — нормализуются.
Лимит списка — 50 за страницу; 429 «Занадто часто» — повторяемая ошибка.
- [x] `alembic upgrade head` на живом Postgres (0004 → 0005 применена в Docker).
- [x] После создания чека — статус заказа в CRM `PACKED` (`SetStatus`, миграция 0006 `receipts.crm_status_set_at`,
повтор cron'ом при сбое CRM). Проверено на боевой CRM: заказы 123901, 123793.
- [ ] Позже (не в этом этапе): `fiscalize-manually`, PDF/ссылка на фискальный чек, webhook вместо опроса.
---