INSERT INTO consolidado_prefacturas_electronicas (
    prefacturaId, mes, anio, cebe, dependencia, ciudad, marca, regional, empresa, estado,
    valor_total,
    equipos_inalambricos, equipos_alambricos,
    alarmas_incendios, alarmas_intrusion,
    subtotal_incendios, subtotal_intrusion,
    total_dispositivo_fijo,
    paneles_incendios, subtotal_panel_incendio,
    paneles_intrusion, subtotal_panel_intrusion,
    intrusion_incendios, subtotal_intrusion_incendios,
    total_monitoreo,
    equipos_inalambricos_variables, equipos_alambricos_variables,
    alarmas_incendios_variables, alarmas_intrusion_variables,
    subtotal_incendios_variables, subtotal_intrusion_variables,
    fallos_variables, dias_fallos_variables, subtotal_fallos_variables,
    fijos_proporcional_variable, dias_proporcional_variables, subtotal_proporcional_variable,
    terminacion_variable, dias_terminacion, subtotal_terminacion,
    total_variable, observacion
)
SELECT 
    pe.id,
    pe.mes,
    pe.ano,
    cc.cebe,
    cc.nombre,
    pe.ciudad,
    pe.marca,
    pe.regional,
    emp.nombre,
    pe.estado,

    -- TOTAL GENERAL
    (
        COALESCE(pv.total_variable, 0)
        + COALESCE(pm.total_monitoreo, 0)
        + COALESCE(pdf.total_fijo, 0)
    ) AS valor_total,

    -- FIJOS
    COALESCE(pdf.equipos_inalambricos, 0),
    COALESCE(pdf.equipos_alambricos, 0),
    COALESCE(pdf.alarmas_incendio, 0),
    COALESCE(pdf.alarmas_intrusion, 0),
    COALESCE(pdf.subtotal_incendio, 0),
    COALESCE(pdf.subtotal_intrusion, 0),
    COALESCE(pdf.total_fijo, 0),

    -- MONITOREO
    COALESCE(pm.panel_incendio, 0),
    COALESCE(pm.subtotal_panel_incendio, 0),
    COALESCE(pm.panel_intrusion, 0),
    COALESCE(pm.subtotal_panel_intrusion, 0),
    COALESCE(pm.intrusion_incendio, 0),
    COALESCE(pm.subtotal_intrusion_incendio, 0),
    COALESCE(pm.total_monitoreo, 0),

    -- VARIABLES
    COALESCE(pv.equipos_inalambrico, 0),
    COALESCE(pv.equipos_alambrico, 0),
    COALESCE(pv.alarma_incendio, 0),
    COALESCE(pv.alarma_intrusion, 0),
    COALESCE(pv.subtotal_incendio, 0),
    COALESCE(pv.subtotal_intrusion, 0),

    COALESCE(pv.fallos, 0),
    COALESCE(pv.dias_fallos, 0),
    COALESCE(pv.subtotal_fallos, 0),

    COALESCE(pv.fijo_proporcional, 0),
    COALESCE(pv.dias_proporcional, 0),
    COALESCE(pv.subtotal_proporcional, 0),

    COALESCE(pv.terminacion, 0),
    COALESCE(pv.dias_terminacion, 0),
    COALESCE(pv.subtotal_terminacion, 0),

    COALESCE(pv.total_variable, 0),
    pv.descripcion

FROM prefactura_electronica pe

LEFT JOIN centro_costo cc 
    ON pe.centro_costo_codigo = cc.codigo

LEFT JOIN empresa emp 
    ON pe.empresa = emp.nit

