import{t as e}from"./db-D2Po16Ap.js";import{B as t,L as n,z as r}from"./Card-Cxq4Ee-X.js";import{a as i,r as a,t as o}from"./now-Ds5hQLtP.js";import{A as s,F as c,S as l,d as u,g as d,h as f,l as p,p as m,u as h}from"./supplements-DUypwbGQ.js";import{r as g}from"./supplementLabRetakePolicy-DYFjnA-6.js";import{c as _,f as ee,i as v,t as y}from"./supplementKnowledgeContentCoverage-QijmrXnh.js";function b(){return crypto.randomUUID?.()??`_${Date.now()}_${Math.random().toString(36).slice(2)}`}async function x(t){return e.mealPlans.where(`weekStartISO`).equals(t).first()}async function te(t,n){let r=await x(t);if(r)return r;let i=new Date().toISOString(),a={id:b(),weekStartISO:t,createdAtISO:i,updatedAtISO:i,targetsSnapshot:n,active:!0};return await e.mealPlans.add(a),a}async function ne(t){return e.mealPlanItems.where(`planId`).equals(t).toArray()}async function re(t){return(await e.mealPlans.get(t))?.shoppingChecks??{}}async function ie(t,n,r){let i=await e.mealPlans.get(t);if(!i)return;let a={...i.shoppingChecks??{},[n]:r};await e.mealPlans.update(t,{shoppingChecks:a,updatedAtISO:new Date().toISOString()})}async function ae(t){await e.mealPlans.update(t,{shoppingChecks:{},updatedAtISO:new Date().toISOString()})}async function oe(t,n){await e.mealPlans.update(t,{shoppingRoundStepGr:n,updatedAtISO:new Date().toISOString()})}async function se(t,n){return(await e.mealPlanItems.where(`planId`).equals(t).toArray()).filter(e=>e.dateISO===n).sort((e,t)=>e.mealIndex-t.mealIndex)}async function ce(t,n,r,i,a){let o=new Date().toISOString(),s=(await e.mealPlanItems.where(`planId`).equals(t).toArray()).find(e=>e.dateISO===n&&e.mealIndex===r);s?await e.mealPlanItems.update(s.id,{recipeId:i.recipeId,recipeName:i.recipeName,scale:i.scale,score:i.score,updatedAtISO:o}):await e.mealPlanItems.add({id:b(),planId:t,dateISO:n,mealIndex:r,timeHHMM:a,recipeId:i.recipeId,recipeName:i.recipeName,scale:i.scale,score:i.score,createdAtISO:o,updatedAtISO:o})}async function le(t,n,r,i,a,o,s,c){let l=new Date().toISOString(),u=(await e.mealPlanItems.where(`planId`).equals(t).toArray()).find(e=>e.dateISO===n&&e.mealIndex===r);if(a===``||o===``){u&&await e.mealPlanItems.delete(u.id);return}u?await e.mealPlanItems.update(u.id,{timeHHMM:i,recipeId:a,recipeName:o,scale:s,score:c,updatedAtISO:l}):await e.mealPlanItems.add({id:b(),planId:t,dateISO:n,mealIndex:r,timeHHMM:i,recipeId:a,recipeName:o,scale:s,score:c,createdAtISO:l,updatedAtISO:l})}async function ue(t,n){let r=new Date().toISOString();for(let t of n)await e.mealPlanItems.update(t.id,{scale:t.scale,score:t.score,updatedAtISO:r})}async function de(t,n){await e.mealPlans.update(t,{targetsSnapshot:n,updatedAtISO:new Date().toISOString()})}async function fe(t,n,r){let i=await e.mealPlanItems.where(`planId`).equals(t).filter(e=>e.dateISO===n).toArray();for(let t of i)await e.mealPlanItems.delete(t.id);let a=new Date().toISOString();for(let i=0;ie.mealIndexe.dateISO===n).toArray();if(i)for(let t of s)await e.mealPlanItems.delete(t.id);let c=new Date().toISOString();for(let r of o)await e.mealPlanItems.add({id:b(),planId:t,dateISO:n,mealIndex:r.mealIndex,timeHHMM:r.timeHHMM,recipeId:r.recipeId,recipeName:r.recipeName,scale:r.scale,score:r.score,createdAtISO:c,updatedAtISO:c})}async function ge(e,t,n){let r=i(t),o=[];for(let e=0;e<7;e+=1){let t=new Date(r.getFullYear(),r.getMonth(),r.getDate()+e);o.push(a(t))}for(let t of o)await he(e,t,n,!0)}function _e(e,t){return o(e,t)}async function ve(t,n){let r=await x(_e(t,-7));if(!r)return{ok:!1,error:`Нет плана прошлой недели`};let i=await te(t,n),a=await ne(r.id),o=[];for(let e=0;e<7;e+=1)o.push(_e(t,e));let s=await e.mealPlanItems.where(`planId`).equals(i.id).toArray();for(let t of s)o.includes(t.dateISO)&&await e.mealPlanItems.delete(t.id);let c=new Date().toISOString();for(let t of a){let n=_e(t.dateISO,7);await e.mealPlanItems.add({id:b(),planId:i.id,dateISO:n,mealIndex:t.mealIndex,timeHHMM:t.timeHHMM,recipeId:t.recipeId,recipeName:t.recipeName,scale:t.scale,score:t.score,createdAtISO:c,updatedAtISO:c})}return{ok:!0}}function ye(){return crypto.randomUUID?.()??`supplement_intake_${Date.now()}_${Math.random().toString(36).slice(2)}`}function be(){return new Date().toISOString()}function S(e){return e?.trim()||void 0}function xe(e,t){return(e.scheduledAtHHMM??``).localeCompare(t.scheduledAtHHMM??``)||e.createdAtISO.localeCompare(t.createdAtISO)||e.id.localeCompare(t.id)}async function Se(t){let n=await e.supplementPlanItems.get(t);if(!n)throw Error(`Supplement plan item not found: ${t}`);return n}async function Ce(t,n,r){let i=await e.supplementIntakeLogs.where(`[dateISO+planItemId]`).equals([n,t]).toArray(),a=r??``;return i.find(e=>(e.scheduledAtHHMM??``)===a)}async function we(){return e.supplementIntakeLogs.toArray()}async function Te(t){return(await e.supplementIntakeLogs.where(`dateISO`).equals(t).toArray()).sort(xe)}async function Ee(t){let n=t.id==null?await Ce(t.planItemId,t.dateISO,S(t.scheduledAtHHMM)):await e.supplementIntakeLogs.get(t.id),r=be(),i={id:n?.id??t.id??ye(),planItemId:t.planItemId,supplementKnowledgeId:S(t.supplementKnowledgeId),supplementCatalogId:S(t.supplementCatalogId),dateISO:t.dateISO,scheduledAtHHMM:S(t.scheduledAtHHMM),takenAtISO:S(t.takenAtISO),status:t.status,dosageValue:t.dosageValue,dosageUnit:S(t.dosageUnit),source:t.source??n?.source??`manual`,note:S(t.note),createdAtISO:n?.createdAtISO??r,updatedAtISO:r};return await e.supplementIntakeLogs.put(i),i}async function De(e,t){let n=await Se(e.planItemId),r=e.source??`manual`;return Ee({planItemId:e.planItemId,supplementCatalogId:n.supplementCatalogId,dateISO:e.dateISO,scheduledAtHHMM:e.scheduledAtHHMM,takenAtISO:t===`taken`?e.takenAtISO??be():e.takenAtISO,status:t,dosageValue:n.dosageValue,dosageUnit:n.dosageUnit,source:r,note:e.note})}async function Oe(e){return De(e,`taken`)}async function ke(e){return De(e,`skipped`)}async function Ae(t){await e.supplementIntakeLogs.delete(t)}function je(e,r=n()){let i=`supplements.display.scheduleLabel.${e}`,a=t(i,void 0,r);return a===i?e:a}function Me(e){let[t,n]=e.split(`:`).map(Number);return!Number.isFinite(t)||!Number.isFinite(n)?0:Math.max(0,Math.min(23,t))*60+Math.max(0,Math.min(59,n))}function Ne(e){let t=1440,n=(Math.round(e)%t+t)%t,r=Math.floor(n/60),i=n%60;return`${String(r).padStart(2,`0`)}:${String(i).padStart(2,`0`)}`}function C(e,t){return Ne(Me(e)+t)}function Pe(e){switch(e){case`before_meal`:return-7;case`with_meal`:return 3;case`after_meal`:return 12;default:return null}}function Fe(e){switch(e){case`before_meal`:return`before_meal`;case`with_meal`:return`with_meal`;case`after_meal`:return`after_meal`;default:return null}}function Ie(e){return[...e].sort((e,t)=>e.timeHHMM.localeCompare(t.timeHHMM)).map(e=>e.timeHHMM)}function Le(e,t,n){if(e.preferredTimesHHMM.length>0)return e.preferredTimesHHMM.map(e=>({time:e,label:`scheduled`}));let r=Pe(e.timing),i=Fe(e.timing);if(r!=null&&i&&t.length>0){let n=Math.max(1,e.frequencyPerDay),a=[];for(let e=0;e0?[{time:C(t[0],3),label:`with_meal`}]:[{time:`09:00`,label:`default`}]}function Re(e){let t=Ie(e.mealPlanItems),n=e.trainings.find(e=>e.active);return e.supplementPlanItems.filter(e=>e.active).flatMap(e=>Le(e,t,n).slice(0,Math.max(1,e.frequencyPerDay)).map((t,n)=>({id:`supplement:${e.id}:${n}`,planItem:e,scheduledAtHHMM:t.time,label:t.label,index:n})))}function ze(e,t){return(e??``)===(t??``)}function Be(e,t,n,r){return e.filter(e=>e.planItemId===t&&e.dateISO===n&&ze(e.scheduledAtHHMM,r)).sort((e,t)=>t.updatedAtISO.localeCompare(e.updatedAtISO))[0]}function Ve(e,t,n,r={}){return Re({supplementPlanItems:e,mealPlanItems:r.mealPlanItems??[],trainings:r.trainings??[]}).map(e=>{let r=Be(t,e.planItem.id,n,e.scheduledAtHHMM);return{id:e.id,planItem:e.planItem,dateISO:n,scheduledAtHHMM:e.scheduledAtHHMM,scheduleLabel:e.label,log:r,status:r?.status??`pending`}})}function He(e){return{taken:e.filter(e=>e.status===`taken`).length,total:e.length}}function w(e,r,i){let a=`supplements.display.archive.${e}`,o=t(a,r,i??n());return o===a?e:o}function T(e){return!!e.archivedAtISO?.trim()}function Ue(e,t){return e.filter(e=>e.productId===t&&e.isActive).length}function We(e){let{productTitle:t,activeLinkCount:n}=e;return n>0?w(`archiveWithLinks`,{title:t,count:n}):w(`archiveSimple`,{title:t})}function Ge(e){let t=e.activeLinkCount>0?w(`hardDeleteLinks`,{count:e.activeLinkCount}):``,n=e.isArchived?``:w(`hardDeleteArchiveNote`);return w(`hardDelete`,{title:e.productTitle,links:t,note:n})}function Ke(e){return w(`restoreConfirm`,{title:e})}var qe={капсула:`capsule`,капсулы:`capsule`,"капс.":`capsule`,капс:`capsule`,caps:`capsule`,capsule:`capsule`,capsules:`capsule`,таблетка:`tablet`,таблетки:`tablet`,"табл.":`tablet`,табл:`tablet`,tablet:`tablet`,tablets:`tablet`,"мягкая капсула":`softgel`,"мягкие капсулы":`softgel`,softgel:`softgel`,softgels:`softgel`,порция:`serving`,порции:`serving`,serving:`serving`,servings:`serving`,г:`g`,gram:`g`,grams:`g`,g:`g`,мг:`mg`,mg:`mg`,мкг:`mcg`,mcg:`mcg`,µg:`mcg`,μg:`mcg`,ме:`iu`,iu:`iu`,мл:`ml`,ml:`ml`,ложка:`scoop`,"мерная ложка":`scoop`,scoop:`scoop`,scoops:`scoop`,капля:`drop`,капли:`drop`,drop:`drop`,drops:`drop`,бутылка:`bottle`,bottle:`bottle`,bottles:`bottle`,other:`other`},Je=`Доза не равна целому числу единиц продукта.`,Ye=`Стоимость дозы и дня недоступна без данных о единицах на дозу и частоте приёма.`;function E(e){return e!=null&&Number.isFinite(e)&&e>0}function Xe(e){return e!=null&&Number.isFinite(e)&&e>=0}function D(e,t={}){return{status:e,value:t.value,reason:t.reason,warnings:t.warnings??[]}}function O(e){if(e==null)return``;let t=e.trim().toLowerCase();return t?qe[t]??t:``}function Ze(e,t){let n=O(e),r=O(t);return!n||!r?!1:n===r}function Qe(e,t){let n=e.activeIngredients;if(n.length!==0){if(t){let e=n.find(e=>e.isPrimary===!0&&e.mapsToSupplementKnowledgeId===t);if(e)return e;let r=n.find(e=>e.mapsToSupplementKnowledgeId===t);if(r)return r}return n.find(e=>e.isPrimary===!0)||n[0]}}function $e(e){let{planDosageValue:t,planDosageUnit:n,product:r,supplementKnowledgeId:i}=e;if(!E(t))return D(`missing_data`,{reason:`missing_plan_dose_value`});if(!n?.trim())return D(`missing_data`,{reason:`missing_plan_dose_unit`});let a=Qe(r,i);if(!a)return D(`missing_data`,{reason:`missing_primary_ingredient`});if(!E(a.amount))return D(`missing_data`,{reason:`missing_ingredient_amount`});if(!a.per)return D(`missing_data`,{reason:`missing_ingredient_per_unit`});let o=O(n),s=O(String(a.unit));if(!Ze(o,s))return D(`unit_mismatch`,{reason:`plan_unit_incompatible_with_ingredient_unit`,warnings:[`Единицы плана (${n}) и этикетки (${a.unit}) не совпадают.`]});let c=t/a.amount,l=[];return Number.isInteger(c)||l.push(Je),D(`available`,{value:{unitsPerDose:c,unit:O(String(a.per)),ingredientAmountPerUnit:a.amount,ingredientUnit:s,planDosageValue:t,planDosageUnit:o},warnings:l})}function et(e){let{unitsPerDose:t,frequencyPerDay:n}=e;return E(t)?E(n)?D(`available`,{value:t*n}):D(`missing_data`,{reason:`missing_frequency_per_day`}):D(`missing_data`,{reason:`missing_units_per_dose`})}function tt(e){let{servingsRemaining:t,servingsPerDay:n}=e;return Xe(t)?E(n)?t===0?D(`available`,{value:0}):D(`available`,{value:t/n}):D(`missing_data`,{reason:`missing_servings_per_day`}):D(`missing_data`,{reason:`missing_servings_remaining`})}function nt(e){let{purchasePrice:t,currency:n,servingsTotal:r,unitsPerDose:i,frequencyPerDay:a}=e;if(!Xe(t))return D(`missing_data`,{reason:`missing_purchase_price`});if(!E(r))return D(`missing_data`,{reason:`missing_servings_total`});let o=t/r,s={costPerServing:o,currency:n},c=[];return E(i)&&E(a)?(s.costPerPlanDose=o*i,s.costPerDay=s.costPerPlanDose*a,s.costPer30Days=s.costPerDay*30):c.push(Ye),D(`available`,{value:s,warnings:c})}var rt=7;function k(e){let{servingsRemaining:t,lowStockThresholdServings:n=rt}=e;return t==null||!Number.isFinite(t)?`unknown`:t<=0?`out_of_stock`:t<=n?`low_stock`:`in_stock`}var it=30,at=1440*60*1e3;function ot(e){if(!e?.trim())return null;let t=Date.parse(e);return Number.isFinite(t)?t:null}function A(e){let{expiresAtISO:t,nowISO:n,expiringSoonDays:r=it}=e,i=ot(t);if(i==null)return`unknown`;let a=ot(n)??Date.now();return i0&&c.push(...h.warnings),{stockStatus:u,expiryStatus:d,daysRemaining:f,cost:m,mismatchIssues:l.issues,warnings:c}}function M(e,r,i=n()){let a=`supplements.display.productLink.${e}`,o=t(a,r,i);return o===a?e:o}function lt(e){return e.knowledgeName?.trim()||e.planItem.customName?.trim()||M(`planItemFallback`)}function ut(e){let{activeLinks:t,planItemsById:n,knowledgeNameById:r}=e;if(t.length===0)return M(`summaryUnlinked`);if(t.length===1){let e=t[0],i=n.get(e.planItemId);return i?M(`summaryLinkedName`,{name:lt({planItem:i,knowledgeName:i.supplementKnowledgeId?r.get(i.supplementKnowledgeId):void 0})}):M(`summaryLinkedScheme`)}return M(`summaryLinkedCount`,{count:t.length})}function dt(e){let{product:t,planItem:n}=e;if(T(t))return{ok:!1,reason:M(`linkBlockedArchived`)};if(!n.active)return{ok:!1,reason:M(`linkBlockedInactive`)};let r=t.supplementKnowledgeId?.trim(),i=n.supplementKnowledgeId?.trim();return r&&i&&r!==i?{ok:!1,reason:M(`linkBlockedKnowledge`)}:{ok:!0}}function ft(e){let t=0;for(let n of e.products)(e.activeLinksByProductId.get(n.id)??[]).length===0&&(t+=1);return t}function N(e,r,i=n()){let a=`supplements.display.product.${e}`,o=t(a,r,i);return o===a?e:o}function pt(e){switch(e){case`green`:return{color:`#5adf8a`,borderColor:`rgba(90, 223, 138, 0.55)`,background:`rgba(90, 223, 138, 0.12)`};case`yellow`:return{color:`#ffb25f`,borderColor:`rgba(255, 178, 95, 0.55)`,background:`rgba(255, 178, 95, 0.12)`};case`orange`:return{color:`#ff9f43`,borderColor:`rgba(255, 159, 67, 0.55)`,background:`rgba(255, 159, 67, 0.12)`};case`red`:return{color:`#ff6b6b`,borderColor:`rgba(255, 107, 107, 0.55)`,background:`rgba(255, 107, 107, 0.12)`};default:return{color:`var(--color-text-muted)`,borderColor:`var(--color-surface-elevated)`,background:`var(--color-bg)`}}}function mt(e,t=n()){let{products:r,activeLinksByProductId:i,nowISO:a}=e,o=0,s=0,c=0,l=0;for(let e of r){let t=k({servingsRemaining:e.inventory?.servingsRemaining,lowStockThresholdServings:e.inventory?.lowStockThresholdServings});(t===`low_stock`||t===`out_of_stock`)&&(o+=1);let n=A({expiresAtISO:e.expiresAtISO,nowISO:a});(n===`expired`||n===`expiring_soon`)&&(s+=1),e.activeIngredients.length===0&&(c+=1),ht(e,i).some(e=>e!==`single_active_ingredient_only`)&&(l+=1)}let u=[{key:`total`,label:N(`inventory.total.label`,void 0,t),value:String(r.length),description:r.length===0?N(`inventory.total.empty`,void 0,t):N(`inventory.total.filled`,void 0,t),tone:r.length>0?`green`:`gray`},{key:`low_stock`,label:N(`inventory.lowStock.label`,void 0,t),value:String(o),description:N(`inventory.lowStock.description`,void 0,t),tone:o>0?`orange`:`gray`},{key:`expiry`,label:N(`inventory.expiry.label`,void 0,t),value:String(s),description:N(`inventory.expiry.description`,void 0,t),tone:s>0?`red`:`gray`},{key:`plan_link`,label:N(i?`inventory.planLink.unlinked`:`inventory.planLink.linked`,void 0,t),value:i?String(ft({products:r,activeLinksByProductId:i})):N(`inventory.planLink.dash`,void 0,t),description:N(i?`inventory.planLink.unlinkedDesc`:`inventory.planLink.linkedDesc`,void 0,t),tone:i&&ft({products:r,activeLinksByProductId:i})>0?`yellow`:`gray`}];return c>0&&u.push({key:`missing_ingredients`,label:N(`inventory.missingIngredients.label`,void 0,t),value:String(c),description:N(`inventory.missingIngredients.description`,void 0,t),tone:`yellow`}),l>0&&u.push({key:`incomplete_products`,label:N(`inventory.incompleteProducts.label`,void 0,t),value:String(l),description:N(`inventory.incompleteProducts.description`,void 0,t),tone:`yellow`}),u}function ht(e,t){let n=[];return e.brand?.trim()||n.push(`missing_brand`),(!e.labelServingSize?.amount||!Number.isFinite(e.labelServingSize.amount))&&n.push(`missing_serving`),e.activeIngredients.length===0?n.push(`missing_active_ingredients`):e.activeIngredients.length===1&&n.push(`single_active_ingredient_only`),e.expiresAtISO?.trim()||n.push(`missing_expiry`),(e.inventory?.servingsRemaining==null||!Number.isFinite(e.inventory.servingsRemaining))&&n.push(`missing_stock`),t&&(t.get(e.id)??[]).length===0&&n.push(`missing_plan_link`),n}function gt(e,t=n()){let r=N(`completeness.${e}`,void 0,t);return r.startsWith(`completeness.`)?e:r}function P(e){let t=e.brand?.trim();return t?`${t} — ${e.name}`:e.name}function _t(e,t=n()){return T(e)?N(`archived`,void 0,t):void 0}function vt(e,t=n()){let r=N(`form.${e}`,void 0,t);return r.startsWith(`form.`)?e:r}function yt(e,t=n()){let r=N(`unit.${e}`,void 0,t);return r.startsWith(`unit.`)?e:r}function bt(e,t=n()){let r=Qe(e,e.supplementKnowledgeId);return r?N(`perUnit`,{amount:r.amount,unit:r.unit,per:yt(String(r.per),t)},t):N(`noActiveIngredients`,void 0,t)}function xt(e,t,r=n()){let i=k({servingsRemaining:e.inventory?.servingsRemaining,lowStockThresholdServings:e.inventory?.lowStockThresholdServings}),a=e.inventory?.servingsRemaining;return i===`out_of_stock`?N(`stock.outOfStock`,void 0,r):i===`low_stock`&&a!=null?N(`stock.lowStock`,{n:a},r):a!=null&&Number.isFinite(a)?N(`stock.remaining`,{n:a},r):N(`stock.unknown`,void 0,r)}function St(e,t,r=n()){if(!e.expiresAtISO?.trim())return N(`expiry.notSet`,void 0,r);let i=A({expiresAtISO:e.expiresAtISO,nowISO:t}),a=e.expiresAtISO.slice(0,10);return N(i===`expired`?`expiry.expired`:i===`expiring_soon`?`expiry.expiringSoon`:`expiry.valid`,{date:a},r)}function Ct(e,t=n()){if(e.purchasePrice==null||!Number.isFinite(e.purchasePrice))return null;let r=e.currency?.trim()||`RUB`;return N(`price`,{price:e.purchasePrice,currency:r},t)}function wt(e){let t=e.inventory?.servingsTotal;if(t!=null&&Number.isFinite(t)&&t>0)return t;let n=e.packageQuantity?.servingsPerPackage;if(n!=null&&Number.isFinite(n)&&n>0)return n}function Tt(e,t,n){return e<=0||t<=0?0:Math.max(1,Math.ceil(e*n/t))}function Et(e){let{planItem:t,product:n,todayDateISO:r,nowISO:i}=e,a=t.supplementKnowledgeId??n.supplementKnowledgeId,s=et({unitsPerDose:$e({planDosageValue:t.dosageValue,planDosageUnit:t.dosageUnit,product:n,supplementKnowledgeId:a}).value?.unitsPerDose,frequencyPerDay:t.frequencyPerDay}),c=j({product:n,planDosageValue:t.dosageValue,planDosageUnit:t.dosageUnit,frequencyPerDay:t.frequencyPerDay,supplementKnowledgeId:a,nowISO:i}),l=n.inventory?.servingsRemaining,u=s.value,d=c.daysRemaining;if(d==null&&l!=null&&u!=null){let e=tt({servingsRemaining:l,servingsPerDay:u});e.status===`available`&&e.value!=null&&(d=Math.max(0,Math.round(e.value*10)/10))}let f=wt(n),p=u!=null&&u>0&&f!=null&&f>0,m={canForecast:p,daysRemaining:d,runoutDateISO:d!=null&&Number.isFinite(d)?o(r,Math.max(0,Math.ceil(d))):void 0,servingsPerDay:u,servingsPerPackage:f};return p&&u!=null&&f!=null?(m.packagesFor30Days=Tt(u,f,30),m.packagesFor90Days=Tt(u,f,90)):m.missingReason=`Недостаточно данных этикетки или дозы плана для прогноза закупки.`,m}function Dt(e){let{product:t,forecast:n,nowISO:r}=e,i=A({expiresAtISO:t.expiresAtISO,nowISO:r});if(i===`expired`)return`expired`;if(i===`expiring_soon`)return`expiring_soon`;let a=k({servingsRemaining:t.inventory?.servingsRemaining,lowStockThresholdServings:t.inventory?.lowStockThresholdServings});return a===`out_of_stock`?`out_of_stock`:a===`low_stock`?`low_stock`:t.inventory?.servingsRemaining==null&&!n.canForecast?`missing_inventory`:null}function F(e){switch(e){case`expired`:case`out_of_stock`:return`high`;case`no_linked_product`:case`low_stock`:case`expiring_soon`:return`medium`;default:return`low`}}function I(e,r,i=n()){let a=`supplements.display.shopping.${e}`,o=t(a,r,i);return o===a?e:o}function Ot(e){let{reason:t,forecast:n}=e;if(t===`no_linked_product`)return I(`linkProduct`);if(n.packagesFor30Days!=null&&n.packagesFor90Days!=null)return I(`forecast`,{p30:n.packagesFor30Days,p90:n.packagesFor90Days});if(t===`expired`)return I(`checkExpiry`);if(t===`expiring_soon`)return I(`useBeforeExpiry`);if(t===`out_of_stock`||t===`low_stock`)return I(`restock`)}function kt(e,t){if(t.reason===`no_linked_product`){e.noProduct.push(t);return}(t.reason===`expired`||t.reason===`expiring_soon`)&&e.expiry.push(t),(t.reason===`low_stock`||t.reason===`out_of_stock`||t.reason===`missing_inventory`)&&e.runningLow.push(t),t.reason!==`missing_inventory`&&e.buy.push(t)}function At(e,t){let n={high:0,medium:1,low:2},r=n[e.priority]-n[t.priority];if(r!==0)return r;let i=e.daysRemaining??1/0,a=t.daysRemaining??1/0;return i===a?e.displayName.localeCompare(t.displayName,`ru`):i-a}function jt(e){let t=e.nowISO??new Date().toISOString(),n=[];for(let t of e.planItems){if(!t.active)continue;let r=e.activeLinkByPlanItemId.get(t.id),i=p(t);if(!r){n.push({id:`plan:${t.id}`,planItemId:t.id,displayName:i,reason:`no_linked_product`,priority:F(`no_linked_product`),actionHint:Ot({reason:`no_linked_product`,forecast:{canForecast:!1}})});continue}let a=e.productsById.get(r.productId);if(!a||T(a)){n.push({id:`plan:${t.id}`,planItemId:t.id,displayName:i,reason:`no_linked_product`,priority:F(`no_linked_product`),actionHint:`Привязанный продукт не найден или в архиве.`});continue}let o=Et({planItem:t,product:a,todayDateISO:e.todayDateISO,nowISO:e.nowISO}),s=Dt({product:a,forecast:o,nowISO:e.nowISO});s&&n.push({id:`plan:${t.id}:product:${a.id}`,planItemId:t.id,productId:a.id,displayName:i,productTitle:P(a),reason:s,priority:F(s),daysRemaining:o.daysRemaining==null?void 0:Math.round(o.daysRemaining),runoutDateISO:o.runoutDateISO,packagesFor30Days:o.packagesFor30Days,packagesFor90Days:o.packagesFor90Days,expiryDateISO:a.expiresAtISO?.slice(0,10),actionHint:Ot({reason:s,forecast:o})})}n.sort(At);let r={buy:[],runningLow:[],expiry:[],noProduct:[]};for(let e of n)kt(r,e);for(let e of Object.keys(r))r[e].sort(At);return{generatedAtISO:t,todayDateISO:e.todayDateISO,items:n,groups:r}}function Mt(e){return e.serving?.unitText?.split(`/`)[0]?.trim()||(e.id===`knowledge_whey_protein`||e.id===`knowledge_creatine_monohydrate`||e.id===`knowledge_beta_alanine`?`г`:e.id===`knowledge_electrolytes`||e.type===`sportpit`?`порция`:`капс.`)}function Nt(e){return e.timing[0]??`with_meal`}function Pt(e){return e===`bedtime`?[`22:00`]:e===`before_training`||e===`after_training`||e===`before_meal`||e===`with_meal`||e===`after_meal`?[]:[`09:00`]}function Ft(e){let t=[e.serving?.frequencyText,e.frequencyText].filter(Boolean).join(` `).match(/(\d+)\s*(?:раз|р\/день)/i);return t?Math.max(1,Number(t[1])||1):1}function It(e,t){let n=_(e,t);return[`Добавлено из расширенного справочника.`,n.doseText&&n.doseText!==`Нет справочной схемы в каталоге.`?`Справочная схема: ${n.doseText}`:``,n.warningText?`Важно: ${n.warningText}`:``].filter(Boolean).join(` `)}function Lt(e){return e.labRequirement===`not_required`?`not_required`:`needed`}function Rt(e,t){let n=Nt(e);return{supplementKnowledgeId:e.id,supplementCatalogId:h(e.id),dosageValue:1,dosageUnit:Mt(e),frequencyPerDay:Ft(e),timing:n,preferredTimesHHMM:Pt(n),withMeal:e.timing.includes(`with_meal`)||/ед[аоы]|пищ/i.test(e.timingText),active:!0,notes:It(e,t),labCheckStatus:Lt(e)}}var zt=/[а-яА-ЯёЁ]/,L={...c,...d.tags,...d.conditions,...d.sections},Bt={"Это справочная подсказка, не медицинское назначение.":`This is a reference hint, not a medical prescription.`,"Не использовать как загрузочную фазу.":`Do not use as a loading phase.`,"При заболеваниях почек — только после консультации специалиста.":`With kidney disease, use only after consulting a specialist.`,"Проверяйте общий план тренировок, воду и переносимость ЖКТ.":`Check the overall training plan, hydration, and GI tolerance.`,"Перед регулярным приёмом нужна консультация или проверка анализов.":`Before regular use, consult a specialist or review labs.`,"Персонализированная справочная доза не рассчитывается.":`A personalized reference dose is not calculated.`,"Для этого БАДа доступна только базовая справочная схема.":`Only a base reference scheme is available for this supplement.`,"Для этого БАДа пока нет структурированной модели дозировки.":`There is no structured dose model for this supplement yet.`,"Заполните профиль БАДов для справочной схемы.":`Fill in the supplement profile to build the reference scheme.`,"Укажите данные профиля для расчёта справочной схемы.":`Enter profile data to calculate the reference scheme.`,"Для справочной схемы не хватает актуальных анализов.":`Current labs are missing for the reference scheme.`,"Доза не рассчитывается, пока обязательные данные не заполнены.":`The dose is not calculated until required profile data is filled in.`,"Доза не рассчитывается, пока обязательные анализы отсутствуют или устарели.":`The dose is not calculated while required labs are missing or outdated.`,"Поля профиля для этой модели не требуются.":`No profile fields are required for this model.`,"Анализы для этой модели не требуются.":`No labs are required for this model.`,"Сформирована справочная схема, но есть предупреждения.":`A reference scheme was created, but there are warnings.`,"Сформирована базовая справочная схема из модели.":`A base reference scheme was created from the model.`,"Сформирована справочная схема на основе доступных данных.":`A reference scheme was created from the available data.`,"Применение требует явного подтверждения; существующие схемы не меняются автоматически.":`Applying this requires explicit confirmation; existing schemes are not changed automatically.`};function Vt(e){let t=e,n=Object.keys(L).sort((e,t)=>t.length-e.length);for(let e of n)e&&t.includes(e)&&(t=t.split(e).join(L[e]));return t}function R(e,t=n()){if(t!==`en`||!zt.test(e))return e;if(Bt[e])return Bt[e];let r=e.match(/^Нужные поля профиля: (.+)\.$/);if(r)return`Required profile fields: ${r[1]}.`;let i=e.match(/^Нужные анализы: (.+)\.$/);if(i)return`Required labs: ${i[1]}.`;let a=e.match(/^Модель расчёта: (.+); источник модели: (.+)\.$/);if(a)return`Calculation model: ${a[1]}; model source: ${a[2]}.`;let o=e.match(/^Использованы поля профиля: (.+)\.$/);if(o)return`Profile fields used: ${o[1]}.`;let s=e.match(/^Использованы анализы: (.+)\.$/);if(s)return`Labs used: ${s[1]}.`;let c=e.match(/^Причина выбора диапазона: (.+)$/);if(c)return`Reason for dose band: ${R(c[1],t)}`;let l=e.match(/^Сработал ограничитель безопасности: (.+)$/);if(l)return`Safety clamp applied: ${R(l[1],t)}`;let u=e.match(/^Проверен диапазон безопасности: (.+)$/);if(u)return`Safety range checked: ${R(u[1],t)}`;let d=L[e]??Vt(e);return zt.test(d)?`Reference safety note. Review the plan and use only after explicit confirmation.`:d}function z(e,r,i=n()){let a=`supplements.display.personalizedDose.${e}`,o=t(a,r,i);return o===a?e:o}function Ht(e,t=n()){let r=z(`status.${e}`,void 0,t);return r.startsWith(`status.`)?z(`status.default`,void 0,t):r}function Ut(e){switch(e){case`not_supported`:return`muted`;case`base_default`:return`info`;case`profile_required`:return`warning`;case`labs_required`:return`warning`;case`ready`:return`success`;case`caution`:return`warning`;case`blocked`:return`danger`;default:return`muted`}}function Wt(e){switch(e){case`success`:return{color:`#5adf8a`,borderColor:`rgba(90, 223, 138, 0.55)`,background:`rgba(90, 223, 138, 0.12)`,modifierClass:`personalized-dose-preview--success`};case`warning`:return{color:`#ffb25f`,borderColor:`rgba(255, 178, 95, 0.55)`,background:`rgba(255, 178, 95, 0.12)`,modifierClass:`personalized-dose-preview--warning`};case`danger`:return{color:`#ff6b6b`,borderColor:`rgba(255, 107, 107, 0.55)`,background:`rgba(255, 107, 107, 0.12)`,modifierClass:`personalized-dose-preview--danger`};case`info`:return{color:`var(--color-primary)`,borderColor:`rgba(100, 160, 255, 0.45)`,background:`rgba(100, 160, 255, 0.1)`,modifierClass:`personalized-dose-preview--info`};default:return{color:`var(--color-text-muted)`,borderColor:`var(--color-surface-elevated)`,background:`var(--color-bg)`,modifierClass:`personalized-dose-preview--muted`}}}function Gt(e,t=n()){if(!e)return z(`notCalculated`,void 0,t);let r=[`${e.value} ${e.unit}`];return e.frequencyPerDay>0&&r.push(z(`timesPerDay`,{n:e.frequencyPerDay},t)),e.preferredTimesHHMM&&e.preferredTimesHHMM.length>0&&r.push(e.preferredTimesHHMM.join(`, `)),e.withMeal&&r.push(z(`withMeal`,void 0,t)),r.join(` · `)}function Kt(e,t=n()){let r=z(`source.${e}`,void 0,t);return r.startsWith(`source.`)?z(`source.not_calculated`,void 0,t):r}function qt(e,t=n()){return e.length===0?``:e.map(e=>z(`profileField.${e}`,void 0,t)).join(`, `)}function Jt(e=n()){return z(`previewNotApplied`,void 0,e)}Jt();function Yt(e=n()){return z(`addConfirmation`,void 0,e)}Yt();function B(e=n()){return z(`noSilentChanges`,void 0,e)}B();function Xt(e=n()){return z(`d3ApplyAvailable`,void 0,e)}Xt();function V(e=n()){return z(`d3GatesBlocked`,void 0,e)}V();function H(e=n()){return z(`d3GatesBlockedCompact`,{summary:V(e)},e)}H();function Zt(e=n()){return z(`magnesiumApplyAvailable`,void 0,e)}Zt();function U(e=n()){return z(`magnesiumGatesBlocked`,void 0,e)}U();function Qt(e=n()){return z(`magnesiumGatesBlockedCompact`,{summary:U(e)},e)}Qt();function $t(e=n()){return z(`applyAvailable`,void 0,e)}$t(),H();function en(e){return e.supplementKnowledgeId===`knowledge_vitamin_d3`&&!!e.dose&&(e.status===`ready`||e.status===`caution`)&&!e.canApplyToNewPlanItem}function tn(e){return e.supplementKnowledgeId===`knowledge_magnesium_glycinate`&&!!e.dose&&(e.status===`ready`||e.status===`caution`)&&!e.canApplyToNewPlanItem}function nn(e,t=n()){switch(e.status){case`blocked`:return z(`summary.blocked`,void 0,t);case`labs_required`:return z(`summary.labsRequired`,void 0,t);case`profile_required`:return z(`summary.profileRequired`,void 0,t);case`ready`:case`caution`:return e.canApplyToNewPlanItem?z(`summary.readyApply`,void 0,t):e.supplementKnowledgeId===`knowledge_vitamin_d3`?V(t):e.supplementKnowledgeId===`knowledge_magnesium_glycinate`?U(t):z(`summary.previewOnly`,void 0,t);case`base_default`:return e.canApplyToNewPlanItem?z(`summary.baseApply`,void 0,t):z(`summary.baseOnly`,void 0,t);case`not_supported`:return z(`summary.notSupported`,void 0,t);default:return e.explanation||``}}function rn(e,t,r=n()){let i=B(r);if(t){let t;return t=e.supplementKnowledgeId===`knowledge_vitamin_d3`?Xt(r):e.supplementKnowledgeId===`knowledge_magnesium_glycinate`?Zt(r):$t(r),`${t} ${i}`}return en(e)?H(r):tn(e)?Qt(r):Yt(r)}function an(e,t=n()){return e.canApplyToNewPlanItem?z(`fullDisclaimerApply`,{noSilentChanges:B(t)},t):en(e)?V(t):tn(e)?U(t):Jt(t)}var on=Object.freeze([`anticoagulants`,`antiplatelets`,`sedatives`,`serotonergic`,`stimulants`,`thyroid_meds`,`BP_meds`,`diabetes_meds`,`kidney_meds`,`retinoids`]),sn={anticoagulants:[`anticoagulants_or_bleeding_risk`],antiplatelets:[`anticoagulants_or_bleeding_risk`],sedatives:[`sedatives_or_sleep_meds`],serotonergic:[`antidepressants_or_serotonergic_meds`],stimulants:[`stimulant_sensitivity`,`caffeine_sensitivity`],thyroid_meds:[`thyroid_medication`,`thyroid_disease`],BP_meds:[`high_blood_pressure`,`low_blood_pressure`,`heart_condition`,`arrhythmia`],diabetes_meds:[`diabetes_or_glucose_meds`],kidney_meds:[`kidney_disease`,`reduced_kidney_function`],retinoids:[`pregnancy_or_planning`,`breastfeeding`]};function cn(e,t){return sn[t].some(t=>s(e,t))}function ln(e){return on.filter(t=>cn(e,t))}function W(e,t,n,r){return{id:e,kind:t,supplementKnowledgeId:n,medicationCategories:r.medicationCategories,otherSupplementKnowledgeIds:r.otherSupplementKnowledgeIds,status:r.status,action:r.action,title:r.title,message:r.message}}var un=Object.freeze([W(`ginkgo_anticoag`,`supplement_medication`,`knowledge_ginkgo_biloba`,{medicationCategories:[`anticoagulants`,`antiplatelets`],status:`strong_caution`,action:`block_personalized_apply`,title:`Гинкго и свёртываемость`,message:`Гинкго может повышать риск кровоточивости на фоне антикоагулянтов или антиагрегантов. Обсудите приём со специалистом.`}),W(`omega3_anticoag`,`supplement_medication`,`knowledge_omega_3`,{medicationCategories:[`anticoagulants`,`antiplatelets`],status:`caution`,title:`Омега-3 и свёртываемость`,message:`Высокие дозы омега-3 могут влиять на свёртываемость. При антикоагулянтах нужна осторожность.`}),W(`vitamin_e_anticoag`,`supplement_medication`,`knowledge_vitamin_e`,{medicationCategories:[`anticoagulants`,`antiplatelets`],status:`caution`,title:`Витамин E и свёртываемость`,message:`Витамин E в высоких дозах может влиять на свёртываемость крови.`}),W(`5htp_serotonergic`,`supplement_medication`,`knowledge_5_htp`,{medicationCategories:[`serotonergic`],status:`strong_caution`,action:`block_personalized_apply`,title:`5-HTP и серотонин`,message:`5-HTP не сочетают с антидепрессантами и другими серотонинергическими препаратами без контроля врача.`}),W(`tryptophan_serotonergic`,`supplement_medication`,`knowledge_tryptophan`,{medicationCategories:[`serotonergic`],status:`strong_caution`,action:`block_personalized_apply`,title:`Триптофан и серотонин`,message:`Триптофан требует осторожности на фоне серотонинергических препаратов — риск серотонинового синдрома.`}),W(`melatonin_sedatives`,`supplement_medication`,`knowledge_melatonin`,{medicationCategories:[`sedatives`],status:`caution`,title:`Мелатонин и седативные`,message:`Мелатонин может усиливать сонливость на фоне снотворных или седативных средств.`}),W(`caffeine_stimulants`,`supplement_medication`,`knowledge_caffeine`,{medicationCategories:[`stimulants`],status:`caution`,title:`Кофеин и стимуляторы`,message:`При чувствительности к стимуляторам кофеин может усиливать тревожность, давление или бессонницу.`}),W(`preworkout_stimulants`,`supplement_medication`,`knowledge_pre_workout_complex`,{medicationCategories:[`stimulants`,`BP_meds`],status:`strong_caution`,action:`block_personalized_apply`,title:`Предтрен и стимуляторы`,message:`Предтренировочные комплексы часто содержат стимуляторы. При чувствительности или давлении нужна особая осторожность.`}),W(`iodine_thyroid`,`supplement_medication`,`knowledge_iodine`,{medicationCategories:[`thyroid_meds`],status:`strong_caution`,action:`block_personalized_apply`,title:`Йод и щитовидная железа`,message:`Йод может влиять на функцию щитовидной железы на фоне тиреоидных препаратов или заболеваний ЩЖ. Нужна оценка ТТГ у врача.`}),W(`potassium_kidney`,`supplement_medication`,`knowledge_potassium`,{medicationCategories:[`kidney_meds`],status:`strong_caution`,action:`block_personalized_apply`,title:`Калий и почки`,message:`Калий может быть опасен при заболеваниях почек или сниженной функции почек.`}),W(`potassium_bp`,`supplement_medication`,`knowledge_potassium`,{medicationCategories:[`BP_meds`],status:`caution`,title:`Калий и давление`,message:`Калий может влиять на электролитный баланс при контексте давления или сердца.`}),W(`retinol_pregnancy`,`supplement_medication`,`knowledge_vitamin_a_retinol`,{medicationCategories:[`retinoids`],status:`strong_caution`,action:`block_personalized_apply`,title:`Ретинол и беременность`,message:`Ретинол противопоказан при беременности и планировании. Не используйте без назначения врача.`}),W(`spacing_iron_zinc_calcium`,`supplement_supplement`,`knowledge_iron`,{otherSupplementKnowledgeIds:[`knowledge_zinc`,`knowledge_calcium`],status:`caution`,title:`Разнести железо`,message:`Железо лучше не принимать одновременно с цинком или кальцием — разнесите приём на 2–4 часа.`}),W(`spacing_zinc_iron`,`supplement_supplement`,`knowledge_zinc`,{otherSupplementKnowledgeIds:[`knowledge_iron`],status:`caution`,title:`Разнести цинк и железо`,message:`Цинк и железо конкурируют за всасывание — разнесите приём на 2–4 часа.`}),W(`spacing_calcium_iron`,`supplement_supplement`,`knowledge_calcium`,{otherSupplementKnowledgeIds:[`knowledge_iron`,`knowledge_magnesium_glycinate`],status:`caution`,title:`Разнести кальций`,message:`Кальций лучше разнести с железом и крупными дозами магния — на 2–4 часа, если оба в плане.`}),W(`spacing_magnesium_calcium`,`supplement_supplement`,`knowledge_magnesium_glycinate`,{otherSupplementKnowledgeIds:[`knowledge_calcium`,`knowledge_iron`],status:`info`,title:`Магний и минералы`,message:`При одновременном приёме магния с кальцием или железом разнесите на разное время суток.`}),W(`spacing_copper_zinc`,`supplement_supplement`,`knowledge_copper`,{otherSupplementKnowledgeIds:[`knowledge_zinc`],status:`caution`,title:`Медь и цинк`,message:`Высокие дозы цинка могут снижать усвоение меди — следите за балансом и дозами.`}),W(`spacing_zinc_copper`,`supplement_supplement`,`knowledge_zinc`,{otherSupplementKnowledgeIds:[`knowledge_copper`],status:`caution`,title:`Цинк и медь`,message:`Длительный высокий цинк может влиять на медь — при совместном приёме нужна осторожность.`})]);function dn(e){let r=`supplements.display.interactionRules.items.${e.id}`,i=`${r}.title`,a=`${r}.message`,o=t(i,void 0,n()),s=t(a,void 0,n());return{...e,title:o===i?e.title:o,message:s===a?e.message:s}}var G=new Map;for(let e of un){let t=G.get(e.supplementKnowledgeId)??[];t.push(e),G.set(e.supplementKnowledgeId,t)}function fn(e){return(e?[...G.get(e)??[]]:[...un]).map(dn)}var pn={not_applicable:0,clear:1,info:2,caution:3,strong_caution:4,blocked_for_personalized:5};function K(e,r){let i=`supplements.display.interactionGuidance.engineSummary.${e}`,a=t(i,{count:r},n());return a===i?``:a}function mn(e,t,n){if(e.medicationCategories?.length){let n=e.medicationCategories.filter(e=>cn(t,e));return n.length===0?void 0:{rule:e,matchedMedicationCategories:n}}if(e.otherSupplementKnowledgeIds?.length){let t=e.otherSupplementKnowledgeIds.filter(e=>n.includes(e));return t.length===0?void 0:{rule:e,matchedOtherSupplementIds:t}}}function hn(e){return e.action===`block_personalized_apply`?`blocked_for_personalized`:e.status}function gn(e){let t=fn(e.supplementKnowledgeId),n=[...new Set((e.otherActivePlanKnowledgeIds??[]).filter(Boolean))].filter(t=>t!==e.supplementKnowledgeId),r=ln(e.safetyProfile);if(t.length===0)return{supplementKnowledgeId:e.supplementKnowledgeId,status:`not_applicable`,matches:[],warnings:[],summary:K(`not_applicable`,0),requiresExtraConfirmation:!1,blocksPersonalizedApply:!1,activeMedicationCategories:r,conflictingPlanKnowledgeIds:[]};let i=[];for(let r of t){let t=mn(r,e.safetyProfile,n);t&&i.push(t)}if(i.length===0)return{supplementKnowledgeId:e.supplementKnowledgeId,status:`clear`,matches:[],warnings:[],summary:K(`clear`,0),requiresExtraConfirmation:!1,blocksPersonalizedApply:!1,activeMedicationCategories:r,conflictingPlanKnowledgeIds:[]};let a=`info`;for(let e of i){let t=hn(e.rule);pn[t]>pn[a]&&(a=t)}let o=[...new Set(i.map(e=>e.rule.message))],s=i.some(e=>e.rule.action===`extra_confirmation`||e.rule.status===`caution`||e.rule.status===`strong_caution`||e.rule.action===`block_personalized_apply`),c=i.some(e=>e.rule.action===`block_personalized_apply`),l=[...new Set(i.flatMap(e=>e.matchedOtherSupplementIds??[]).filter(Boolean))];return{supplementKnowledgeId:e.supplementKnowledgeId,status:a,matches:i,warnings:o,summary:K(a,i.length),requiresExtraConfirmation:s,blocksPersonalizedApply:c,activeMedicationCategories:r,conflictingPlanKnowledgeIds:l}}function _n(e){return e?.blocksPersonalizedApply===!0}var vn=new Set([`ready`,`base_default`,`caution`]),yn=new Set([`before_meal`,`with_meal`,`after_meal`,`empty_stomach`,`before_training`,`after_training`,`morning`,`bedtime`,`custom`]);function bn(e){return e!==void 0&&yn.has(e)}function q(e){return e?.blocksPersonalizedApply===!0}function xn(e){return _n(e)}function J(e,t){return!(q(t?.safetyGuidance)||xn(t?.interactionGuidance)||!e||!e.canApplyToNewPlanItem||!e.dose||!Number.isFinite(e.dose.value)||e.dose.value<=0||!vn.has(e.status)||!e.requiresExplicitConfirmation||e.canSuggestUpdateExistingPlanItem)}function Sn(e,t,n){if(!J(t,n))return xn(n?.interactionGuidance)?{ok:!1,reason:`Персональная схема недоступна из-за возможных взаимодействий.`}:q(n?.safetyGuidance)?{ok:!1,reason:`Персональная схема недоступна из-за профиля безопасности.`}:{ok:!1,reason:`Персональная справочная схема не может быть применена.`};let r=t.dose,i=Gt(r),a=Kt(t.source),o=(t.trustNotes??[]).slice(0,3).join(` `),s=[`Персональная справочная схема: ${i}`,`Источник: ${a}`,`Статус расчёта: ${t.status}.`,o?`Audit trail: ${o}`:``,`Это не медицинское назначение.`,`Применено вручную пользователем.`].filter(Boolean).join(` `),c=e.notes?.trim(),l=c?`${c} ${s}`:s,u={...e,dosageValue:r.value,dosageUnit:r.unit,frequencyPerDay:r.frequencyPerDay,notes:l};return r.preferredTimesHHMM&&r.preferredTimesHHMM.length>0&&(u.preferredTimesHHMM=[...r.preferredTimesHHMM]),r.withMeal!==void 0&&(u.withMeal=r.withMeal),bn(r.timing)&&(u.timing=r.timing),{ok:!0,input:u}}function Cn(e,t,n,r){return xn(r?.interactionGuidance)?{ok:!1,reason:`interaction_blocks_personalized_apply`}:q(r?.safetyGuidance)?{ok:!1,reason:`safety_profile_blocks_personalized_apply`}:Sn(Rt(e,t),n,r)}var wn=`Персональная справочная схема:`,Tn=1e-9,En=[`missing_labs`,`outdated_labs`,`lab_retake_before_scheme_update`,`retake_lab_due`,`lab_guidance_caution`,`lab_guidance_blocked`],Dn=[`product_low_stock`,`expired`,`unit_mismatch`],On=[`source_missing`,`content_incomplete`],kn=[`safety_warning`,`safety_strong_warning`,`safety_blocks_personalized_apply`],An=[`interaction_warning`,`interaction_strong_warning`,`interaction_blocks_personalized_apply`],jn=[`personalized_scheme_available`,`personalized_scheme_not_applicable`,`personalized_scheme_blocked`,`personalized_scheme_blocked_by_safety`,`personalized_scheme_changed`,`current_dose_differs_from_personalized`,`unknown_unit_or_schedule`],Mn=new Set([`blocked`,`labs_required`,`profile_required`]),Nn={ok:0,info:1,needs_attention:2,caution:3,blocked:4,cannot_review:5},Pn={none:0,review_source:1,review_interaction:2,remove_duplicate:3,consider_personalized_scheme:4,review_product:6,buy_product:7,review_labs:8,retake_lab:9,review_safety_profile:10,consult_specialist:11,manual_review:12};function Fn(e,t){return t?t.find(t=>t.id===e):f(e,n())}function In(e){return e.trim().toLowerCase().replace(/\s+/g,` `)}function Ln(e){return e.trim().toLowerCase()}function Rn(e){return{dosageValue:e.dosageValue,dosageUnit:e.dosageUnit,frequencyPerDay:e.frequencyPerDay,timing:e.timing,preferredTimesHHMM:[...e.preferredTimesHHMM],withMeal:e.withMeal,labCheckStatus:e.labCheckStatus,isActive:e.active,notes:e.notes}}function Y(e,t){return Nn[t]>Nn[e]?t:e}function X(e,t){return Pn[t]>Pn[e]?t:e}function zn(e){return e.some(e=>En.includes(e))}function Bn(e){return e.some(e=>kn.includes(e))}function Vn(e){return e.some(e=>An.includes(e))}function Hn(e){return e.some(e=>jn.includes(e))}function Un(e){return e.some(e=>Dn.includes(e))}function Wn(e){return e.some(e=>On.includes(e))}function Gn(e){let t=new Map;for(let n of e)t.set(n.id,y(n));return t}function Z(e){return!!e.notes?.includes(wn)}function Kn(e){return{status:e.status,missingLabIds:[...e.missingLabIds],outdatedLabIds:[...e.outdatedLabIds],blockingLabIds:[...e.blockingLabIds],cautionLabIds:[...e.cautionLabIds],warningCount:e.warnings.length}}function qn(e){return{status:e.status,matchedFlagIds:[...e.matchedFlagIds],warningCount:e.warnings.length,blocksPersonalizedApply:e.blocksPersonalizedApply,requiresExtraConfirmation:e.requiresExtraConfirmation}}function Jn(e){return{status:e.status,warningCount:e.warnings.length,blocksPersonalizedApply:e.blocksPersonalizedApply,requiresExtraConfirmation:e.requiresExtraConfirmation,conflictingPlanKnowledgeIds:[...e.conflictingPlanKnowledgeIds]}}function Yn(e,t){let n=new Set;for(let r of e){if(!r.active)continue;let e=$(r,t);e.found&&e.supplementKnowledgeId&&n.add(e.supplementKnowledgeId)}return[...n]}function Xn(e,t){if(!t)return{comparable:!1};let n=e.dosageValue,r=e.dosageUnit?.trim();if(!Number.isFinite(n)||n<0||!r||!Number.isFinite(t.value)||t.value<=0||!t.unit?.trim()||Ln(r)!==Ln(t.unit))return{comparable:!1};let i=Math.abs(n-t.value)0?(i.push(`lab_guidance_blocked`),a=Y(a,`blocked`),o=X(o,`consult_specialist`)):(e.missingLabIds.length>0&&(i.push(`missing_labs`),a=Y(a,`needs_attention`),o=X(o,`review_labs`)),e.outdatedLabIds.length>0&&(i.push(`outdated_labs`),a=Y(a,`needs_attention`),o=X(o,`review_labs`)),(e.status===`caution`||e.cautionLabIds.length>0)&&(i.push(`lab_guidance_caution`),a=Y(a,`caution`),o=X(o,`review_labs`))),{issues:i,status:a,recommendedAction:o}}function Qn(e,t,n,r,i,a){return g({supplementKnowledgeId:e,labResults:t,nowISO:a}).length===0?{issues:n,status:r,recommendedAction:i}:{issues:[...n,`lab_retake_before_scheme_update`,`retake_lab_due`],status:Y(r,`needs_attention`),recommendedAction:X(i,`retake_lab`)}}function $n(e,t,n,r){let i=[...t],a=n,o=r;return e.status===`caution`&&(i.push(`safety_warning`),a=Y(a,`caution`),o=X(o,`review_safety_profile`)),e.status===`strong_caution`&&(i.push(`safety_strong_warning`),a=Y(a,`caution`),o=X(o,`review_safety_profile`)),e.blocksPersonalizedApply&&(i.push(`safety_blocks_personalized_apply`),a=Y(a,`caution`),o=X(o,`review_safety_profile`)),{issues:i,status:a,recommendedAction:o}}function er(e,t,n,r){let i=[...t],a=n,o=r;return(e.status===`caution`||e.status===`info`)&&(i.push(`interaction_warning`),a=Y(a,`caution`),o=X(o,`review_interaction`)),(e.status===`strong_caution`||e.status===`blocked_for_personalized`)&&(i.push(`interaction_strong_warning`),a=Y(a,`caution`),o=X(o,`review_interaction`)),e.blocksPersonalizedApply&&(i.push(`interaction_blocks_personalized_apply`),a=Y(a,`caution`),o=X(o,`review_interaction`)),{issues:i,status:a,recommendedAction:o}}function tr(e){let t=[...e.issues],n=e.status,r=e.recommendedAction,{stockStatus:i,expiryStatus:a,mismatchIssues:o}=e.productSnapshot;return(i===`low_stock`||i===`out_of_stock`)&&(t.push(`product_low_stock`),n=Y(n,`needs_attention`),r=X(r,`buy_product`)),a===`expired`&&(t.push(`expired`),n=Y(n,`caution`),r=X(r,`buy_product`)),o.includes(`unit_mismatch`)&&(t.push(`unit_mismatch`),n=Y(n,`needs_attention`),r=X(r,`review_product`)),{issues:t,status:n,recommendedAction:r}}function nr(e){let t=[...e.issues],n=e.status,r=e.recommendedAction,{missingSafetySource:i,missingLabelSource:a,isCompleteEnough:o}=e.contentSnapshot;return(i||a)&&(t.push(`source_missing`),n=Y(n,`info`),r=X(r,`review_source`)),o||(t.push(`content_incomplete`),n=Y(n,`info`),r=X(r,`review_source`)),{issues:t,status:n,recommendedAction:r}}function rr(e){let t=v({supplementKnowledgeId:e.supplementKnowledgeId,profile:e.supplementProfile,labGuidance:e.labGuidance,labResults:e.labResults,nowISO:e.nowISO}),n=J(t),r=J(t,{safetyGuidance:e.safetyGuidance,interactionGuidance:e.interactionGuidance}),i=n&&!r&&(e.safetyGuidance.blocksPersonalizedApply||e.interactionGuidance.blocksPersonalizedApply),a=Xn(e.planItem,t.dose);return{status:t.status,source:t.source,doseValue:t.dose?.value,doseUnit:t.dose?.unit,frequencyPerDay:t.dose?.frequencyPerDay,canApplyBeforeSafety:n,canApplyAfterSafety:r,blockedBySafety:i,canSuggestUpdateExistingPlanItem:!1,currentDoseComparable:a.comparable,currentDoseMatches:a.comparable?a.matches:void 0,currentDoseDifference:a.difference}}function ir(e){let t=[...e.issues],n=e.status,r=e.recommendedAction,i=e.personalizedSnapshot,a=Z(e.planItem);return i.status===`not_supported`?(t.push(`personalized_scheme_not_applicable`),{issues:t,status:n,recommendedAction:r}):i.blockedBySafety?(t.push(`personalized_scheme_blocked_by_safety`),n=Y(n,`caution`),r=X(r,`review_safety_profile`),{issues:t,status:n,recommendedAction:r}):i.status!==`not_evaluated`&&Mn.has(i.status)?(t.push(`personalized_scheme_blocked`),{issues:t,status:n,recommendedAction:r}):!i.canApplyAfterSafety||i.doseValue===void 0?{issues:t,status:n,recommendedAction:r}:(t.push(`personalized_scheme_available`),i.currentDoseComparable&&i.currentDoseMatches===!1?(t.push(`current_dose_differs_from_personalized`),a&&t.push(`personalized_scheme_changed`),n=Y(n,`needs_attention`),r=X(r,`consider_personalized_scheme`),{issues:t,status:n,recommendedAction:r}):i.currentDoseComparable&&i.currentDoseMatches===!0?(n===`ok`&&(n=`info`),{issues:t,status:n,recommendedAction:r}):(t.push(`unknown_unit_or_schedule`),n=Y(n,`info`),r=X(r,`consider_personalized_scheme`),{issues:t,status:n,recommendedAction:r}))}function Q(e,t){return r(`supplements.planReview.itemSummary.${e}`,t)}function ar(e){return e.status===`cannot_review`||e.issues.includes(`missing_knowledge_link`)?Q(`missingKnowledgeLink`):e.issues.includes(`lab_guidance_blocked`)?Q(`labBlocked`):e.issues.includes(`current_dose_differs_from_personalized`)||e.issues.includes(`personalized_scheme_changed`)?Q(`doseDiffers`):e.issues.includes(`personalized_scheme_blocked_by_safety`)?Q(`personalBlockedSafety`):e.issues.includes(`safety_blocks_personalized_apply`)?Q(`safetyBlocksPersonal`):e.issues.includes(`interaction_blocks_personalized_apply`)?Q(`interactionBlocksPersonal`):e.issues.includes(`interaction_warning`)||e.issues.includes(`interaction_strong_warning`)?Q(`interactionWarnings`):e.issues.includes(`missing_labs`)?Q(`missingLabs`):e.issues.includes(`outdated_labs`)?Q(`outdatedLabs`):e.issues.includes(`lab_retake_before_scheme_update`)||e.issues.includes(`retake_lab_due`)?Q(`retakeLab`):e.issues.includes(`expired`)?Q(`expired`):e.issues.includes(`product_low_stock`)?Q(`lowStock`):e.issues.includes(`unit_mismatch`)?Q(`unitMismatch`):e.issues.includes(`source_missing`)?Q(`sourceMissing`):e.issues.includes(`content_incomplete`)?Q(`contentIncomplete`):e.issues.includes(`personalized_scheme_blocked`)?Q(`personalBlocked`):e.issues.includes(`unknown_unit_or_schedule`)?Q(`unknownCompare`):e.issues.includes(`duplicate_active_item`)&&e.duplicateCount&&e.duplicateCount>1?Q(`duplicates`,{count:e.duplicateCount}):e.issues.includes(`personalized_scheme_available`)?Q(`personalAvailable`):e.issues.includes(`safety_warning`)||e.issues.includes(`safety_strong_warning`)||e.issues.includes(`interaction_warning`)||e.issues.includes(`interaction_strong_warning`)||e.issues.includes(`lab_guidance_caution`)?Q(`warningsToCheck`):e.issues.includes(`inactive_item`)?Q(`inactive`):Q(`noCriticalIssues`)}function $(e,t){let n=e.supplementCatalogId;if(e.supplementKnowledgeId){let r=Fn(e.supplementKnowledgeId,t);if(r)return{supplementKnowledgeId:r.id,catalogId:n,title:r.name,found:!0}}if(n){let e=u(n);if(e){let r=Fn(e,t);if(r)return{supplementKnowledgeId:r.id,catalogId:n,title:r.name,found:!0}}}return{supplementKnowledgeId:e.supplementKnowledgeId,catalogId:n,found:!1}}function or(e,t){if(!e.active)return;if(t.found&&t.supplementKnowledgeId)return`knowledge:${t.supplementKnowledgeId}`;if(e.supplementCatalogId)return`catalog:${e.supplementCatalogId}`;let n=In(p(e).trim());if(!(!n||n===`бад`))return`name:${n}`}function sr(e,t){let n=new Map;for(let r of e){if(!r.active)continue;let e=or(r,$(r,t));if(!e)continue;let i=n.get(e)??[];i.push(r.id),n.set(e,i)}return[...n.entries()].filter(([,e])=>e.length>1).map(([e,t])=>({key:e,planItemIds:[...t],count:t.length})).sort((e,t)=>e.key.localeCompare(t.key))}function cr(e){let t={};for(let n of e)for(let e of n.planItemIds)t[e]=n;return t}function lr(e,t){let n=+!!Z(e),r=+!!Z(t);if(n!==r)return r-n;let i=(t.updatedAtISO??``).localeCompare(e.updatedAtISO??``);if(i!==0)return i;let a=(t.createdAtISO??``).localeCompare(e.createdAtISO??``);return a===0?e.id.localeCompare(t.id):a}function ur(e,t){let n=sr(e,t);if(n.length===0)return[];let r=new Map(e.map(e=>[e.id,e]));return n.map(e=>{let t=e.planItemIds.map(e=>r.get(e)).filter(e=>!!e).sort(lr),n=t[0],i=t.slice(1).map(e=>e.id),a=n?Z(n):!1;return{key:e.key,keepPlanItemId:n?.id??e.planItemIds[0],reviewPlanItemIds:i,reason:a?`Рекомендуем оставить запись с персональной справочной схемой, остальные проверить вручную.`:`Рекомендуем оставить самую свежую запись, остальные проверить вручную.`}})}function dr(e){let{planItem:t}=e,n=$(t,e.knowledgeItems),r=p(t),i=e.duplicateGroupByPlanItemId?.[t.id],a=i?.key,o=i?.count,s=e.labResults??[],c=[],u=`ok`,d=`none`,f,m,h,g,_,v;if(t.active||(c.push(`inactive_item`),u=Y(u,`info`)),t.active&&!n.found&&(c.push(`missing_knowledge_link`,`manual_review_required`),u=Y(u,`cannot_review`),d=X(d,`manual_review`)),t.active&&i&&i.count>1&&(c.push(`duplicate_active_item`),u=Y(u,`needs_attention`),d=X(d,`remove_duplicate`)),t.active&&n.found&&n.supplementKnowledgeId&&n.supplementKnowledgeId){let r=n.supplementKnowledgeId,i=ee({supplementKnowledgeId:r,profile:e.supplementProfile,labResults:s,nowISO:e.nowISO});f=Kn(i);let a=Zn(f,c,u,d);c=a.issues,u=a.status,d=a.recommendedAction;let o=Qn(r,s,c,u,d,e.nowISO);c=o.issues,u=o.status,d=o.recommendedAction;let p=l({supplementKnowledgeId:r,safetyProfile:e.safetyProfile});m=qn(p);let _=$n(m,c,u,d);c=_.issues,u=_.status,d=_.recommendedAction;let v=gn({supplementKnowledgeId:r,safetyProfile:e.safetyProfile,otherActivePlanKnowledgeIds:e.otherActivePlanKnowledgeIds??[]});h=Jn(v);let y=er(h,c,u,d);c=y.issues,u=y.status,d=y.recommendedAction,g=rr({planItem:t,supplementKnowledgeId:r,supplementProfile:e.supplementProfile,labGuidance:i,labResults:s,nowISO:e.nowISO,safetyGuidance:p,interactionGuidance:v});let b=ir({planItem:t,personalizedSnapshot:g,issues:c,status:u,recommendedAction:d});c=b.issues,u=b.status,d=b.recommendedAction}if(t.active&&e.contentCoverage){let t=e.contentCoverage;v={completenessScore:t.completenessScore,missingDimensionsCount:t.missingDimensions.length,missingSafetySource:t.sourceCoverage.missingSafetySource,missingLabelSource:t.sourceCoverage.missingLabelSource,isCompleteEnough:t.nextActions.includes(`complete_enough`)};let n=nr({contentSnapshot:v,issues:c,status:u,recommendedAction:d});c=n.issues,u=n.status,d=n.recommendedAction}if(t.active&&e.linkedProduct){let r=e.linkedProduct,i=j({product:r,planDosageValue:t.dosageValue,planDosageUnit:t.dosageUnit,frequencyPerDay:t.frequencyPerDay,supplementKnowledgeId:n.supplementKnowledgeId??r.supplementKnowledgeId,nowISO:e.nowISO});_={productId:r.id,productTitle:P(r),stockStatus:i.stockStatus,expiryStatus:i.expiryStatus,mismatchIssues:i.mismatchIssues,daysRemaining:i.daysRemaining};let a=tr({productSnapshot:_,issues:c,status:u,recommendedAction:d});c=a.issues,u=a.status,d=a.recommendedAction}let y=ar({status:u,issues:c,duplicateCount:o});return{planItemId:t.id,title:r,supplementKnowledgeId:n.supplementKnowledgeId,catalogId:n.catalogId??t.supplementCatalogId,isActive:t.active,status:u,issues:c,summary:y,recommendedAction:d,currentPlanSnapshot:Rn(t),knowledgeSnapshot:n,labSnapshot:f,safetySnapshot:m,interactionSnapshot:h,personalizedSnapshot:g,productSnapshot:_,contentSnapshot:v,duplicateGroupKey:a,duplicateCount:o,canAutoFix:!1,canSuggestUpdate:!1}}function fr(e){let t=new Set;for(let n of e)n.issues.includes(`duplicate_active_item`)&&n.duplicateGroupKey&&t.add(n.duplicateGroupKey);return{totalItems:e.length,totalActiveItems:e.filter(e=>e.isActive).length,reviewedItems:e.length,okCount:e.filter(e=>e.status===`ok`).length,infoCount:e.filter(e=>e.status===`info`).length,needsAttentionCount:e.filter(e=>e.status===`needs_attention`).length,cautionCount:e.filter(e=>e.status===`caution`).length,blockedCount:e.filter(e=>e.status===`blocked`).length,cannotReviewCount:e.filter(e=>e.status===`cannot_review`).length,inactiveCount:e.filter(e=>e.issues.includes(`inactive_item`)).length,duplicateGroupCount:t.size,duplicateItemCount:e.filter(e=>e.issues.includes(`duplicate_active_item`)).length,missingKnowledgeLinkCount:e.filter(e=>e.issues.includes(`missing_knowledge_link`)).length,manualReviewCount:e.filter(e=>e.issues.includes(`manual_review_required`)).length,labIssueCount:e.filter(e=>zn(e.issues)).length,missingLabsCount:e.filter(e=>e.issues.includes(`missing_labs`)).length,outdatedLabsCount:e.filter(e=>e.issues.includes(`outdated_labs`)).length,labCautionCount:e.filter(e=>e.issues.includes(`lab_guidance_caution`)).length,labBlockedCount:e.filter(e=>e.issues.includes(`lab_guidance_blocked`)).length,safetyIssueCount:e.filter(e=>Bn(e.issues)).length,safetyStrongWarningCount:e.filter(e=>e.issues.includes(`safety_strong_warning`)).length,safetyPersonalizedApplyBlockCount:e.filter(e=>e.issues.includes(`safety_blocks_personalized_apply`)).length,interactionIssueCount:e.filter(e=>Vn(e.issues)).length,interactionStrongWarningCount:e.filter(e=>e.issues.includes(`interaction_strong_warning`)).length,interactionPersonalizedApplyBlockCount:e.filter(e=>e.issues.includes(`interaction_blocks_personalized_apply`)).length,personalizedIssueCount:e.filter(e=>Hn(e.issues)).length,personalizedAvailableCount:e.filter(e=>e.issues.includes(`personalized_scheme_available`)).length,personalizedBlockedCount:e.filter(e=>e.issues.includes(`personalized_scheme_blocked`)).length,personalizedBlockedBySafetyCount:e.filter(e=>e.issues.includes(`personalized_scheme_blocked_by_safety`)).length,personalizedDoseDiffCount:e.filter(e=>e.issues.includes(`current_dose_differs_from_personalized`)).length,personalizedUnknownComparisonCount:e.filter(e=>e.issues.includes(`unknown_unit_or_schedule`)).length,personalizedSuggestionCount:e.filter(e=>e.recommendedAction===`consider_personalized_scheme`).length,productIssueCount:e.filter(e=>Un(e.issues)).length,productLowStockCount:e.filter(e=>e.issues.includes(`product_low_stock`)).length,productExpiredCount:e.filter(e=>e.issues.includes(`expired`)).length,productUnitMismatchCount:e.filter(e=>e.issues.includes(`unit_mismatch`)).length,retakeLabDueCount:e.filter(e=>e.issues.includes(`retake_lab_due`)||e.issues.includes(`lab_retake_before_scheme_update`)).length,contentGapCount:e.filter(e=>Wn(e.issues)).length,sourceMissingCount:e.filter(e=>e.issues.includes(`source_missing`)).length,contentIncompleteCount:e.filter(e=>e.issues.includes(`content_incomplete`)).length}}function pr(e){let t=e.knowledgeItems??m(n()),r=cr(sr(e.planItems,t)),i=Yn(e.planItems,t),a=e.contentCoverageByKnowledgeId??(t?Gn(t):void 0),o=e.planItems.map(n=>{let o=$(n,t),s=o.supplementKnowledgeId,c=i.filter(e=>e!==s),l=e.activeLinkByPlanItemId?.get(n.id),u=l&&e.productsById?e.productsById.get(l.productId):void 0,d=o.supplementKnowledgeId&&a?a.get(o.supplementKnowledgeId):void 0;return dr({planItem:n,knowledgeItems:t,duplicateGroupByPlanItemId:r,supplementProfile:e.supplementProfile,labResults:e.labResults,safetyProfile:e.safetyProfile,otherActivePlanKnowledgeIds:c,linkedProduct:u,contentCoverage:d,nowISO:e.nowISO})});return{items:o,summary:fr(o)}}export{te as $,dt as A,T as B,_t as C,vt as D,pt as E,k as F,C as G,He as H,We as I,we as J,Ae as K,Ge as L,ut as M,j as N,mt as O,A as P,ve as Q,Ke as R,xt as S,ht as T,Re as U,Ve as V,je as W,Oe as X,ke as Y,me as Z,Rt as _,J as a,ge as at,Ct as b,Gt as c,ae as ct,Kt as d,le as dt,x as et,Ht as f,ie as ft,nn as g,R as h,Cn as i,he as it,lt as j,P as k,rn as l,fe as lt,Ut as m,de as mt,Yn as n,se as nt,gn as o,ce as ot,Wt as p,oe as pt,Te as q,ur as r,re as rt,qt as s,ue as st,pr as t,ne as tt,an as u,pe as ut,jt as v,gt as w,bt as x,St as y,Ue as z};