feat(biochem): Фазы 2-7 — химдвижок, баланс, энергодиаграммы, графики, SMILES
Перенос изолированной работы по модулю «Биохимия» на master (разработка велась параллельно с другой сессией; здесь только biochem-файлы). Ядро biochem-core.js: - Фаза 2 (химдвижок): partialCharges (по ЭО), dipole (вектор q·r по 3D VSEPR), polarity, massFractions, functionalGroups, analyze; chargeColor + δ± в рендерах. - Фаза 3: balance() — балансировка уравнений (матрица элементов + дробный Гаусс). - Фаза 7: parseSmiles (учебное подмножество) + toJSON/download. - Фикс 3D-рендера: глубинная сортировка + объёмные связи-цилиндры. Страницы: - biochem.html: δ±-тепловая карта зарядов + стрелка диполя; импорт SMILES; экспорт PNG/JSON; замена крудных эвристик на BIO.analyze (−95 строк). - biochem-reactions.html: энергопрофиль реакции + проверка баланса. - biochem-properties.html: график молярных масс + экспорт CSV. Тесты: backend/tests/biochem-core.test.js (8/8 pass: формулы, VSEPR, заряды, полярность, баланс, SMILES, analyze). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -63,7 +63,14 @@
|
||||
|
||||
---
|
||||
|
||||
## Фаза 2 — Химический движок (свойства из структуры) — [ ]
|
||||
## Фаза 2 — Химический движок (свойства из структуры) — [x]
|
||||
|
||||
> Сделано client-side в `BIO` (для всех страниц, без сервера; тег `biochem-phase2`):
|
||||
> `partialCharges` (по ЭО на связях), `dipole` (вектор q·r по 3D VSEPR), `polarity`
|
||||
> (по диполю), `massFractions`, `functionalGroups`, `analyze` — заменили фронт-эвристику.
|
||||
> Тумблер **δ±** в редакторе: тепловая карта зарядов (синий δ+/красный δ−) в 2D+3D +
|
||||
> стрелка диполя; число диполя в панели свойств.
|
||||
> _Проверено: H₂O O=−0.52/H=+0.26; CO₂/CH₄/CCl₄ диполь 0 → неполярны; H₂O/CHCl₃ полярны._
|
||||
|
||||
Считать химию, а не хранить класс строкой.
|
||||
|
||||
@@ -78,9 +85,16 @@
|
||||
|
||||
---
|
||||
|
||||
## Фаза 3 — Реакции: стехиометрия, баланс, энергетика — [ ]
|
||||
## Фаза 3 — Реакции: стехиометрия, баланс, энергетика — [~]
|
||||
|
||||
- [ ] 3.1 Авто-балансировщик `backend/src/services/balance.js`: матрица элементов → целочисленное решение (Гаусс + НОК). Эндпойнт `POST /api/biochem/balance`.
|
||||
> Сделано (тег `biochem-phase3`): `BIO.balance(reactants,products)` — балансировка
|
||||
> через матрицу «элемент×вещество» + дробный Гаусс (RREF) + НОК/НОД (client-side,
|
||||
> вместо серверного `balance.js`). В [biochem-reactions.html](frontend/biochem-reactions.html) при развороте карточки:
|
||||
> энергетический профиль (реагенты→ПС→продукты) из `energy_kj` + бейдж проверки
|
||||
> баланса. Миграция коэффициентов в БД (3.2) и механизм (3.5) — отложены.
|
||||
> _Проверено: 2H₂+O₂→2H₂O, CH₄+2O₂→…, 4Fe+3O₂→2Fe₂O₃, фотосинтез 6/6/1/6, Ca(OH)₂+2HCl, N₂+3H₂→2NH₃._
|
||||
|
||||
- [x] 3.1 `BIO.balance` (client-side: матрица элементов → целочисленное решение Гаусс+НОК).
|
||||
- [ ] 3.2 Миграция: добавить коэффициенты в `bio_reactions` (`reactant_coef`/`product_coef` JSON или `stoich_json`); пересидировать 27 реакций сбалансированными.
|
||||
- [ ] 3.3 В [biochem-reactions.html](frontend/biochem-reactions.html): показывать сбалансированное уравнение с коэффициентами, проверку сохранения массы/атомов.
|
||||
- [ ] 3.4 Энергетическая диаграмма реакции (reactants → переходное состояние → products) из `energy_kj` — мини-canvas-график, экзо/эндо подпись ΔH.
|
||||
@@ -112,18 +126,29 @@
|
||||
|
||||
---
|
||||
|
||||
## Фаза 6 — Свойства и анализ: вычисления + графики — [ ]
|
||||
## Фаза 6 — Свойства и анализ: вычисления + графики — [~]
|
||||
|
||||
> Сделано (тег `biochem-phase6`): в [biochem-properties.html](frontend/biochem-properties.html) при сравнении 2+
|
||||
> молекул — столбчатый график молярных масс (canvas) + экспорт таблицы в CSV
|
||||
> (UTF-8 BOM). Уход от хардкода `PHYS_PROPS` (6.1) и круговая долей (6.3) — отложены.
|
||||
|
||||
- [ ] 6.1 Убрать хардкод `PHYS_PROPS` (15 молекул) — тянуть вычисляемые (масса, DBE, диполь, доли элементов) из `/analyze`; справочные (T_пл/T_кип/растворимость) — в новую таблицу `bio_mol_props`.
|
||||
- [ ] 6.2 В [biochem-properties.html](frontend/biochem-properties.html): графики сравнения (bar/scatter масса·T_кип) на canvas, экспорт таблицы CSV и PNG структур.
|
||||
- [x] 6.2 График сравнения молярных масс (bar, canvas) + экспорт CSV. _(scatter масса·T_кип и PNG — позже.)_
|
||||
- [ ] 6.3 Доп. свойства: массовая доля элементов (круговая), кислотность/основность класса, окислитель/восстановитель.
|
||||
|
||||
---
|
||||
|
||||
## Фаза 7 — Импорт/экспорт и полировка — [ ]
|
||||
## Фаза 7 — Импорт/экспорт и полировка — [~]
|
||||
|
||||
- [ ] 7.1 Парсер SMILES (подмножество: цепи, ветви `()`, кольца-цифры, кратность) → atoms/bonds; поле ввода в редакторе.
|
||||
- [ ] 7.2 Экспорт молекулы: PNG (2D/3D), JSON, ссылка-share `/biochem?smiles=...`.
|
||||
> Сделано (теги `biochem-phase7`/`biochem-latest`): `BIO.parseSmiles` (учебное
|
||||
> подмножество: атомы верх. регистра, связи -=#, ветви, циклы, неявные H,
|
||||
> 2D-укладка), `BIO.toJSON`/`download`. В редакторе — поле SMILES + Импорт,
|
||||
> экспорт PNG/JSON. Регресс-тесты `backend/tests/biochem-core.test.js` (8/8 pass:
|
||||
> формулы, VSEPR, заряды, полярность, баланс, SMILES, analyze).
|
||||
|
||||
- [x] 7.1 Парсер SMILES (цепи, ветви `()`, кольца-цифры, кратность `-=#`) → atoms/bonds; поле ввода в редакторе.
|
||||
- [x] 7.2 Экспорт молекулы: PNG (текущий 2D/3D холст), JSON. _(share-ссылка `?smiles=` — позже.)_
|
||||
- [x] 7.5 Регресс-тесты ядра (`node --test`, 8 тестов). _(перенесён из плана ниже.)_
|
||||
- [ ] 7.3 Перф: кэш `biochemGetMolecules` (общий стор), throttle поиска/фильтров, LOD для thumbnail больших молекул (АТФ и т.п.).
|
||||
- [ ] 7.4 Мобайл/a11y: читаемый sidebar на ≤768px, фокус-навигация, aria для canvas-инструментов.
|
||||
- [ ] 7.5 Регресс-тесты: `backend/tests/biochem.test.js` — VSEPR, баланс, analyze, фиче-флаг `requireFeature('biochem')`.
|
||||
|
||||
Reference in New Issue
Block a user