export function apply_guidance(doc: any) { const targetPrice = doc.pricing?.v1tp ?? doc.pricing?.v0tp; const earlyPrice = doc.hist?.cust?.early_price; const earlySeason = doc.hist?.cust?.early_season; const bridgePremium = doc.pricing?.bridgePremium ?? 1.00000; const altHist = doc.hist?.cust?.ds; const iidx = doc.pricing?.iidx; const curr = doc.customer?.curr; const fxrate = doc.customer?.fxrate ?? 1.0; const qty = doc.inputs?.qty; const pltq = doc.product?.pltq; let anchorPrice = null; let anchorSource = null; let custPrice = null; let custSource = null; let guidance = {}; let calcCeiling = null; let finalReasonUSD = ""; let finalPriceUSD = null; let finalReason = ""; let finalPrice = null; let ltp = qty < pltq ? 1.15 : null; let increase = null; const inflation = Math.max(...Object.keys(iidx).map(Number)); const inflationFactor = iidx[inflation] + 1; const list = doc.pricing?.list && doc.product?.itemrel === "2" ? doc.pricing?.list : null; // ------if there is not target price just exit--------------- if (!targetPrice) { anchorSource = "No target pricing setup"; guidance.FinalReason = "No target pricing setup"; } else { // if there is no customer anchor price use target if (earlyPrice) { // translate alternate product history to current product quoted custPrice = Number((earlyPrice * bridgePremium).toFixed(5)); anchorPrice = custPrice; // --------if the price needs bridged, add the details to the description-------- if (bridgePremium === 1) { anchorSource = earlySeason + ' Customer Price ' + earlyPrice; custSource = anchorSource; } else { anchorSource = earlySeason + ' Similar (' + altHist + ') Customer Price ' + earlyPrice + ' x ' + bridgePremium + ' = ' + anchorPrice; custSource = anchorSource; } // --------after the early price is translated see if target is still less------- if (targetPrice < anchorPrice) { anchorSource = `Target Price ${targetPrice}`; anchorPrice = targetPrice; } } else { anchorPrice = targetPrice; anchorSource = `Target Price ${targetPrice}`; } //------get the most relevant inflation factor number--------------------------------- //------anchor x inflation / fxrate--------------------------------------------------- let calcPriceUSD = parseFloat((anchorPrice * inflationFactor).toFixed(5)); let calcPrice = parseFloat((calcPriceUSD / fxrate).toFixed(5)); if (calcPrice >= list && list) { calcCeiling = "Cap At List"; //multiply list by FX to get to USD if in CAD finalPrice = list; if (curr === "CA") { finalReason = `${anchorSource} x ${inflationFactor} / ${fxrate} FX = ${calcPrice} CAD, cap at list ${list} CAD`; } else { finalReason = `${anchorSource} x ${inflationFactor} = ${calcPrice}, cap at list ${list}`; } } else { finalPrice = calcPrice; finalPriceUSD = calcPriceUSD; if (curr === "CA") { finalReason = `${anchorSource} x ${inflationFactor} / ${fxrate} FX = ${calcPrice} CAD`; } else { finalReason = `${anchorSource} x ${inflationFactor} = ${calcPrice}`; } } } guidance.AnchorPrice = anchorPrice; guidance.AnchorSource = anchorSource; guidance.CustAnchorPrice = custPrice; guidance.CustAnchorSource = custSource; guidance.InflationFactor = inflationFactor; guidance.Ceiling = calcCeiling; guidance.FinalPriceUSD = finalPriceUSD; guidance.FinalReasonUSD = finalReasonUSD; guidance.FinalPrice = finalPrice; guidance.FinalReason = finalReason; guidance.BridgePremium = bridgePremium; guidance.TargetPrice = targetPrice; guidance.ListPrice = list; doc.guidance = guidance; return doc; }