38 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Закупки и инвентарь
Модуль хранит заявки на закупку, позиции, маршруты согласования, бюджеты,
оборудование, обслуживание, передачи и поставщиков. REST API опубликован под
`/api/v1/procurement/`; точный контракт доступен в `/api/docs/`.
## Код модуля
- `models.py` — доменные модели и состояния;
- `services.py` — вычисление маршрутов согласования и общая бизнес-логика;
- `activity.py` — журнал действий;
- `notifications/` — verbs, handlers, signals и read-state integration;
- `api/v1/procurement/` — serializers, permissions, viewsets и router;
- `frontend/src/lib/api/procurement.ts` — frontend client.
Router публикует resources `requests`, `items`, `budgets`,
`equipment-categories`, `equipment`, `maintenance`, `suppliers` и `stats`.
Workflow actions, фильтры и payload необходимо смотреть в OpenAPI, поскольку они
меняются вместе с viewsets.
## Уведомления и realtime
Закупки создают verb-based уведомления через `notifications.signals.notify.send`.
Доставка выполняется общим channel router через Celery с учётом preferences и
DND; прямого рабочего `NotificationService` в проекте нет.
Изменение состояния заявки также может отправлять `procurement_update` через
единый пользовательский endpoint `/ws/`. Отдельный procurement socket не нужен.
- [Руководство по уведомлениям](../../docs/guides/NOTIFICATIONS.md)
- [WebSocket contract](../../docs/guides/WEBSOCKET.md)
- [HTTP API](../../docs/guides/API.md)
При изменении workflow проверяйте object permissions, атомарность транзакции,
activity log, получателей уведомлений и realtime payload. Уведомление следует
планировать после commit, чтобы клиент не получил ссылку на ещё незафиксированное
состояние.