import{B as e,L as t}from"./Card-Cxq4Ee-X.js";import{C as n,m as r,v as i,x as a,y as o}from"./supplements-DUypwbGQ.js";import{c as s,g as c,l,v as u}from"./supplementLabRetakePolicy-DYFjnA-6.js";function d(e,t,n,r){let i=u(e);if(i)return s({definition:i,result:l(t,e),profile:n,nowISO:r})}function f(e){return u(e)?.shortName??u(e)?.name??e}function p(n,r){return e(`labs.display.supplementGuidance.${n}`,r,t())}function m(n,r){let i=f(n);return e(`labs.display.supplementGuidance.${r===`normal`?`overdose.normal`:`overdose.above`}`,{name:i},t())}function h(e){return{requiredIds:e.requiredBeforeRegularUse??[],usefulIds:e.useful??[],affectsDoseIds:e.affectsDose??[]}}function g(e){let{supplementKnowledgeId:t,profile:n,labResults:r,nowISO:i}=e,o=a(t);if(!o)return{supplementKnowledgeId:t,status:`not_applicable`,requiredLabIds:[],usefulLabIds:[],affectsDoseLabIds:[],missingLabIds:[],outdatedLabIds:[],blockingLabIds:[],cautionLabIds:[],warnings:[],explanation:p(`summary.not_applicable`)};let{requiredIds:s,usefulIds:c,affectsDoseIds:l}=h(o),u=[...new Set([...s,...c,...l,...o.blocksIfAboveRange??[],...o.blocksIfBelowRange??[],...o.cautionIfAboveRange??[],...o.cautionIfBelowRange??[],...o.warningIfMissing??[]])],g=new Map;for(let e of u){let t=d(e,r,n,i);t&&g.set(e,t)}let _=[],v=[],y=[],b=[],x=[];for(let e of s){let t=g.get(e);!t||t.status===`missing`?(_.push(e),x.push(p(`warning.missingLab`,{name:f(e)}))):t.status===`outdated`?(v.push(e),x.push(p(`warning.outdatedLab`,{name:f(e)}))):t.status===`cannot_interpret`&&(_.push(e),x.push(p(`warning.cannotInterpret`,{name:f(e)})))}for(let e of o.blocksIfAboveRange??[]){let t=g.get(e);t&&t.status===`above`&&(y.push(e),x.push(p(`warning.aboveRange`,{name:f(e)})))}for(let e of o.blocksIfBelowRange??[]){let t=g.get(e);t&&t.status===`below`&&(y.push(e),x.push(p(`warning.belowRange`,{name:f(e)})))}for(let e of l){let t=g.get(e);if(!(!t||t.status===`missing`||t.status===`outdated`||t.status===`cannot_interpret`)){if(t.status===`normal`){y.includes(e)||y.push(e);let t=m(e,`normal`);x.some(e=>e.includes(t.slice(0,24)))||x.push(t)}else if(t.status===`above`){y.includes(e)||y.push(e);let t=m(e,`above`);x.includes(t)||x.push(t)}}}for(let e of o.cautionIfAboveRange??[]){let t=g.get(e);t&&t.status===`above`&&(b.push(e),x.some(t=>t.includes(f(e)))||x.push(p(`warning.cautionAbove`,{name:f(e)})))}for(let e of o.cautionIfBelowRange??[]){let t=g.get(e);t&&t.status===`below`&&(b.push(e),x.some(t=>t.includes(f(e)))||x.push(p(`warning.cautionBelow`,{name:f(e)})))}for(let e of o.warningIfMissing??[]){let t=g.get(e);(!t||t.status===`missing`||t.status===`outdated`)&&(b.includes(e)||b.push(e),x.some(t=>t.includes(f(e)))||x.push(p(`warning.recommendedCheck`,{name:f(e)})))}if(o.notes)for(let e of o.notes)x.push(e);x.push(p(`warning.disclaimer`));let S;return S=y.length>0?`blocked`:_.length>0||v.length>0?`missing_labs`:b.length>0?`caution`:`ready`,{supplementKnowledgeId:t,status:S,requiredLabIds:s,usefulLabIds:c,affectsDoseLabIds:l,missingLabIds:_,outdatedLabIds:v,blockingLabIds:y,cautionLabIds:b,warnings:x,explanation:p({ready:`summary.ready`,missing_profile:`summary.missing_profile`,missing_labs:`summary.missing_labs`,caution:`summary.caution`,blocked:`summary.blocked`,not_applicable:`summary.not_applicable`}[S])}}function _(n=t()){return e(`supplements.guidance.noScheme`,void 0,n)}function v(n=t()){return e(`supplements.guidance.profileRequired`,void 0,n)}function y(n=t()){return e(`supplements.guidance.labsOrDoctor`,void 0,n)}function b(e){return typeof e.weightKg==`number`&&Number.isFinite(e.weightKg)&&e.weightKg>0&&(e.sex===`male`||e.sex===`female`||e.sex===`unknown`)&&typeof e.ageYears==`number`&&Number.isFinite(e.ageYears)&&e.ageYears>0}function x(e){return e?!!(e.doseText||e.unitText||e.frequencyText||e.timingText||e.mealText||e.scheduleText||e.profileRule?.defaultText||e.profileRule?.maleText||e.profileRule?.femaleText):!1}function S(e,t){let n=e.profileRule;if(n&&b(t)&&!(t.ageYears!=null&&n.minAgeYears!=null&&t.ageYearsn.maxAgeYears))return t.sex===`male`&&n.maleText?n.maleText:t.sex===`female`&&n.femaleText?n.femaleText:n.defaultText}function C(e){return e.labRequirement===`required`||e.riskLevel===`high`}function ee(e){return C(e)||e.labRequirement===`recommended`||!!e.caution?.trim()}function te(e,n={}){let r=t(),i=C(e)?y(r):e.serving?.cautionText||void 0,a=e.serving;if(a?.profileRule&&!b(n))return{status:C(e)?`requires_labs_or_doctor`:`profile_required`,doseText:v(r),warningText:i,source:`catalog_profile_rule`};if(!x(a))return{status:C(e)?`requires_labs_or_doctor`:`not_available`,doseText:_(r),warningText:i,source:`fallback`};let o=(a?S(a,n):void 0)||a?.doseText||_(r);return{status:C(e)?`requires_labs_or_doctor`:`available`,doseText:o,unitText:a?.unitText,frequencyText:a?.frequencyText,timingText:a?.timingText,mealText:a?.mealText,scheduleText:a?.scheduleText,warningText:i,source:a?.profileRule?`catalog_profile_rule`:`catalog`}}var ne=`Справочная модель дозировки. Не является медицинским назначением. Применение — только после явного подтверждения пользователя.`,re=Object.freeze([`knowledge_iron`,`knowledge_iodine`,`knowledge_potassium`,`knowledge_calcium`,`knowledge_vitamin_a_retinol`,`knowledge_5_htp`,`knowledge_pre_workout_complex`]);function w(e,t,n,r){return Object.freeze({supplementKnowledgeId:e,safetyTier:t,modelStatus:`data_only`,model:Object.freeze(n),enabledForEngine:r?.enabledForEngine??!1,requiresExplicitConfirmation:!0,canSuggestUpdateExistingPlanItem:!1,disclaimer:ne})}var ie=Object.freeze({kind:`lab_value_band`,unit:`IU`,requiredLabIds:Object.freeze([`vitamin_d_25oh`,`calcium_total`]),bands:Object.freeze([{biomarkerId:`vitamin_d_25oh`,unit:`нг/мл`,maxValue:20,value:2e3,reason:`Ниже целевого референса; только консервативная справочная поддержка, не лечебная схема.`},{biomarkerId:`vitamin_d_25oh`,unit:`нг/мл`,minValue:20,maxValue:30,value:1e3,reason:`Ориентир в целевом диапазоне; консервативная maintenance-подсказка.`},{biomarkerId:`vitamin_d_25oh`,unit:`нг/мл`,minValue:30,maxValue:60,value:800,reason:`Достаточный уровень; низкая справочная поддержка.`},{biomarkerId:`vitamin_d_25oh`,unit:`нг/мл`,minValue:60,value:0,reason:`Достаточно данных для осторожности; регулярный дополнительный приём может не требоваться.`}]),clamp:Object.freeze({minValue:0,maxValue:2e3,unit:`IU`,reason:`PDE v1 не поддерживает терапевтические/высокие дозы витамина D.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`08:50`]),withMeal:!0,timing:`morning`}),source:`curated_reference_default`,warnings:Object.freeze([`Не использовать как лечебную схему.`,`При высоком кальции или высоком 25(OH)D — не рассчитывать дозу.`,`Лучше сверять с врачом и лабораторными референсами.`]),notes:Object.freeze([`Модель является консервативной maintenance-подсказкой.`,`Устаревшие анализы не подходят для расчёта.`])}),ae=Object.freeze({kind:`profile_weight_band`,unit:`mg`,requiredProfileFields:Object.freeze([`weightKg`]),bands:Object.freeze([{maxWeightKg:60,value:100,reason:`Меньший вес — нижняя граница справочного диапазона.`},{minWeightKg:60,maxWeightKg:90,value:200,reason:`Средний вес — средняя справочная доза.`},{minWeightKg:90,value:300,reason:`Больший вес — верхняя граница консервативного диапазона.`}]),clamp:Object.freeze({minValue:100,maxValue:300,unit:`mg`,reason:`Conservative supplemental magnesium range.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`22:00`]),withMeal:!0,timing:`evening`}),source:`curated_reference_default`,warnings:Object.freeze([`При сниженной функции почек — не рассчитывать автоматически.`,`Может вызывать послабление стула.`,`Это справочная поддержка, не лечение.`]),notes:Object.freeze([`Future engine must check eGFR/creatinine guidance before ready.`])}),oe=Object.freeze({kind:`fixed`,defaultValue:10,unit:`g`,clamp:Object.freeze({minValue:5,maxValue:10,unit:`g`,reason:`Common conservative collagen peptide serving range.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`09:00`]),withMeal:!1,timing:`morning`}),source:`curated_reference_default`,warnings:Object.freeze([`Проверяйте состав и переносимость.`,`Не является лечением суставов/кожи.`]),notes:Object.freeze([`Fixed base serving, not lab-dependent.`])}),se=Object.freeze({kind:`fixed`,defaultValue:3,unit:`g`,clamp:Object.freeze({minValue:3,maxValue:5,unit:`g`,reason:`Conservative maintenance creatine monohydrate range.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`09:00`]),withMeal:!0,timing:`with_meal`}),source:`curated_reference_default`,warnings:Object.freeze([`Не использовать как загрузочную фазу.`,`При заболеваниях почек — только после консультации специалиста.`,`Проверяйте общий план тренировок, воду и переносимость ЖКТ.`]),notes:Object.freeze([`Fixed maintenance serving, not lab-dependent in v1.`])}),ce=Object.freeze({kind:`fixed`,defaultValue:25,unit:`g`,clamp:Object.freeze({minValue:20,maxValue:30,unit:`g`,reason:`Conservative protein-per-serving range; total daily protein remains diet-dependent.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`16:00`]),withMeal:!1,timing:`after_training`}),source:`curated_reference_default`,warnings:Object.freeze([`Это порция продукта, а не расчёт суточной нормы белка.`,`Учитывайте молочные аллергены, переносимость лактозы и общий белок из еды.`]),notes:Object.freeze([`Fixed serving only; diet-level protein targets are outside PDE v1.`])}),le=Object.freeze({kind:`fixed`,defaultValue:5,unit:`g`,clamp:Object.freeze({minValue:3,maxValue:5,unit:`g`,reason:`Conservative starter psyllium serving to reduce GI discomfort.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`12:00`]),withMeal:!1,timing:`with_meal`}),source:`curated_reference_default`,warnings:Object.freeze([`Запивать водой и разносить с лекарствами.`,`Начинать с малой порции при чувствительном ЖКТ.`,`Не использовать при проблемах с глотанием или кишечной непроходимости.`]),notes:Object.freeze([`Fixed starter serving; increase is intentionally not automated.`])}),ue=Object.freeze({kind:`fixed`,defaultValue:500,unit:`mg`,clamp:Object.freeze({minValue:250,maxValue:500,unit:`mg`,reason:`Conservative supplemental vitamin C range.`}),schedule:Object.freeze({frequencyPerDay:1,preferredTimesHHMM:Object.freeze([`09:00`]),withMeal:!0,timing:`morning`}),source:`curated_reference_default`,warnings:Object.freeze([`При склонности к камням в почках или заболеваниях почек нужна осторожность.`,`Не является лечением инфекций.`]),notes:Object.freeze([`Fixed base serving, no lab-dependent dosing in v1.`])});function T(e){return Object.freeze({kind:`fixed`,defaultValue:e.defaultValue,unit:e.unit,clamp:Object.freeze({minValue:e.minValue,maxValue:e.maxValue,unit:e.unit,reason:e.clampReason}),schedule:Object.freeze({frequencyPerDay:e.frequencyPerDay??1,preferredTimesHHMM:e.preferredTimesHHMM?Object.freeze([...e.preferredTimesHHMM]):void 0,withMeal:e.withMeal,timing:e.timing}),source:`curated_reference_default`,warnings:Object.freeze([...e.warnings]),notes:Object.freeze([...e.notes])})}var de=T({defaultValue:1e3,unit:`mg`,minValue:500,maxValue:1e3,clampReason:`Conservative EPA+DHA reference range; product label must be checked.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`Считать нужно EPA+DHA, а не общий вес рыбьего жира.`,`При антикоагулянтах, нарушениях свёртываемости или операции — только после консультации.`],notes:[`Fixed EPA+DHA serving, not a treatment dose.`]}),fe=T({defaultValue:100,unit:`mcg`,minValue:90,maxValue:120,clampReason:`Conservative MK-7 reference serving.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При антикоагулянтах витамин K не применять по автоматической схеме.`],notes:[`Fixed label-level serving; anticoagulant context remains safety-gated.`]}),pe=T({defaultValue:30,unit:`mcg`,minValue:30,maxValue:100,clampReason:`Conservative daily value range; high-dose hair formulas are intentionally excluded.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`Сообщайте о приёме биотина перед сдачей анализов: он может искажать результаты.`],notes:[`Low-dose reference only; high-dose cosmetic protocols are not automated.`]}),me=T({defaultValue:100,unit:`mg`,minValue:50,maxValue:100,clampReason:`Conservative CoQ10 serving range.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При лекарствах для давления, антикоагулянтах или терапии сердца — согласовать со специалистом.`],notes:[`Fixed serving; no disease-treatment dosing.`]}),he=T({defaultValue:.5,unit:`mg`,minValue:.3,maxValue:1,clampReason:`Low-dose sleep-rhythm reference range.`,preferredTimesHHMM:[`22:30`],withMeal:!1,timing:`bedtime`,warnings:[`Не сочетать с алкоголем и седативными средствами без консультации.`,`Не использовать как лечение хронической бессонницы.`],notes:[`Low-dose short-term reference only.`]}),ge=T({defaultValue:3.2,unit:`g`,minValue:1.6,maxValue:3.2,clampReason:`Conservative daily beta-alanine range; split servings improve tolerance.`,frequencyPerDay:2,preferredTimesHHMM:[`09:00`,`16:00`],withMeal:!0,timing:`with_meal`,warnings:[`Покалывание кожи ожидаемо у части людей; снижайте порцию при дискомфорте.`],notes:[`Daily course serving; not an acute stimulant.`]}),_e=T({defaultValue:6,unit:`g`,minValue:3,maxValue:6,clampReason:`Conservative pre-workout citrulline malate range.`,preferredTimesHHMM:[`17:30`],withMeal:!1,timing:`before_training`,warnings:[`При низком давлении или сосудистых препаратах — не применять автоматически.`],notes:[`Training-day reference serving.`]}),ve=T({defaultValue:1,unit:`g`,minValue:.5,maxValue:2,clampReason:`Conservative taurine serving range.`,preferredTimesHHMM:[`16:00`],withMeal:!0,timing:`with_meal`,warnings:[`Учитывайте стимуляторы в энергетиках и предтренировочных продуктах.`],notes:[`Fixed serving; not a cardiovascular treatment protocol.`]}),ye=T({defaultValue:200,unit:`mg`,minValue:100,maxValue:200,clampReason:`Conservative L-theanine serving range.`,preferredTimesHHMM:[`16:00`],withMeal:!1,timing:`with_meal`,warnings:[`При седативных препаратах и выраженной сонливости нужна осторожность.`],notes:[`Fixed relaxation/focus serving.`]}),be=T({defaultValue:3,unit:`g`,minValue:1,maxValue:3,clampReason:`Conservative bedtime glycine range.`,preferredTimesHHMM:[`22:00`],withMeal:!1,timing:`bedtime`,warnings:[`При хронических проблемах сна добавка не заменяет поиск причины.`],notes:[`Fixed bedtime serving.`]}),xe=T({defaultValue:1,unit:`serving`,minValue:1,maxValue:1,clampReason:`Product-label serving only; mineral amounts vary by formula.`,preferredTimesHHMM:[`12:00`],withMeal:!1,timing:`after_training`,warnings:[`Проверяйте натрий, калий, магний и сахар на этикетке.`,`При ограничении соли, болезнях почек/сердца или препаратах давления — специалист.`],notes:[`One label serving; not a daily mineral target calculation.`]}),Se=T({defaultValue:1,unit:`serving`,minValue:1,maxValue:1,clampReason:`Probiotics are strain/product specific; only label serving can be automated.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При иммунодефиците, тяжёлых заболеваниях ЖКТ или иммуносупрессии — только со специалистом.`],notes:[`One product serving; strain-specific effects are not inferred.`]}),Ce=T({defaultValue:10,unit:`mg`,minValue:10,maxValue:20,clampReason:`Conservative lutein reference serving.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`Не заменяет осмотр офтальмолога при симптомах или заболеваниях глаз.`],notes:[`Fixed carotenoid serving.`]}),we=T({defaultValue:2,unit:`mg`,minValue:2,maxValue:4,clampReason:`Conservative zeaxanthin reference serving.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`Часто идёт вместе с лютеином; не дублируйте комплексы без проверки этикетки.`],notes:[`Fixed carotenoid serving.`]}),Te=T({defaultValue:1500,unit:`mg`,minValue:500,maxValue:1500,clampReason:`Conservative glucosamine label serving range.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При аллергии на морепродукты, диабете или антикоагулянтах — согласовать со специалистом.`],notes:[`Fixed joint-support serving, not pain treatment.`]}),Ee=T({defaultValue:800,unit:`mg`,minValue:400,maxValue:1200,clampReason:`Conservative chondroitin label serving range.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При антикоагулянтах или аллергии на источник сырья — специалист.`],notes:[`Fixed joint-support serving.`]}),De=T({defaultValue:1e3,unit:`mg`,minValue:500,maxValue:1500,clampReason:`Conservative starter MSM range.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`Доказательность ограничена; при боли или травме нужна диагностика.`],notes:[`Starter serving to reduce GI discomfort.`]}),Oe=T({defaultValue:600,unit:`mg`,minValue:600,maxValue:600,clampReason:`Conservative single NAC serving; higher protocols are not automated.`,preferredTimesHHMM:[`09:00`],withMeal:!0,timing:`with_meal`,warnings:[`При астме, антикоагулянтах, язвенной болезни, беременности или хронических состояниях — специалист.`],notes:[`Fixed serving only; not respiratory disease treatment.`]}),E=Object.freeze([w(`knowledge_vitamin_d3`,3,ie,{enabledForEngine:!0}),w(`knowledge_magnesium_glycinate`,2,ae,{enabledForEngine:!0}),w(`knowledge_collagen`,1,oe,{enabledForEngine:!0}),w(`knowledge_creatine_monohydrate`,1,se,{enabledForEngine:!0}),w(`knowledge_whey_protein`,1,ce,{enabledForEngine:!0}),w(`knowledge_psyllium`,1,le,{enabledForEngine:!0}),w(`knowledge_vitamin_c`,1,ue,{enabledForEngine:!0}),w(`knowledge_omega_3`,2,de,{enabledForEngine:!0}),w(`knowledge_vitamin_k2`,2,fe,{enabledForEngine:!0}),w(`knowledge_biotin`,1,pe,{enabledForEngine:!0}),w(`knowledge_coenzyme_q10`,1,me,{enabledForEngine:!0}),w(`knowledge_melatonin`,2,he,{enabledForEngine:!0}),w(`knowledge_beta_alanine`,1,ge,{enabledForEngine:!0}),w(`knowledge_citrulline_malate`,1,_e,{enabledForEngine:!0}),w(`knowledge_taurine`,1,ve,{enabledForEngine:!0}),w(`knowledge_l_theanine`,1,ye,{enabledForEngine:!0}),w(`knowledge_glycine`,1,be,{enabledForEngine:!0}),w(`knowledge_electrolytes`,1,xe,{enabledForEngine:!0}),w(`knowledge_probiotic`,2,Se,{enabledForEngine:!0}),w(`knowledge_lutein`,1,Ce,{enabledForEngine:!0}),w(`knowledge_zeaxanthin`,1,we,{enabledForEngine:!0}),w(`knowledge_glucosamine`,2,Te,{enabledForEngine:!0}),w(`knowledge_chondroitin`,2,Ee,{enabledForEngine:!0}),w(`knowledge_msm`,1,De,{enabledForEngine:!0}),w(`knowledge_nac`,2,Oe,{enabledForEngine:!0})]),D=new Map(E.map(e=>[e.supplementKnowledgeId,e]));function O(e){return D.has(e)}function k(e){let t=D.get(e);if(t)return ke(t)}function ke(e){let t=e.model;return{...e,model:t.kind===`fixed`?{...t,warnings:[...t.warnings],notes:[...t.notes]}:t.kind===`profile_weight_band`?{...t,requiredProfileFields:[...t.requiredProfileFields],bands:t.bands.map(e=>({...e})),warnings:[...t.warnings],notes:[...t.notes]}:{...t,requiredLabIds:[...t.requiredLabIds],requiredProfileFields:t.requiredProfileFields?[...t.requiredProfileFields]:void 0,bands:t.bands.map(e=>({...e})),warnings:[...t.warnings],notes:[...t.notes]}}}function A(e,t,n){return n===t.unit&&e>=t.minValue&&e<=t.maxValue}function Ae(e){let t=[];e.supplementKnowledgeId?.trim()||t.push(`supplementKnowledgeId обязателен.`),re.includes(e.supplementKnowledgeId)&&t.push(`Модель запрещена для high-risk ID: ${e.supplementKnowledgeId}.`),e.requiresExplicitConfirmation!==!0&&t.push(`requiresExplicitConfirmation должен быть true.`),e.canSuggestUpdateExistingPlanItem!==!1&&t.push(`canSuggestUpdateExistingPlanItem должен быть false в v1.`);let{model:n}=e,{clamp:r}=n;r?(r.minValue>r.maxValue&&t.push(`clamp.minValue не может быть больше clamp.maxValue.`),n.unit!==r.unit&&t.push(`model.unit должен совпадать с clamp.unit.`)):t.push(`clamp обязателен.`);let i=n.schedule?.frequencyPerDay;if((!Number.isFinite(i)||(i??0)<=0)&&t.push(`schedule.frequencyPerDay должен быть > 0.`),n.kind===`fixed`&&(A(n.defaultValue,r,n.unit)||t.push(`fixed.defaultValue должен быть в пределах clamp.`)),n.kind===`profile_weight_band`){n.unit!==r.unit&&t.push(`weight_band.unit должен совпадать с clamp.unit.`);for(let e of n.bands)A(e.value,r,n.unit)||t.push(`weight_band value ${e.value} вне clamp.`)}if(n.kind===`lab_value_band`){n.unit!==r.unit&&t.push(`lab_value_band.unit должен совпадать с clamp.unit.`);for(let e of n.bands)A(e.value,r,n.unit)||t.push(`lab_band value ${e.value} вне clamp.`);n.requiredLabIds.length===0&&t.push(`lab_value_band требует requiredLabIds.`)}return t.length===0?{ok:!0}:{ok:!1,errors:t}}function je(){for(let e of E){let t=Ae(e);if(!t.ok)throw Error(`Invalid dose model ${e.supplementKnowledgeId}: ${t.errors.join(`; `)}`)}}je();var j=`knowledge_vitamin_d3`,M=`knowledge_magnesium_glycinate`,N=[`vitamin_d_25oh`,`calcium_total`],Me=2e3,Ne=100,Pe=300,Fe=[`egfr`,`creatinine`];function P(e){return{canApply:!1,reasons:e,warnings:[]}}function F(e=[]){return{canApply:!0,reasons:[],warnings:e}}function I(e){if(e)return{sex:e.sex===`male`||e.sex===`female`?e.sex:`unknown`,ageYears:e.ageYears}}function L(e,t,n,r){let i=u(e);if(!i)return!1;let a=l(t,e);if(!a)return!1;let o=s({definition:i,result:a,profile:I(n),nowISO:r});return o.status!==`missing`&&o.status!==`outdated`}function R(e,t,n,r){let i=u(e);if(i)return s({definition:i,result:l(t,e),profile:I(n),nowISO:r})}function Ie(e){let{guidance:t,labGuidance:n,labResults:r=[],profile:i,nowISO:a}=e;if(e.supplementKnowledgeId!==j)return P([`Gate D3 применяется только к knowledge_vitamin_d3.`]);if(t.status!==`ready`)return t.status===`caution`?P([`Для D3 apply в v1 нужен статус ready, не caution.`]):P([`Для D3 apply нужен статус ready.`]);if(!t.dose)return P([`Для D3 apply нужна рассчитанная доза.`]);if(!Number.isFinite(t.dose.value)||t.dose.value<=0)return P([`0 IU — это сигнал, что регулярный дополнительный приём может не требоваться.`]);if(t.dose.value>Me)return P([`Доза выше безопасного справочного предела модели.`]);if(!n)return P([`Для D3 нужны данные lab guidance.`]);if(n.status!==`ready`)return P([`D3 не применяется при заблокированном статусе анализов.`]);for(let e of N)if(n.missingLabIds.includes(e)||n.outdatedLabIds.includes(e))return P([`Для D3 нужны свежие 25(OH)D и кальций.`]);if(n.blockingLabIds.length>0)return P([`D3 не применяется при блокирующих показателях анализов.`]);for(let e of N){if(!L(e,r,i,a))return P([`Для D3 нужны свежие 25(OH)D и кальций.`]);if(R(e,r,i,a)?.status===`above`)return P([e===`vitamin_d_25oh`?`25(OH)D выше референса — apply не поддерживается.`:`Кальций выше референса — apply не поддерживается.`])}return F([`Только поддерживающая справочная схема, не лечебная дозировка.`,`Высокие/лечебные дозы витамина D не поддерживаются.`])}function Le(e){let{guidance:t,labGuidance:n,labResults:r=[],profile:i,nowISO:a}=e;if(e.supplementKnowledgeId!==M)return P([`Gate magnesium применяется только к knowledge_magnesium_glycinate.`]);if(t.status!==`ready`)return t.status===`caution`?P([`Для magnesium apply в v1 нужен статус ready, не caution.`]):P([`Для magnesium apply нужен статус ready.`]);if(!t.dose)return P([`Для magnesium apply нужна рассчитанная доза.`]);if(!Number.isFinite(t.dose.value)||t.dose.valuePe)return P([`Доза магния вне справочного диапазона 100–300 mg.`]);let o=i?.weightKg;if(!Number.isFinite(o)||(o??0)<=0)return P([`Для magnesium apply нужен вес в профиле.`]);if(!n)return P([`Для magnesium apply нужны данные lab guidance.`]);if(n.status!==`ready`)return P([`Magnesium не применяется при неготовых анализах.`]);if(n.blockingLabIds.length>0)return P([`Magnesium не применяется при блокирующих показателях анализов.`]);for(let e of Fe)if(n.cautionLabIds.includes(e))return P([`Magnesium не применяется при предупреждениях по почкам.`]);let s=L(`egfr`,r,i,a),c=L(`creatinine`,r,i,a);return!s&&!c?P([`Для применения магния нужна свежая проверка функции почек: eGFR или креатинин.`]):s&&R(`egfr`,r,i,a)?.status===`below`?P([`eGFR ниже референса — apply не поддерживается.`]):c&&R(`creatinine`,r,i,a)?.status===`above`?P([`Креатинин выше референса — apply не поддерживается.`]):F([`Только справочная поддерживающая схема.`,`При заболеваниях почек нужна консультация специалиста.`])}function Re(e){return e.supplementKnowledgeId===j?Ie(e):e.supplementKnowledgeId===M?Le(e):F()}var ze=!0,Be=!1;function z(e){return Object.freeze({...e,requiresExplicitConfirmation:ze,canSuggestUpdateExistingPlanItem:Be})}var Ve=Object.freeze([z({supplementKnowledgeId:`knowledge_vitamin_d3`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Справочная доза только при свежих анализах; поддерживающие диапазоны, не лечебные дозы.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`lab_aware`,`blocked_if_high_d_or_calcium`,`maintenance_only`]}),z({supplementKnowledgeId:`knowledge_omega_3`,safetyTier:2,mode:`base_default_only`,reason:`Консервативная справочная порция EPA+DHA; обязательно сверять этикетку и риски свёртываемости.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_magnesium_glycinate`,safetyTier:2,mode:`profile_adjusted_safe_default`,reason:`Возможна осторожная корректировка по весу при нормальной функции почек.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`kidney_gate`]}),z({supplementKnowledgeId:`knowledge_collagen`,safetyTier:1,mode:`base_default_only`,reason:`Фиксированная справочная доза; применяется только после явного подтверждения.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_creatine_monohydrate`,safetyTier:1,mode:`base_default_only`,reason:`Фиксированная поддерживающая доза; без загрузочной фазы и без автоматизации при риске для почек.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`fixed_serving`,`kidney_caution`]}),z({supplementKnowledgeId:`knowledge_whey_protein`,safetyTier:1,mode:`base_default_only`,reason:`Фиксированная справочная порция; суточную норму белка не рассчитывает.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`fixed_serving`,`diet_total_required`]}),z({supplementKnowledgeId:`knowledge_psyllium`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная стартовая порция; повышение дозы не автоматизируется.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`fixed_serving`,`water_required`,`separate_from_medications`]}),z({supplementKnowledgeId:`knowledge_zinc`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Учёт цинка/меди и блокировок; автоматическая числовая доза пока не поддерживается.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`copper_balance`,`blocked_if_high_zinc`]}),z({supplementKnowledgeId:`knowledge_iron`,safetyTier:4,mode:`blocked_doctor_only`,reason:`Железо — только по анализам и плану специалиста; персонализированная доза не рассчитывается.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`high_risk`,`no_auto_dose`]}),z({supplementKnowledgeId:`knowledge_iodine`,safetyTier:4,mode:`blocked_doctor_only`,reason:`Йод требует оценки щитовидной железы; персонализированная доза не рассчитывается.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`thyroid`,`tsh_required`]}),z({supplementKnowledgeId:`knowledge_vitamin_b12`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Осторожная справочная схема; без мегадоз и без маскировки дефицита.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`folate_context`]}),z({supplementKnowledgeId:`knowledge_vitamin_k2`,safetyTier:2,mode:`profile_adjusted_safe_default`,reason:`Базовая справочная схема; при антикоагулянтах автоматическое применение блокируется профилем безопасности.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`anticoagulant_caution`]}),z({supplementKnowledgeId:`knowledge_calcium`,safetyTier:4,mode:`blocked_doctor_only`,reason:`Кальций при отклонениях анализов — только консультация; персонализированная доза не рассчитывается.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`hypercalcemia_risk`]}),z({supplementKnowledgeId:`knowledge_vitamin_c`,safetyTier:1,mode:`base_default_only`,reason:`Фиксированная справочная доза; применяется только после явного подтверждения.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_b_complex`,safetyTier:2,mode:`profile_adjusted_safe_default`,reason:`Справочная схема; при подозрении на дефицит B12 — проверить анализы.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`b12_warning_if_missing`]}),z({supplementKnowledgeId:`knowledge_folate_b9`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Фолат без проверки B12 не персонализируется автоматически.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`b12_masking`]}),z({supplementKnowledgeId:`knowledge_selenium`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Нужен жёсткий верхний предел; автоматическая доза не подключена.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`hard_cap_required`]}),z({supplementKnowledgeId:`knowledge_copper`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Баланс меди/цинка; блокировка при высокой меди.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`blocked_if_high_copper`,`zinc_balance`]}),z({supplementKnowledgeId:`knowledge_potassium`,safetyTier:4,mode:`blocked_doctor_only`,reason:`Калий — высокий риск; персонализированная доза не рассчитывается.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`kidney`,`high_risk`]}),z({supplementKnowledgeId:`knowledge_chromium`,safetyTier:3,mode:`lab_aware_cautious_default`,reason:`Контекст глюкозы/HbA1c; не лечение диабета автоматической дозой.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`glucose_context`,`no_diabetes_treatment`]}),z({supplementKnowledgeId:`knowledge_biotin`,safetyTier:1,mode:`base_default_only`,reason:`Только низкая справочная порция; мегадозы для волос не автоматизируются.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`lab_interference_warning`]}),z({supplementKnowledgeId:`knowledge_coenzyme_q10`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная справочная порция; не используется как схема лечения.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_melatonin`,safetyTier:2,mode:`base_default_only`,reason:`Только низкая краткосрочная справочная порция для режима сна.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`sleep`,`sedative_caution`]}),z({supplementKnowledgeId:`knowledge_beta_alanine`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная спортивная порция; главный риск — переносимость покалывания.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_citrulline_malate`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная предтренировочная порция; при проблемах давления нужен специалист.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`blood_pressure_caution`]}),z({supplementKnowledgeId:`knowledge_taurine`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная справочная порция; не смешивать бездумно со стимуляторами.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_l_theanine`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная справочная порция для фокуса/расслабления.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_glycine`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная вечерняя справочная порция.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_electrolytes`,safetyTier:1,mode:`base_default_only`,reason:`Только порция по этикетке; минералы и сахар зависят от конкретного продукта.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`product_label_required`]}),z({supplementKnowledgeId:`knowledge_probiotic`,safetyTier:2,mode:`base_default_only`,reason:`Только порция по этикетке; эффект зависит от штамма и продукта.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`strain_specific`,`immune_caution`]}),z({supplementKnowledgeId:`knowledge_lutein`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная справочная порция каротиноида; не заменяет офтальмолога.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_zeaxanthin`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная справочная порция каротиноида; учитывать дубли в комплексах.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_glucosamine`,safetyTier:2,mode:`base_default_only`,reason:`Консервативная справочная порция; при диабете, аллергии и антикоагулянтах нужна осторожность.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`joint_support`,`allergy_caution`]}),z({supplementKnowledgeId:`knowledge_chondroitin`,safetyTier:2,mode:`base_default_only`,reason:`Консервативная справочная порция; учитывать антикоагулянты и источник сырья.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`joint_support`,`anticoagulant_caution`]}),z({supplementKnowledgeId:`knowledge_msm`,safetyTier:1,mode:`base_default_only`,reason:`Консервативная стартовая порция; доказательность ограничена.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0}),z({supplementKnowledgeId:`knowledge_nac`,safetyTier:2,mode:`base_default_only`,reason:`Только консервативная одиночная порция; лечебные схемы не автоматизируются.`,numericDoseAllowedByPolicy:!0,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!0,tags:[`respiratory_caution`,`anticoagulant_caution`]}),z({supplementKnowledgeId:`knowledge_vitamin_a_retinol`,safetyTier:0,mode:`no_personalized_dosage`,reason:`Высокий риск; нет безопасной модели персонализированной дозировки.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`high_risk`,`denylist`]}),z({supplementKnowledgeId:`knowledge_5_htp`,safetyTier:0,mode:`no_personalized_dosage`,reason:`Высокий риск; нет безопасной модели персонализированной дозировки.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`high_risk`,`denylist`]}),z({supplementKnowledgeId:`knowledge_pre_workout_complex`,safetyTier:0,mode:`no_personalized_dosage`,reason:`Высокий риск; нет безопасной модели персонализированной дозировки.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1,tags:[`high_risk`,`denylist`]})]),B=new Map(Ve.map(e=>[e.supplementKnowledgeId,e])),He=Object.freeze(z({supplementKnowledgeId:`__default__`,safetyTier:0,mode:`no_personalized_dosage`,reason:`Для этого БАДа нет безопасной модели персонализированной дозировки.`,numericDoseAllowedByPolicy:!1,numericDoseModelAvailable:!1,canApplyToNewPlanItem:!1}));function Ue(e){return{...He,supplementKnowledgeId:e}}function We(e){return{...e,numericDoseModelAvailable:O(e.supplementKnowledgeId)}}function V(e){return We(B.get(e)??Ue(e))}function Ge(e){return B.has(e)}var H=`Это справочная подсказка, не медицинское назначение.`;function U(e,t,n){return{supplementKnowledgeId:e,safetyTier:t,status:`not_supported`,source:`not_calculated`,missingProfileFields:[],missingLabIds:[],outdatedLabIds:[],blockingLabIds:[],cautionLabIds:[],warnings:[],trustNotes:[],explanation:``,disclaimer:H,canApplyToNewPlanItem:!1,canSuggestUpdateExistingPlanItem:!1,requiresExplicitConfirmation:!0,...n}}function Ke(e){return{labGuidanceStatus:e?.status,missingLabIds:e?.missingLabIds?[...e.missingLabIds]:[],outdatedLabIds:e?.outdatedLabIds?[...e.outdatedLabIds]:[],blockingLabIds:e?.blockingLabIds?[...e.blockingLabIds]:[],cautionLabIds:e?.cautionLabIds?[...e.cautionLabIds]:[],labWarnings:e?.warnings?[...e.warnings]:[]}}function W(e,t){let n=[];for(let r of t)if(r===`weightKg`)(!Number.isFinite(e?.weightKg)||(e?.weightKg??0)<=0)&&n.push(`weightKg`);else if(r===`sex`){let t=e?.sex;t!==`male`&&t!==`female`&&n.push(`sex`)}else r===`ageYears`&&(!Number.isFinite(e?.ageYears)||(e?.ageYears??0)<=0)&&n.push(`ageYears`);return n}function qe(e,t){return et.maxValue?{value:t.maxValue,wasClamped:!0}:{value:e,wasClamped:!1}}function Je(e){return{ok:!0,value:e.defaultValue}}function Ye(e,t){if(W(t,e.requiredProfileFields).length>0)return{ok:!1,code:`profile_required`,message:`Для справочной схемы нужен вес в профиле.`};let n=t.weightKg;for(let t of e.bands){let e=t.minWeightKg===void 0||n>=t.minWeightKg,r=t.maxWeightKg===void 0||n=t)&&(n===void 0||ee.biomarkerId))][0];if(!n)return{ok:!1,code:`labs_required`,message:`В модели нет диапазонов по анализам.`};for(let n of e.requiredLabIds)if(!l(t,n))return{ok:!1,code:`labs_required`,message:`Не хватает анализа: ${n}.`};let r=l(t,n);if(!r)return{ok:!1,code:`labs_required`,message:`Не хватает анализа: ${n}.`};let i=e.bands.find(e=>e.biomarkerId===n)?.unit??r.unit,a=c(r.value,r.unit,i,n);if(!a.ok)return{ok:!1,code:`labs_required`,message:a.reason};for(let t of e.bands)if(t.biomarkerId===n&&Xe(a.value,t.minValue,t.maxValue))return{ok:!0,value:t.value,bandReason:t.reason};return{ok:!1,code:`labs_required`,message:`Не удалось сопоставить значение анализа с диапазонами модели.`}}function Qe(e){return e.model.kind===`profile_weight_band`||e.model.kind===`lab_value_band`&&e.model.requiredProfileFields?[...e.model.requiredProfileFields]:[]}function $e(e){return e.model.kind===`lab_value_band`?[...e.model.requiredLabIds]:[]}function et(e,t){if(!e||t.length===0)return!1;if(e.status===`missing_labs`)return!0;for(let n of t)if(e.missingLabIds.includes(n)||e.outdatedLabIds.includes(n))return!0;return!1}function tt(e,t,n){return{value:e,unit:t,frequencyPerDay:n.frequencyPerDay,preferredTimesHHMM:n.preferredTimesHHMM?[...n.preferredTimesHHMM]:void 0,withMeal:n.withMeal,timing:n.timing}}function nt(e,t,n,r,i){return[`Модель расчёта: ${e.kind}; источник модели: ${e.source}.`,t.length>0?`Использованы поля профиля: ${t.join(`, `)}.`:`Поля профиля для этой модели не требуются.`,n.length>0?`Использованы анализы: ${n.join(`, `)}.`:`Анализы для этой модели не требуются.`,r.bandReason?`Причина выбора диапазона: ${r.bandReason}`:``,i?`Сработал ограничитель безопасности: ${e.clamp.reason}`:`Проверен диапазон безопасности: ${e.clamp.reason}`,`Применение требует явного подтверждения; существующие схемы не меняются автоматически.`].filter(Boolean)}function rt(e){return e===`fixed`?`knowledge_base_default`:e===`profile_weight_band`?`profile_adjusted`:`lab_aware_default`}function it(e,t){return e===`fixed`?`base_default`:t?.status===`caution`?`caution`:`ready`}function at(e){let{supplementKnowledgeId:t,profile:n,labGuidance:r,labResults:i=[]}=e,a=V(t),o=k(t),{labWarnings:s,...c}=Ke(r);if(a.safetyTier===0)return U(t,0,{status:`not_supported`,source:`not_calculated`,explanation:a.reason,warnings:[a.reason],...c});if(a.safetyTier===4)return U(t,4,{status:`blocked`,source:`not_calculated`,explanation:`Перед регулярным приёмом нужна консультация или проверка анализов.`,warnings:[a.reason,`Персонализированная справочная доза не рассчитывается.`],...c});if(r?.status===`blocked`)return U(t,a.safetyTier,{status:`blocked`,source:`not_calculated`,explanation:r.explanation||`Перед регулярным приёмом нужна консультация или проверка анализов.`,warnings:[...s,`Персонализированная справочная доза не рассчитывается.`],...c});if(!o)return a.safetyTier===1?U(t,a.safetyTier,{status:`base_default`,source:`knowledge_base_default`,explanation:`Для этого БАДа доступна только базовая справочная схема.`,warnings:[a.reason],...c}):U(t,a.safetyTier,{status:`not_supported`,source:`not_calculated`,explanation:`Для этого БАДа пока нет структурированной модели дозировки.`,warnings:[a.reason],...c});let{model:l}=o,u=Qe(o),d=$e(o),f=W(n,u);if(f.length>0)return U(t,a.safetyTier,{status:`profile_required`,source:`not_calculated`,missingProfileFields:f,trustNotes:[`Нужные поля профиля: ${f.join(`, `)}.`,`Доза не рассчитывается, пока обязательные данные не заполнены.`],explanation:`Заполните профиль БАДов для справочной схемы.`,warnings:[...s,`Укажите данные профиля для расчёта справочной схемы.`],...c});if(a.safetyTier>=3&&r?.status===`missing_labs`)return U(t,a.safetyTier,{status:`labs_required`,source:`not_calculated`,trustNotes:[`Нужные анализы: ${d.join(`, `)||c.missingLabIds.join(`, `)}.`,`Доза не рассчитывается, пока обязательные анализы отсутствуют или устарели.`],explanation:`Для справочной схемы не хватает актуальных анализов.`,warnings:[...s],...c});if(et(r,d))return U(t,a.safetyTier,{status:`labs_required`,source:`not_calculated`,trustNotes:[`Нужные анализы: ${d.join(`, `)}.`,`Доза не рассчитывается, пока обязательные анализы отсутствуют или устарели.`],explanation:`Для справочной схемы не хватает актуальных анализов.`,warnings:[...s],...c});let p;if(p=l.kind===`fixed`?Je(l):l.kind===`profile_weight_band`?Ye(l,n):Ze(l,i),!p.ok)return p.code===`profile_required`?U(t,a.safetyTier,{status:`profile_required`,source:`not_calculated`,missingProfileFields:u,trustNotes:[`Нужные поля профиля: ${u.join(`, `)}.`,p.message],explanation:p.message,warnings:[...s,p.message],...c}):U(t,a.safetyTier,{status:`labs_required`,source:`not_calculated`,trustNotes:[`Нужные анализы: ${d.join(`, `)||`см. модель дозировки`}.`,p.message],explanation:p.message,warnings:[...s,p.message],...c});let{value:m,wasClamped:h}=qe(p.value,l.clamp),g=[];h&&g.push(`Значение ограничено безопасным диапазоном модели.`);let _=it(l.kind,r),v=rt(l.kind),y=_===`caution`,b=tt(m,l.unit,l.schedule),x=Re({supplementKnowledgeId:t,guidance:{supplementKnowledgeId:t,status:_,safetyTier:a.safetyTier,dose:b,source:v,missingProfileFields:[],missingLabIds:c.missingLabIds,outdatedLabIds:c.outdatedLabIds,blockingLabIds:c.blockingLabIds,cautionLabIds:c.cautionLabIds,warnings:[],trustNotes:[],explanation:``,disclaimer:H,canApplyToNewPlanItem:!1,canSuggestUpdateExistingPlanItem:!1,requiresExplicitConfirmation:!0,labGuidanceStatus:c.labGuidanceStatus},labGuidance:r,labResults:i,profile:n,nowISO:e.nowISO}),S=o.enabledForEngine&&a.canApplyToNewPlanItem&&(_===`ready`||_===`caution`||_===`base_default`)&&x.canApply;return U(t,a.safetyTier,{status:_,source:v,dose:b,explanation:y?`Сформирована справочная схема, но есть предупреждения.`:_===`base_default`?`Сформирована базовая справочная схема из модели.`:`Сформирована справочная схема на основе доступных данных.`,warnings:[...l.warnings,...s,...g,...p.bandReason?[p.bandReason]:[]],trustNotes:nt(l,u,d,p,h),...c,canApplyToNewPlanItem:S})}var ot=new Set([`knowledge_iron`,`knowledge_zinc`,`knowledge_calcium`,`knowledge_copper`,`knowledge_magnesium_glycinate`,`knowledge_curcumin`,`knowledge_iodine`,`knowledge_selenium`]),G=new Set([`knowledge_vitamin_a_retinol`,`knowledge_vitamin_d3`,`knowledge_vitamin_e`,`knowledge_vitamin_k2`]),st=new Set([...G,`knowledge_omega_3`,`knowledge_iron`,`knowledge_zinc`,`knowledge_magnesium_glycinate`,`knowledge_calcium`,`knowledge_copper`,`knowledge_selenium`,`knowledge_iodine`,`knowledge_potassium`,`knowledge_chromium`,`knowledge_curcumin`,`knowledge_vitamin_b12`,`knowledge_folate_b9`,`knowledge_vitamin_c`]),K=new Set([`knowledge_electrolytes`,`knowledge_boron`,`knowledge_silicon`]),ct=new Set(`knowledge_probiotic.knowledge_prebiotic.knowledge_colostrum.knowledge_biotin.knowledge_boron.knowledge_collagen.knowledge_whey_protein.knowledge_casein.knowledge_gainer.knowledge_bcaa.knowledge_eaa.knowledge_glutamine.knowledge_creatine_monohydrate.knowledge_beta_alanine.knowledge_citrulline_malate.knowledge_l_carnitine.knowledge_hmb.knowledge_glucosamine.knowledge_chondroitin.knowledge_msm.knowledge_hyaluronic_acid.knowledge_lutein.knowledge_zeaxanthin.knowledge_bilberry_anthocyanins.knowledge_spirulina.knowledge_chlorella.knowledge_l_glutamine_gut.knowledge_digestive_enzymes.knowledge_lactase.knowledge_psyllium`.split(`.`)),lt=new Set([`sportpit`]),ut=new Set([`knowledge_caffeine`,`knowledge_pre_workout_complex`,`knowledge_5_htp`,`knowledge_tryptophan`,`knowledge_melatonin`,`knowledge_valerian`,`knowledge_gaba`,`knowledge_motherwort`,`knowledge_rhodiola_rosea`]);function q(e){return K.has(e.id)?!1:e.type===`vitamin`||e.type===`mineral`}function dt(e){return!!(st.has(e.id)||e.type===`mineral`&&!K.has(e.id)||G.has(e.id)||e.type===`fatty_acid`)}function ft(e){return ot.has(e.id)}function J(e){return ct.has(e.id)?!1:!!(e.riskLevel===`high`||ut.has(e.id)||e.riskLevel===`medium`&&(e.type===`vitamin`||e.type===`mineral`||e.type===`herbal`||e.type===`amino_acid`))}function pt(e){return!lt.has(e.type)}var mt=[`purpose`,`target_effects`,`mechanism_or_role`,`timing`,`meal_timing`,`absorption_enhancers`,`absorption_inhibitors`,`contraindications`,`safety_cautions`,`overdose_risks`,`deficiency_consequences`,`excess_signs`,`interactions`,`lab_context`,`product_label_context`,`evidence_or_confidence`,`user_facing_summary`],ht=new Set([`knowledge_vitamin_a_retinol`,`knowledge_5_htp`,`knowledge_pre_workout_complex`]),gt=new Set([`knowledge_omega_3`,`knowledge_magnesium_glycinate`,`knowledge_vitamin_d3`,`knowledge_whey_protein`,`knowledge_casein`,`knowledge_gainer`,`knowledge_caffeine`,`knowledge_pre_workout_complex`,`knowledge_electrolytes`,`knowledge_b_complex`,`knowledge_probiotic`,`knowledge_digestive_enzymes`,`knowledge_lactase`,`knowledge_iron`,`knowledge_beta_alanine`]),_t=new Set([`vitamin`,`mineral`]),vt=new Set([`knowledge_caffeine`,`knowledge_pre_workout_complex`,`knowledge_5_htp`,`knowledge_tryptophan`,`knowledge_melatonin`,`knowledge_valerian`,`knowledge_gaba`]),yt=/ед[аоы]|пищ|желуд|натощак|meal|empty/i,bt=/жир|витамин c|вит\.?\s*c|piperine|перец|с едой|усвоен|переносим/i,xt=/кальци|желез|цинк|медь|кофе|чай|фитат|клетчатк|не сочет|раздел|конкурен|интервал|мешает/i,St=/избыт|передоз|токсич|перегруз|высок(ая|ие) доз/i,Ct=/дефицит|недостат|нехватк|низк(ий|ая|ое)/i,wt=/избыт|перегруз|гипер|слишком/i,Tt=/антикоагул|варfarin|варфарин|ssri|антидепресс|литий|thyroid|щитовид|лекарств|препарат|взаимод/i,Et=/этикет|epa|dha|элементар|активн|содержан|грамм белка|кофеин|штамм|strain|форм зависит|капс|капл|\bме\b|мкг|25\(oh\)d/i,Dt=/противопоказ|не приним|не подходит|избегать|не рекоменд/i;function Y(e){return typeof e==`string`&&e.trim().length>0}function X(e){return Array.isArray(e)&&e.length>0}function Z(e){return[e.purpose,e.caution,e.timingText,e.frequencyText,e.naturalAlternativeComment,...e.useConditions??[],...e.sectionTags??[],...e.labTests??[],e.serving?.doseText,e.serving?.unitText,e.serving?.frequencyText,e.serving?.mealText,e.serving?.timingText,e.serving?.cautionText,e.serving?.scheduleText,e.detail?.purpose,e.detail?.longTermEffect,e.detail?.mechanismSummary,e.detail?.absorption?.notes,e.detail?.evidenceNotes,...e.detail?.benefits??[],...e.detail?.risks??[],...e.detail?.contraindications??[],...e.detail?.sideEffects??[],...e.detail?.organsSystems??[],...e.detail?.absorption?.enhancers??[],...e.detail?.absorption?.inhibitors??[],...e.detail?.interactions?.medications??[],...e.detail?.interactions?.nutrients??[],...e.detail?.interactions?.foods??[],...e.detail?.interactions?.notes?[e.detail.interactions.notes]:[],...e.detail?.deficiency?.consequences??[],...e.detail?.deficiency?.notes?[e.detail.deficiency.notes]:[],...e.detail?.excess?.signs??[],...e.detail?.excess?.risks??[],...e.detail?.excess?.notes?[e.detail.excess.notes]:[],...e.detail?.productLabelContext??[]].filter(Boolean).join(` `).toLowerCase()}function Q(e,t,n,r){return{dimension:e,status:t,sourceFields:n,summary:r}}function Ot(e){if(gt.has(e.id))return!0;let t=[e.serving?.doseText,e.serving?.cautionText,e.serving?.unitText].filter(Boolean).join(` `);return/этикет|по этикетке|label|epa|dha|элемент/i.test(t)}function kt(e){return!!(e.riskLevel===`high`||_t.has(e.type)||vt.has(e.id))}function At(e){return!!(e.riskLevel===`high`||e.type===`vitamin`||e.type===`mineral`||vt.has(e.id))}function jt(e){return Y(e.purpose)?Q(`purpose`,`structured`,[`purpose`],`Есть top-level purpose.`):Q(`purpose`,`missing`,[],`Нет purpose.`)}function Mt(e){return X(e.detail?.benefits)?Q(`target_effects`,`structured`,[`detail.benefits`],`Есть structured benefits в detail.`):X(e.useConditions)&&X(e.sectionTags)?Q(`target_effects`,`partial`,[`useConditions`,`sectionTags`],`Эффекты описаны через tags и useConditions, без narrative.`):X(e.useConditions)||X(e.sectionTags)?Q(`target_effects`,`partial`,X(e.useConditions)?[`useConditions`]:[`sectionTags`],`Частичное описание эффектов.`):Q(`target_effects`,`missing`,[],`Нет явного описания эффектов.`)}function Nt(e){return pt(e)?Y(e.detail?.mechanismSummary)?Q(`mechanism_or_role`,`structured`,[`detail.mechanismSummary`],`Есть dedicated mechanism summary.`):X(e.detail?.organsSystems)?Q(`mechanism_or_role`,`structured`,[`detail.organsSystems`],`Есть organs/systems в detail.`):X(e.detail?.benefits)?Q(`mechanism_or_role`,`partial`,[`detail.benefits`],`Есть benefits, но нет отдельного mechanism summary.`):Q(`mechanism_or_role`,`missing`,[],`Нет dedicated mechanism/role copy.`):X(e.detail?.organsSystems)||Y(e.detail?.purpose)?Q(`mechanism_or_role`,`structured`,X(e.detail?.organsSystems)?[`detail.organsSystems`]:[`detail.purpose`],`Роль описана через organs/purpose; отдельный mechanism block не обязателен.`):Q(`mechanism_or_role`,`not_applicable`,[],`Отдельное описание механизма для этого типа добавки не обязательно.`)}function Pt(e){return X(e.timing)?Q(`timing`,`structured`,[`timing`,...Y(e.timingText)?[`timingText`]:[]],`Есть structured timing enum.`):Y(e.timingText)||Y(e.serving?.timingText)?Q(`timing`,`text_present`,Y(e.timingText)?[`timingText`]:[`serving.timingText`],`Timing только в тексте.`):Q(`timing`,`missing`,[],`Нет timing guidance.`)}function Ft(e){if(Y(e.serving?.mealText))return Q(`meal_timing`,`structured`,[`serving.mealText`],`Есть serving.mealText.`);let t=[`with_meal`,`before_meal`,`after_meal`,`empty_stomach`];return e.timing.some(e=>t.includes(e))?Q(`meal_timing`,`partial`,[`timing`],`Meal timing только через timing enum.`):yt.test(Z(e))?Q(`meal_timing`,`text_present`,[`timingText`],`Meal timing упомянут в тексте.`):Q(`meal_timing`,`missing`,[],`Нет meal timing copy.`)}function It(e){return dt(e)?X(e.detail?.absorption?.enhancers)?Q(`absorption_enhancers`,`structured`,[`detail.absorption.enhancers`],`Structured absorption enhancers.`):bt.test(Z(e))?Q(`absorption_enhancers`,`text_present`,[`serving.mealText`,`caution`,`timingText`],`Есть текст про усвоение/еду.`):Y(e.serving?.mealText)?Q(`absorption_enhancers`,`partial`,[`serving.mealText`],`Meal text есть, но без явных enhancers.`):Q(`absorption_enhancers`,`missing`,[],`Нет copy про улучшение усвоения.`):Q(`absorption_enhancers`,`not_applicable`,[],`Список того, что улучшает усвоение, для этого типа добавки не требуется.`)}function Lt(e){return ft(e)?X(e.detail?.absorption?.inhibitors)?Q(`absorption_inhibitors`,`structured`,[`detail.absorption.inhibitors`],`Structured absorption inhibitors.`):xt.test(Z(e))?Q(`absorption_inhibitors`,`text_present`,[`caution`,`serving.cautionText`],`Есть текст про конкуренцию/разделение.`):Q(`absorption_inhibitors`,`missing`,[],`Нет copy про inhibitors/конкуренцию.`):Q(`absorption_inhibitors`,`not_applicable`,[],`Список того, что мешает усвоению, для этого типа добавки не требуется.`)}function Rt(e){return X(e.detail?.contraindications)?Q(`contraindications`,`structured`,[`detail.contraindications`],`Structured contraindications list.`):Dt.test(Z(e))?Q(`contraindications`,`text_present`,[`caution`,`serving.cautionText`],`Contraindications только в free text.`):e.riskLevel===`low`?Q(`contraindications`,`not_applicable`,[],`Низкий риск: отдельный список противопоказаний не обязателен.`):Q(`contraindications`,`missing`,[],`Нет contraindications copy.`)}function zt(e,t){return t?Q(`safety_cautions`,`structured`,[`supplementSafetyRules`],`Есть structured safety rules.`):Y(e.caution)&&Y(e.serving?.cautionText)?Q(`safety_cautions`,`structured`,[`caution`,`serving.cautionText`],`Caution на top-level и в serving.`):Y(e.caution)||Y(e.serving?.cautionText)?Q(`safety_cautions`,`text_present`,Y(e.caution)?[`caution`]:[`serving.cautionText`],`Safety caution только в одном поле.`):e.riskLevel===`high`||e.riskLevel===`medium`?Q(`safety_cautions`,`missing`,[],`Нет safety caution copy.`):Q(`safety_cautions`,`partial`,[],`Low-risk без отдельного safety block.`)}function Bt(e){return kt(e)?X(e.detail?.risks)?Q(`overdose_risks`,`structured`,[`detail.risks`],`Structured adverse/risk list in detail.`):X(e.detail?.sideEffects)?Q(`overdose_risks`,`structured`,[`detail.sideEffects`],`Structured sideEffects cover adverse framing.`):St.test(Z(e))?Q(`overdose_risks`,`text_present`,[`caution`,`serving.cautionText`,`detail.risks`],`Overdose/adverse risks в тексте.`):Q(`overdose_risks`,`missing`,[],`Нет overdose/adverse copy.`):Q(`overdose_risks`,`not_applicable`,[],`Описание рисков передозировки для этой добавки не требуется.`)}function Vt(e){return q(e)?e.detail?.deficiency?.applicable===!1?Q(`deficiency_consequences`,`not_applicable`,[`detail.deficiency.applicable`],`Deficiency consequences помечены как not applicable.`):X(e.detail?.deficiency?.consequences)?Q(`deficiency_consequences`,`structured`,[`detail.deficiency.consequences`],`Structured deficiency consequences.`):Ct.test(Z(e))?Q(`deficiency_consequences`,`text_present`,[`purpose`,`sectionTags`,`caution`],`Deficiency/insufficiency упомянут в тексте.`):Q(`deficiency_consequences`,`missing`,[],`Нет explicit deficiency consequences copy.`):Q(`deficiency_consequences`,`not_applicable`,[],`Это не незаменимый нутриент — описание дефицита не требуется.`)}function Ht(e){return At(e)?X(e.detail?.excess?.signs)||X(e.detail?.excess?.risks)?Q(`excess_signs`,`structured`,[...X(e.detail?.excess?.signs)?[`detail.excess.signs`]:[],...X(e.detail?.excess?.risks)?[`detail.excess.risks`]:[]],`Structured excess signs/risks.`):X(e.detail?.sideEffects)?Q(`excess_signs`,`structured`,[`detail.sideEffects`],`Structured sideEffects list.`):wt.test(Z(e))||St.test(Z(e))?Q(`excess_signs`,`text_present`,[`caution`,`detail.risks`],`Excess/adverse signs в тексте.`):Q(`excess_signs`,`missing`,[],`Нет excess signs copy.`):Q(`excess_signs`,`not_applicable`,[],`Признаки избытка для этой добавки не требуются.`)}function Ut(e,t){if(!J(e))return Q(`interactions`,`not_applicable`,[],`Отдельное описание взаимодействий для этой добавки не обязательно.`);let n=e.detail?.interactions;return X(n?.medications)||X(n?.nutrients)||X(n?.foods)?Q(`interactions`,`structured`,[...X(n?.medications)?[`detail.interactions.medications`]:[],...X(n?.nutrients)?[`detail.interactions.nutrients`]:[],...X(n?.foods)?[`detail.interactions.foods`]:[]],`Structured interactions lists.`):Y(n?.notes)&&Tt.test(n.notes)?Q(`interactions`,`structured`,[`detail.interactions.notes`],`Interactions notes field.`):Tt.test(Z(e))?Q(`interactions`,`text_present`,[`caution`,`serving.cautionText`],`Medication/nutrient interactions в тексте.`):X(e.detail?.contraindications)?Q(`interactions`,`partial`,[`detail.contraindications`],`Contraindications частично покрывают interaction context.`):t?Q(`interactions`,`partial`,[`supplementSafetyRules`],`Safety rules есть, но explicit interactions copy нет.`):e.riskLevel===`high`||e.riskLevel===`medium`?Q(`interactions`,`missing`,[],`Нет interactions copy.`):Q(`interactions`,`not_applicable`,[],`Для добавок с низким риском отдельное описание взаимодействий не обязательно.`)}function Wt(e,t){return t?Q(`lab_context`,`structured`,[`supplementLabRules`],`Есть structured lab rule.`):e.labRequirement!==`not_required`||X(e.labTests)?Q(`lab_context`,`text_present`,[`labRequirement`,`labTests`],`Lab context только в текстовых полях.`):Q(`lab_context`,`not_applicable`,[],`Routine lab context не требуется.`)}function Gt(e){return Ot(e)?X(e.detail?.productLabelContext)?Q(`product_label_context`,`structured`,[`detail.productLabelContext`],`Structured product label context.`):X(e.detail?.productLabelRefs)?Q(`product_label_context`,`structured`,[`detail.productLabelRefs`],`Structured product label source refs.`):Et.test(Z(e))?Q(`product_label_context`,`text_present`,[`serving.doseText`,`serving.cautionText`,`serving.unitText`],`Есть label-dependent copy.`):Q(`product_label_context`,`missing`,[],`Label context важен, но copy отсутствует.`):Q(`product_label_context`,`not_applicable`,[],`Контекст этикетки продукта для этой добавки не критичен.`)}function Kt(e){return X(e.detail?.sourceRefs)||X(e.detail?.safetyRefs)||X(e.detail?.labRefs)||X(e.detail?.productLabelRefs)||Y(e.detail?.evidenceNotes)?Q(`evidence_or_confidence`,`structured`,[...X(e.detail?.sourceRefs)?[`detail.sourceRefs`]:[],...X(e.detail?.safetyRefs)?[`detail.safetyRefs`]:[],...X(e.detail?.labRefs)?[`detail.labRefs`]:[],...X(e.detail?.productLabelRefs)?[`detail.productLabelRefs`]:[],...Y(e.detail?.evidenceNotes)?[`detail.evidenceNotes`]:[]],`Есть source/safety/lab/label refs или evidence notes.`):e.evidenceLevel?Q(`evidence_or_confidence`,`structured`,[`evidenceLevel`],`Evidence level: ${e.evidenceLevel}.`):Q(`evidence_or_confidence`,`missing`,[],`Нет evidenceLevel.`)}function qt(e){return e.detail&&Y(e.purpose)?Q(`user_facing_summary`,`structured`,[`purpose`,`detail`],`Purpose + detail block для карточки.`):Y(e.purpose)&&Y(e.serving?.doseText)&&Y(e.serving?.cautionText)?Q(`user_facing_summary`,`structured`,[`purpose`,`serving.doseText`,`serving.cautionText`],`Purpose + serving summary.`):Y(e.purpose)&&Y(e.serving?.doseText)?Q(`user_facing_summary`,`partial`,[`purpose`,`serving.doseText`],`Краткий summary без caution line.`):Q(`user_facing_summary`,`partial`,[`purpose`],`Только purpose.`)}var Jt={structured:1,text_present:.85,partial:.5,missing:0,unsafe_to_infer:0,not_applicable:0};function Yt(e){let t=0,n=0;for(let r of mt){let i=e[r].status;i!==`not_applicable`&&(t+=Jt[i],n+=1)}return n===0?0:Math.round(t/n*100)}function Xt(e){let t=[],n=[],r=[],i=[];for(let a of mt){let o=e[a].status;o===`missing`&&t.push(a),o===`partial`&&n.push(a),o===`not_applicable`&&r.push(a),o===`unsafe_to_infer`&&i.push(a)}return{missingDimensions:t,partialDimensions:n,notApplicableDimensions:r,unsafeToInferDimensions:i}}function Zt(e){return e.evidenceLevel===`weak`||e.evidenceLevel===`limited`||e.evidenceLevel===`mixed`}function Qt(e){let{item:t,missingDimensions:n,dimensions:r,completenessScore:i}=e,a=[],o=n.includes(`contraindications`)||n.includes(`safety_cautions`)||n.includes(`interactions`)&&J(t);t.riskLevel===`high`&&(ht.has(t.id)?a.push(`unsupported_or_high_risk_copy_review`):a.push(`doctor_only_copy_review`)),(t.riskLevel===`high`||t.riskLevel===`medium`)&&o&&a.push(`needs_safety_copy`),n.includes(`overdose_risks`)&&r.overdose_risks.status===`missing`&&a.push(`needs_overdose_copy`);let s=n.includes(`meal_timing`),c=n.includes(`absorption_enhancers`)&&dt(t),l=n.includes(`absorption_inhibitors`)&&ft(t);(s||c||l)&&a.push(`needs_meal_absorption_copy`),n.includes(`interactions`)&&J(t)&&a.push(`needs_interaction_copy`),n.includes(`deficiency_consequences`)&&q(t)&&a.push(`needs_deficiency_copy`),n.includes(`mechanism_or_role`)&&a.push(`needs_mechanism_copy`),n.includes(`product_label_context`)&&Ot(t)&&a.push(`needs_label_context`),n.includes(`timing`)&&a.push(`needs_timing_copy`),Zt(t)&&n.length>=4&&a.push(`needs_research_review`),i<45&&a.push(`needs_short_description`),a.length===0&&a.push(`complete_enough`);let u=[`unsupported_or_high_risk_copy_review`,`doctor_only_copy_review`,`needs_safety_copy`,`needs_overdose_copy`,`needs_meal_absorption_copy`,`needs_deficiency_copy`,`needs_interaction_copy`,`needs_mechanism_copy`,`needs_label_context`,`needs_timing_copy`,`needs_research_review`,`needs_short_description`,`complete_enough`];return[...new Set(a)].sort((e,t)=>u.indexOf(e)-u.indexOf(t)).slice(0,3)}function $t(e,t,n){if(n.includes(`complete_enough`))return`${e.name}: базовое описание заполнено, критичных пробелов нет.`;let r=n[0]??`needs_short_description`,i=t.slice(0,3).join(`, `)||`none`;return`${e.name}: next=${r}; missing=${i}.`}function $(e){let t=o(e),r=!!a(e.id),s=n(e.id),c=O(e.id),l={purpose:jt(t),target_effects:Mt(t),mechanism_or_role:Nt(t),timing:Pt(t),meal_timing:Ft(t),absorption_enhancers:It(t),absorption_inhibitors:Lt(t),contraindications:Rt(t),safety_cautions:zt(t,s),overdose_risks:Bt(t),deficiency_consequences:Vt(t),excess_signs:Ht(t),interactions:Ut(t,s),lab_context:Wt(t,r),product_label_context:Gt(t),evidence_or_confidence:Kt(t),user_facing_summary:qt(t)},{missingDimensions:u,partialDimensions:d,notApplicableDimensions:f,unsafeToInferDimensions:p}=Xt(l),m=Yt(l),h=i(t),g=Qt({item:t,missingDimensions:u,partialDimensions:d,dimensions:l,completenessScore:m});return{supplementKnowledgeId:e.id,name:e.name,riskLevel:e.riskLevel,labRequirement:e.labRequirement,evidenceLevel:e.evidenceLevel,hasServing:!!e.serving,hasDetailBlock:!!e.detail,hasStructuredLabRule:r,hasSafetyRules:s,hasPdeModel:c,dimensions:l,missingDimensions:u,partialDimensions:d,notApplicableDimensions:f,unsafeToInferDimensions:p,nextActions:g,completenessScore:m,summary:$t(t,u,g),sourceCoverage:h}}function en(e){let n=e?.knowledgeItems??r(t()),i=n.map(e=>$(e));return{items:i,summary:tn(i,n)}}function tn(e,t){let n=new Map(t.map(e=>[e.id,e]));return{total:e.length,withPurpose:e.filter(e=>e.dimensions.purpose.status!==`missing`).length,withServing:e.filter(e=>e.hasServing).length,withDetailBlock:e.filter(e=>e.hasDetailBlock).length,withStructuredLabRule:e.filter(e=>e.hasStructuredLabRule).length,withSafetyRules:e.filter(e=>e.hasSafetyRules).length,withPdeModel:e.filter(e=>e.hasPdeModel).length,highRiskCount:e.filter(e=>e.riskLevel===`high`).length,weakEvidenceCount:e.filter(e=>e.evidenceLevel===`weak`||e.evidenceLevel===`limited`||e.evidenceLevel===`mixed`).length,missingContraindicationsCount:e.filter(e=>e.dimensions.contraindications.status===`missing`).length,missingProductLabelContextCount:e.filter(e=>e.dimensions.product_label_context.status===`missing`).length,missingAbsorptionInhibitorsCount:e.filter(e=>e.dimensions.absorption_inhibitors.status===`missing`).length,missingExcessSignsCount:e.filter(e=>e.dimensions.excess_signs.status===`missing`).length,deficiencyApplicableCount:e.filter(e=>{let t=n.get(e.supplementKnowledgeId);return t?q(t):!1}).length,deficiencyApplicableMissingCount:e.filter(e=>{let t=n.get(e.supplementKnowledgeId);return!!t&&q(t)&&e.dimensions.deficiency_consequences.status===`missing`}).length,completeEnoughCount:e.filter(e=>e.nextActions.includes(`complete_enough`)).length,needsSafetyCopyCount:e.filter(e=>e.nextActions.includes(`needs_safety_copy`)).length,needsMealAbsorptionCopyCount:e.filter(e=>e.nextActions.includes(`needs_meal_absorption_copy`)).length,doctorOnlyReviewCount:e.filter(e=>e.nextActions.includes(`doctor_only_copy_review`)||e.nextActions.includes(`unsupported_or_high_risk_copy_review`)).length,needsDeficiencyCopyCount:e.filter(e=>e.nextActions.includes(`needs_deficiency_copy`)).length,needsResearchReviewCount:e.filter(e=>e.nextActions.includes(`needs_research_review`)).length,withAnySourceCount:e.filter(e=>e.sourceCoverage.hasAnySource).length,missingSafetySourceCount:e.filter(e=>e.sourceCoverage.missingSafetySource).length,missingLabelSourceCount:e.filter(e=>e.sourceCoverage.missingLabelSource).length,staleSourceCount:e.filter(e=>e.sourceCoverage.isStale).length}}function nn(e,t){let n=[...e];return t===`all`?n:n.filter(e=>{switch(t){case`missing_safety`:return e.nextActions.includes(`needs_safety_copy`)||e.nextActions.includes(`doctor_only_copy_review`)||e.nextActions.includes(`unsupported_or_high_risk_copy_review`)||e.dimensions.contraindications.status===`missing`||e.dimensions.safety_cautions.status===`missing`;case`missing_absorption`:return e.nextActions.includes(`needs_meal_absorption_copy`)||e.dimensions.absorption_enhancers.status===`missing`||e.dimensions.absorption_inhibitors.status===`missing`||e.dimensions.meal_timing.status===`missing`;case`missing_deficiency`:return e.nextActions.includes(`needs_deficiency_copy`);case`missing_product_label_context`:return e.nextActions.includes(`needs_label_context`)||e.dimensions.product_label_context.status===`missing`;case`doctor_only_review`:return e.nextActions.includes(`doctor_only_copy_review`)||e.nextActions.includes(`unsupported_or_high_risk_copy_review`);case`needs_research_review`:return e.nextActions.includes(`needs_research_review`);case`complete_enough`:return e.nextActions.includes(`complete_enough`);case`needs_source`:return!e.sourceCoverage.hasAnySource;case`needs_safety_source`:return e.sourceCoverage.missingSafetySource;case`needs_label_source`:return e.sourceCoverage.missingLabelSource;case`stale_sources`:return e.sourceCoverage.isStale;case`needs_mechanism`:return e.nextActions.includes(`needs_mechanism_copy`);case`needs_interaction`:return e.nextActions.includes(`needs_interaction_copy`);case`schema_gap`:return e.missingDimensions.some(e=>[`mechanism_or_role`,`absorption_enhancers`,`absorption_inhibitors`,`interactions`,`deficiency_consequences`,`excess_signs`,`product_label_context`].includes(e));case`research_gap`:return e.nextActions.includes(`needs_research_review`);case`already_sufficient`:return e.nextActions.includes(`complete_enough`);default:return!0}})}export{V as a,te as c,ee as d,g as f,at as i,y as l,en as n,Ge as o,nn as r,k as s,$ as t,C as u};