monitor-ml-ddmrp / database /schema_demand.sql
dyandun's picture
feat: pipeline de forecasting de demanda (Fase 2 - Opción B)
0f7aaa7
Raw
History Blame Contribute Delete
2.48 kB
-- ============================================================
-- schema_demand.sql — monitor-ml-aceites
-- Tablas para el pipeline de demanda (Fase 2)
-- Ejecutar en el SQL Editor de Supabase (una sola vez)
-- ============================================================
-- ─── Forecasts de demanda ─────────────────────────────────
-- Almacena predicciones Prophet por producto.
-- Generadas localmente con train_demand_model.py
-- El agente demand_monitor las lee desde Supabase.
CREATE TABLE IF NOT EXISTS demand_forecasts (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
forecast_run_at TIMESTAMPTZ DEFAULT NOW(),
product TEXT NOT NULL, -- nombre del producto
target_date DATE NOT NULL, -- fecha central de la predicción
horizon VARCHAR(20) NOT NULL, -- 'week_1' | 'month_1' | 'month_2' | 'month_3'
predicted_qty DECIMAL(14,2) NOT NULL, -- cantidad predicha (unidades/kg/litros según datos)
lower_bound DECIMAL(14,2), -- intervalo de confianza 80% inferior
upper_bound DECIMAL(14,2), -- intervalo de confianza 80% superior
unit TEXT DEFAULT 'units', -- unidad de la cantidad ('units', 'kg', 'liters')
model_name TEXT DEFAULT 'sales_demand_forecast',
data_points INTEGER, -- puntos de datos usados para entrenar
mape DECIMAL(6,2), -- error del modelo (%)
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_demand_forecasts_run
ON demand_forecasts (forecast_run_at DESC);
CREATE INDEX IF NOT EXISTS idx_demand_forecasts_product
ON demand_forecasts (product, horizon, forecast_run_at DESC);
-- ─── Log de importaciones Excel ───────────────────────────
-- Registra cada archivo importado con el mapeo de columnas detectado.
CREATE TABLE IF NOT EXISTS excel_imports (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
filename TEXT NOT NULL,
imported_at TIMESTAMPTZ DEFAULT NOW(),
rows_imported INTEGER,
column_mapping JSONB, -- mapeo detectado por Claude {date, product, quantity, ...}
products_found JSONB, -- lista de productos únicos encontrados
status TEXT DEFAULT 'success',
notes TEXT
);