Solutions
Solutions
Cloud Services
Enterprise Resource Planning
SAP BTP
SAP ERP Consultancy
Cloud Integration
Architecture Services
Development & Low-Code Solutions
Low Code Development
SAP Development
Full Stack Development
High Code Development
OutSystems
Mendix
UI/UX
Mobile Apps
Data & Analytics
Analytics
Data Governance
Data Migration
Data Management
SAP Analytics Cloud
SAS
Celonis
Signavio
Digital Transformation
Strategy Management
Business Process Optimization
Management Consultancy
Management Consultancy
Agile Scrum Master & Product Owners
Change Management
Project Management
Enterprise Asset Management (EAM)
Environment, Health & Safety
Capital Portfolio
SAP Warehouse Management
Integration Services
Cloud Integration
Integration Services
Managed Services
Functional Application Management
Hosting & ASP
Managed Services
Service Centre
Technical Consultancy
AI Consultancy
AI Advisory
AI Whitepapers
Your Solution, Tailored
Don’t see what you’re looking for? No worries, we specialize in crafting custom solutions to meet your needs.
Get In Touch
Services
Services
Capabilities
Data & Analytics
Development
Digital Transformation
Project Management
Solutions
System Architecture Design
SAP Consulting
SAP Functional & Business Consultancy
Cloud Integration Services
IT Strategy Consultancy
Data Visualization & Reporting
Scanning & Monitoring
System Architecture Design
IT Strategy Consulting
Data Visualization & Reporting
Artificial Intelligence
Solutions
Cybersecurity & Risk Management
Digital Transformation Strategy
Training & Support Services
Industries
Healthcare
Agriculture
Retail
Manufacturing
Pharma
Renewables
Public Sector
Telecom
Logistics
Finance
Aerospace
Automotive
Construction
Education
Hospitality
Mining
Real Estate
Software
Startups
Utilities
Who we are
About newITera
Our organisation
Our People
UnITe
Technology Driven, Business Enabling
We are newITera
Certifications & Awards
Insights
Blog
Whitepapers
Newsroom
Innovation
Research & Development
Future Trends
Collaborations
We're here to help
At newiTera, your satisfaction is our top priority. Whether you have a query about our products, need assistance, or simply want to say hello, our dedicated team is always just a click away.
Get In Touch
Careers
Careers
Careers
vacancies
Careers blog
Work envoriment
Our communities
Benefits
Working here
Life at newITera
Open vacancy
How we hire
Hiring journey
Pro Tips
Find a Job
See if you fit our team
Find Your Fit
Contact
Search
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DemandSync™ ROI Simulator & Strategic Report</title> <!-- Chart.js for data visualization --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <!-- Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"> <style> :root { --bg-main: #fcfdfa; --panel-bg: #ffffff; --text-main: #002244; --text-muted: #4a5d6e; /* Corporate Identity Palette */ --avocado: #588201; --army-green: #304800; --kombu-green: #1f2e00; --pine-green: #1d2900; --vibrant-blue: #003366; --border-color: rgba(210, 220, 200, 0.9); --gloss-glow: rgba(88, 130, 1, 0.15); } * { box-shadow: none; box-sizing: border-box; } body { font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif; background-color: var(--bg-main); color: var(--text-main); margin: 0; padding: 0; width: 100vw; height: 100vh; overflow: hidden; } .app-view-wrapper { width: 200vw; height: 100vh; display: flex; transition: transform 0.6s cubic-bezier(0.76, 0, 0.24, 1); } .page { width: 100vw; height: 100vh; flex-shrink: 0; padding: 24px; display: flex; justify-content: center; align-items: center; overflow: auto; } .container { width: calc(100vw - 48px); max-width: 1600px; height: 925px; display: flex; flex-direction: column; gap: 20px; flex-shrink: 0; } header { background: linear-gradient(135deg, var(--pine-green) 0%, var(--kombu-green) 100%); color: #ffffff; padding: 20px 32px; border-radius: 16px; display: flex; justify-content: space-between; align-items: center; box-shadow: 0 12px 36px 0 rgba(14, 20, 0, 0.25); border: 1px solid rgba(255, 255, 255, 0.08); position: relative; flex-shrink: 0; } header::after { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 50%; background: linear-gradient(rgba(255,255,255,0.08), rgba(255,255,255,0)); pointer-events: none; } header h1 { margin: 0; font-size: 30px; font-weight: 800; letter-spacing: -0.5px; text-shadow: 0 2px 4px rgba(0,0,0,0.2); } header p { margin: 6px 0 0 0; color: #c2d6a4; font-size: 15px; font-weight: 500; } .header-controls { display: flex; align-items: center; gap: 20px; } .logo-white { height: 48px; width: auto; object-fit: contain; filter: brightness(0) invert(1); opacity: 0.95; } .benchmark-panel { background: linear-gradient(135deg, #ffffff, #f4f7f0); border-left: 6px solid var(--avocado); padding: 16px 24px; border-radius: 14px; box-shadow: 0 6px 20px rgba(0,0,0,0.02); border: 1px solid var(--border-color); flex-shrink: 0; } .benchmark-text { font-size: 15px; color: var(--vibrant-blue); margin: 0 0 10px 0; font-weight: 800; } .benchmark-sectors { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; } .sector-box { background: linear-gradient(135deg, #ffffff 0%, #f1f5eb 100%); padding: 16px 20px; border-radius: 14px; border: 2px solid #b8cbb0; border-bottom: 5px solid #88a679; font-size: 14px; line-height: 1.4; color: var(--text-main); cursor: pointer; transition: all 0.2s cubic-bezier(0.165, 0.84, 0.44, 1); box-shadow: 0 6px 14px rgba(48, 72, 0, 0.08); position: relative; } .sector-box:hover { transform: translateY(-3px); border-color: var(--avocado); border-bottom-color: var(--army-green); box-shadow: 0 10px 22px rgba(88, 130, 1, 0.2); background: linear-gradient(135deg, #ffffff 0%, rgba(88, 130, 1, 0.08) 100%); } .sector-box:active { transform: translateY(2px); border-bottom-width: 2px; box-shadow: 0 2px 6px rgba(88, 130, 1, 0.15); } .sector-box strong { color: var(--vibrant-blue); font-size: 15px; display: block; margin-bottom: 6px; text-shadow: 0 1px 0 rgba(255,255,255,0.8); } .sector-box.active { border: 2px solid var(--avocado); border-bottom: 5px solid var(--army-green); background: linear-gradient(135deg, #f4fbe8 0%, rgba(88, 130, 1, 0.22) 100%); box-shadow: 0 8px 24px rgba(88, 130, 1, 0.25); } .grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; flex: 1; min-height: 0; } .panel { background-color: var(--panel-bg); border: 1px solid var(--border-color); border-radius: 16px; padding: 24px 32px; box-shadow: 0 6px 24px rgba(31, 46, 0, 0.03); display: flex; flex-direction: column; min-height: 0; overflow-x: hidden; } .panel-title { font-size: 17px; font-weight: 800; margin-top: 0; margin-bottom: 16px; border-bottom: 2px solid var(--border-color); padding-bottom: 10px; color: var(--vibrant-blue); text-transform: uppercase; letter-spacing: 0.5px; flex-shrink: 0; } .controls-container { overflow-y: hidden; overflow-x: hidden; padding-right: 0; display: flex; flex-direction: column; gap: 14px; flex: 1; } .control-group { display: flex; flex-direction: column; } .control-label { display: flex; justify-content: space-between; font-size: 14px; font-weight: 700; margin-bottom: 6px; color: var(--text-main); } .clickable-label { cursor: pointer; position: relative; transition: color 0.2s ease; } .clickable-label:hover { color: var(--avocado); text-decoration: underline dotted; } .control-label span.value { color: var(--avocado); font-weight: 800; background: rgba(88, 130, 1, 0.08); padding: 2px 12px; border-radius: 6px; font-size: 14px; } input[type="range"] { width: 100%; height: 8px; background: #e2e8df; border-radius: 5px; outline: none; accent-color: var(--avocado); } .chart-container { position: relative; flex: 1; width: 100%; min-height: 0; } .chart-hint { font-size: 11px; color: var(--text-muted); text-align: right; margin-top: -10px; margin-bottom: 5px; font-weight: 600; } .bottom-action-row { display: block; flex-shrink: 0; } .kpi-section-wrapper { display: flex; flex-direction: column; gap: 6px; width: 100%; } .potential-notice { font-size: 13px; font-weight: 800; color: var(--avocado); text-transform: uppercase; letter-spacing: 1px; margin: 0 0 2px 4px; } .kpi-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 16px; } .kpi-card { background: linear-gradient(135deg, #ffffff 0%, #fcfdfa 100%); border: 1px solid var(--border-color); border-radius: 14px; padding: 16px 12px; text-align: center; box-shadow: 0 6px 16px rgba(31, 46, 0, 0.02); display: flex; flex-direction: column; justify-content: center; height: 115px; width: 100%; } .kpi-card.highlight { border-top: 5px solid var(--avocado); } .kpi-card.payback { border-top: 5px solid var(--vibrant-blue); } .kpi-label { font-size: 11px; font-weight: 800; color: var(--vibrant-blue); text-transform: uppercase; margin-bottom: 6px; letter-spacing: 0.5px; } .kpi-value { font-size: 26px; font-weight: 800; color: var(--text-main); margin-bottom: 4px; line-height: 1.1; } .kpi-card.highlight .kpi-value { color: var(--avocado); } .kpi-card.payback .kpi-value { color: var(--vibrant-blue); } .kpi-grid .kpi-card .kpi-desc { font-size: 11px; color: var(--text-muted); line-height: 1.3; } .action-button-group { display: flex; flex-direction: column; gap: 9px; height: 115px; justify-content: center; width: 100%; } .view-insights-btn, .create-report-btn { color: #ffffff; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 14px; padding: 0 16px; height: 53px; font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.8px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 10px; box-shadow: 0 4px 12px rgba(0, 34, 68, 0.1); transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); width: 100%; text-decoration: none; } .view-insights-btn { background-color: #002e5b; } .create-report-btn { background-color: #4c6e03; } .view-insights-btn:hover, .create-report-btn:hover { transform: translateY(-2px); background: linear-gradient(135deg, var(--vibrant-blue) 0%, var(--avocado) 100%); border-color: rgba(255, 255, 255, 0.25); box-shadow: 0 12px 26px rgba(0, 34, 68, 0.3); } .boardroom-container { background: linear-gradient(135deg, #ffffff 0%, #f4f7f0 100%); border: 1px solid var(--border-color); border-radius: 20px; width: 1200px; height: 700px; padding: 40px; box-shadow: 0 24px 60px rgba(14, 20, 0, 0.08); position: relative; display: flex; flex-direction: column; flex-shrink: 0; } .boardroom-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 2px solid var(--border-color); padding-bottom: 16px; margin-bottom: 24px; flex-shrink: 0; } .boardroom-title { font-size: 22px; font-weight: 800; color: var(--vibrant-blue); text-transform: uppercase; margin: 0; } .back-btn { background-color: var(--pine-green); color: #ffffff; border: 1px solid rgba(255, 255, 255, 0.1); padding: 10px 20px; border-radius: 12px; font-size: 13px; font-weight: 700; cursor: pointer; box-shadow: 0 4px 12px rgba(0, 34, 68, 0.1); transition: all 0.4s cubic-bezier(0.165, 0.84, 0.44, 1); } .back-btn:hover { transform: translateY(-2px); background: linear-gradient(135deg, var(--vibrant-blue) 0%, var(--avocado) 100%); border-color: rgba(255, 255, 255, 0.25); box-shadow: 0 10px 22px rgba(0, 34, 68, 0.25); } .insights-large-list { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; flex: 1; overflow-y: auto; } .insights-large-list li { background: #ffffff; border: 1px solid var(--border-color); padding: 24px; border-radius: 14px; font-size: 14px; line-height: 1.5; color: var(--text-main); } .insights-large-list li strong { font-size: 16px; display: block; margin-bottom: 10px; color: var(--vibrant-blue); border-left: 4px solid var(--avocado); padding-left: 12px; } .modal-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0, 34, 68, 0.4); backdrop-filter: blur(5px); z-index: 10000; display: flex; justify-content: center; align-items: center; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .modal-overlay.active { opacity: 1; pointer-events: auto; } .modal-card { background: #ffffff; border: 1px solid var(--border-color); border-radius: 16px; width: 600px; padding: 32px; box-shadow: 0 20px 50px rgba(14, 20, 0, 0.15); transform: scale(0.9); transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); position: relative; } .modal-overlay.active .modal-card { transform: scale(1); } .modal-card h3 { margin: 0 0 16px 0; color: var(--vibrant-blue); font-size: 20px; font-weight: 800; text-transform: uppercase; border-bottom: 2px solid var(--border-color); padding-bottom: 8px; } .modal-body { font-size: 14px; line-height: 1.6; color: var(--text-main); } .modal-body ul { margin: 12px 0; padding-left: 20px; } .modal-body li { margin-bottom: 8px; } .close-modal-btn { position: absolute; top: 20px; right: 24px; background: none; border: none; font-size: 24px; color: var(--text-muted); cursor: pointer; font-weight: 700; } .close-modal-btn:hover { color: var(--avocado); } </style> </head> <body> <div class="app-view-wrapper" id="appPortal"> <!-- PAGE 1: THE INTERACTIVE SIMULATOR --> <div class="page"> <div class="container"> <header> <div class="header-left"> <div> <h1><span style="margin-right: 20px;">DemandSync™</span>ROI Simulator <span class="app-version-text"></span></h1> <p>Why accurate data still leaves your forecast 40% off — Gartner & APQC Supply Chain Benchmarks.</p> </div> </div> <div class="header-controls"> <img src="https://newitera.nl/wp-content/uploads/2021/06/newitera-logo-white-uai-258x112.png" alt="NewItera Logo" class="logo-white" onerror="this.style.display='none';"> </div> </header> <div class="benchmark-panel"> <p class="benchmark-text">Choose specific Industry / Sector to show Benchmark:</p> <div class="benchmark-sectors"> <div class="sector-box" id="box-fmcg" onclick="selectSectorFromBlock('fmcg')"> <strong>FMCG / Food & Beverage:</strong> Stable at aggregate levels (ca. 25% error), but highly volatile during promotions. Correcting planner bias unlocks massive margins. </div> <div class="sector-box" id="box-retail" onclick="selectSectorFromBlock('retail')"> <strong>Retail & E-Commerce:</strong> Highly dynamic due to fast-moving trends. SKU-level errors easily exceed 35-40%. Frequent stock-outs create direct leakages. </div> <div class="sector-box" id="box-automotive" onclick="selectSectorFromBlock('automotive')"> <strong>Automotive & Industrial:</strong> Severely hit by extended global lead times. Excess defensive safety stocks tie up vital corporate working capital. </div> <div class="sector-box" id="box-pharma" onclick="selectSectorFromBlock('pharma')"> <strong>Pharma & Life Sciences:</strong> Rigid shelf-life requirements. Over-forecasting and system safety padding lead directly to destructive inventory write-offs. </div> </div> </div> <div class="grid-2"> <div class="panel"> <h2 class="panel-title">Operational & Financial Scale Inputs</h2> <div class="controls-container"> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('revenue')">Annual Revenue 💡</span> <span class="value" id="lbl-revenue">50.000.000 €</span> </div> <input type="range" id="inp-revenue" min="5000000" max="500000000" step="500000" value="50000000"> </div> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('margin')">Average Gross Margin (%) 💡</span> <span class="value" id="lbl-margin">35%</span> </div> <input type="range" id="inp-margin" min="10" max="70" step="1" value="35"> </div> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('inventory')">Current Total Inventory Value 💡</span> <span class="value" id="lbl-inventory">7.500.000 €</span> </div> <input type="range" id="inp-inventory" min="1000000" max="150000000" step="500000" value="7500000"> </div> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('carrying')">Inventory Carrying Cost Rate per Annum 💡</span> <span class="value" id="lbl-carrying">22%</span> </div> <input type="range" id="inp-carrying" min="15" max="35" step="1" value="22"> </div> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('expedite')">Annual Freight Expedite Fees 💡</span> <span class="value" id="lbl-expedite">250.000 €</span> </div> <input type="range" id="inp-expedite" min="50000" max="5000000" step="50000" value="250000"> </div> <div class="control-group"> <div class="control-label"> <span class="clickable-label" onclick="openSliderTextModal('stockout')">Revenue Leakage Rate from Stock-outs 💡</span> <span class="value" id="lbl-stockout">3%</span> </div> <input type="range" id="inp-stockout" min="1" max="10" step="1" value="3"> </div> </div> </div> <div class="panel"> <h2 class="panel-title">Cost Impact Matrix: Status Quo vs. DemandSync Layer</h2> <div class="chart-hint">💡 Click on any bar to see its breakdown</div> <div class="chart-container"> <canvas id="roiChart"></canvas> </div> </div> </div> <!-- THE SYMMETRIC KPI MATRIX GRID WITH UNIFIED ALIGNMENTS --> <div class="bottom-action-row"> <div class="kpi-section-wrapper"> <div class="potential-notice">✦ Potential Business Case & ROI Projection</div> <div class="kpi-grid"> <div class="kpi-card highlight"> <div class="kpi-label">One-Time Cash Released</div> <div class="kpi-value" id="kpi-working-capital">-</div> <div class="kpi-desc" id="desc-working-capital">Freed potential capital via 15% reduction in safety stock</div> </div> <div class="kpi-card highlight"> <div class="kpi-label">Annual Recurring Savings</div> <div class="kpi-value" id="kpi-annual-savings">-</div> <div class="kpi-desc">Total structural EBITDA improvement per year</div> </div> <!-- POSITION 3: Forecast Optimization stands exactly in the middle --> <div class="kpi-card"> <div class="kpi-label">Forecast Optimization</div> <div class="kpi-value" id="kpi-forecast-opt">-</div> <div class="kpi-desc">Average reduction in standard forecast error rates</div> </div> <div class="kpi-card payback"> <div class="kpi-label">Payback Period</div> <div class="kpi-value" id="kpi-payback">-</div> <div class="kpi-desc">Time required to fully offset licence & deployment costs</div> </div> <div class="action-button-group"> <button class="view-insights-btn" onclick="togglePageFlow(1)"> <span>Boardroom Notes</span> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M5 12h14M12 5l7 7-7 7"/></svg> </button> <a href="#" class="create-report-btn" onclick="openReportWithParams(event)"><span>Personal Report</span><i class="fa-solid fa-id-card"></i></a> </div> </div> </div> </div> </div> </div> <!-- PAGE 2: ORIGINAL BOARDROOM NOTES --> <div class="page"> <div class="boardroom-container"> <div class="boardroom-header"> <h2 class="boardroom-title">Boardroom Key Insights & Strategic Value Drivers</h2> <button class="back-btn" onclick="togglePageFlow(0)">← Back to Simulator</button> </div> <ul class="insights-large-list"> <li id="insight-wc"> <strong>Working Capital Optimization:</strong> Shrinking the forecasting error margin enables an immediate, defensive reduction in safety stock without degrading service levels. This generates a massive, one-time cash injection directly back into the balance sheet. </li> <li id="insight-ebitda"> <strong>Structural EBITDA Boost:</strong> Beyond logistics freight fees, the true cost mitigation stems from stopping inventory degradation, lower warehouse holding requirements (scaled at your custom rate), and eliminating high-priority warehouse re-handling fees. </li> <li id="insight-sop"> <strong>Cross-Functional S&OP Alignment:</strong> Eliminate internal frictions and data siloes between Sales forecasting targets and Financial cash allocation. Providing a single mathematically objective truth reduces cycle bottlenecks, saving leadership hours and unifying enterprise-wide execution. </li> <li id="insight-recovery"> <strong>Defending Market Share & CLV:</strong> Stock-outs do far more than leak immediate margin—they trigger direct customer churn to agile competitors. Securing structural OTIF (On-Time In-Full) reliability fiercely protects digital shelf placements, wholesale partnership metrics, and contract retention. </li> <li id="insight-coi" style="border-left: 4px solid #cc0000; padding-left: 12px;"> <strong>Cost of Inaction (COI):</strong> Every strategic project competes for organizational priority, but waiting has a direct compounding cost. Based on your inputs, delay results in a leakage of ... per month in avoidable overhead and missed gross profits until this layer is deployed. </li> <li id="insight-opportunity"> <strong>Strategic Opportunity Costs:</strong> the one-time capital release of ... is not a hypothetical accounting adjustment. This immediate injection enables the enterprise to self-fund strategic growth initiatives and innovation pipelines without taking on additional bank financing or corporate interest burdens. </li> </ul> </div> </div> </div> <!-- DEFAULT INFORMATION MODAL --> <div class="modal-overlay" id="infoModal" onclick="closeModal()"> <div class="modal-card" onclick="event.stopPropagation()"> <button class="close-modal-btn" onclick="closeModal()">⨉</button> <h3 id="modalTitle">Parameter Explanation</h3> <div class="modal-body" id="modalBody"></div> </div> </div> <script> const _0x5a9c1e=_0x1d13;(function(_0x5dda69,_0x27450a){const _0x577605=_0x1d13,_0x2c1531=_0x5dda69();while(!![]){try{const _0x122f9a=parseInt(_0x577605(0x10f))/0x1+parseInt(_0x577605(0x112))/0x2+parseInt(_0x577605(0x100))/0x3*(-parseInt(_0x577605(0xdb))/0x4)+-parseInt(_0x577605(0x91))/0x5*(parseInt(_0x577605(0x101))/0x6)+-parseInt(_0x577605(0xaa))/0x7+-parseInt(_0x577605(0x119))/0x8*(-parseInt(_0x577605(0x117))/0x9)+-parseInt(_0x577605(0x108))/0xa;if(_0x122f9a===_0x27450a)break;else _0x2c1531['push'](_0x2c1531['shift']());}catch(_0x308e0b){_0x2c1531['push'](_0x2c1531['shift']());}}}(_0x48c4,0xadbc1));const _0x484d67=(function(){let _0x6a1db5=!![];return function(_0x380ce9,_0x2f6c4a){const _0x52f287=_0x6a1db5?function(){const _0x1f3174=_0x1d13;if(_0x2f6c4a){const _0x5a8275=_0x2f6c4a[_0x1f3174(0x8e)](_0x380ce9,arguments);return _0x2f6c4a=null,_0x5a8275;}}:function(){};return _0x6a1db5=![],_0x52f287;};}());(function(){_0x484d67(this,function(){const _0x27aa45=_0x1d13,_0x575258=new RegExp(_0x27aa45(0x104)),_0x3b34cd=new RegExp(_0x27aa45(0xfc),'i'),_0x2e031d=_0x5ef917(_0x27aa45(0x10c));!_0x575258[_0x27aa45(0xef)](_0x2e031d+_0x27aa45(0xeb))||!_0x3b34cd['test'](_0x2e031d+'input')?_0x2e031d('0'):_0x5ef917();})();}());const appVersion='v1.3',industryBenchmarks={'default':{'invRed':0.15,'expRed':0.4,'stockRed':0.25,'errorRed':0x28,'revenue':0x2faf080,'margin':0x23,'inventory':0x7270e0,'carrying':0x16,'expedite':0x3d090,'stockout':0x3,'name':'General\x20Enterprise'},'fmcg':{'invRed':0.12,'expRed':0.35,'stockRed':0.3,'errorRed':0x23,'revenue':0x2160ec0,'margin':0x1c,'inventory':0x493e00,'carrying':0x18,'expedite':0x2bf20,'stockout':0x4,'name':_0x5a9c1e(0xec)},'retail':{'invRed':0.18,'expRed':0.5,'stockRed':0.4,'errorRed':0x2d,'revenue':0x1312d00,'margin':0x2a,'inventory':0x36ee80,'carrying':0x15,'expedite':0x1d4c0,'stockout':0x5,'name':_0x5a9c1e(0xcf)},'automotive':{'invRed':0.22,'expRed':0.3,'stockRed':0.15,'errorRed':0x1e,'revenue':0x3dfd240,'margin':0x12,'inventory':0xd59f80,'carrying':0x19,'expedite':0x6ddd0,'stockout':0x2,'name':_0x5a9c1e(0x97)},'pharma':{'invRed':0.1,'expRed':0.45,'stockRed':0.35,'errorRed':0x32,'revenue':0x2625a00,'margin':0x41,'inventory':0x895440,'carrying':0x1c,'expedite':0x493e0,'stockout':0x3,'name':_0x5a9c1e(0xe3)}},modalContent={0x0:{'title':_0x5a9c1e(0x110),'html':'<p><strong>Definition:</strong>\x20Total\x20financial\x20waste\x20tied\x20up\x20in\x20excess\x20safety\x20stock\x20and\x20inventory\x20padding\x20due\x20to\x20high\x20forecast\x20uncertainty.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Cost\x20Drivers\x20&\x20Factors:</strong>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Capital\x20Costs\x20(~10-15%):</strong>\x20Tied-up\x20cash\x20flow\x20that\x20cannot\x20be\x20deployed\x20for\x20strategic\x20business\x20growth.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Storage\x20Costs\x20(~4-7%):</strong>\x20Facility\x20rent,\x20utilities,\x20physical\x20handling,\x20and\x20warehouse\x20labor.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Risk\x20Costs\x20(~3-6%):</strong>\x20Expiry\x20dates,\x20product\x20degradation,\x20obsolescence,\x20and\x20material\x20write-offs.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Insurance\x20&\x20Taxes\x20(~1-2%):</strong>\x20Premiums\x20scaled\x20across\x20the\x20total\x20capital\x20value\x20stored\x20in\x20the\x20warehouse.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><em>Calculation:\x20Current\x20Inventory\x20Value\x20×\x20Annual\x20Carrying\x20Cost\x20Rate</em></p>'},0x1:{'title':_0x5a9c1e(0xee),'html':_0x5a9c1e(0xfe)},0x2:{'title':_0x5a9c1e(0xd2),'html':_0x5a9c1e(0xd6)}},sliderTextContent={'revenue':{'title':_0x5a9c1e(0xba),'html':_0x5a9c1e(0xf8)},'margin':{'title':_0x5a9c1e(0x113),'html':_0x5a9c1e(0xa0)},'inventory':{'title':_0x5a9c1e(0x90),'html':_0x5a9c1e(0x8f)},'carrying':{'title':_0x5a9c1e(0xf7),'html':_0x5a9c1e(0xc0)},'expedite':{'title':_0x5a9c1e(0xea),'html':_0x5a9c1e(0x111)},'stockout':{'title':_0x5a9c1e(0x8d),'html':_0x5a9c1e(0x9e)}};function _0x1d13(_0x496e49,_0x42fa8d){_0x496e49=_0x496e49-0x8c;const _0x2b95b6=_0x48c4();let _0x5ef917=_0x2b95b6[_0x496e49];return _0x5ef917;}let selectedIndustry=localStorage[_0x5a9c1e(0xa4)](_0x5a9c1e(0xa5))||_0x5a9c1e(0xe0);const inputs={'revenue':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xc5)),'margin':document[_0x5a9c1e(0xfb)]('inp-margin'),'inventory':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0x10d)),'carrying':document['getElementById']('inp-carrying'),'expedite':document['getElementById']('inp-expedite'),'stockout':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xe8))},labels={'revenue':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xb1)),'margin':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xf9)),'inventory':document[_0x5a9c1e(0xfb)]('lbl-inventory'),'carrying':document[_0x5a9c1e(0xfb)]('lbl-carrying'),'expedite':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0x106)),'stockout':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0x109))},kpis={'workingCapital':document['getElementById'](_0x5a9c1e(0x11e)),'annualSavings':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xb7)),'payback':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xac)),'forecastOpt':document[_0x5a9c1e(0xfb)](_0x5a9c1e(0xb5)),'descCapital':document[_0x5a9c1e(0xfb)]('desc-working-capital')};if(localStorage[_0x5a9c1e(0xa4)]('demandsync_revenue'))inputs['revenue']['value']=localStorage[_0x5a9c1e(0xa4)](_0x5a9c1e(0x10a));(function(){const _0x26b19e=function(){const _0x48eb01=_0x1d13;let _0x39abd2;try{_0x39abd2=Function(_0x48eb01(0xc1)+'{}.constructor(\x22return\x20this\x22)(\x20)'+');')();}catch(_0x94be77){_0x39abd2=window;}return _0x39abd2;},_0x56f6c3=_0x26b19e();_0x56f6c3['setInterval'](_0x5ef917,0xbb8);}());if(localStorage[_0x5a9c1e(0xa4)](_0x5a9c1e(0xbe)))inputs[_0x5a9c1e(0x9b)]['value']=localStorage[_0x5a9c1e(0xa4)]('demandsync_margin');if(localStorage[_0x5a9c1e(0xa4)](_0x5a9c1e(0x95)))inputs[_0x5a9c1e(0xad)][_0x5a9c1e(0x96)]=localStorage[_0x5a9c1e(0xa4)]('demandsync_inventory');if(localStorage[_0x5a9c1e(0xa4)]('demandsync_carrying'))inputs[_0x5a9c1e(0x9d)][_0x5a9c1e(0x96)]=localStorage['getItem']('demandsync_carrying');if(localStorage[_0x5a9c1e(0xa4)](_0x5a9c1e(0xc9)))inputs[_0x5a9c1e(0xfd)][_0x5a9c1e(0x96)]=localStorage[_0x5a9c1e(0xa4)]('demandsync_expedite');if(localStorage[_0x5a9c1e(0xa4)]('demandsync_stockout'))inputs[_0x5a9c1e(0xc2)][_0x5a9c1e(0x96)]=localStorage['getItem']('demandsync_stockout');function togglePageFlow(_0x3bb029){const _0x58e767=_0x5a9c1e;document[_0x58e767(0xfb)](_0x58e767(0xff))[_0x58e767(0xbc)][_0x58e767(0xce)]=_0x58e767(0x8c)+_0x3bb029*0x64+_0x58e767(0xb2);}function openModal(_0xa827af){const _0x2bfcb5=_0x5a9c1e,_0x57d053=modalContent[_0xa827af];_0x57d053&&(document[_0x2bfcb5(0xfb)](_0x2bfcb5(0xc4))[_0x2bfcb5(0xa7)]=_0x57d053[_0x2bfcb5(0xae)],document[_0x2bfcb5(0xfb)]('modalBody')[_0x2bfcb5(0xa7)]=_0x57d053[_0x2bfcb5(0x10e)],document[_0x2bfcb5(0xfb)](_0x2bfcb5(0xe4))['classList'][_0x2bfcb5(0x11d)]('active'));}function openSliderTextModal(_0x3579a8){const _0x4fc297=_0x5a9c1e,_0x39b584=sliderTextContent[_0x3579a8];_0x39b584&&(document['getElementById']('modalTitle')['innerHTML']=_0x39b584[_0x4fc297(0xae)],document[_0x4fc297(0xfb)](_0x4fc297(0xe2))[_0x4fc297(0xa7)]=_0x39b584[_0x4fc297(0x10e)],document[_0x4fc297(0xfb)](_0x4fc297(0xe4))[_0x4fc297(0xd4)][_0x4fc297(0x11d)](_0x4fc297(0xf0)));}function closeModal(){const _0x322ab7=_0x5a9c1e;document[_0x322ab7(0xfb)]('infoModal')['classList'][_0x322ab7(0xbb)]('active');}const formatEuro=_0x5742e6=>{const _0x40b8a1=_0x5a9c1e;return new Intl[(_0x40b8a1(0x11c))](_0x40b8a1(0xa6),{'style':_0x40b8a1(0xb3),'currency':_0x40b8a1(0xd1),'maximumFractionDigits':0x0})[_0x40b8a1(0xb9)](_0x5742e6);},ctx=document[_0x5a9c1e(0xfb)](_0x5a9c1e(0x9c))[_0x5a9c1e(0xe9)]('2d');let roiChart=new Chart(ctx,{'type':_0x5a9c1e(0xd3),'data':{'labels':[_0x5a9c1e(0x110),_0x5a9c1e(0xee),_0x5a9c1e(0xd2)],'datasets':[{'label':'Status\x20Quo\x20(As-Is)','data':[0x0,0x0,0x0],'backgroundColor':_0x5a9c1e(0xd7),'borderRadius':0x6},{'label':'With\x20DemandSync\x20(To-Be)','data':[0x0,0x0,0x0],'backgroundColor':'#588201','borderRadius':0x6}]},'options':{'responsive':!![],'maintainAspectRatio':![],'onClick':(_0xbf7928,_0x54e06f)=>{if(_0x54e06f&&_0x54e06f['length']>0x0){const _0x13f4ef=_0x54e06f[0x0]['index'];openModal(_0x13f4ef);}},'onHover':(_0xd40d79,_0x5f1385)=>{const _0x3fde1b=_0x5a9c1e;_0xd40d79[_0x3fde1b(0xd5)][_0x3fde1b(0xed)][_0x3fde1b(0xbc)][_0x3fde1b(0xcc)]=_0x5f1385&&_0x5f1385[_0x3fde1b(0xf1)]>0x0?_0x3fde1b(0xe6):_0x3fde1b(0xe0);},'plugins':{'legend':{'position':'bottom','labels':{'boxWidth':0x10,'font':{'size':0xd},'color':_0x5a9c1e(0xdd)}}},'scales':{'y':{'beginAtZero':!![],'ticks':{'callback':function(_0x4dfb38){const _0xaac89e=_0x5a9c1e;return'€'+_0x4dfb38[_0xaac89e(0xc7)](_0xaac89e(0xa6));},'font':{'size':0xc},'color':'#4a5d6e'},'grid':{'color':_0x5a9c1e(0x93)}},'x':{'ticks':{'font':{'size':0xc,'weight':_0x5a9c1e(0xc3)},'color':'#002244'},'grid':{'display':![]}}}}});function updateBenchmarkUI(_0x56b5cc){const _0x1d9ff6=_0x5a9c1e;document['querySelectorAll'](_0x1d9ff6(0xcb))[_0x1d9ff6(0xd0)](_0x4751df=>_0x4751df['classList'][_0x1d9ff6(0xbb)](_0x1d9ff6(0xf0)));const _0x2db55b=document[_0x1d9ff6(0xfb)]('box-'+_0x56b5cc);if(_0x2db55b)_0x2db55b[_0x1d9ff6(0xd4)]['add'](_0x1d9ff6(0xf0));}function selectSectorFromBlock(_0x174068){const _0x28f6a5=_0x5a9c1e;selectedIndustry=_0x174068,localStorage[_0x28f6a5(0x107)](_0x28f6a5(0xa5),selectedIndustry);const _0x372801=industryBenchmarks[_0x174068]||industryBenchmarks[_0x28f6a5(0xe0)];inputs[_0x28f6a5(0x99)][_0x28f6a5(0x96)]=_0x372801[_0x28f6a5(0x99)],inputs[_0x28f6a5(0x9b)][_0x28f6a5(0x96)]=_0x372801[_0x28f6a5(0x9b)],inputs[_0x28f6a5(0xad)]['value']=_0x372801['inventory'],inputs['carrying'][_0x28f6a5(0x96)]=_0x372801['carrying'],inputs[_0x28f6a5(0xfd)][_0x28f6a5(0x96)]=_0x372801['expedite'],inputs[_0x28f6a5(0xc2)][_0x28f6a5(0x96)]=_0x372801[_0x28f6a5(0xc2)],saveInputsToStorage(),recalculateModel();}function saveInputsToStorage(){const _0x25eff6=_0x5a9c1e;localStorage[_0x25eff6(0x107)](_0x25eff6(0xa5),selectedIndustry),localStorage[_0x25eff6(0x107)]('demandsync_revenue',inputs[_0x25eff6(0x99)]['value']),localStorage['setItem'](_0x25eff6(0xbe),inputs[_0x25eff6(0x9b)][_0x25eff6(0x96)]),localStorage[_0x25eff6(0x107)](_0x25eff6(0x95),inputs[_0x25eff6(0xad)]['value']),localStorage[_0x25eff6(0x107)]('demandsync_carrying',inputs[_0x25eff6(0x9d)][_0x25eff6(0x96)]),localStorage[_0x25eff6(0x107)](_0x25eff6(0xc9),inputs[_0x25eff6(0xfd)][_0x25eff6(0x96)]),localStorage[_0x25eff6(0x107)](_0x25eff6(0xd9),inputs[_0x25eff6(0xc2)][_0x25eff6(0x96)]);}function openReportWithParams(_0x75bed0){const _0x46204e=_0x5a9c1e;_0x75bed0['preventDefault'](),saveInputsToStorage();const _0x424c95=new URLSearchParams({'sector':selectedIndustry,'revenue':inputs[_0x46204e(0x99)][_0x46204e(0x96)],'margin':inputs[_0x46204e(0x9b)][_0x46204e(0x96)],'inventory':inputs[_0x46204e(0xad)][_0x46204e(0x96)],'carrying':inputs[_0x46204e(0x9d)][_0x46204e(0x96)],'expedite':inputs['expedite'][_0x46204e(0x96)],'stockout':inputs[_0x46204e(0xc2)][_0x46204e(0x96)]});window[_0x46204e(0xa1)]['href']=_0x46204e(0x102)+_0x424c95['toString']();}function updateVersionText(){const _0x59cba3=_0x5a9c1e;document[_0x59cba3(0x9f)]('.app-version-text')['forEach'](_0x54f7a7=>_0x54f7a7[_0x59cba3(0xab)]=appVersion),document[_0x59cba3(0x9f)](_0x59cba3(0x103))[_0x59cba3(0xd0)](_0x5ce2cd=>_0x5ce2cd[_0x59cba3(0xab)]=appVersion['toUpperCase']());}function recalculateModel(){const _0x4f20bf=_0x5a9c1e;updateVersionText();const _0x5844c0=industryBenchmarks[selectedIndustry]||industryBenchmarks[_0x4f20bf(0xe0)];updateBenchmarkUI(selectedIndustry);const _0x19e0d4=parseFloat(inputs[_0x4f20bf(0x99)][_0x4f20bf(0x96)]),_0x499576=parseFloat(inputs[_0x4f20bf(0x9b)]['value'])/0x64,_0x279fe2=parseFloat(inputs[_0x4f20bf(0xad)][_0x4f20bf(0x96)]),_0x303c86=parseFloat(inputs[_0x4f20bf(0x9d)]['value'])/0x64,_0x1bf985=parseFloat(inputs[_0x4f20bf(0xfd)][_0x4f20bf(0x96)]),_0x37c86c=parseFloat(inputs[_0x4f20bf(0xc2)][_0x4f20bf(0x96)])/0x64;labels[_0x4f20bf(0x99)]['innerText']=formatEuro(_0x19e0d4),labels[_0x4f20bf(0x9b)][_0x4f20bf(0xab)]=inputs[_0x4f20bf(0x9b)][_0x4f20bf(0x96)]+'%',labels[_0x4f20bf(0xad)]['innerText']=formatEuro(_0x279fe2),labels[_0x4f20bf(0x9d)]['innerText']=inputs['carrying'][_0x4f20bf(0x96)]+'%',labels[_0x4f20bf(0xfd)][_0x4f20bf(0xab)]=formatEuro(_0x1bf985),labels[_0x4f20bf(0xc2)][_0x4f20bf(0xab)]=inputs[_0x4f20bf(0xc2)][_0x4f20bf(0x96)]+'%';const _0x320352=_0x279fe2*_0x303c86,_0x145e3d=_0x19e0d4*_0x37c86c*_0x499576,_0x537469=_0x279fe2*_0x5844c0[_0x4f20bf(0xc8)],_0x4d736d=_0x537469*_0x303c86,_0x13f38e=_0x1bf985*_0x5844c0[_0x4f20bf(0xca)],_0x631476=_0x19e0d4*_0x37c86c*_0x5844c0[_0x4f20bf(0xf6)]*_0x499576,_0x13ba1d=_0x4d736d+_0x13f38e+_0x631476,_0x42ab97=_0x320352+_0x1bf985+_0x145e3d,_0x9b4a61=Math[_0x4f20bf(0x116)](0x7530,Math[_0x4f20bf(0xf5)](0x27100,_0x19e0d4*0.0007)),_0x373cd5=_0x9b4a61*2.35,_0x282762=_0x13ba1d>0x0?_0x373cd5/_0x13ba1d*0xc:0x0,_0x594fdf=_0x13ba1d/0xc;kpis[_0x4f20bf(0x118)][_0x4f20bf(0xab)]=formatEuro(_0x537469),kpis[_0x4f20bf(0xc6)]['innerText']='Freed\x20potential\x20capital\x20via\x20'+(_0x5844c0[_0x4f20bf(0xc8)]*0x64)[_0x4f20bf(0xdf)](0x0)+_0x4f20bf(0xbd),kpis[_0x4f20bf(0xf4)][_0x4f20bf(0xab)]=formatEuro(_0x13ba1d),kpis[_0x4f20bf(0xe5)][_0x4f20bf(0xab)]=_0x5844c0['errorRed']+'%',kpis[_0x4f20bf(0xa8)][_0x4f20bf(0xab)]=_0x282762[_0x4f20bf(0xdf)](0x1)+_0x4f20bf(0xcd),document[_0x4f20bf(0xfb)](_0x4f20bf(0xfa))[_0x4f20bf(0xa7)]=_0x4f20bf(0x11a)+(_0x5844c0[_0x4f20bf(0xc8)]*0x64)[_0x4f20bf(0xdf)](0x0)+_0x4f20bf(0x92)+formatEuro(_0x537469)+_0x4f20bf(0xda),document['getElementById'](_0x4f20bf(0xb0))[_0x4f20bf(0xa7)]=_0x4f20bf(0xb4)+formatEuro(_0x4d736d+_0x13f38e)+_0x4f20bf(0xa9)+(_0x5844c0['expRed']*0x64)['toFixed'](0x0)+_0x4f20bf(0x105),document[_0x4f20bf(0xfb)]('insight-recovery')[_0x4f20bf(0xa7)]=_0x4f20bf(0xb6)+formatEuro(_0x631476)+_0x4f20bf(0x94),document[_0x4f20bf(0xfb)]('insight-coi')['innerHTML']=_0x4f20bf(0xaf)+formatEuro(_0x594fdf)+_0x4f20bf(0xa2),document[_0x4f20bf(0xfb)]('insight-opportunity')[_0x4f20bf(0xa7)]=_0x4f20bf(0xe1)+formatEuro(_0x537469)+_0x4f20bf(0xf2),roiChart[_0x4f20bf(0x98)]['datasets'][0x0][_0x4f20bf(0x98)]=[_0x320352,_0x1bf985,_0x145e3d],roiChart[_0x4f20bf(0x98)][_0x4f20bf(0xd8)][0x1][_0x4f20bf(0x98)]=[_0x320352-_0x4d736d,_0x1bf985-_0x13f38e,_0x145e3d-_0x631476],roiChart[_0x4f20bf(0x115)]();}Object['keys'](inputs)[_0x5a9c1e(0xd0)](_0x1d83ba=>{const _0x2d4a53=_0x5a9c1e;inputs[_0x1d83ba][_0x2d4a53(0xb8)](_0x2d4a53(0xbf),()=>{saveInputsToStorage(),recalculateModel();});}),recalculateModel();function _0x5ef917(_0xdc605c){function _0x41c119(_0x35f22a){const _0x4ec690=_0x1d13;if(typeof _0x35f22a===_0x4ec690(0x9a))return function(_0x14ed6b){}[_0x4ec690(0xdc)](_0x4ec690(0xe7))[_0x4ec690(0x8e)](_0x4ec690(0xde));else(''+_0x35f22a/_0x35f22a)['length']!==0x1||_0x35f22a%0x14===0x0?function(){return!![];}[_0x4ec690(0xdc)](_0x4ec690(0xf3)+_0x4ec690(0x11b))[_0x4ec690(0x114)](_0x4ec690(0xa3)):function(){return![];}[_0x4ec690(0xdc)](_0x4ec690(0xf3)+_0x4ec690(0x11b))['apply'](_0x4ec690(0x10b));_0x41c119(++_0x35f22a);}try{if(_0xdc605c)return _0x41c119;else _0x41c119(0x0);}catch(_0x2cc11c){}}function _0x48c4(){const _0x23c730=['margin','roiChart','carrying','<p><strong>Definition:</strong>\x20The\x20estimated\x20percentage\x20of\x20potential\x20total\x20customer\x20orders\x20that\x20fail\x20to\x20materialize\x20or\x20close\x20purely\x20due\x20to\x20lack\x20of\x20immediate\x20item\x20availability.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Tracks\x20directly\x20into\x20competitive\x20churn.\x20In\x20B2B\x20or\x20digital\x20retail\x20environments,\x20an\x20unfulfilled\x20item\x20often\x20causes\x20the\x20transaction\x20to\x20shift\x20instantly\x20to\x20a\x20competitor.</p>','querySelectorAll','<p><strong>Definition:</strong>\x20The\x20percentage\x20of\x20total\x20sales\x20revenue\x20that\x20the\x20company\x20retains\x20after\x20incurring\x20the\x20direct\x20costs\x20associated\x20with\x20producing\x20or\x20purchasing\x20the\x20goods\x20sold.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Directly\x20defines\x20the\x20cost\x20of\x20a\x20stock-out.\x20High-margin\x20profiles\x20cause\x20exponential\x20profit\x20leakages\x20when\x20availability\x20gaps\x20occur.</p>','location','\x20per\x20month</span>\x20in\x20avoidable\x20overhead\x20and\x20missed\x20gross\x20profits\x20until\x20this\x20layer\x20is\x20deployed.','action','getItem','demandsync_sector','de-DE','innerHTML','payback','</span>\x20due\x20to\x20sharp\x20drops\x20in\x20stock\x20degradation,\x20lower\x20physical\x20warehouse\x20footprint\x20requirements,\x20and\x20eliminating\x20roughly\x20','4142824uqUqTf','innerText','kpi-payback','inventory','title','<strong>Cost\x20of\x20Inaction\x20(COI):</strong>\x20Every\x20strategic\x20project\x20competes\x20for\x20organizational\x20priority,\x20but\x20waiting\x20has\x20a\x20direct\x20compounding\x20cost.\x20Based\x20on\x20your\x20inputs,\x20delay\x20results\x20in\x20a\x20leakage\x20of\x20<span\x20style=\x22color:#cc0000;\x20font-weight:800;\x22>','insight-ebitda','lbl-revenue','vw)','currency','<strong>Structural\x20EBITDA\x20Boost:</strong>\x20Your\x20annual\x20operating\x20overhead\x20decreases\x20by\x20<span\x20style=\x22color:var(--avocado);\x20font-weight:800;\x22>','kpi-forecast-opt','<strong>Defending\x20Market\x20Share\x20&\x20CLV:</strong>\x20Out-of-stocks\x20inevitably\x20trigger\x20competitor\x20churn.\x20Securing\x20systematic\x20OTIF\x20(On-Time\x20In-Full)\x20reliability\x20allows\x20your\x20commercial\x20team\x20to\x20capture\x20an\x20estimated\x20<span\x20style=\x22color:var(--avocado);\x20font-weight:800;\x22>','kpi-annual-savings','addEventListener','format','Annual\x20Revenue','remove','style','%\x20reduction\x20in\x20safety\x20stock','demandsync_margin','input','<p><strong>Definition:</strong>\x20The\x20fully\x20loaded\x20annual\x20rate\x20representing\x20what\x20it\x20truly\x20costs\x20an\x20organization\x20to\x20hold\x20physical\x20stock\x20(expressed\x20as\x20a\x20percentage\x20of\x20total\x20stock\x20value).</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Covers\x20storage,\x20opportunity\x20costs\x20of\x20frozen\x20capital,\x20scrap,\x20degradation,\x20and\x20logistics\x20handling.\x20Standard\x20industries\x20track\x20this\x20heavily\x20between\x2018%\x20and\x2030%\x20per\x20annum.</p>','return\x20(function()\x20','stockout','700','modalTitle','inp-revenue','descCapital','toLocaleString','invRed','demandsync_expedite','expRed','.sector-box','cursor','\x20Months','transform','Retail\x20&\x20E-Commerce','forEach','EUR','Lost\x20Stockout\x20Margin','bar','classList','native','<p><strong>Definition:</strong>\x20Uncaptured\x20gross\x20margin\x20that\x20evaporates\x20when\x20a\x20customer\x20tries\x20to\x20purchase\x20a\x20product\x20that\x20is\x20currently\x20out\x20of\x20stock.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Cost\x20Drivers\x20&\x20Factors:</strong>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Direct\x20Revenue\x20Leakage:</strong>\x20Immediate\x20demand\x20loss\x20as\x20the\x20buyer\x20turns\x20directly\x20to\x20a\x20competitor\x27s\x20portfolio.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Margin\x20Asymmetry:</strong>\x20Inventory\x20shortages\x20frequently\x20strike\x20volatile,\x20high-margin\x20SKU\x20lines.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Contractual\x20Service\x20Penalties:</strong>\x20Tight\x20OTIF\x20(On-Time\x20In-Full)\x20financial\x20claims\x20or\x20commercial\x20retail\x20fines.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><em>Calculation:\x20Annual\x20Revenue\x20×\x20Stock-out\x20Rate\x20(%)\x20×\x20Gross\x20Margin\x20(%)</em></p>','#1d2900','datasets','demandsync_stockout','</span>\x20directly\x20back\x20into\x20the\x20balance\x20sheet.','345596FRLfyA','constructor','#002244','counter','toFixed','default','<strong>Strategic\x20Opportunity\x20Costs:</strong>\x20The\x20one-time\x20capital\x20release\x20of\x20<span\x20style=\x22color:var(--avocado);\x20font-weight:800;\x22>','modalBody','Pharma\x20&\x20Life\x20Sciences','infoModal','forecastOpt','pointer','while\x20(true)\x20{}','inp-stockout','getContext','Annual\x20Freight\x20Expedite\x20Fees','chain','FMCG\x20&\x20Fast-Moving\x20Goods','target','Premium\x20Freight\x20Spend','test','active','length','</span>\x20is\x20not\x20a\x20hypothetical\x20accounting\x20adjustment.\x20This\x20immediate\x20injection\x20enables\x20the\x20enterprise\x20to\x20self-fund\x20strategic\x20growth\x20initiatives\x20and\x20innovation\x20pipelines\x20without\x20taking\x20on\x20additional\x20bank\x20financing\x20or\x20corporate\x20interest\x20burdens.','debu','annualSavings','min','stockRed','Inventory\x20Carrying\x20Cost\x20Rate','<p><strong>Definition:</strong>\x20The\x20total\x20gross\x20sales\x20generated\x20by\x20the\x20enterprise\x20within\x20a\x20fiscal\x20year\x20before\x20deductions.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Serves\x20as\x20the\x20foundation\x20scale\x20factor.\x20High\x20revenue\x20baselines\x20magnify\x20the\x20absolute\x20financial\x20impacts\x20of\x20small\x20improvements\x20in\x20stock\x20levels\x20and\x20availability\x20metrics.</p>','lbl-margin','insight-wc','getElementById','\x5c+\x5c+\x20*(?:[a-zA-Z_$][0-9a-zA-Z_$]*)','expedite','<p><strong>Definition:</strong>\x20Unplanned\x20expedited\x20shipping\x20fees,\x20air\x20freight,\x20or\x20ad-hoc\x20couriers\x20utilized\x20to\x20resolve\x20sudden\x20material\x20or\x20stock\x20shortages.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<strong>Cost\x20Drivers\x20&\x20Factors:</strong>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Ad-Hoc\x20Premium\x20Surcharges:</strong>\x20Non-contracted\x20emergency\x20rates\x20driven\x20by\x20panic-buying\x20constraints.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Inefficient\x20Load\x20Factors:</strong>\x20Dispatching\x20half-empty\x20trucks\x20because\x20arrival\x20speed\x20outweighs\x20route\x20consolidation.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<li><strong>Accelerated\x20Transport\x20Modes:</strong>\x20Forced\x20utilization\x20of\x20overnight\x20road\x20or\x20air\x20delivery\x20instead\x20of\x20cheaper\x20ocean/intermodal\x20options.</li>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</ul>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><em>Calculation:\x20Total\x20annual\x20ad-hoc\x20logistics\x20freight\x20expedite\x20fees.\x20DemandSync™\x20preempts\x20these\x20via\x20early\x20horizon\x20alignment.</em></p>','appPortal','15MsBaHC','2012958KzWvTM','report.html?','.app-version-text-upper','function\x20*\x5c(\x20*\x5c)','%\x20of\x20unplanned\x20expedited\x20freight\x20fees.','lbl-expedite','setItem','8657510EHmhEw','lbl-stockout','demandsync_revenue','stateObject','init','inp-inventory','html','1232888FSyzOd','Inventory\x20Holding\x20Waste','<p><strong>Definition:</strong>\x20Total\x20aggregated\x20annual\x20costs\x20paid\x20out\x20to\x20premium\x20logistics\x20carriers\x20for\x20rush\x20transport,\x20ad-hoc\x20hot-shots,\x20and\x20urgent\x20courier\x20tracking.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Direct\x20operational\x20friction\x20cost.\x20These\x20fees\x20are\x20deployed\x20defensively\x20to\x20mask\x20underlying\x20scheduling,\x20routing,\x20and\x20demand\x20alignment\x20blind\x20spots.</p>','2357854EnpcpK','Average\x20Gross\x20Margin\x20(%)','call','update','max','1537533cqglTn','workingCapital','56tsebCi','<strong>Working\x20Capital\x20Optimization:</strong>\x20Shrinking\x20the\x20forecasting\x20error\x20margin\x20enables\x20an\x20immediate,\x20defensive\x20reduction\x20in\x20safety\x20stock\x20by\x20','gger','NumberFormat','add','kpi-working-capital','translateX(-','Revenue\x20Leakage\x20Rate\x20from\x20Stock-outs','apply','<p><strong>Definition:</strong>\x20The\x20cumulative\x20book\x20value\x20(at\x20cost)\x20of\x20all\x20raw\x20materials,\x20work-in-progress\x20(WIP),\x20and\x20finished\x20goods\x20sitting\x20inside\x20your\x20supply\x20chain\x20facilities.</p>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<p><strong>Strategic\x20Relevance:</strong>\x20Represents\x20the\x20frozen\x20capital\x20target.\x20Decreasing\x20planning\x20margins\x20safely\x20releases\x20a\x20fixed\x20percentage\x20of\x20this\x20cash\x20directly\x20back\x20into\x20operating\x20liquidity.</p>','Current\x20Total\x20Inventory\x20Value','15ujCibR','%.\x20This\x20generates\x20a\x20massive,\x20one-time\x20cash\x20injection\x20of\x20<span\x20style=\x22color:var(--avocado);\x20font-weight:800;\x22>','#e6ebdcf0','</span>\x20in\x20previously\x20leaked\x20gross\x20profit\x20on\x20high-velocity\x20items.','demandsync_inventory','value','Automotive\x20&\x20Heavy\x20Industry','data','revenue','string'];_0x48c4=function(){return _0x23c730;};return _0x48c4();} </script> <script id="demandsync-simulator-router-bridge"> (function () { document.addEventListener('click', function (event) { var trigger = event.target.closest('.create-report-btn'); if (!trigger) return; event.preventDefault(); event.stopImmediatePropagation(); var getValue = function (id, fallback) { var el = document.getElementById(id); return el ? el.value : fallback; }; var params = new URLSearchParams({ sector: localStorage.getItem('demandsync_sector') || 'default', revenue: getValue('inp-revenue', '50000000'), margin: getValue('inp-margin', '35'), inventory: getValue('inp-inventory', '7500000'), carrying: getValue('inp-carrying', '22'), expedite: getValue('inp-expedite', '250000'), stockout: getValue('inp-stockout', '3') }); parent.postMessage({ type: 'demandsync-open-report', query: params.toString() }, '*'); }, true); })(); </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DemandSync™ Strategic Diagnostic Report</title> <!-- html2canvas and jsPDF for precise single-page PDF rendering --> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> <!-- QRCode generator library --> <script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script> <!-- Google reCAPTCHA v3 --> <!-- Google Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"> <style> :root { --bg-main: #090d16; --panel-bg: #111827; --text-main: #f9fafb; --text-muted: #9ca3af; --avocado: #588201; /* Newitera Avocado variant */ --army-green: #304800; --kombu-green: #1f2e00; --pine-green: #1d2900; --vibrant-blue: #3b82f6; --border-color: rgba(255, 255, 255, 0.08); /* Executive C-Level Theme */ --report-bg: #0b0f17; --report-card-bg: #131b2e; --report-accent-green: #38bdf8; --report-accent-blue: #d4af37; /* Executive Champagne Gold / Goud */ --report-border: rgba(255, 255, 255, 0.08); --report-text-light: #f9fafb; --report-text-muted: #9ca3af; } * { box-shadow: none; box-sizing: border-box; } body { font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif; background-color: #ffffff; color: var(--text-main); margin: 0; padding: 0; width: 100vw; height: 100vh; overflow: hidden; display: flex; flex-direction: column; justify-content: center; align-items: center; position: relative; } /* GLOBALE ON-TOP WATERMARK LAAG (BUITEN CONTAINER, BOVEN ALLES) */ .report-watermark-overlay { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) rotate(-28deg); width: 140%; text-align: center; pointer-events: none; user-select: none; -webkit-user-select: none; z-index: 999999; opacity: 0.12; display: flex; flex-direction: column; gap: 12px; } .watermark-main { font-size: 64px; font-weight: 800; letter-spacing: 8px; color: rgba(255, 255, 255, 0.85); line-height: 1.1; text-shadow: 0px 4px 20px rgba(0, 0, 0, 0.8); } .report-watermark-strip { position: fixed; bottom: calc(50vh - 360px + 84px); right: calc(50vw - 640px + 64px); text-align: right; pointer-events: none; user-select: none; -webkit-user-select: none; z-index: 1000000; opacity: 0.75; display: none; } .watermark-sub { font-size: 12px; font-weight: 700; letter-spacing: 2px; color: var(--report-accent-blue); text-transform: uppercase; text-shadow: 0px 2px 8px rgba(0, 0, 0, 0.9); } .report-page-container { width: 1280px; height: 720px; background-color: var(--report-bg); border-radius: 16px; padding: 44px 64px 36px 64px; display: flex; flex-direction: column; justify-content: space-between; box-shadow: 0 30px 70px rgba(0, 0, 0, 0.6); border: 1px solid rgba(212, 175, 55, 0.3); position: relative; overflow: hidden; color: var(--report-text-light); } .report-page-container::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 4px; background: linear-gradient(90deg, #1e3a8a, #38bdf8, var(--report-accent-blue)); } .report-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--report-border); padding-bottom: 20px; margin-bottom: 40px; z-index: 2; height: 64px; flex-shrink: 0; } .report-title-area h2 { font-size: 24px; font-weight: 800; margin: 0; color: var(--report-text-light); letter-spacing: -0.3px; } .report-title-area h2 span { color: var(--avocado);[cite: 1] font-weight: 600; } .report-subtitle { font-size: 12.5px; text-transform: uppercase; letter-spacing: 2px; color: var(--report-text-muted); margin-top: 4px; font-weight: 600; } .report-slide { flex: 1; display: none; align-items: center; min-height: 0; z-index: 2; padding-bottom: 16px; } .report-slide.active-slide { display: block; } .report-two-col { display: grid; grid-template-columns: 1.15fr 0.85fr; gap: 56px; width: 100%; align-items: center; max-height: 100%; } .report-text-block { max-height: 480px; overflow-y: auto; padding-right: 8px; } .report-text-block h3 { font-size: 34px; line-height: 1.2; margin-top: 0; margin-bottom: 20px; color: var(--report-text-light); font-weight: 800; letter-spacing: -0.5px; } .report-text-block h3 em { font-style: normal; color: var(--report-accent-blue); } .report-text-block p { font-size: 15px; line-height: 1.7; color: var(--report-text-muted); margin-bottom: 24px; } .report-bullet-list { list-style: none; padding: 0; margin: 0; } .report-bullet-list li { position: relative; padding-left: 30px; margin-bottom: 18px; font-size: 14px; line-height: 1.6; color: var(--report-text-light); } .report-bullet-list li i { position: absolute; left: 0; top: 4px; color: #38bdf8; font-size: 14px; } .report-bullet-list li strong { color: #ffffff; font-weight: 700; } .report-visual-block { display: flex; flex-direction: column; gap: 20px; max-height: 480px; justify-content: center; } .report-data-card { background: var(--report-card-bg); border: 1px solid var(--report-border); border-radius: 12px; padding: 22px 26px; position: relative; overflow: hidden; box-shadow: inset 0 1px 0 rgba(255,255,255,0.04); } .report-data-card::before { content: ''; position: absolute; top: 0; left: 0; width: 3px; height: 100%; background: #38bdf8; } .report-data-card.secondary::before { background: var(--report-accent-blue); } .report-card-title { font-size: 11.5px; text-transform: uppercase; letter-spacing: 1.2px; color: var(--report-text-muted); margin-bottom: 8px; font-weight: 700; } .report-card-value { font-size: 30px; font-weight: 800; color: var(--report-text-light); margin-bottom: 6px; letter-spacing: -0.5px; } .report-data-card.highlight-card .report-card-value { color: var(--report-accent-blue); } .report-card-desc { font-size: 13px; line-height: 1.55; color: var(--report-text-muted); } .mirror-grid { display: grid; grid-template-columns: 1fr; gap: 12px; } .mirror-card { background: linear-gradient(135deg, rgba(19, 27, 46, 0.9) 0%, rgba(11, 15, 23, 0.95) 100%); border: 1px solid rgba(255, 255, 255, 0.08); border-radius: 12px; padding: 16px 20px; position: relative; overflow: hidden; display: flex; align-items: flex-start; gap: 16px; transition: all 0.3s ease; } .mirror-card::before { content: ''; position: absolute; left: 0; top: 0; width: 3px; height: 100%; background: #38bdf8; } .mirror-card.highlighted { background: linear-gradient(135deg, rgba(212, 175, 55, 0.1) 0%, rgba(19, 27, 46, 0.9) 100%); border-color: rgba(212, 175, 55, 0.35); } .mirror-card.highlighted::before { background: var(--report-accent-blue); } .mirror-card.executive-avocado { background: linear-gradient(135deg, rgba(88, 130, 1, 0.12) 0%, rgba(19, 27, 46, 0.9) 100%); border: 1px solid rgba(88, 130, 1, 0.4); } .mirror-card.executive-avocado::before { background: var(--avocado); } .mirror-card-icon-box { width: 38px; height: 38px; border-radius: 8px; background: rgba(56, 189, 248, 0.1); display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: #38bdf8; font-size: 16px; } .mirror-card.executive-avocado .mirror-card-icon-box { background: rgba(88, 130, 1, 0.25); color: var(--avocado); } .mirror-card.highlighted .mirror-card-icon-box { background: rgba(212, 175, 55, 0.2); color: var(--report-accent-blue); } .mirror-card-content h4 { margin: 0 0 4px 0; font-size: 13px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.8px; } .mirror-card-content p { margin: 0; font-size: 13px; color: var(--text-muted); line-height: 1.55; font-weight: 400; } /* Stijl voor Slide 4 elementen */ .assessment-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; width: 100%; } .assessment-card { background: var(--report-card-bg); border: 1px solid var(--report-border); border-radius: 14px; padding: 24px; display: flex; flex-direction: column; justify-content: space-between; position: relative; overflow: hidden; box-shadow: inset 0 1px 0 rgba(255,255,255,0.04); } .assessment-card::before { content: ''; position: absolute; top: 0; left: 0; width: 3px; height: 100%; background: var(--avocado); } .assessment-card.consult-card::before { background: var(--report-accent-blue); } .qr-container { display: flex; align-items: center; gap: 16px; margin-top: 12px; background: rgba(11, 15, 23, 0.6); padding: 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.05); } #qrcodeCanvas img { display: block; border-radius: 6px; } .report-footer { display: flex; justify-content: space-between; align-items: center; border-top: 1px solid var(--report-border); padding-top: 18px; margin-top: 24px; z-index: 2; height: 54px; flex-shrink: 0; } .report-meta { font-size: 11.5px; letter-spacing: 1px; color: var(--avocado); font-weight: 700; text-transform: uppercase; } .report-nav-controls { display: flex; align-items: center; gap: 12px; } .report-dot-indicators { display: flex; gap: 8px; margin-right: 8px; } .report-dot { width: 6px; height: 6px; border-radius: 50%; background: rgba(255, 255, 255, 0.2); cursor: pointer; transition: all 0.3s ease; } .report-dot.active { background: var(--report-accent-blue); transform: scale(1.4); } .report-btn { background: rgba(255, 255, 255, 0.04); border: 1px solid rgba(255, 255, 255, 0.1); color: var(--report-text-light); padding: 6px 12px; border-radius: 8px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.2s ease; display: flex; align-items: center; justify-content: center; height: 34px; text-decoration: none; } .report-btn:hover { background: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.2); } .report-btn.share-btn { background: var(--avocado); border-color: var(--avocado); color: #ffffff; } .report-btn.share-btn:hover { background: #669601; border-color: #669601; color: #fff; } .report-btn.exit-btn { background: rgba(239, 68, 68, 0.1); border-color: rgba(239, 68, 68, 0.2); color: #ef4444; } .report-btn.exit-btn:hover { background: #ef4444; color: #fff; border-color: #ef4444; } .create-report-btn { color: #ffffff; border: 1px solid var(--avocado); border-radius: 10px; padding: 0 16px; height: 40px; font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; cursor: pointer; display: flex; align-items: center; justify-content: center; gap: 8px; background-color: var(--avocado); transition: all 0.3s ease; } .create-report-btn:hover { transform: translateY(-1px); background: #669601; } .page-external-note { width: 1280px; margin-top: 14px; text-align: right; font-size: 11.5px; color: var(--text-muted); font-weight: 500; letter-spacing: 0.2px; } .modal-overlay { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(5, 8, 15, 0.7); backdrop-filter: blur(6px); z-index: 10000; display: flex; justify-content: center; align-items: center; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; } .modal-overlay.active { opacity: 1; pointer-events: auto; } .modal-card { background: #111827; border: 1px solid rgba(88, 130, 1, 0.4); border-radius: 14px; width: 540px; padding: 28px; box-shadow: 0 25px 60px rgba(0, 0, 0, 0.5); transform: scale(0.95); transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); position: relative; } .modal-overlay.active .modal-card { transform: scale(1); } .modal-card h3 { margin: 0 0 14px 0; color: #f9fafb; font-size: 18px; font-weight: 800; text-transform: uppercase; border-bottom: 1px solid rgba(255,255,255,0.08); padding-bottom: 8px; letter-spacing: 0.5px; } .modal-body { font-size: 13.5px; line-height: 1.55; color: var(--text-muted); } .close-modal-btn { position: absolute; top: 20px; right: 24px; background: none; border: none; font-size: 20px; color: var(--text-muted); cursor: pointer; font-weight: 700; } .close-modal-btn:hover { color: var(--avocado); } </style> <script id="demandsync-report-query-bridge"> window.__DEMANDSYNC_QUERY__ = __DEMANDSYNC_QUERY_JSON__; (function () { var NativeURLSearchParams = window.URLSearchParams; function DemandSyncURLSearchParams(init) { if ( window.__DEMANDSYNC_QUERY__ && typeof init === 'string' && init === window.location.search ) { init = window.__DEMANDSYNC_QUERY__; } return new NativeURLSearchParams(init); } DemandSyncURLSearchParams.prototype = NativeURLSearchParams.prototype; window.URLSearchParams = DemandSyncURLSearchParams; })(); </script> <script id="demandsync-report-wordpress-parent-proxy"> (function () { var pendingCaptcha = {}; var pendingFetch = {}; var counter = 0; var NativeFetch = window.fetch.bind(window); var REPORT_CF7_ENDPOINT = 'https://newitera.nl/wp-json/contact-form-7/v1/contact-forms/158719/feedback'; var CONSULT_CF7_ENDPOINT = 'https://newitera.nl/wp-json/contact-form-7/v1/contact-forms/159717/feedback'; function uid(prefix) { counter++; return prefix + '-' + Date.now() + '-' + counter; } window.addEventListener('message', function (event) { if (event.source !== parent || !event.data) return; if (event.data.type === 'demandsync-recaptcha-response') { var job = pendingCaptcha[event.data.requestId]; if (!job) return; delete pendingCaptcha[event.data.requestId]; if (event.data.ok) job.resolve(event.data.token); else job.reject(new Error(event.data.error || 'reCAPTCHA failed.')); return; } if (event.data.type === 'demandsync-cf7-response') { var fetchJob = pendingFetch[event.data.requestId]; if (!fetchJob) return; delete pendingFetch[event.data.requestId]; if (!event.data.ok) { fetchJob.reject(new Error(event.data.error || 'CF7 request failed.')); return; } var result = event.data.result || {}; if (result.status && result.status !== 'mail_sent' && result.message) { result.message += ' [CF7 status: ' + result.status + ']'; } fetchJob.resolve({ ok: true, status: 200, json: function () { return Promise.resolve(result); } }); } }); // Compatibility API for the existing Report code. window.grecaptcha = { ready: function (callback) { if (typeof callback === 'function') callback(); }, execute: function () { return new Promise(function (resolve, reject) { var requestId = uid('ds-captcha'); pendingCaptcha[requestId] = { resolve: resolve, reject: reject }; parent.postMessage({ type: 'demandsync-recaptcha-request', requestId: requestId }, '*'); setTimeout(function () { if (!pendingCaptcha[requestId]) return; delete pendingCaptcha[requestId]; reject(new Error('reCAPTCHA token request timed out.')); }, 15000); }); } }; // Route only CF7 through the real WordPress parent. window.fetch = function (input, init) { var url = typeof input === 'string' ? input : (input && input.url ? input.url : ''); if ( (url !== REPORT_CF7_ENDPOINT && url !== CONSULT_CF7_ENDPOINT) || !init || !(init.body instanceof FormData) ) { return NativeFetch(input, init); } return new Promise(function (resolve, reject) { var requestId = uid('ds-cf7'); pendingFetch[requestId] = { resolve: resolve, reject: reject }; var entries = []; init.body.forEach(function (value, key) { entries.push([key, value]); }); parent.postMessage({ type: 'demandsync-cf7-request', requestId: requestId, endpoint: url, entries: entries }, '*'); setTimeout(function () { if (!pendingFetch[requestId]) return; delete pendingFetch[requestId]; reject(new Error('CF7 request timed out.')); }, 30000); }); }; })(); </script> </head> <body> <!-- GLOBALE ON-TOP WATERMARKS (EXACT OP DE HOOGSTE LAAG, WORDEN NIET MEEGENOMEN IN PDF) --> <div class="report-watermark-overlay" id="reportWatermarkBg"> <span class="watermark-main">DRAFT - DRAFT - DRAFT - DRAFT - DRAFT</span> </div> <div class="report-watermark-strip" id="reportWatermarkStrip" style="display: none;"></div> <div class="report-page-container" id="pdfReportContent"> <div class="report-header" id="reportHeader"> <div class="report-title-area"> <h2 id="report-sector-main-title">DemandSync™ Strategic Diagnostic: <span style="color: var(--avocado);">General Enterprise</span></h2> <div class="report-subtitle">Executive Corporate Reality & Operational Value Mirror</div> </div> <img src="https://newitera.nl/wp-content/uploads/2021/06/newitera-logo-white-uai-258x112.png" alt="NewItera Logo" style="height: 48px; opacity: 0.95;" onerror="this.style.display='none';"> </div> <!-- SLIDE 1: THE ACCURACY MIRAGE --> <div class="report-slide active-slide" id="rep-slide-1"> <div class="report-slide-content" style="width:100%;"> <div class="report-two-col"> <div class="report-text-block"> <h3>The Forecast <em>Accuracy Mirage</em></h3> <p>Most organizations evaluate S&OP effectiveness using <strong>aggregate forecast metrics</strong>. This top-level arithmetic creates a false sense of security, masking structural operational disconnects.</p> <ul class="report-bullet-list"> <li> <i class="fa-solid fa-triangle-exclamation"></i> <strong>The Aggregation Trap:</strong> High accuracy at the category/brand level naturally cancels out heavy over- and under-forecasting errors that crash operational stability. </li> <li> <i class="fa-solid fa-arrows-split-up-and-left"></i> <strong>SKU-Location Volatility:</strong> Execution occurs at the shelf and warehouse level. Your actual SKU-level error rate is historically estimated to be <strong><span id="slide1-sku-error">40%</span> higher</strong> than aggregate S&OP assumptions. </li> <li> <i class="fa-solid fa-ban"></i> <strong>Planner Bias Penalty:</strong> Planners routinely over-forecast to secure safety buffers, inadvertently driving systemic stock accumulation and sudden cash locks. </li> </ul> </div> <div class="report-visual-block"> <div class="mirror-grid"> <div class="mirror-card executive-avocado"> <div class="mirror-card-icon-box"><i class="fa-solid fa-chart-line"></i></div> <div class="mirror-card-content"> <h4>What Executive Meetings See</h4> <p>An elegant, smooth, aggregated trend line showing stable 75% to 80% category-level demand matching.</p> </div> </div> <div class="mirror-card highlighted"> <div class="mirror-card-icon-box"><i class="fa-solid fa-wave-square"></i></div> <div class="mirror-card-content"> <h4>What the Warehouse Feels</h4> <p>Severe volatility, frantic scheduling changes, wrong safety stocks, and sudden emergency re-handling.</p> </div> </div> </div> <div class="report-data-card"> <div class="report-card-title">Target Operational Improvement</div> <div class="report-card-value" id="slide1-err-reduction">40%</div> <div class="report-card-desc">Reduction in structural planning errors by substituting manual Excel padding with mathematically synchronized intelligence.</div> </div> </div> </div> </div> </div> <!-- SLIDE 2: THE COST OF DEFENSIVE PADDING--> <div class="report-slide" id="rep-slide-2"> <div class="report-slide-content" style="width:100%;"> <div class="report-two-col"> <div class="report-text-block"> <h3>The Direct Cost of <em>Defensive Padding</em></h3> <p>To shield the business from poor SKU forecasting, the organization acts defensively, keeping massive safety inventories. This safety margin creates immediate balance sheet leakages.</p> <ul class="report-bullet-list"> <li> <i class="fa-solid fa-receipt"></i> <strong>Carrying Waste:</strong> Storing <strong id="slide2-total-inv">€7.500.000</strong> in inventory drains your cash. At your loaded carrying rate, you pay <strong id="slide2-holding-cost" style="color: #38bdf8;">€1.650.000</strong> annually on storage, insurance, and degradation. </li> <li> <i class="fa-solid fa-hand-holding-dollar"></i> <strong>Double Indemnity:</strong> Despite excess safety inventory, you still lose <strong id="slide2-stockout-loss">€525.000</strong> in gross margin to stockouts yearly due to carrying the *wrong* items. </li> <li> <i class="fa-solid fa-truck-fast"></i> <strong>Emergency Surcharges:</strong> You burn <strong id="slide2-freight">€250.000</strong> in premium, unplanned, ad-hoc freight expedite fees just to chase delayed shipments. </li> </ul> </div> <div class="report-visual-block"> <div class="report-data-card highlight-card"> <div class="report-card-title">Total Yearly Opportunity Leakage</div> <div class="report-card-value" id="slide2-total-leakage">€2.425.000</div> <div class="report-card-desc">Calculated sum of active inventory holding costs, avoidable expedite penalties, and uncaptured stockout sales margins under the Status Quo.</div> </div> <div class="report-data-card secondary"> <div class="report-card-title">Monthly Cost of Inaction (COI)</div> <div class="report-card-value" id="slide2-coi-monthly">€202.083</div> <div class="report-card-desc">The structural penalty of delaying deployment. Cash that actively evaporates every 30 days the business operates on manual planning.</div> </div> </div> </div> </div> </div> <!-- SLIDE 3: THE STRATEGIC VALUE PATH --> <div class="report-slide" id="rep-slide-3"> <div class="report-slide-content" style="width:100%;"> <div class="report-two-col"> <div class="report-text-block"> <h3>The Strategic <em>Value Path</em></h3> <p>Unifying operational demand alignment doesn't just cut costs—it transforms cash flows. Transitioning to a synchronized mathematical layer yields immediate boardroom impact.</p> <ul class="report-bullet-list"> <li> <i class="fa-solid fa-money-bill-transfer"></i> <strong>One-Time Balance Sheet Release:</strong> Releasing defensive safety stocks instantly injects <strong id="slide3-freed-cash" style="color: var(--report-accent-blue);">€1.125.000</strong> back into operating cash reserves. </li> <li> <i class="fa-solid fa-shield-halved"></i> <strong>Structural EBITDA Uplift:</strong> Unlocks <strong id="slide3-annual-savings" style="color: var(--report-accent-blue);">€450.000</strong> in permanent annual cost reductions across logistics operations and gross margins. </li> <li> <i class="fa-solid fa-bolt"></i> <strong>Rapid Self-Funding Project:</strong> With a projected payback of <strong id="slide3-payback">X.X Months</strong>, the implementation pays for itself, self-funding strategic IT modernization. </li> </ul> </div> <div class="report-visual-block"> <div class="report-data-card highlight-card"> <div class="report-card-title">Hard EBITDA Contribution (Yearly)</div> <div class="report-card-value" id="slide3-ebitda-val">€450.000</div> <div class="report-card-desc">Permanent EBITDA boost representing structural margin recovery, waste containment, and freight spend discipline.</div> </div> <div class="report-data-card secondary"> <div class="report-card-title">Cash-to-Cash Cycle Acceleration</div> <div class="report-card-value" id="slide3-working-cap-val">€1.125.000</div> <div class="report-card-desc">One-time working capital extraction from previously frozen warehouse shelves. Relieves pressures on external corporate credit lines.</div> </div> </div> </div> </div> </div> <!-- SLIDE 4: MATURITY ASSESSMENT & EXECUTIVE CONSULTATION --> <div class="report-slide" id="rep-slide-4"> <div class="report-slide-content" style="width:100%;"> <div class="report-text-block" style="max-height: none; margin-bottom: 20px;"> <h3>Next Steps: Assessment & <em>Executive Consultation</em></h3> <p>Unlock your organization's full supply chain potential through digital maturity benchmarking and tailored strategic roadmaps.</p> </div> <div class="assessment-grid"> <div class="assessment-card"> <div> <div class="report-card-title" style="color: var(--avocado);">Interactive Self-Assessment</div> <h4 style="margin: 6px 0 10px 0; font-size: 18px; color: #f9fafb;">Benchmark Your Maturity</h4> <p style="font-size: 13.5px; color: var(--text-muted); line-height: 1.55; margin: 0;">Validate your organizational readiness. Scan the QR-code to initiate an instant maturity assessment against industry standards.</p> </div> <div class="qr-container"> <div id="qrcodeCanvas"></div> <div style="font-size: 12px; color: var(--text-muted); line-height: 1.4;"> <strong style="color: #f9fafb; display: block; margin-bottom: 2px;">Scan with mobile camera</strong> Opens Microsoft Forms readiness assessment directly. </div> </div> </div> <div class="assessment-card consult-card"> <div> <div class="report-card-title" style="color: var(--report-accent-blue);">Expert Support</div> <h4 style="margin: 6px 0 10px 0; font-size: 18px; color: #f9fafb;">Need Deeper Insights?</h4> <p style="font-size: 13.5px; color: var(--text-muted); line-height: 1.55; margin: 0 0 20px 0;">Connect with our enterprise supply chain strategists to review your diagnostic results, address friction points, and explore a tailored roadmap.</p> </div> <div> <button type="button" class="create-report-btn" onclick="openConsultModal()" style="width: 100%;"> <i class="fa-solid fa-calendar-check"></i> Request Executive Briefing </button> </div> </div> </div> </div> </div> <div class="report-footer" id="pdfReportFooter"> <div class="report-meta" id="reportFooterMeta">CONFIDENTIAL | DEMANDSYNC™ <span class="app-version-text-upper">V1.3</span></div> <div class="report-nav-controls" id="reportNavControls"> <div class="report-dot-indicators"> <div class="report-dot active" onclick="jumpToSlide(1)" id="dot-s1"></div> <div class="report-dot" onclick="jumpToSlide(2)" id="dot-s2"></div> <div class="report-dot" onclick="jumpToSlide(3)" id="dot-s3"></div> <div class="report-dot" onclick="jumpToSlide(4)" id="dot-s4"></div> </div> <button class="report-btn" id="btn-prev-slide" onclick="moveSlide(-1)"><i class="fa-solid fa-arrow-left"></i></button> <button class="report-btn" id="btn-next-slide" onclick="moveSlide(1)"><i class="fa-solid fa-arrow-right"></i></button> <button class="report-btn share-btn" onclick="openShareModal()"><i class="fa-solid fa-arrow-down"></i> Download</button> <a href="ROI Simulator.html" class="report-btn exit-btn"><i class="fa-solid fa-right-from-bracket"></i> Exit</a> </div> </div> </div> <!-- C-level mededeling buiten de container op de webpagina geplaatst --> <div class="page-external-note"> Utilize the download option to acquire an executive-grade, watermark-free strategic report tailored for C-level presentation. </div> <!-- SHARE PDF MODAL (DOWNLOAD) --> <div class="modal-overlay" id="shareModal" onclick="closeShareModal()"> <div class="modal-card" onclick="event.stopPropagation()"> <button class="close-modal-btn" onclick="closeShareModal()">⨉</button> <h3>Personalized Strategic Report</h3> <div class="modal-body"> <p style="font-size: 13.5px; line-height: 1.5; margin-bottom: 20px; color: var(--text-muted);"> Receive your Strategic ROI Presentation without watermarks by email. </p> <form id="shareForm" onsubmit="processShareReport(event)"> <div style="margin-bottom: 16px;"> <label for="inp-email" style="display:block; font-weight:700; font-size:12.5px; margin-bottom:6px; color:#f9fafb; text-transform:uppercase; letter-spacing:0.5px;"> Business Email: </label> <input type="email" id="inp-email" required style="width:100%; padding:12px 14px; border-radius:8px; border:1px solid rgba(255,255,255,0.15); background:#0b0f17; color:#f9fafb; font-size:14px; font-family:inherit; outline:none;" onfocus="this.style.borderColor='var(--avocado)'" onblur="this.style.borderColor='rgba(255,255,255,0.15)'"> </div> <div id="shareStatus" style="display:none; padding:10px 14px; border-radius:6px; font-size:13.5px; margin-bottom:14px; font-weight:600;"></div> <div style="display: flex; justify-content: flex-end; gap: 10px; margin-top: 8px;"> <button type="button" class="report-btn exit-btn" onclick="closeShareModal()" style="padding: 8px 16px; height: 40px;">Cancel</button> <button type="submit" id="btn-submit-share" class="create-report-btn" style="height: 40px; width: auto; padding: 0 20px;"> <i class="fa-solid fa-paper-plane"></i> Email Report </button> </div> </form> </div> </div> </div> <!-- CONSULTATION REQUEST MODAL (EXECUTIVE BRIEFING) --> <div class="modal-overlay" id="consultModal" onclick="closeConsultModal()"> <div class="modal-card" onclick="event.stopPropagation()"> <button class="close-modal-btn" onclick="closeConsultModal()">⨉</button> <h3>Schedule Executive Briefing</h3> <div class="modal-body"> <p style="font-size: 13.5px; line-height: 1.5; margin-bottom: 20px; color: var(--text-muted);"> Connect directly with our enterprise supply chain strategists to review your diagnostic results and discuss a tailored implementation roadmap. </p> <form id="consultForm" onsubmit="processConsultRequest(event)"> <div style="margin-bottom: 14px;"> <label for="consult-name" style="display:block; font-weight:700; font-size:12px; margin-bottom:4px; color:#f9fafb; text-transform:uppercase; letter-spacing:0.5px;">Full Name:</label> <input type="text" id="consult-name" required style="width:100%; padding:10px 14px; border-radius:8px; border:1px solid rgba(255,255,255,0.15); background:#0b0f17; color:#f9fafb; font-size:14px; font-family:inherit; outline:none;" onfocus="this.style.borderColor='var(--avocado)'" onblur="this.style.borderColor='rgba(255,255,255,0.15)'"> </div> <div style="margin-bottom: 14px;"> <label for="consult-company" style="display:block; font-weight:700; font-size:12px; margin-bottom:4px; color:#f9fafb; text-transform:uppercase; letter-spacing:0.5px;">Company Name:</label> <input type="text" id="consult-company" required style="width:100%; padding:10px 14px; border-radius:8px; border:1px solid rgba(255,255,255,0.15); background:#0b0f17; color:#f9fafb; font-size:14px; font-family:inherit; outline:none;" onfocus="this.style.borderColor='var(--avocado)'" onblur="this.style.borderColor='rgba(255,255,255,0.15)'"> </div> <div style="margin-bottom: 16px;"> <label for="consult-email" style="display:block; font-weight:700; font-size:12px; margin-bottom:4px; color:#f9fafb; text-transform:uppercase; letter-spacing:0.5px;">Business Email:</label> <input type="email" id="consult-email" required style="width:100%; padding:10px 14px; border-radius:8px; border:1px solid rgba(255,255,255,0.15); background:#0b0f17; color:#f9fafb; font-size:14px; font-family:inherit; outline:none;" onfocus="this.style.borderColor='var(--avocado)'" onblur="this.style.borderColor='rgba(255,255,255,0.15)'"> </div> <div id="consultStatus" style="display:none; padding:10px 14px; border-radius:6px; font-size:13.5px; margin-bottom:14px; font-weight:600;"></div> <div style="display: flex; justify-content: flex-end; gap: 10px; margin-top: 8px;"> <button type="button" class="report-btn exit-btn" onclick="closeConsultModal()" style="padding: 8px 16px; height: 40px;">Cancel</button> <button type="submit" id="btn-submit-consult" class="create-report-btn" style="height: 40px; width: auto; padding: 0 20px;"> <i class="fa-solid fa-paper-plane"></i> Confirm Briefing Request </button> </div> </form> </div> </div> </div> <script> const appVersion = 'v1.3'; let currentSlideIndex = 1; const totalSlides = 4; const industryBenchmarks = { default: { invRed: 0.15, expRed: 0.40, stockRed: 0.25, errorRed: 40, name: "General Enterprise" }, fmcg: { invRed: 0.12, expRed: 0.35, stockRed: 0.30, errorRed: 35, name: "FMCG & Fast-Moving Goods" }, retail: { invRed: 0.18, expRed: 0.50, stockRed: 0.40, errorRed: 45, name: "Retail & E-Commerce" }, automotive: { invRed: 0.22, expRed: 0.30, stockRed: 0.15, errorRed: 30, name: "Automotive & Heavy Industry" }, pharma: { invRed: 0.10, expRed: 0.45, stockRed: 0.35, errorRed: 50, name: "Pharma & Life Sciences" } }; const formatEuro = (val) => { return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(val); }; function loadReportDataFromURL() { const urlParams = new URLSearchParams(window.location.search); const sector = urlParams.get('sector') || 'default'; const revenue = parseFloat(urlParams.get('revenue')) || 50000000; const margin = parseFloat(urlParams.get('margin')) / 100 || 0.35; const inventory = parseFloat(urlParams.get('inventory')) || 7500000; const carryingRate = parseFloat(urlParams.get('carrying')) / 100 || 0.22; const expedite = parseFloat(urlParams.get('expedite')) || 250000; const stockoutRate = parseFloat(urlParams.get('stockout')) / 100 || 0.03; const bench = industryBenchmarks[sector] || industryBenchmarks['default']; // Calculations const currentCarryingCost = inventory * carryingRate; const currentStockoutLoss = revenue * stockoutRate * margin; const totalOpportunityLeakage = currentCarryingCost + expedite + currentStockoutLoss; const freedWorkingCapital = inventory * bench.invRed; const annualCarryingSavings = freedWorkingCapital * carryingRate; const annualLogisticsSavings = expedite * bench.expRed; const annualMarginRecovered = revenue * stockoutRate * bench.stockRed * margin; const totalAnnualHardSavings = annualCarryingSavings + annualLogisticsSavings + annualMarginRecovered; const softwareLicence = Math.max(30000, Math.min(160000, revenue * 0.0007)); const implementationInvestment = softwareLicence * 2.35; const paybackMonths = totalAnnualHardSavings > 0 ? (implementationInvestment / totalAnnualHardSavings) * 12 : 0; const costOfInactionMonthly = totalAnnualHardSavings / 12; // Populate DOM elements document.getElementById('report-sector-main-title').innerHTML = `DemandSync™ Strategic Diagnostic: <span style="color: var(--avocado);">${bench.name}</span>`; document.getElementById('slide1-sku-error').innerText = `${bench.errorRed}%`; document.getElementById('slide1-err-reduction').innerText = `${bench.errorRed}%`; document.getElementById('slide2-total-inv').innerText = formatEuro(inventory); document.getElementById('slide2-holding-cost').innerText = formatEuro(currentCarryingCost); document.getElementById('slide2-stockout-loss').innerText = formatEuro(currentStockoutLoss); document.getElementById('slide2-freight').innerText = formatEuro(expedite); document.getElementById('slide2-total-leakage').innerText = formatEuro(totalOpportunityLeakage); document.getElementById('slide2-coi-monthly').innerText = `${formatEuro(costOfInactionMonthly)} / mo`; document.getElementById('slide3-freed-cash').innerText = formatEuro(freedWorkingCapital); document.getElementById('slide3-annual-savings').innerText = formatEuro(totalAnnualHardSavings); document.getElementById('slide3-payback').innerText = `${paybackMonths.toFixed(1)} Months`; document.getElementById('slide3-ebitda-val').innerText = formatEuro(totalAnnualHardSavings); document.getElementById('slide3-working-cap-val').innerText = formatEuro(freedWorkingCapital); } function jumpToSlide(slideNum) { currentSlideIndex = slideNum; document.querySelectorAll('.report-slide').forEach(slide => slide.classList.remove('active-slide')); document.querySelectorAll('.report-dot').forEach(dot => dot.classList.remove('active')); document.getElementById(`rep-slide-${slideNum}`).classList.add('active-slide'); document.getElementById(`dot-s${slideNum}`).classList.add('active'); } function moveSlide(dir) { let target = currentSlideIndex + dir; if (target >= 1 && target <= totalSlides) { jumpToSlide(target); } } function openShareModal() { document.getElementById('shareStatus').style.display = 'none'; document.getElementById('shareModal').classList.add('active'); } function closeShareModal() { document.getElementById('shareModal').classList.remove('active'); } function openConsultModal() { document.getElementById('consultStatus').style.display = 'none'; document.getElementById('consultModal').classList.add('active'); } function closeConsultModal() { document.getElementById('consultModal').classList.remove('active'); } // Genereer QR-code via qrcode.min.js function renderQRCode() { const container = document.getElementById('qrcodeCanvas'); if (container && container.childElementCount === 0) { new QRCode(container, { text: "https://forms.cloud.microsoft/pages/responsepage.aspx?id=it5xF_U7Ukit4EptP74FVxZ8ROgtBe9Ll76zVZjcnqFUMElEUEM1ODBQNEFaQ0ZKTkxaWU5VTjI0Ri4u&route=shorturl", width: 95, height: 95, colorDark: "#0b0f17", colorLight: "#f9fafb", correctLevel: QRCode.CorrectLevel.M }); } } async function processConsultRequest(event) { event.preventDefault(); const name = document.getElementById('consult-name').value.trim(); const company = document.getElementById('consult-company').value.trim(); const email = document.getElementById('consult-email').value.trim(); const statusDiv = document.getElementById('consultStatus'); const submitBtn = document.getElementById('btn-submit-consult'); if (!name || !company || !email) return; statusDiv.style.display = 'block'; statusDiv.style.backgroundColor = 'rgba(88, 130, 1, 0.15)'; statusDiv.style.color = 'var(--avocado)'; statusDiv.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Submitting request...'; submitBtn.disabled = true; try { const recaptchaSiteKey = '6LfsmXgtAAAAAG_o-JNY1_EDjG9nFnKOg3UNeZbI'; const recaptchaToken = await new Promise((resolve, reject) => { if (typeof grecaptcha === 'undefined') { reject(new Error('reCAPTCHA failed.')); return; } grecaptcha.ready(async () => { try { const token = await grecaptcha.execute(recaptchaSiteKey, { action: 'contact_form' }); resolve(token); } catch (err) { reject(err); } }); }); const formData = new FormData(); formData.append('_wpcf7', '159717'); formData.append('_wpcf7_unit_tag', 'wpcf7-f159717-p1-o1'); formData.append('_wpcf7_locale', 'nl_NL'); formData.append('_wpcf7_recaptcha_response', recaptchaToken); formData.append('your-name', name); formData.append('your-company', company); formData.append('your-email', email); formData.append('request-type', 'Executive Briefing Consultation'); const apiUrl = 'https://newitera.nl/wp-json/contact-form-7/v1/contact-forms/159717/feedback'; const cf7Response = await fetch(apiUrl, {method: 'POST', body: formData}); const cf7Result = await cf7Response.json(); if (cf7Result.status !== 'mail_sent') { let errorMsg = cf7Result.message || 'Failed to submit request'; if (cf7Result.invalid_fields && cf7Result.invalid_fields.length > 0) { errorMsg += ' (' + cf7Result.invalid_fields.map(f => f.message).join(', ') + ')'; } throw new Error(errorMsg); } statusDiv.style.backgroundColor = 'rgba(88, 130, 1, 0.15)'; statusDiv.style.color = 'var(--avocado)'; statusDiv.innerHTML = `<i class="fa-solid fa-circle-check"></i> <strong>Requested!</strong> We will contact <u>${email}</u> within 24 hours.`; submitBtn.disabled = false; setTimeout(() => { closeConsultModal(); }, 3500); } catch (err) { console.error("Verzendfout:", err); statusDiv.style.backgroundColor = 'rgba(239, 68, 68, 0.15)'; statusDiv.style.color = '#dc2626'; statusDiv.innerHTML = `<i class="fa-solid fa-triangle-exclamation"></i> Failed: ${err.message || 'Try again'}`; submitBtn.disabled = false; } } async function processShareReport(event) { event.preventDefault(); const email = document.getElementById('inp-email').value.trim(); const statusDiv = document.getElementById('shareStatus'); const submitBtn = document.getElementById('btn-submit-share'); if (!email) return; statusDiv.style.display = 'block'; statusDiv.style.backgroundColor = 'rgba(56, 189, 248, 0.15)'; statusDiv.style.color = '#38bdf8'; statusDiv.innerHTML = '<i class="fa-solid fa-spinner fa-spin"></i> Generating and verifying...'; submitBtn.disabled = true; try { const recaptchaSiteKey = '6LfsmXgtAAAAAG_o-JNY1_EDjG9nFnKOg3UNeZbI'; const recaptchaToken = await new Promise((resolve, reject) => { if (typeof grecaptcha === 'undefined') { reject(new Error('reCAPTCHA failed.')); return; } grecaptcha.ready(async () => { try { const token = await grecaptcha.execute(recaptchaSiteKey, { action: 'contact_form' }); resolve(token); } catch (err) { reject(err); } }); }); const navControls = document.getElementById('reportNavControls'); navControls.style.display = 'none'; const slides = document.querySelectorAll('.report-slide'); const originalSlide = currentSlideIndex; const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'landscape', unit: 'px', format: [1280, 720] }); for (let idx = 0; idx < slides.length; idx++) { const slide = slides[idx]; const pageBox = document.createElement('div'); pageBox.style.width = '1280px'; pageBox.style.height = '720px'; pageBox.style.backgroundColor = 'var(--report-bg)'; pageBox.style.padding = '44px 64px 36px 64px'; pageBox.style.boxSizing = 'border-box'; pageBox.style.display = 'flex'; pageBox.style.flexDirection = 'column'; pageBox.style.justifyContent = 'space-between'; pageBox.style.position = 'fixed'; pageBox.style.top = '0'; pageBox.style.left = '-9999px'; pageBox.style.zIndex = '-9999'; const headerClone = document.getElementById('reportHeader').cloneNode(true); const slideClone = slide.cloneNode(true); slideClone.style.display = 'block'; const footerClone = document.createElement('div'); footerClone.className = 'report-footer'; footerClone.style.height = '48px'; footerClone.innerHTML = `<div class="report-meta">CONFIDENTIAL | DEMANDSYNC™ ${appVersion.toUpperCase()}</div><div class="report-meta">PAGE ${idx+1} OF ${totalSlides}</div>`; pageBox.appendChild(headerClone); pageBox.appendChild(slideClone); pageBox.appendChild(footerClone); document.body.appendChild(pageBox); const canvas = await html2canvas(pageBox, { scale: 3, useCORS: true, logging: false, width: 1280, height: 720 }); document.body.removeChild(pageBox); const imgData = canvas.toDataURL('image/jpeg'); if (idx > 0) { pdf.addPage([1280, 720], 'landscape'); } pdf.addImage(imgData, 'JPEG', 0, 0, 1280, 720); } const pdfBlob = pdf.output('blob'); const fileName = `DemandSync_Report_${email.split('@')[0]}.pdf`; const formData = new FormData(); formData.append('_wpcf7', '158719'); formData.append('_wpcf7_unit_tag', 'wpcf7-f158719-p1-o1'); formData.append('_wpcf7_locale', 'nl_NL'); formData.append('_wpcf7_recaptcha_response', recaptchaToken); formData.append('your-email', email); formData.append('report-pdf', pdfBlob, fileName); const apiUrl = 'https://newitera.nl/wp-json/contact-form-7/v1/contact-forms/158719/feedback'; const cf7Response = await fetch(apiUrl, {method: 'POST', body: formData}); const cf7Result = await cf7Response.json(); if (cf7Result.status !== 'mail_sent') { let errorMsg = cf7Result.message || 'Failed to send via email'; if (cf7Result.invalid_fields && cf7Result.invalid_fields.length > 0) { errorMsg += ' (' + cf7Result.invalid_fields.map(f => f.message).join(', ') + ')'; } throw new Error(errorMsg); } navControls.style.display = 'flex'; jumpToSlide(originalSlide); statusDiv.style.backgroundColor = 'rgba(88, 130, 1, 0.15)'; statusDiv.style.color = 'var(--avocado)'; statusDiv.innerHTML = `<i class="fa-solid fa-circle-check"></i> <strong>Sent!</strong> Report successfully sent to <u>${email}</u>.`; submitBtn.disabled = false; setTimeout(() => { closeShareModal(); }, 3000); } catch (err) { console.error("Verzendfout:", err); statusDiv.style.backgroundColor = 'rgba(239, 68, 68, 0.15)'; statusDiv.style.color = '#dc2626'; statusDiv.innerHTML = `<i class="fa-solid fa-triangle-exclamation"></i> Failed to send: ${err.message || 'Try again'}`; document.getElementById('reportNavControls').style.display = 'flex'; submitBtn.disabled = false; } } // Initialize report data and QR code on load loadReportDataFromURL(); renderQRCode(); </script> <script id="demandsync-report-back-bridge"> (function () { document.addEventListener('click', function (event) { var exitLink = event.target.closest('a.report-btn.exit-btn'); if (!exitLink) return; event.preventDefault(); event.stopImmediatePropagation(); parent.postMessage({ type: 'demandsync-back-to-simulator' }, '*'); }, true); })(); </script> </body> </html>
Privacy Preference Center
Privacy Preferences