(function () {
        window.isDirty = false;
        window.addEventListener('beforeunload', function (e) {
            if (window.isDirty) {
                e.preventDefault();
                e.returnValue = 'Tienes cambios sin guardar en el registro de inventario. ¿Seguro que quieres salir?';
            }
        });

        function setDirty() { window.isDirty = true; }
        function clearDirty() { window.isDirty = false; }

        // Escuchar cambios en el formulario
        document.querySelectorAll('#addItemForm input, #addItemForm select, #addItemForm textarea').forEach(el => {
            el.addEventListener('input', setDirty);
            el.addEventListener('change', setDirty);
        });
        const searchInput = document.getElementById('inv-buscar-cabys');
        const resultsDiv  = document.getElementById('cabys-results');
        const cabysInput  = document.getElementById('inv-cabys-numero');
        const nombreInput = document.getElementById('inv-nombre');
        const ivaSelect   = document.getElementById('inv-iva');
        const statusTxt   = document.getElementById('cabys-status-txt');
        const statusEl    = document.getElementById('cabys-status');

        // Verificar disponibilidad de la API
        verificarAPICABYS();

        async function verificarAPICABYS() {
            try {
                const response = await fetch(`${CONFIG.API_BASE_URL}${CONFIG.ENDPOINTS.HEALTH}`);
                const data = await response.json();
                if (data.status === 'ok') {
                    statusEl.style.color = '#10b981';
                    statusTxt.innerHTML = '<i class="fas fa-check-circle" style="margin-right:4px;"></i>API CABYS del Ministerio de Hacienda conectada';
                }
            } catch (error) {
                statusEl.style.color = '#ef4444';
                statusTxt.innerHTML = '<i class="fas fa-exclamation-triangle" style="margin-right:4px;"></i>Error: API CABYS no disponible';
            }
        }

        let timeoutBusqueda = null;
        searchInput.addEventListener('input', function () {
            const q = this.value.trim();
            resultsDiv.innerHTML = '';
            
            if (q.length < 2) { 
                resultsDiv.style.display = 'none'; 
                return; 
            }

            // Debounce para evitar muchas peticiones
            clearTimeout(timeoutBusqueda);
            timeoutBusqueda = setTimeout(async () => {
                try {
                    resultsDiv.innerHTML = '<div style="padding:15px; text-align:center; color:#94a3b8; font-size:0.8rem;"><i class="fas fa-spinner fa-spin"></i> Buscando...</div>';
                    resultsDiv.style.display = 'block';

                    const response = await fetch(`${CONFIG.API_BASE_URL}${CONFIG.ENDPOINTS.CABYS}/search?q=${encodeURIComponent(q)}&limit=30`);
                    const data = await response.json();

                    resultsDiv.innerHTML = '';

                    if (!data.success || !data.results || data.results.length === 0) { 
                        resultsDiv.innerHTML = '<div style="padding:15px; text-align:center; color:#94a3b8; font-size:0.8rem;">No se encontraron resultados</div>';
                        resultsDiv.style.display = 'block';
                        return; 
                    }

                    data.results.forEach(m => {
                        const div = document.createElement('div');
                        div.className = 'autocomplete-item';
                        div.innerHTML = `
                            <div class="autocomplete-info">
                                <div class="autocomplete-name">${m.descripcion}</div>
                                <div class="autocomplete-subinfo">
                                    <span class="autocomplete-badge">${m.codigo}</span>
                                    <span>IVA Sugerido: ${m.impuesto}%</span>
                                </div>
                            </div>
                            <div class="autocomplete-tax">${m.impuesto}% IVA</div>
                        `;
                        div.addEventListener('click', () => {
                            // ── Auto-completar TODOS los campos posibles ──
                            cabysInput.value = m.codigo;
                            nombreInput.value = m.descripcion;
                            searchInput.value = m.descripcion;
                            ivaSelect.value = String(m.impuesto);
                            const tipoImp = document.getElementById('inv-tipo-impuesto');
                            if (tipoImp) tipoImp.value = '01';

                            // Unidad de medida inteligente
                            const desc = m.descripcion.toLowerCase();
                            const unidadSel = document.getElementById('inv-unidad-medida');
                            if (/servicio|consultor|asesor|mantenimiento|reparaci|instalaci|limpieza|capacitaci|transporte|diseño|desarrollo|auditor/i.test(desc)) {
                                unidadSel.value = 'Svc';
                            } else if (/kg|kilogram/i.test(desc)) {
                                unidadSel.value = 'Kg';
                            } else if (/litro|galon/i.test(desc)) {
                                unidadSel.value = 'L';
                            } else if (/metro|m²|m2/i.test(desc)) {
                                unidadSel.value = 'm';
                            } else if (/gramo/i.test(desc)) {
                                unidadSel.value = 'g';
                            } else if (/mililitro|ml/i.test(desc)) {
                                unidadSel.value = 'ml';
                            } else {
                                unidadSel.value = 'Unid';
                            }

                            const prefix = m.descripcion.replace(/[^A-Za-z]/g, '').substring(0, 3).toUpperCase();
                            const suffix = m.codigo.slice(-4);
                            document.getElementById('inv-codigo-interno').value = `${prefix}-${suffix}`;

                            resultsDiv.style.display = 'none';
                            toggleCtxPanels();

                            ['inv-cabys-numero','inv-nombre','inv-iva','inv-unidad-medida','inv-tipo-impuesto','inv-codigo-interno'].forEach(id => {
                                const el = document.getElementById(id);
                                if (el) {
                                    el.style.transition = 'box-shadow 0.3s';
                                    el.style.boxShadow = '0 0 0 3px rgba(59,130,246,0.25)';
                                    setTimeout(() => el.style.boxShadow = '', 1500);
                                }
                            });
                        });
                        resultsDiv.appendChild(div);
                    });
                    resultsDiv.style.display = 'block';
                } catch (error) {
                    console.error('Error al buscar CABYS:', error);
                    resultsDiv.innerHTML = '<div style="padding:15px; text-align:center; color:#ef4444; font-size:0.8rem;"><i class="fas fa-exclamation-triangle"></i> Error al conectar con la API</div>';
                    resultsDiv.style.display = 'block';
                }
            }, 400);
        });

        // Cerrar al click afuera
        document.addEventListener('click', (e) => {
            if (!searchInput.contains(e.target) && !resultsDiv.contains(e.target)) {
                resultsDiv.style.display = 'none';
            }
        });


        function calcularPrecioVenta() {
            const costo = parseFloat(document.getElementById('inv-precio-linea').value) || 0;
            const ganancia = parseFloat(document.getElementById('inv-ganancia').value) || 0;
            if (costo > 0) {
                document.getElementById('inv-precio').value = (costo * (1 + ganancia / 100)).toFixed(2);
            }
        }
        document.getElementById('inv-precio-linea').addEventListener('input', calcularPrecioVenta);
        document.getElementById('inv-ganancia').addEventListener('input', calcularPrecioVenta);

        /* ── Paneles contextuales Producto / Servicio ──────────── */
        const ctxProducto = document.getElementById('ctx-producto');
        const ctxServicio = document.getElementById('ctx-servicio');
        const stockRow = document.getElementById('stock-row');
        const btnSubmitTxt = document.getElementById('btn-submit-txt');
        const unidadMedidaSel = document.getElementById('inv-unidad-medida');

        function toggleCtxPanels() {
            const esServicio = unidadMedidaSel.value === 'Svc';
            
            ctxProducto.classList.toggle('active', !esServicio);
            ctxServicio.classList.toggle('active', esServicio);

            // Servicios no tienen stock
            if (esServicio) {
                stockRow.style.display = 'none';
                btnSubmitTxt.textContent = 'REGISTRAR SERVICIO';
            } else {
                stockRow.style.display = '';
                btnSubmitTxt.textContent = 'REGISTRAR PRODUCTO';
            }
        }

        unidadMedidaSel.addEventListener('change', toggleCtxPanels);
        // Inicial: mostrar panel producto por defecto
        toggleCtxPanels();

        let inventario = [];

        async function loadInventario() {
            try {
                showLoading(true);
                inventario = await fetchAPI(`${CONFIG.API_BASE_URL}/api/productos`);
                renderTabla();
            } catch (err) {
                showError('Error al cargar inventario desde el servidor.');
            } finally {
                showLoading(false);
            }
        }

        function renderTabla() {
            const tbody = document.getElementById('lista-inventario');
            tbody.innerHTML = '';
            inventario.forEach(item => {
                const esServicio = item.unidadMedida === 'Svc';
                const tipo = esServicio ? 'Svc' : 'Prod';
                const tipoBadge = esServicio
                    ? '<span style="font-size:0.65rem;background:#f3e8ff;color:#7c3aed;padding:2px 6px;border-radius:4px;font-weight:700;">SERVICIO</span>'
                    : '<span style="font-size:0.65rem;background:#dcfce7;color:#15803d;padding:2px 6px;border-radius:4px;font-weight:700;">PRODUCTO</span>';

                // Determinamos qué información predomina (Marca/Modelo o Nombre Servicio)
                let tituloPrincipal = '';
                let subtituloMH = `<div style="font-size:0.75rem; color:#64748b; font-weight:600; line-height:1.3; margin-top:4px;">${item.descripcion}</div>`;

                if (esServicio) {
                    tituloPrincipal = item.nombreServicio || 'Servicio Profesional';
                    if (item.detalleServicio) subtituloMH += `<div style="font-size:0.65rem; color:#94a3b8; font-style:italic;">${item.detalleServicio}</div>`;
                } else {
                    const parts = [];
                    if (item.marca) parts.push(item.marca);
                    if (item.modelo) parts.push(item.modelo);
                    if (item.caracteristicas) parts.push(item.caracteristicas);
                    tituloPrincipal = parts.length ? parts.join(' ') : 'Producto General';
                }

                const tr = document.createElement('tr');
                tr.style.borderBottom = '1px solid #f1f5f9';
                tr.innerHTML = `
                    <td style="padding:12px 15px;">
                        <div style="font-family:monospace; font-size:0.65rem; color:#94a3b8;">${item.cabys}</div>
                        <div style="font-weight:900; color:#1e40af; font-size:0.85rem; margin-top:2px;">${item.codigo}</div>
                    </td>
                    <td style="padding:12px 15px;">
                        <div style="display:flex; align-items:baseline; gap:8px;">
                            ${tipoBadge}
                            <div style="font-weight:900; color:#0f172a; font-size:1.05rem; letter-spacing:-0.01em;">${tituloPrincipal}</div>
                        </div>
                        ${subtituloMH}
                    </td>
                    <td style="padding:12px 15px;">
                        <div style="font-size:0.7rem; color:#94a3b8; font-weight:700; text-transform:uppercase; letter-spacing:0.02em;">Costo: ₡${item.precio ? item.precio.toLocaleString() : '0'}</div>
                        <div style="font-weight:900; color:#0f172a; font-size:1.15rem; margin-top:1px;">₡${item.precioVenta ? item.precioVenta.toLocaleString() : '0'}</div>
                    </td>
                    <td style="padding:12px 15px;">
                        <div style="background:#ecfdf5; color:#065f46; padding:3px 10px; border-radius:8px; font-weight:900; font-size:0.8rem; border:1px solid #a7f3d0; display:inline-block;">
                            ${item.impuesto}% IVA
                        </div>
                        <div style="font-size:0.7rem; color:#6366f1; font-weight:900; margin-top:6px; letter-spacing:0.02em;">
                            <i class="fas fa-chart-line"></i> MARGEN: ${item.margen || 0}%
                        </div>
                    </td>
                    <td style="padding:12px 15px; text-align:center;">
                        <div style="font-weight:900; font-size:1.3rem; line-height:1; color:${item.stock > 0 ? '#10b981' : (esServicio ? '#6366f1' : '#ef4444')}">
                            ${esServicio ? 'INF.' : item.stock}
                        </div>
                        <div style="font-size:0.55rem; font-weight:900; color:#94a3b8; text-transform:uppercase; letter-spacing:0.05em; margin-top:4px;">Existencia</div>
                    </td>
                    <td style="padding:12px 15px; text-align:center;">
                        <div style="display:flex; gap:8px; justify-content:center;">
                            <button class="btn-action edit" onclick="editarItem('${item.id}')" style="width:34px; height:34px; border-radius:10px; border:none; background:#eff6ff; color:#3b82f6; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all 0.2s;">
                                <i class="fas fa-edit" style="font-size:1rem;"></i>
                            </button>
                            <button class="btn-action del" onclick="eliminarItem('${item.id}')" style="width:34px; height:34px; border-radius:10px; border:none; background:#fff1f2; color:#ef4444; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:all 0.2s;">
                                <i class="fas fa-trash-alt" style="font-size:1rem;"></i>
                            </button>
                        </div>
                    </td>
                `;
                tbody.appendChild(tr);
            });
            document.getElementById('total-items-badge').innerHTML = `<i class="fas fa-box"></i> ${inventario.length} Ítems en Inventario`;
        }

        window.editarItem = function(id) {
            const item = inventario.find(i => i.id === id);
            if (!item) return;
            const esServicio = item.unidadMedida === 'Svc';

            Swal.fire({
                title: 'Editar Ítem del Inventario',
                html: `
                    <div style="display:flex; flex-direction:column; gap:12px; margin-top: 15px; text-align:left;">
                        <div>
                            <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Descripción General (MH)</label>
                            <input id="swal-desc" class="fi" value="${item.descripcion}" style="box-sizing:border-box; width:100%;">
                        </div>
                        
                        ${!esServicio ? `
                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px;">
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Marca</label>
                                <input id="swal-marca" class="fi" value="${item.marca || ''}" style="box-sizing:border-box; width:100%;">
                            </div>
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Modelo</label>
                                <input id="swal-modelo" class="fi" value="${item.modelo || ''}" style="box-sizing:border-box; width:100%;">
                            </div>
                        </div>
                        ` : `
                        <div>
                            <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Nombre del Servicio</label>
                            <input id="swal-nombre-svc" class="fi" value="${item.nombreServicio || ''}" style="box-sizing:border-box; width:100%;">
                        </div>
                        `}

                        <div style="display:grid; grid-template-columns:1fr 1fr 1fr; gap:10px;">
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Costo Base</label>
                                <input id="swal-costo" type="number" class="fi" value="${item.precio || 0}" style="box-sizing:border-box; width:100%;">
                            </div>
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Ganancia (%)</label>
                                <input id="swal-margen" type="number" class="fi" value="${item.margen || 0}" style="box-sizing:border-box; width:100%;">
                            </div>
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Monto Venta</label>
                                <input id="swal-venta" type="number" class="fi" value="${item.precioVenta || 0}" style="box-sizing:border-box; width:100%; font-weight:800; background:#f8fafc; color:var(--primary);">
                            </div>
                        </div>

                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px;">
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Descuento Máximo (%)</label>
                                <input id="swal-desc-max" type="number" class="fi" value="${item.descuentoMax || item.descuento_maximo || 0}" style="box-sizing:border-box; width:100%;">
                            </div>
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#64748b; margin-left:12px; display:block; margin-bottom:4px;">Stock Actual</label>
                                <input id="swal-stock" type="number" class="fi" value="${item.stock}" ${esServicio ? 'disabled' : ''} style="box-sizing:border-box; width:100%;">
                            </div>
                        </div>

                        <div style="display:grid; grid-template-columns:1fr 1fr; gap:10px;">
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#475569; margin-left:12px; display:block; margin-bottom:4px;">Tipo Impuesto (Normativa 4.4)</label>
                                <select id="swal-tipo-impuesto" class="premium-select" style="width:100%; background:#fff; border:1.5px solid #cbd5e1; color:#0f172a; cursor:pointer;">
                                    <option value="01" ${item.tipoImpuesto == '01' ? 'selected' : ''}>01 – IVA (Valor Agregado)</option>
                                    <option value="02" ${item.tipoImpuesto == '02' ? 'selected' : ''}>02 – ISC (Consumo)</option>
                                    <option value="03" ${item.tipoImpuesto == '03' ? 'selected' : ''}>03 – Imp. Único Combustibles</option>
                                    <option value="04" ${item.tipoImpuesto == '04' ? 'selected' : ''}>04 – Imp. Ley 6946 (alcohol)</option>
                                    <option value="99" ${item.tipoImpuesto == '99' ? 'selected' : ''}>99 – Otros</option>
                                </select>
                            </div>
                            <div>
                                <label style="font-size:0.7rem; font-weight:800; color:#475569; margin-left:12px; display:block; margin-bottom:4px;">Tarifa (%) [Editable en Inventario]</label>
                                <select id="swal-iva" class="premium-select" style="width:100%; background:#fff; border:1.5px solid #cbd5e1; color:#0f172a; cursor:pointer;">
                                    <option value="13" ${item.impuesto == '13' ? 'selected' : ''}>13% (General)</option>
                                    <option value="8" ${item.impuesto == '8' ? 'selected' : ''}>8% (Reducida)</option>
                                    <option value="4" ${item.impuesto == '4' ? 'selected' : ''}>4% (Reducida)</option>
                                    <option value="2" ${item.impuesto == '2' ? 'selected' : ''}>2% (Reducida)</option>
                                    <option value="1" ${item.impuesto == '1' ? 'selected' : ''}>1% (Especial)</option>
                                    <option value="0" ${item.impuesto == '0' ? 'selected' : ''}>0% (Exento)</option>
                                </select>
                            </div>
                        </div>
                    </div>
                `,
                didOpen: () => {
                    const inCosto = document.getElementById('swal-costo');
                    const inMargen = document.getElementById('swal-margen');
                    const inVenta = document.getElementById('swal-venta');

                    const recalcular = () => {
                        const c = parseFloat(inCosto.value) || 0;
                        const m = parseFloat(inMargen.value) || 0;
                        if (c > 0) {
                            inVenta.value = (c * (1 + m / 100)).toFixed(2);
                        }
                    };

                    inCosto.oninput = recalcular;
                    inMargen.oninput = recalcular;
                },
                showCancelButton: true,
                confirmButtonText: 'Guardar Cambios',
                cancelButtonText: 'Cancelar',
                width: '650px'
            }).then(r => {
                if (r.isConfirmed) {
                    const updatedData = {
                        descripcion: document.getElementById('swal-desc').value,
                        precio: parseFloat(document.getElementById('swal-costo').value),
                        margen: parseFloat(document.getElementById('swal-margen').value),
                        precioVenta: parseFloat(document.getElementById('swal-venta').value),
                        descuentoMax: parseFloat(document.getElementById('swal-desc-max').value) || 0,
                        stock: esServicio ? 0 : parseInt(document.getElementById('swal-stock').value),
                        impuesto: document.getElementById('swal-iva').value,
                        tipoImpuesto: document.getElementById('swal-tipo-impuesto').value
                    };

                    if (!esServicio) {
                        updatedData.marca = document.getElementById('swal-marca').value;
                        updatedData.modelo = document.getElementById('swal-modelo').value;
                    } else {
                        updatedData.nombreServicio = document.getElementById('swal-nombre-svc').value;
                    }
                    
                    fetchAPI(`${CONFIG.API_BASE_URL}/api/productos/${id}`, {
                        method: 'PUT',
                        body: JSON.stringify(updatedData)
                    }).then(() => {
                        loadInventario();
                        Swal.fire('Catálogo Actualizado', 'Los valores de costo y utilidad han sido recalculados.', 'success');
                    }).catch(err => {
                        showError('Error al actualizar el ítem.');
                    });
                }
            });
        };

        window.eliminarItem = function(id) {
            Swal.fire({
                title: '¿Eliminar ítem?',
                text: 'Esta acción no se puede deshacer.',
                icon: 'warning',
                showCancelButton: true,
                confirmButtonColor: '#ef4444',
                cancelButtonText: 'Cancelar',
                confirmButtonText: 'Sí, eliminar'
            }).then(r => {
                if (r.isConfirmed) {
                    fetchAPI(`${CONFIG.API_BASE_URL}/api/productos/${id}`, {
                        method: 'DELETE'
                    }).then(() => {
                        loadInventario();
                    }).catch(err => {
                        showError('Error al eliminar ítem.');
                    });
                }
            });
        };

        document.getElementById('addItemForm').addEventListener('submit', function (e) {
            e.preventDefault();
            const esServicio = unidadMedidaSel.value === 'Svc';
            const producto = {
                id: Date.now(),
                cabys: cabysInput.value,
                codigo: document.getElementById('inv-codigo-interno').value || `SKU-${Date.now()}`,
                descripcion: nombreInput.value,
                unidadMedida: unidadMedidaSel.value,
                impuesto: ivaSelect.value,
                tipoImpuesto: document.getElementById('inv-tipo-impuesto').value,
                precio: parseFloat(document.getElementById('inv-precio-linea').value) || 0,
                margen: parseFloat(document.getElementById('inv-ganancia').value) || 0,
                precioVenta: parseFloat(document.getElementById('inv-precio').value),
                stock: esServicio ? 0 : parseInt(document.getElementById('inv-stock').value),
                // Campos según tipo
                marca: esServicio ? '' : (document.getElementById('inv-marca').value || ''),
                modelo: esServicio ? '' : (document.getElementById('inv-modelo').value || ''),
                caracteristicas: esServicio ? '' : (document.getElementById('inv-caracteristicas').value || ''),
                nombreServicio: esServicio ? (document.getElementById('inv-nombre-servicio').value || '') : '',
                detalleServicio: esServicio ? (document.getElementById('inv-detalle-servicio').value || '') : '',
                descuentoMax: parseFloat(document.getElementById('inv-descuento-max').value) || 0
            };
            
            fetchAPI(`${CONFIG.API_BASE_URL}/api/productos`, {
                method: 'POST',
                body: JSON.stringify(producto)
            }).then(() => {
                loadInventario();
                this.reset();
                clearDirty();
                toggleCtxPanels();
                Swal.fire({
                    icon: 'success',
                    title: 'Registro Exitoso',
                    text: esServicio ? 'Servicio registrado correctamente' : 'Producto registrado correctamente',
                    confirmButtonColor: '#1e40af'
                });
            }).catch(err => {
                showError('Error al registrar ítem: ' + err.message);
            });
        });

        /* ======= FILTRADO DE TABLA DE INVENTARIO ======= */
        document.getElementById('buscar-inventario').addEventListener('input', function() {
            const q = this.value.trim().toLowerCase();
            const rows = document.querySelectorAll('#lista-inventario tr');
            
            rows.forEach(row => {
                const text = row.textContent.toLowerCase();
                row.style.display = multiWordMatch(text, q) ? '' : 'none';
            });
        });

        /* ======= IMPORTACIÓN MASIVA EXCEL ======= */
        document.getElementById('file-upload-inv').addEventListener('change', function(e) {
            const file = e.target.files[0];
            if (!file) return;
            const reader = new FileReader();
            reader.onload = function(evt) {
                const data = new Uint8Array(evt.target.result);
                const workbook = XLSX.read(data, {type: 'array'});
                const firstSheetName = workbook.SheetNames[0];
                const worksheet = workbook.Sheets[firstSheetName];
                const json = XLSX.utils.sheet_to_json(worksheet, {header: 1});
                
                let count = 0;
                for (let i = 1; i < json.length; i++) { // Omitir el header
                    const row = json[i];
                    if (!row || !row.length) continue;
                    
                    const p = {
                        id: Date.now() + i,
                        cabys: row[0] || '0000000000000',
                        codigo: row[1] || `IMP-${Date.now()}-${i}`,
                        descripcion: row[2] || 'Producto Generico',
                        unidadMedida: row[3] || 'Unid',
                        impuesto: parseFloat(row[4]) || 13,
                        precio: parseFloat(row[5]) || 0,
                        precioVenta: parseFloat(row[6]) || 0,
                        stock: parseInt(row[7]) || 0,
                        margen: row[5] && row[6] ? (((parseFloat(row[6])/parseFloat(row[5])) - 1) * 100).toFixed(2) : 0,
                        tipoImpuesto: '01'
                    };
                    fetchAPI(`${CONFIG.API_BASE_URL}/api/productos`, {
                        method: 'POST',
                        body: JSON.stringify(p)
                    }).catch(console.error);
                    count++;
                }
                loadInventario();
                Swal.fire({
                    icon: 'success',
                    title: 'Catálogo Actualizado',
                    text: `Se importaron ${count} ítems correctamente.`,
                    confirmButtonColor: '#1e40af'
                });
                document.getElementById('file-upload-inv').value = '';
            };
            reader.readAsArrayBuffer(file);
        });

        loadInventario();
    })();