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")); } }; })();