/* Serving mart: ICE certified Coffee C warehouse stocks, analytics-ready. */ /* Adds 30-day rolling average, week-over-week change, and drawdown from */ /* 52-week high. Physical supply indicator used alongside S/D and positioning. */ /* "Certified stocks" = coffee graded and stamped as eligible for delivery */ /* against ICE Coffee C futures — traders watch this as a squeeze indicator. */ /* Grain: one row per report_date. */
MODEL (
  name serving.ice_warehouse_stocks,
  kind INCREMENTAL_BY_TIME_RANGE (
    time_column report_date
  ),
  grain (
    report_date
  ),
  start '2000-01-01',
  cron '@daily'
);

WITH base AS (
  SELECT
    f.report_date,
    f.total_certified_bags,
    f.pending_grading_bags,
    f.total_certified_bags /* Week-over-week change (compare to 7 calendar days ago via LAG over ordered rows) */ /* Using LAG(1) since data is daily: compares to previous trading/reporting day */ - LAG(f.total_certified_bags, 1) OVER (ORDER BY f.report_date) AS wow_change_bags,
    ROUND(
      AVG(f.total_certified_bags::DOUBLE) OVER (ORDER BY f.report_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW),
      0
    ) AS avg_30d_bags, /* 30-day rolling average (smooths daily noise) */
    MAX(f.total_certified_bags) OVER (ORDER BY f.report_date ROWS BETWEEN 364 PRECEDING AND CURRENT ROW) AS high_52w_bags, /* 52-week high (365 calendar days ≈ 252 trading days; use 365-row window as proxy) */
    ROUND(
      (
        f.total_certified_bags::DOUBLE - MAX(f.total_certified_bags) OVER (ORDER BY f.report_date ROWS BETWEEN 364 PRECEDING AND CURRENT ROW)::DOUBLE
      ) / NULLIF(
        MAX(f.total_certified_bags) OVER (ORDER BY f.report_date ROWS BETWEEN 364 PRECEDING AND CURRENT ROW)::DOUBLE,
        0
      ) * 100,
      2
    ) AS drawdown_from_52w_high_pct /* Drawdown from 52-week high (pct below peak — squeeze indicator) */
  FROM foundation.fct_ice_warehouse_stocks AS f
  WHERE
    f.report_date BETWEEN @start_ds AND @end_ds
)
SELECT
  b.report_date,
  d.commodity_name,
  d.ice_stock_report_code,
  b.total_certified_bags,
  b.pending_grading_bags,
  b.wow_change_bags,
  b.avg_30d_bags,
  b.high_52w_bags,
  b.drawdown_from_52w_high_pct
FROM base AS b
CROSS JOIN foundation.dim_commodity AS d
WHERE
  d.ice_stock_report_code = 'COFFEE-C'
ORDER BY
  b.report_date