const logic = (function() {
// 1. ПОЛНЫЙ СПРАВОЧНИК СПЕЦИАЛЬНОСТЕЙ НА «А» (Приказ 436н + 167н)
const specData = {
"Авиационная и космическая медицина": {
pos: ["Врач по авиационной и космической медицине", "Заведующий структурным подразделением — врач по авиационной и космической медицине"],
m: ["1.5 года", "1 год", "1 год"],
ppReq: "Для ПП требуется интернатура/ординатура ИЛИ стаж более 3 лет по специальностям: Кардиология, Неврология, ОВП, Оториноларингология, Офтальмология, Педиатрия, Профпатология, Скорая помощь, Терапия, Функциональная диагностика, Хирургия.",
canPP: ["Анестезиология-реаниматология", "Физиотерапия", "Ультразвуковая диагностика", "Функциональная диагностика"]
},
"Акушерство и гинекология": {
pos: ["Врач-акушер-гинеколог", "Врач-акушер-гинеколог цехового врачебного участка (прием до 01.09.2026)", "Заведующий структурным подразделения — врач-акушер-гинеколог", "Врач приемного отделения"],
m: ["2 года", "1 год", "1 год"],
ppReq: "Допуск через ординатуру (или интернатуру). Переподготовка на эту специальность приказом 436н не предусмотрена.",
canPP: ["Анестезиология-реаниматология", "Ультразвуковая диагностика", "Гематология", "Онкология", "Паллиативная помощь", "Рентгенэндоваскулярные диагностика и лечение", "Сексология", "Трансфузиология", "Эндоскопия"]
},
"Аллергология и иммунология": {
pos: ["Врач-аллерголог-иммунолог", "Заведующий структурным подразделением — врач-аллерголог-иммунолог"],
m: ["2 года", "1 год", "1 год"],
ppReq: "Для ПП требуется интернатура/ординатура ИЛИ стаж более 3 лет по специальностям: Гастроэнтерология, Дерматовенерология, Детская эндокринология, Кардиология, Неврология, Нефрология, ОВП, Педиатрия, Пульмонология, Ревматология, Терапия, Эндокринология.",
canPP: ["Пульмонология", "Функциональная диагностика"]
},
"Аналитическая токсикология": {
pos: ["Химик-эксперт медицинской организации", "Биолог", "Врач-лаборант (прием до 01.09.2026)", "Заведующий — химик-эксперт", "Заведующий — биолог"],
m: ["Не предусмотрено", "-", "-"],
ppReq: "Для врачей (КЛД, бактериологов и др.) требуется стаж 5 или 10 лет. Для биологов/химиков — профильное высшее образование + ПП.",
isNMD: true // Метка немедицинской специальности
},
"Анестезиология-реаниматология": {
pos: ["Врач-анестезиолог-реаниматолог", "Судовой врач", "Заведующий — врач-анестезиолог-реаниматолог", "Врач приемного отделения"],
m: ["2 года", "1 год", "1 год"],
ppReq: "
Профессиональная переподготовка в объеме не менее 1296 часов доступна при наличии интернатуры/ординатуры по специальностям: Акушерство и гинекология, Детская хирургия, Кардиология, Онкология, Нейрохирургия, Неонатология, Нефрология, Педиатрия, Рентгенэндоваскулярные диагностика и лечение, Сердечно-сосудистая хирургия, Скорая помощь, Терапия, Торакальная хирургия, Травматология и ортопедия, Урология, Хирургия, ЧЛХ.",
canPP: ["Водолазная медицина", "Паллиативная помощь", "Трансфузиология", "Ультразвуковая диагностика", "Функциональная диагностика", "Эндоскопия"]
}
};
// 2. БАЗОВЫЕ ДИПЛОМЫ (Что доступно сразу после ВУЗа)
const baseDB = {
"Лечебное дело": {
pos: ["Врач-терапевт участковый", "Врач по медицинской профилактике", "Врач по медицине здорового долголетия", "Врач приемного отделения", "Врач выездной бригады скорой помощи (с 2023 г.)", "Судовой врач"],
m: ["2 года", "1 год", "1 год"],
ord: ["Авиационная и космическая медицина", "Акушерство и гинекология", "Аллергология и иммунология", "Анестезиология-реаниматология", "Гастроэнтерология", "Гематология", "Генетика", "Гериатрия"],
ppDirect: ["Анестезиология-реаниматология (1296 ч.)", "Нутрициология"]
},
"Педиатрия": {
pos: ["Врач-педиатр участковый", "Врач по медицинской профилактике", "Врач приемного отделения", "Врач выездной бригады скорой помощи (с 2023 г.)", "Врач-педиатр (в школах/садах)"],
m: ["2 года", "1 год", "1 год"],
ord: ["Авиационная и космическая медицина", "Акушерство и гинекология", "Аллергология и иммунология", "Анестезиология-реаниматология", "Гематология", "Генетика"],
ppDirect: ["Анестезиология-реаниматология (1296 ч.)", "Нутрициология"]
}
};
// 3. ПРАВИЛА ПП ПО СТАЖУ (Маршрут 3)
// Здесь должности, по которым накоплен стаж
const stazhRules = {
"Врач-терапевт": {
pp3: ["Авиационная и космическая медицина", "Аллергология и иммунология", "Анестезиология-реаниматология", "Гастроэнтерология", "Гематология", "Гериатрия"],
pp10: ["Авиационная и космическая медицина", "Аллергология и иммунология", "Анестезиология-реаниматология"]
},
"Врач клинической лабораторной диагностики": {
pp5: ["Аналитическая токсикология (НМД)"],
pp10: ["Аналитическая токсикология (НМД)", "Медицинская микробиология"]
},
"Врач-бактериолог": {
pp5: ["Аналитическая токсикология (НМД)", "Вирусология"],
pp10: ["Аналитическая токсикология (НМД)", "Вирусология", "Медицинская микробиология"]
}
};
function cap(s) { return s.charAt(0).toUpperCase() + s.slice(1); }
return {
initBase: function() {
const val = document.getElementById("base-education").value;
const res = document.getElementById("vo-base-res");
if (!val || !baseDB[val]) { res.classList.add("hidden"); return; }
const d = baseDB[val];
document.getElementById("vo-base-positions").innerHTML = d.pos.map(p => `
${p}`).join('');
document.getElementById("m-base-std").innerText = d.m[0];
document.getElementById("m-base-small").innerText = d.m[1];
document.getElementById("m-base-new").innerText = d.m[2];
res.classList.remove("hidden");
this.backToBase();
},
showUI: function(id) {
["box-ordinatura", "box-pp-direct", "box-experience"].forEach(i => document.getElementById(i).classList.add("hidden"));
document.getElementById(id).classList.remove("hidden");
const base = document.getElementById("base-education").value;
if (id === 'box-ordinatura') {
const sel = document.getElementById("sel-ordinatura");
sel.innerHTML = '
' + (baseDB[base].ord || []).sort().map(k => `
`).join('');
}
if (id === 'box-pp-direct') {
const sel = document.getElementById("sel-pp-direct");
sel.innerHTML = '
' + (baseDB[base].ppDirect || []).sort().map(k => `
`).join('');
}
if (id === 'box-experience') {
const sel = document.getElementById("sel-stazh-pos");
sel.innerHTML = '
' + Object.keys(stazhRules).sort().map(k => `
`).join('');
}
},
calcOrdinatura: function() {
const val = document.getElementById("sel-ordinatura").value;
const detail = document.getElementById("res-ord-detail");
const ppSel = document.getElementById("sel-pp-from-ord");
if (!val) return;
const d = specData[val];
document.getElementById("ord-pos-list").innerHTML = d.pos.map(p => `
${p}`).join('');
document.getElementById("ord-m-std").innerText = d.m[0];
document.getElementById("ord-m-small").innerText = d.m[1];
const ppList = d.canPP || [];
if(ppList.length > 0) {
document.getElementById("pp-from-ord-section").classList.remove("hidden");
ppSel.innerHTML = '
' + ppList.sort().map(k => `
`).join('');
} else {
document.getElementById("pp-from-ord-section").classList.add("hidden");
}
detail.classList.remove("hidden");
},
updateStazhSrok: function() {
document.getElementById("stazh-srok-wrapper").classList.remove("hidden");
},
calcStazhPPList: function() {
const pos = document.getElementById("sel-stazh-pos").value;
const srok = document.getElementById("sel-stazh-srok").value;
const res = document.getElementById("res-stazh-pp");
const ppSel = document.getElementById("sel-pp-from-stazh");
if (!pos || !srok) return;
let list = [];
if (srok === "3-5") list = stazhRules[pos].pp3 || [];
if (srok === "5-10") list = stazhRules[pos].pp5 || stazhRules[pos].pp3 || [];
if (srok === "10+") list = stazhRules[pos].pp10 || stazhRules[pos].pp5 || [];
if (list.length > 0) {
ppSel.innerHTML = '
' + list.sort().map(k => `
`).join('');
res.classList.remove("hidden");
} else {
alert("По данной должности и сроку стажа доступных траекторий ПП не найдено.");
res.classList.add("hidden");
}
},
calcFinal: function(selId, resId) {
const val = document.getElementById(selId).value;
const res = document.getElementById(resId);
if (!val) return;
let searchKey = val.split(' (')[0]; // Убираем "(1296 ч.)" для поиска в базе
const d = specData[searchKey];
if (!d) {
res.innerHTML = "Данные по этой специальности в процессе загрузки...";
res.classList.remove("hidden");
return;
}
res.innerHTML = `
${val}
Требование приказа 436н:
${d.ppReq}
💼 Возможные должности:
${d.pos.map(p=>`- ${p}
`).join('')}
🏥 НАСТАВНИЧЕСТВО (Проект 167н):
- Стандартный срок: ${d.m[0]}
- Село / Малые города: ${d.m[1]}
`;
res.classList.remove("hidden");
},
backToBase: function() {
["box-ordinatura", "box-pp-direct", "box-experience"].forEach(i => document.getElementById(i).classList.add("hidden"));
["res-ord-detail", "pp-ord-res", "pp-direct-res", "res-stazh-pp", "pp-stazh-res"].forEach(i => document.getElementById(i).classList.add("hidden"));
}
};
})();