38 lines
2.3 KiB
Markdown
38 lines
2.3 KiB
Markdown
# Закупки и инвентарь
|
||
|
||
Модуль хранит заявки на закупку, позиции, маршруты согласования, бюджеты,
|
||
оборудование, обслуживание, передачи и поставщиков. 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, чтобы клиент не получил ссылку на ещё незафиксированное
|
||
состояние.
|