--AGRUPACIÓN FIJOS
LEFT JOIN (
    SELECT 
        id_prefactura_electronica,
        SUM(IF(sistema = 'Inalámbrico', 1, 0)) equipos_inalambricos,
        SUM(IF(sistema = 'Alambrado', 1, 0)) equipos_alambricos,
        SUM(IF(id_tipo_alarma = 1, 1, 0)) alarmas_incendio,
        SUM(IF(id_tipo_alarma = 2, 1, 0)) alarmas_intrusion,
        SUM(IF(id_tipo_alarma = 1, REPLACE(valor_arrendamiento_mensual,'.',''), 0)) subtotal_incendio,
        SUM(IF(id_tipo_alarma = 2, REPLACE(valor_arrendamiento_mensual,'.',''), 0)) subtotal_intrusion,
        SUM(REPLACE(valor_arrendamiento_mensual,'.','')) total_fijo
    FROM prefactura_dispositivo_fijo_electronico
    GROUP BY id_prefactura_electronica
) pdf ON pdf.id_prefactura_electronica = pe.id

--AGRUPACIÓN MONITOREO
LEFT JOIN (
    SELECT 
        id_prefactura_electronica,
        SUM(IF(id_sistema_monitoreo = 1, 1, 0)) panel_incendio,
        SUM(IF(id_sistema_monitoreo = 1, valor_total, 0)) subtotal_panel_incendio,
        SUM(IF(id_sistema_monitoreo = 2, 1, 0)) panel_intrusion,
        SUM(IF(id_sistema_monitoreo = 2, valor_total, 0)) subtotal_panel_intrusion,
        SUM(IF(id_sistema_monitoreo = 4, 1, 0)) intrusion_incendio,
        SUM(IF(id_sistema_monitoreo = 4, valor_total, 0)) subtotal_intrusion_incendio,
        SUM(valor_total) total_monitoreo
    FROM prefactura_monitoreo
    GROUP BY id_prefactura_electronica
) pm ON pm.id_prefactura_electronica = pe.id

--AGRUPACIÓN VARIABLES
LEFT JOIN (
    SELECT 
        id_prefactura_electronica,

        SUM(IF(sistema = 'Inalámbrico', 1, 0)) equipos_inalambrico,
        SUM(IF(sistema = 'Alambrado', 1, 0)) equipos_alambrico,
        SUM(IF(id_tipo_alarma = 1, 1, 0)) alarma_incendio,
        SUM(IF(id_tipo_alarma = 2, 1, 0)) alarma_intrusion,

        SUM(IF(id_tipo_alarma = 1, valor_novedad, 0)) subtotal_incendio,
        SUM(IF(id_tipo_alarma = 2, valor_novedad, 0)) subtotal_intrusion,

        SUM(IF(id_tipo_servicio = 1, 1, 0)) fallos,
        SUM(IF(id_tipo_servicio = 1, total_dias, 0)) dias_fallos,
        SUM(IF(id_tipo_servicio = 1, valor_novedad, 0)) subtotal_fallos,

        SUM(IF(id_tipo_servicio = 2, 1, 0)) fijo_proporcional,
        SUM(IF(id_tipo_servicio = 2, total_dias, 0)) dias_proporcional,
        SUM(IF(id_tipo_servicio = 2, valor_novedad, 0)) subtotal_proporcional,

        SUM(IF(id_tipo_servicio = 4, 1, 0)) terminacion,
        SUM(IF(id_tipo_servicio = 4, total_dias, 0)) dias_terminacion,
        SUM(IF(id_tipo_servicio = 4, valor_novedad, 0)) subtotal_terminacion,

        (
            SUM(IF(id_tipo_servicio = 2, valor_novedad, 0)) -
            (SUM(IF(id_tipo_servicio = 4, valor_novedad, 0)) +
             SUM(IF(id_tipo_servicio = 1, valor_novedad, 0)))
        ) total_variable,

        GROUP_CONCAT(explicacion) descripcion

    FROM prefactura_dispositivo_variable_electronico
    GROUP BY id_prefactura_electronica
) pv ON pv.id_prefactura_electronica = pe.id

--WHERE pe.id = id

AND NOT EXISTS (
    SELECT 1 
    FROM consolidado_prefacturas_electronicas c
    WHERE c.prefacturaId = pe.id
);