tremble7681andclaude-flow a5bd7308b5 feat(sto): activate Repair section in PWA (PR-4..PR-7)
Активация раздела «Ремонт» в Premium Мехник PWA: лента + создание ремонта,
фоновая сверка прав (У35), различающие сообщения при отказе входа (У36).

Backend для всех новых API в taxi-dashboard (отдельный commit eccaebe).
Тулится на `ENABLE_STO_MODULE=true` в backend env.

PR-4: Login + useMeSync.
- src/api/me.ts: тип Me расширен (is_admin, can_login_pwa, departments,
  support — для У35/У36).
- src/hooks/useMeSync.ts: фоновая сверка `/me` раз в 5 мин (У35). При
  403 NO_PWA_ACCESS — сброс токена, revocation info в sessionStorage.
  IndexedDB-черновики не трогаются.
- src/pages/Login.tsx: после успешного login делает getMe() и при 403
  показывает баннер «У вас нет доступа» с кликабельным TG/телефонным
  контактом (У36). Баннер также рендерится при revocation после
  фоновой сверки.
- src/App.tsx: useMeSync() подключён в корне.

PR-5: лента ремонтов.
- src/pages/ActionMenu.tsx: снят `comingSoon` с тайла «Ремонт».
- src/pages/repairs/RepairsFeedPage.tsx: лента с infinite scroll (через
  IntersectionObserver), плейсхолдер «В парке пока нет ремонтов» (У41),
  ellipsis-имена работ + плюрализация «+N работ» (У40).
- src/hooks/useRepairsFeed.ts: useInfiniteQuery + stale-while-revalidate
  + visibility refresh (У38).
- src/lib/timeFormat.ts: формат «Сегодня / Вчера / 23 мая» (У39).
- src/api/repairsFeed.ts: GET /api/v1/mechanic/repairs клиент.

PR-7: создание ремонта (online-only).
- src/api/repairsCreate.ts: searchCars, getCarContext, searchWorks,
  suggestParts, presignPhoto + uploadPhotoToTmp (PUT с правильным
  Content-Type), createRepair (POST с Idempotency-Key).
- src/pages/repairs/CarSelectPage.tsx: поиск машины с debounce 200мс.
- src/pages/repairs/CreateRepairPage.tsx: карточка создания ремонта с 5
  inline-блоками (Шапка / Пробег / Фото / Работы / Запчасти / Замена
  масла). UUID v4 как Idempotency-Key. Карандашик-разблокировка цены
  с обязательным комментарием (У19). Мягкая подписка пробега масла
  на шапочный (У24). Дефолт next_in_km=10000 (У25). Полноэкранная
  модалка поиска работ.

Routes: /repairs, /repairs/new, /repairs/new/:carId.

Co-Authored-By: claude-flow <ruv@ruv.net>
2026-05-24 00:16:44 +10:00

mechanic-pwa

Собственное приложение для сотрудников-механиков PremiumPark — замена вендорского приложения «Механик» (NaughtySoft, com.naughtysoft.ttc). Все данные осмотров уходят в собственную PostgreSQL внутри Premium CRM, фото — в собственный MinIO. Никакого вендора и его 1С на критическом пути.

Контекст

Сейчас механики PremiumPark делают осмотры машин через приложение вендора NaughtySoft, поставляемое на условиях абонентки. Подрядчик заморозил разработку, парк хочет независимости. После разведки вендорского стека (см. recon/findings/01-static-analysis.md) принято решение строить собственное PWA — оно охватывает все ключевые сценарии вендора (фото, метки повреждений, история, дифф «было/стало») и хостится в нашей экосистеме.

Объём проекта

Только приложение механика. Это первый sub-project в umbrella-плане замены вендорских приложений. Будущие sub-projects (не в этом репозитории):

Sub-project Описание Статус
mechanic-pwa (этот репо) PWA для сотрудников-механиков парка в работе
driver-app Приложение для водителей — балансы, штрафы, платежи, обращения отложено, будем после mechanic
vendor-bridge Импорт исторических осмотров от вендора отложено

Структура

mechanic-pwa/                                  ← корень git репо
├── docs/superpowers/
│   ├── specs/
│   │   ├── 2026-05-11-driver-app-recon-design.md  ← разведка обоих вендорских приложений
│   │   └── 2026-05-16-premium-mechanic-design.md  ← дизайн нашего mechanic-приложения
│   └── plans/
│       └── 2026-05-16-premium-mechanic-phase1.md  ← план реализации Phase 1 MVP
├── mechanic-pwa/
│   ├── frontend/        ← React+Vite PWA (создаётся в Phase G)
│   └── assets/vendor-reference/    ← извлечённые из APK иконки вендора
├── recon/
│   ├── findings/        ← отчёт разведки (карта API, диаграммы)
│   ├── scripts/         ← mitmproxy фильтры, frida-скрипты, утилиты
│   ├── artifacts/       ← APK, декомпил, mitm dumps (не в git, .gitignore)
│   └── patched/         ← патченые APK для перехвата трафика (не в git)
├── ops/
│   ├── Caddyfile.fragment  ← конфигурация Caddy для mechanic.pptaxi.ru
│   └── minio-cors.json     ← CORS policy для bucket pp-inspections
└── README.md

Внимание: backend-модуль mechanic (Phase B-F плана) живёт не в этом репо, а в виде ветки feat/mechanic-mvp внутри репозитория premium-crm. Этот репо — только frontend + специфика, документация и ops.

Текущая фаза

Phase 1 MVP — см. docs/superpowers/plans/2026-05-16-premium-mechanic-phase1.md. 10 phases (A-J), ~40 задач, 3-4 недели разработки.

Деплой

Production URL: https://mechanic.pptaxi.ru (поддомен от 100.64.0.12, обслуживается Caddy) Бэкенд: модуль mechanic в FastAPI Premium CRM (тот же VDS) Хранилище фото: MinIO pp-inspections (тот же VDS)

S
Description
Premium Механик — PWA для механиков: приёмка и осмотр авто, фото с разметкой повреждений, ремонт и СТО, интеграция 1С (TT) + MinIO. Live: mechanic.pptaxi.ru
Readme
2.7 MiB
Languages
TypeScript 93.5%
Python 3.2%
CSS 1.6%
JavaScript 0.9%
HTML 0.5%
Other 0.3%