feat(biochem): Фаза 2.1/2.2/2.4 — серверный chem.js + /analyze + подсказки валентности
- biochem-core.js dual-export (browser window.BIO + Node module.exports), без дублей - BIO.valency: подробные подсказки валентности (2.4), общие для редактора и сервера - services/chem.js: серверный анализ поверх того же ядра (analyze/validate) - POST /api/biochem/analyze (2.2); /validate переведён на ядро (+фикс формата связей) - api.js: LS.biochemAnalyze Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -683,13 +683,8 @@ function getBondSum(id) {
|
||||
return bonds.reduce((s,b) => s + (b.from===id||b.to===id ? (b.order||b.o||1) : 0), 0);
|
||||
}
|
||||
function getIssues() {
|
||||
return atoms.filter(a => {
|
||||
const used = bonds.reduce((s,b)=>(b.from===a.id||b.to===a.id)?s+(b.order||1):s,0);
|
||||
return used > (ELEMENTS[a.s]?.maxV ?? 4);
|
||||
}).map(a => {
|
||||
const used = bonds.reduce((s,b)=>(b.from===a.id||b.to===a.id)?s+(b.order||1):s,0);
|
||||
return { id:a.id, s:a.s, used, max: ELEMENTS[a.s]?.maxV??4 };
|
||||
});
|
||||
// Единая проверка валентности из ядра (с подсказками, Фаза 2.4)
|
||||
return BIO.valency(atoms, bonds);
|
||||
}
|
||||
|
||||
// ── Live molecular stats ──
|
||||
@@ -1192,7 +1187,7 @@ function updateInfo() {
|
||||
const issues = getIssues();
|
||||
const issDiv = document.getElementById('bp-issues');
|
||||
if (issues.length) {
|
||||
issDiv.innerHTML = issues.map(i => `<div class="bp-issue"><svg class="ic" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> ${i.s}: ${i.used}/${i.max} связей</div>`).join('');
|
||||
issDiv.innerHTML = issues.map(i => `<div class="bp-issue"><svg class="ic" viewBox="0 0 24 24"><path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> ${i.msg}</div>`).join('');
|
||||
} else if (formula) {
|
||||
issDiv.innerHTML = '<div class="bp-ok"><svg class="ic" viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"/></svg> Валентность в норме</div>';
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user