DammBridge UK Report
Executive Summary
DammBridge UK is a local, privacy-safe commercial planning demo for Damm's UK business. It cleans the provided UK sales and promotion workbooks, forecasts May-December 2026, compares the forecast against a 2025 target baseline, explains the drivers, and recommends ranked actions with expected recovered hectolitres and GBP impact.
The project is designed for a live hackathon demo: it has a TypeScript dashboard, a FastAPI backend, a deterministic local analyst fallback, and an optional Hugging Face-powered Commercial Copilot.
Business Problem
Damm needs a way to answer four practical questions for the UK market:
- How much volume are we likely to sell from May to December 2026?
- Where are we above or below target?
- Why are those deviations happening?
- Which commercial actions should we take first?
The demo turns this into one workflow:
forecast -> target gap -> driver explanation -> ranked action -> expected recovered Hl and GBP
Data And Privacy
Raw Damm files are never committed to Git. They stay on the local machine and are read from DAMM_RAW_DATA_DIR.
Expected private files:
UK DATA.xlsxDamm Trade Plan - promotions.xlsx
The processing step:
- filters to the UK using the customer dimension, mainly
Cod. Pais == GB - joins customer and material dimensions using cleaned codes
- removes non-positive-HL rows from demand modeling so returns/credits do not create negative demand
- anonymizes customer and retailer names
- aggregates outputs to segment level before display
The dashboard hides target-0 rows in forecast-vs-target visuals because those rows do not have a meaningful budget baseline.
System Architecture
Raw workbooks
-> marketpulse prepare
-> marketpulse enrich
-> marketpulse train
-> marketpulse forecast
-> marketpulse recommend
-> marketpulse impact
-> FastAPI + TypeScript dashboard
Main modules:
src/marketpulse/data_pipeline.py: workbook loading, UK filtering, joins, anonymization, aggregationsrc/marketpulse/enrichment.py: bank holidays, weather proxy, CPI, trends, sports, festivalssrc/marketpulse/forecasting.py: transparent forecast engine and validationsrc/marketpulse/recommendations.py: ranked commercial action logicsrc/marketpulse/impact.py: gross-price-per-HL value estimates and scenario simulationsrc/marketpulse/web_api.py: FastAPI backend and Copilot endpointfrontend/: polished TypeScript dashboard
Forecast Method
The model is intentionally explainable rather than black-box. For each channel, subchannel, and brand segment:
forecast_volume = max(0, base_volume * promo_multiplier * external_multiplier)
Base volume blends prior-year seasonality and recent momentum:
base_volume = (0.60 * same_month_last_year + 0.40 * recent_3_month_average) * seasonal_factor
Promotion uplift is learned by brand from observed sales behavior and bounded to avoid unrealistic claims. External context includes UK bank holidays, London weather proxy, CPI pressure, sports events, festivals, and Google Trends fallback.
Gross Price And GBP Impact
The organizer guidance is used directly:
gross_price_per_hl = gross_sales / hectolitres_sold
For segment outputs, DammBridge uses:
gross_price_per_hl = sum(gross_sales) / sum(hl)
This weighted method avoids the distortion of averaging row-level prices equally. GBP impact is then:
estimated_gross_value = hectolitres * gross_price_per_hl
Validation And Results
The model is validated on January-April 2026 actuals.
| Metric | Result | Meaning |
|---|---|---|
| Monthly WAPE | 16.5% | Four monthly totals; best number for commercial planning discussions |
| Segment WAPE | 33.6% | 204 channel x subchannel x brand rows; disclosed for transparency |
Current generated May-December 2026 outputs:
| Metric | Value |
|---|---|
| Forecast total | 685,761 Hl |
| Forecast gross value | GBP 158M |
| Gap vs 2025 target | +234,368 Hl (+52%) |
| Ranked recommendations | 20 |
| Below-target segment pockets | 66 |
| Best scenario recovery | 2,291 Hl / GBP 465k |
The headline +52% is the full generated forecast. The dashboard also filters out target-0 rows for budget-comparable visuals, so some displayed KPI totals can be lower by design.
Recommendation Engine
Recommendations are created from below-target segments. The score prioritizes:
- size of the negative gap
- expected recoverability
- missing promotion calendar coverage
- price pressure
- external demand context
The generated actions are intentionally practical: fill a promotion gap, upweight an existing promotion, review price architecture, shift demand creation earlier, or focus sales execution on a weak segment.
Commercial Copilot
The Commercial Copilot answers questions from compact anonymized context. It never sends raw workbooks, customer names, or retailer names.
Behavior:
- without
HF_TOKEN: deterministic local analyst mode - with
HF_TOKEN: Hugging Face chat-completions route usingHF_MODEL, defaulting to Qwen 2.5 72B Instruct - if Hugging Face fails: graceful fallback to local analyst mode
Limitations
- The target is a proxy: same segment and same month in 2025, because no separate official budget file was provided.
- Historical sales are monthly, so weekly pacing is an allocation view rather than true weekly forecasting.
- External future signals such as sports and festivals are curated assumptions, not guaranteed outcomes.
- GBP values are gross-value decision proxies, not final audited finance numbers.
Why This Is Demo-Ready
DammBridge UK is not just a dashboard. It is a reproducible decision system: local data loading, explainable forecasting, documented assumptions, ranked actions, financial impact, an interactive simulator, and a Commercial Copilot. The demo can be run end-to-end from raw files on another machine using the README setup instructions.
Built With
- fastapi
- huggingface
- typescript
Log in or sign up for Devpost to join the conversation.