fix(number-fields): избегаем потери точности длинных чисел

- number-поля теперь рендерятся как text + inputMode=numeric,
  чтобы браузер не округлял значения через input type=number
- пробелы при вставке в number-поля удаляются
- бэкенд нормализует значения number-полей в строку перед сохранением
- добавлен хелпер normalizeFieldValueForStorage

Closes: искажение расчётного счёта и других длинных числовых полей
This commit is contained in:
2026-07-07 21:03:40 +03:00
commit 1f5ecb6da4
1089 changed files with 237546 additions and 0 deletions

70
SESSION_NOTES.md Normal file
View File

@@ -0,0 +1,70 @@
# Заметки по сессии — 15.05.2026
## 1. Geo-поле (Адрес с координатами)
- **Статус:** ✅ Реализовано и задеплоено
- **Компонент:** `client/src/components/GeoField.tsx`
- **API:** `/api/dadata/suggest/address`, `/api/dadata/geolocate`
- **Формат данных:** `{ address: string, lat: number | string, lng: number | string }`
- **Особенности:** совмещённое поле координат ("55.707339, 52.315169"), подсказки DaData, обратное геокодирование
## 2. Исправление ошибки создания задач (bad_request)
- **Причина:** `drizzle-zod@0.7.0` создаёт `strict()` схемы. `insertTaskSchema` не ожидал `customFields`, и zod отклонял запрос.
- **Фикс:** добавлено `customFields: z.record(z.any()).optional()` в `shared/schema.ts`
- **Файл:** `shared/schema.ts`, `insertTaskSchema`
## 3. UI поля "Связь с формой" (task)
- **Проблема:** непонятные подписи "Родительская/дочерняя задача"
- **Решение:** переименовано в "Роль связанной задачи" + добавлены поясняющие описания под каждым вариантом
- **Файл:** `client/src/pages/FormEditor.tsx`
## 4. Очистка Docker
- **Освобождено:** ~4 GB
- **До:** 49 GB, 42 GB использовано (86%)
- **После:** 49 GB, 24 GB использовано (50%)
- **Удалено:** dangling образы iistwin (crm-app-builder, crm-app старые), postgres:16-alpine, build cache
## 5. Удаление заглушек из блока "Финансы"
- **Удалены файлы:**
- `client/src/pages/finance/profitability.tsx`
- `client/src/pages/finance/debt.tsx`
- `client/src/pages/finance/calculations.tsx`
- `client/src/pages/finance/planning.tsx`
- `client/src/pages/finance/audit.tsx`
- `client/src/pages/finance/heatmap.tsx`
- **Убраны:** импорты из `App.tsx`, роуты, экспорты из `index.ts`
- **FinanceSidebar:** оставлены только реальные страницы (Дашборд, Доходы, Расходы, Зарплата, Настройки)
- **FinanceNav:** убраны дубли (Доходы, Расходы, Зарплата, Настройки), оставлены Обзор + Категории доходов/расходов
## 6. Настройка SSH для git на сервере
- **Сгенерирован ключ:** `/root/.ssh/id_ed25519` (ed25519)
- **Добавлен в GitHub:** Settings → SSH keys
- **Git remote:** `git@github.com:iisultanov/iistwin.git`
- **Результат:** `git pull` работает автоматически без пароля
## Кастомизации сервера (НЕ коммитить в GitHub)
| Файл | Изменения |
|------|-----------|
| `docker-compose.yml` | Traefik-метки, `APP_HTTPS_PROXY=true`, сеть `n8n_proxy` |
| `server/index.ts` | `contentSecurityPolicy: false`, `hsts: false`, conditional HSTS |
| `docker-entrypoint.sh` | `echo "y" \| npx drizzle-kit push` + `CREATE EXTENSION vector` |
| `.env` | Секреты, `ALLOW_PRIVATE_RAG_URLS=true`, `API_KEY_HMAC_SECRET` |
## Команды деплоя
```bash
ssh root@82.202.130.22
cd /opt/crm
git pull origin main
docker compose up -d --build
```
## Проверка статуса
```bash
curl -s https://iistwin.ru/api/health
```
## Доступы
- **SSH:** `root@82.202.130.22` (ключ: `C:\Users\User\Yandex.Disk\1kimi\срм\.ssh_id_ed25519_crm`)
- **iistwin:** https://iistwin.ru
- **GitHub:** https://github.com/iisultanov/iistwin
- **MinIO:** http://82.202.130.22:9001