Files
QuoteForge/bible-local/04-api.md
T
Mikhail ChusavitinandClaude Sonnet 5 681ec15e2b feat: режим индикаторов без цветовой кодировки + переустройство /setup
Новая настройка app_settings.indicator_mode (color | accessible), переключается
на /setup. В режиме accessible сигналы, которые раньше держались только на цвете,
переходят на форму/текст:
- качество цены (0-9) — 5-ступенчатый signal-meter вместо градиентной точки/числа;
  единый модуль web/static/price-quality.js, ветвление по window.QF_INDICATOR_MODE;
- вкладка «Ценообразование»: ведущая колонка-meter вместо заливки строк,
  пометка W вместо амбер-подсветки world-цен, ⚠ вместо красного «загрязнённого» итога.
- GET/PUT /api/settings/ui (без рестарта), регистрируется в обоих наборах роутов.

/setup переустроен: две колонки одной высоты, кнопка «Вернуться в приложение»,
исправлен <title>.

Документация: bible-local 02/03/04 + decisions/2026-08-31-accessible-indicator-mode.md

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LbRvQgPZpM4SJTaX3iLrXk
2026-08-31 18:08:38 +03:00

6.2 KiB

04 - API

Public web routes

Route Purpose
/ configurator
/configs configuration list
/configs/:uuid/revisions revision history page
/projects project list
/projects/:uuid project detail
/pricelists pricelist list
/pricelists/:id pricelist detail
/partnumber-books partnumber book page
/setup DB setup page

Setup and health

Method Path Purpose
GET /health process health
GET /setup setup page
POST /setup save tested DB settings
POST /setup/test test DB connection
GET /setup/status setup status
GET /api/db-status current DB/sync status
GET /api/current-user local user identity
GET /api/ping lightweight API ping

POST /api/restart exists only in debug mode.

Settings

Method Path Purpose
GET /api/settings/ui read per-client UI display preferences → { "indicator_mode": "color" | "accessible" }
PUT /api/settings/ui set indicator_mode (body { "indicator_mode": ... }); 422 on an unknown value

Stored in app_settings (SQLite); no restart. Registered in both the normal and the setup-mode route sets. Consumed by web/static/price-quality.js and the pricing tab via a window.QF_INDICATOR_MODE global that base.html renders from the same setting.

Reference data

Method Path Purpose
GET /api/components list component metadata
GET /api/components/:lot_name one component
GET /api/categories list categories
GET /api/pricelists list local pricelists
GET /api/pricelists/latest latest pricelist by source
GET /api/pricelists/:id pricelist header
GET /api/pricelists/:id/items pricelist rows
GET /api/pricelists/:id/lots lot names in a pricelist
GET /api/partnumber-books local partnumber books
GET /api/partnumber-books/:id book items by server_id

Quote and export

Method Path Purpose
POST /api/quote/validate validate config items
POST /api/quote/calculate calculate quote totals
POST /api/quote/price-levels resolve estimate/warehouse/competitor prices (falls back to world source per column, see decisions/2026-07-10-world-pricelist-fallback.md)
POST /api/export/csv export a single configuration
GET /api/configs/:uuid/export export a stored configuration
GET /api/projects/:uuid/export legacy project BOM export
POST /api/projects/:uuid/export pricing-tab project export

Configurations

Method Path Purpose
GET /api/configs list configurations
POST /api/configs/import import configurations from server
POST /api/configs create configuration
POST /api/configs/preview-article preview article
GET /api/configs/:uuid get configuration
PUT /api/configs/:uuid update configuration
DELETE /api/configs/:uuid archive configuration
POST /api/configs/:uuid/reactivate reactivate configuration
PATCH /api/configs/:uuid/rename rename configuration
POST /api/configs/:uuid/clone clone configuration
POST /api/configs/:uuid/refresh-prices refresh prices
PATCH /api/configs/:uuid/project move configuration to project
GET /api/configs/:uuid/versions list revisions
GET /api/configs/:uuid/versions/:version get one revision
POST /api/configs/:uuid/rollback rollback by creating a new head revision
PATCH /api/configs/:uuid/server-count update server count
GET /api/configs/:uuid/vendor-spec read vendor BOM
PUT /api/configs/:uuid/vendor-spec replace vendor BOM
POST /api/configs/:uuid/vendor-spec/resolve resolve PN -> LOT
POST /api/configs/:uuid/vendor-spec/apply apply BOM to cart
PUT /api/configs/:uuid/rental persist Аренда tab state (per-lot New/БУ, weeks, uplift %, annual support)
POST /api/configs/:uuid/rental/calculate compute rental/paid-testing pricing without persisting

Projects

Method Path Purpose
GET /api/projects paginated project list
GET /api/projects/all lightweight list for dropdowns
POST /api/projects create project
GET /api/projects/:uuid get project
PUT /api/projects/:uuid update project
POST /api/projects/:uuid/archive archive project
POST /api/projects/:uuid/reactivate reactivate project
DELETE /api/projects/:uuid delete project variant only
GET /api/projects/:uuid/configs list project configurations
PATCH /api/projects/:uuid/configs/reorder persist line order
POST /api/projects/:uuid/configs create configuration inside project
POST /api/projects/:uuid/configs/:config_uuid/clone clone config into project
POST /api/projects/:uuid/vendor-import import CFXML workspace into project

Vendor import contract:

  • multipart field name is file;
  • file limit is 1 GiB;
  • oversized payloads are rejected before XML parsing.

Sync

Method Path Purpose
GET /api/sync/status sync status
GET /api/sync/readiness sync readiness
GET /api/sync/info sync modal data
GET /api/sync/users-status remote user status
GET /api/sync/pending/count pending queue count
GET /api/sync/pending pending queue rows
POST /api/sync/components pull components
POST /api/sync/pricelists pull pricelists
POST /api/sync/partnumber-books pull partnumber books
POST /api/sync/partnumber-seen report unresolved vendor PN
POST /api/sync/all push and pull full sync
POST /api/sync/push push pending changes
POST /api/sync/repair repair broken pending rows

When readiness is blocked, sync write endpoints return 423 Locked.