40-clients/ucepsa/edge-oee-demo/sql/versions/096_lossintelligence_ucepsa_shadow_seed.sql
2026-07-16 12:27:29 +02:00

245 lines
12 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

BEGIN;
INSERT INTO mv_loss_intelligence.deployment_config (
tenant, site, scope_code, scope_name, mode,
planned_go_live_date, actual_go_live_at, timezone,
review_owner_primary, review_owner_secondary,
review_cadence, daily_review_limit, notes
)
VALUES (
'ucepsa', 'ucepsa_onpremise', 'CUTTERS', 'Cortadoras UCEPSA', 'SHADOW',
DATE '2026-10-01', NULL, 'Europe/Madrid',
'Jefe de producción', 'Gerencia / dirección',
'DAILY', 5,
'Infraestructura preparada entre julio y septiembre. El Ledger oficial se activará en kickoff; octubre es una previsión, no una activación automática.'
)
ON CONFLICT (tenant, site, scope_code)
DO UPDATE SET
scope_name = EXCLUDED.scope_name,
mode = 'SHADOW',
planned_go_live_date = EXCLUDED.planned_go_live_date,
timezone = EXCLUDED.timezone,
review_owner_primary = EXCLUDED.review_owner_primary,
review_owner_secondary = EXCLUDED.review_owner_secondary,
review_cadence = EXCLUDED.review_cadence,
daily_review_limit = EXCLUDED.daily_review_limit,
notes = EXCLUDED.notes,
updated_at = now();
INSERT INTO mv_loss_intelligence.loss_policies (
tenant, site, policy_code, source_type,
noise_below_s, aggregate_below_s, operator_individual_from_s,
aggregation_window_min, require_valid_order, require_closed_event,
exclude_planned_by_default, is_active, notes
)
VALUES (
'ucepsa', 'ucepsa_onpremise', 'CUTTER_STOPS_V1', 'MACHINE_STOP',
5, 300, 300,
15, true, true,
true, true,
'Política inicial de modo sombra. <5 s se conserva solo en raw; 5 s5 min se agrupa; >=5 min se trata individualmente. Validar con producción antes del kickoff.'
)
ON CONFLICT (tenant, site, policy_code)
DO UPDATE SET
noise_below_s = EXCLUDED.noise_below_s,
aggregate_below_s = EXCLUDED.aggregate_below_s,
operator_individual_from_s = EXCLUDED.operator_individual_from_s,
aggregation_window_min = EXCLUDED.aggregation_window_min,
require_valid_order = EXCLUDED.require_valid_order,
require_closed_event = EXCLUDED.require_closed_event,
exclude_planned_by_default = EXCLUDED.exclude_planned_by_default,
is_active = true,
notes = EXCLUDED.notes,
updated_at = now();
INSERT INTO mv_loss_intelligence.economic_parameters (
tenant, site, scope_code, machine_id, product_id,
parameter_code, parameter_value, unit, confidence,
includes_energy, valid_from, is_active, source_ref, approved_by, notes
)
SELECT
'ucepsa', 'ucepsa_onpremise', 'CUTTERS', NULL, NULL,
'CAPACITY_HOUR_EUR', 36.000000, 'EUR/h', 'LOW',
NULL, TIMESTAMPTZ '2026-06-18 00:00:00+02', true,
'Valor demostrativo usado en Edge-OEE', NULL,
'Pendiente de validación por gerencia. No se ha confirmado si incorpora energía.'
WHERE NOT EXISTS (
SELECT 1
FROM mv_loss_intelligence.economic_parameters
WHERE tenant = 'ucepsa' AND site = 'ucepsa_onpremise'
AND parameter_code = 'CAPACITY_HOUR_EUR' AND is_active = true
);
INSERT INTO mv_loss_intelligence.economic_parameters (
tenant, site, scope_code, machine_id, product_id,
parameter_code, parameter_value, unit, confidence,
includes_energy, valid_from, is_active, source_ref, approved_by, notes
)
SELECT
'ucepsa', 'ucepsa_onpremise', 'CUTTERS', NULL, NULL,
'ENERGY_VARIABLE_EUR_KWH', 0.128249, 'EUR/kWh', 'MEDIUM',
false, TIMESTAMPTZ '2026-06-10 00:00:00+02', true,
'Factura UCEPSA 6.1TD 10/06/202630/06/2026', NULL,
'Media ponderada de energía, red variable e impuesto eléctrico. No incluye reparto automático del término fijo de potencia.'
WHERE NOT EXISTS (
SELECT 1
FROM mv_loss_intelligence.economic_parameters
WHERE tenant = 'ucepsa' AND site = 'ucepsa_onpremise'
AND parameter_code = 'ENERGY_VARIABLE_EUR_KWH' AND is_active = true
);
INSERT INTO mv_edge_oee_ucepsa_prod.margin_cost_parameters (
tenant, site, scope_level, machine_id, product_default_code,
energy_cost_eur_per_kwh, material_cost_eur_per_kg,
machine_run_cost_eur_per_h, labor_cost_eur_per_h, overhead_cost_eur_per_h,
valid_from, valid_to, is_active, notes, created_at
)
SELECT
'ucepsa', 'ucepsa_onpremise', 'GLOBAL', NULL, NULL,
0.128249, NULL,
36.0000, NULL, NULL,
TIMESTAMPTZ '2026-06-10 00:00:00+02', NULL, true,
'Parámetros provisionales para Cost Readiness: 36 €/h y 0,128249 €/kWh. Mantener costes separados hasta confirmar si el coste/hora incluye energía.',
now()
WHERE NOT EXISTS (
SELECT 1
FROM mv_edge_oee_ucepsa_prod.margin_cost_parameters
WHERE tenant = 'ucepsa'
AND site = 'ucepsa_onpremise'
AND scope_level = 'GLOBAL'
AND is_active = true
);
INSERT INTO mv_loss_intelligence.action_catalog (
action_id, catalog_code, catalog_version, tenant, site,
loss_type, source_cause_code, action_type, action_candidate,
applies_when, does_not_apply_when, suggested_owner,
test_window, metric_before, metric_after, success_criteria,
risk_level, cost_to_test, source_ref, notes
)
VALUES
(
'CUTTER-BOBBIN-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'cambio_bobina', 'METHOD',
'Preparar la siguiente bobina y sus elementos auxiliares antes de que termine la bobina en curso.',
'["Paros repetidos por cambio de bobina", "Orden y referencia conocidas"]'::jsonb,
'["Cambio imprevisto por defecto de material", "Falta de espacio seguro para staging"]'::jsonb,
'Producción', '10 cambios de bobina comparables',
'Minutos de cambio de bobina por evento', 'Minutos de cambio de bobina por evento',
'Reducción >= 20% sin aumentar defectos ni incidencias de seguridad',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1',
'La acción final debe adaptarse al espacio y método real de UCEPSA.'
),
(
'CUTTER-SPLICE-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'fallo_empalme', 'METHOD',
'Separar el fallo de empalme por tipo de defecto y probar un estándar único de preparación durante 10 órdenes.',
'["Fallo de empalme repetido", "La causa puede observarse y clasificarse"]'::jsonb,
'["Avería mecánica ajena al empalme"]'::jsonb,
'Producción / métodos', '10 órdenes o 20 empalmes',
'Eventos y minutos perdidos por empalme', 'Eventos y minutos perdidos por empalme',
'Reducción >= 25% de minutos perdidos',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-SEAL-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'ajuste_sellado', 'METHOD',
'Crear y probar una ficha de parámetros de sellado por familia de referencia antes del arranque.',
'["Ajustes repetidos de mordazas, temperatura, presión o teflón", "Referencias repetitivas"]'::jsonb,
'["Avería mecánica", "Materia prima fuera de especificación no confirmada"]'::jsonb,
'Producción / calidad', '10 órdenes de la misma familia',
'Minutos de ajuste de sellado por orden', 'Minutos de ajuste de sellado por orden',
'Reducción >= 25% manteniendo calidad',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-MATERIAL-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'falta_material', 'ORGANIZATIONAL',
'No iniciar la orden hasta que bobina y material auxiliar estén físicamente preparados junto a la cortadora.',
'["Espera de material con orden cargada", "Material identificable antes del arranque"]'::jsonb,
'["Rotura o rechazo de material durante producción"]'::jsonb,
'Producción / logística', '10 órdenes comparables',
'Minutos de espera de material por orden', 'Minutos de espera de material por orden',
'Reducción >= 50% de la espera de material',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-PHOTO-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'limpieza_fotocelula', 'TECHNICAL',
'Aplicar una comprobación y limpieza breve de fotocélula antes del turno en las referencias con recurrencia.',
'["Limpieza de fotocélula repetida", "Patrón concentrado en máquina o producto"]'::jsonb,
'["Fallo eléctrico o sustitución necesaria del sensor"]'::jsonb,
'Producción / mantenimiento', '2 semanas',
'Eventos y minutos por limpieza de fotocélula', 'Eventos y minutos por limpieza de fotocélula',
'Reducción >= 30% de eventos sin aumentar tiempo de arranque',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-FORMAT-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'cambio_formato', 'METHOD',
'Separar preparación externa e interna del cambio de formato y preparar fuera de máquina todo lo posible.',
'["Cambios de formato repetidos", "Se pueden comparar referencias o familias similares"]'::jsonb,
'["Cambio excepcional no repetible"]'::jsonb,
'Producción / métodos', '10 cambios comparables',
'Minutos de cambio de formato', 'Minutos de cambio de formato',
'Reducción >= 20% del tiempo mediano',
'LOW', 'MEDIUM', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-MECH-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'averia_mecanica', 'TECHNICAL',
'Seleccionar la avería mecánica repetida con mayor coste, intervenir sobre el componente y comprobar recurrencia.',
'["Misma avería o síntoma repetido", "Existe responsable de mantenimiento"]'::jsonb,
'["Evento único sin diagnóstico", "Paro no confirmado como avería"]'::jsonb,
'Mantenimiento', '30 días o siguiente ciclo de recurrencia',
'Eventos, minutos y coste de la avería seleccionada', 'Eventos, minutos y coste tras la intervención',
'Cero recurrencias o reducción >= 50% del tiempo perdido',
'MEDIUM', 'MEDIUM', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-INSTR-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'espera_instrucciones', 'ORGANIZATIONAL',
'Definir antes del turno qué órdenes, referencias y decisiones requieren autorización para evitar esperas con máquina ocupada.',
'["Espera de instrucciones repetida", "Decisión previsible antes del arranque"]'::jsonb,
'["Incidencia de seguridad o calidad que exige autorización específica"]'::jsonb,
'Jefe de producción', '2 semanas',
'Minutos de espera de instrucciones por orden', 'Minutos de espera de instrucciones por orden',
'Reducción >= 50% de la espera',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1', NULL
),
(
'CUTTER-OTHER-001', 'LI-CUTTER-STOPS', '0.1', 'ucepsa', 'ucepsa_onpremise',
'MACHINE_STOP', 'otro', 'DATA_QUALITY',
'Revisar semanalmente los paros clasificados como Otro y crear una causa nueva si un patrón se repite.',
'["Uso de Otro superior al 10% de minutos o eventos"]'::jsonb,
'["Evento aislado sin patrón"]'::jsonb,
'Producción / MESAVAULT', '4 semanas',
'Porcentaje de eventos y minutos en Otro', 'Porcentaje de eventos y minutos en Otro',
'Otro < 10% de eventos y minutos',
'LOW', 'LOW', 'MESAVAULT Action Catalog Cutter v0.1',
'Es una acción de calidad de dato, no una mejora de proceso por sí misma.'
)
ON CONFLICT (action_id)
DO UPDATE SET
catalog_code = EXCLUDED.catalog_code,
catalog_version = EXCLUDED.catalog_version,
loss_type = EXCLUDED.loss_type,
source_cause_code = EXCLUDED.source_cause_code,
action_type = EXCLUDED.action_type,
action_candidate = EXCLUDED.action_candidate,
applies_when = EXCLUDED.applies_when,
does_not_apply_when = EXCLUDED.does_not_apply_when,
suggested_owner = EXCLUDED.suggested_owner,
test_window = EXCLUDED.test_window,
metric_before = EXCLUDED.metric_before,
metric_after = EXCLUDED.metric_after,
success_criteria = EXCLUDED.success_criteria,
risk_level = EXCLUDED.risk_level,
cost_to_test = EXCLUDED.cost_to_test,
source_ref = EXCLUDED.source_ref,
notes = EXCLUDED.notes,
is_active = true,
updated_at = now();
COMMIT;