245 lines
12 KiB
PL/PgSQL
245 lines
12 KiB
PL/PgSQL
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 s–5 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/2026–30/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;
|