# План работ: Модульная архитектура калькуляторов ## Статус выполнения - [x] Создать систему типов (calculator-types.ts) с FieldConfig, CalculationStep, SubtotalConfig, CalculatorConfig - [x] Вынести калькулятор мыла в модуль (calculators/soap/config.ts и calc.ts) - [x] Создать универсальный компонент CalculatorEngine.tsx для динамического рендеринга и расчетов - [x] Создать компонент CalculatorMenu.tsx для выбора калькулятора на главной странице - [x] Создать систему регистрации калькуляторов (calculator-registry.ts) - [x] Обновить app/page.tsx для отображения меню выбора калькулятора - [x] Адаптировать backend/bot.js для универсальной обработки разных калькуляторов - [x] Удалить старые файлы SoapCalculator.tsx и calc.ts после миграции - [x] Создать документацию по созданию калькуляторов (calculator-creation-guide.md) - [x] Создать CHANGELOG.md с описанием изменений - [x] Создать PLAN.md с планом работ и отслеживанием прогресса ## Выполненные задачи ### ✅ Этап 1: Система типов - Создан файл `frontend/lib/calculator-types.ts` - Определены типы: `FieldConfig`, `CalculationStep`, `SubtotalConfig`, `CalculatorConfig` - Поддержка типов полей: text, number, file - Типы для результатов расчетов: `CalculatorValues`, `CalculationResults` ### ✅ Этап 2: Модуль калькулятора мыла - Создана папка `frontend/calculators/soap/` - Создан файл `calc.ts` с функциями расчета - Создан файл `config.ts` с полной конфигурацией калькулятора мыла - Все поля, формулы и подитоги перенесены в модуль ### ✅ Этап 3: Универсальные компоненты - Создан `CalculatorEngine.tsx` — динамический рендеринг на основе конфигурации - Создан `CalculatorMenu.tsx` — меню выбора калькулятора - Обновлен `app/page.tsx` для использования меню ### ✅ Этап 4: Система регистрации - Создан `calculator-registry.ts` для управления калькуляторами - Реализованы функции: `registerCalculator`, `getCalculator`, `getAllCalculators` - Автоматическая инициализация при импорте ### ✅ Этап 5: Адаптация бэкенда - Обновлен `backend/bot.js` для универсальной обработки - Поддержка готовых сообщений из конфигурации калькулятора - Fallback на универсальное форматирование при отсутствии `formatTelegramMessage` ### ✅ Этап 6: Очистка - Удален старый `SoapCalculator.tsx` - Удален старый `calc.ts` - Все зависимости обновлены ### ✅ Этап 7: Документация - Создано руководство `docs/calculator-creation-guide.md` - Создан `CHANGELOG.md` - Создан `PLAN.md` (этот файл) ## Следующие шаги (будущие улучшения) ### Возможные улучшения - [ ] Добавить валидацию полей на основе конфигурации - [ ] Добавить поддержку условных полей (показывать/скрывать в зависимости от значений) - [x] Добавить поддержку групп полей с показом расчетов между группами - [x] Создать пример калькулятора свечей для демонстрации - [ ] Добавить тесты для модульной системы - [ ] Улучшить обработку ошибок валидации - [ ] Добавить поддержку единиц измерения (г, кг, шт и т.д.) - [ ] Добавить сохранение истории расчетов (локально) ## Структура проекта ``` frontend/ calculators/ # Модули калькуляторов soap/ config.ts # Конфигурация калькулятора мыла calc.ts # Функции расчета candles/ config.ts # Конфигурация калькулятора свечей calc.ts # Функции расчета components/ CalculatorEngine.tsx # Универсальный компонент CalculatorMenu.tsx # Меню выбора lib/ calculator-types.ts # Типы системы calculator-registry.ts # Реестр калькуляторов app/ page.tsx # Главная страница с меню docs/ calculator-creation-guide.md # Руководство backend/ bot.js # Универсальный обработчик API ``` ## Как добавить новый калькулятор 1. Создать папку `frontend/calculators/[название]/` 2. Создать файл `config.ts` с конфигурацией 3. Опционально создать `calc.ts` для сложных расчетов 4. Зарегистрировать в `calculator-registry.ts` Подробные инструкции в `frontend/docs/calculator-creation-guide.md`